Skip to content

Commit

Permalink
Refactored tests
Browse files Browse the repository at this point in the history
  • Loading branch information
ckunki committed Apr 26, 2024
1 parent f2ec4f4 commit 5990868
Show file tree
Hide file tree
Showing 2 changed files with 83 additions and 100 deletions.
74 changes: 74 additions & 0 deletions test/integration/api_testee.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
import os
from typing import Iterable, List
from contextlib import contextmanager
from datetime import datetime

from exasol.saas.client import openapi
from exasol.saas.client.openapi.api.databases import (
create_database,
delete_database,
list_databases,
)


def timestamp() -> str:
return f'{datetime.now().timestamp():.0f}'


class OpenApiTestee:
def __init__(self):
self._client = OpenApiTestee.create_client()
self._account_id = os.environ["SAAS_ACCOUNT_ID"]

@classmethod
def create_client(cls, raise_on_unexpected_status: bool = True):
return openapi.AuthenticatedClient(
base_url=os.environ["SAAS_HOST"],
token=os.environ["SAAS_PAT"],
raise_on_unexpected_status = raise_on_unexpected_status,
)

def create_database(self):
cluster_spec = openapi.models.CreateCluster(
name="my-cluster",
size="XS",
)
return create_database.sync(
self._account_id,
client=self._client,
body=openapi.models.CreateDatabase(
name=f"pytest-{timestamp()}",
initial_cluster=cluster_spec,
provider="aws",
region='us-east-1',
)
)

def delete_database(self, database_id: str, client=None):
delete_database.sync_detailed(
self._account_id,
database_id,
client=(client or self._client),
)

def list_database_ids(self) -> Iterable[str]:
dbs = list_databases.sync(self._account_id, client=self._client)
return (db.id for db in dbs)

@contextmanager
def database(
self,
keep: bool = False,
ignore_delete_failure: bool = False,
):
try:
db = self.create_database()
yield db
finally:
if not keep:
client = (
OpenApiTestee.create_client(False)
if ignore_delete_failure
else None
)
self.delete_database(db.id, client)
109 changes: 9 additions & 100 deletions test/integration/databases_test.py
Original file line number Diff line number Diff line change
@@ -1,101 +1,14 @@
import logging
import os
from collections import namedtuple
from datetime import datetime
from contextlib import contextmanager

import pytest

from exasol.saas.client import openapi
from exasol.saas.client.openapi.api.databases import (
create_database,
delete_database,
list_databases,
)

LOG = logging.getLogger(__name__)


def timestamp() -> str:
return f'{datetime.now().timestamp():.0f}'


def create_saas_access(raise_on_unexpected_status = True):
Access = namedtuple("Access", "client, account_id")
return Access(
openapi.AuthenticatedClient(
base_url=os.environ["SAAS_HOST"],
token=os.environ["SAAS_PAT"],
raise_on_unexpected_status = raise_on_unexpected_status,
),
os.environ["SAAS_ACCOUNT_ID"],
)


def create_saas_database(saas_access):
cluster_spec = openapi.models.CreateCluster(
name="my-cluster",
size="XS",
)
return create_database.sync(
saas_access.account_id,
client=saas_access.client,
body=openapi.models.CreateDatabase(
name=f"pytest-{timestamp()}",
initial_cluster=cluster_spec,
provider="aws",
region='us-east-1',
)
)


def delete_saas_database(saas_access, database_id: str):
delete_database.sync_detailed(
saas_access.account_id,
database_id,
client=saas_access.client,
)


@contextmanager
def database_context(
saas_access,
keep: bool = False,
ignore_delete_failure: bool = False,
):
try:
db = create_saas_database(saas_access)
yield db
finally:
if not keep:
access = (create_saas_access(False)
if ignore_delete_failure
else saas_access)
delete_saas_database(access, db.id)


@pytest.fixture
def saas_access():
return create_saas_access()
from api_testee import OpenApiTestee


@pytest.fixture
def saas_database(saas_access):
with database_context(saas_access, ignore_delete_failure=True) as db:
yield db
def api_testee():
return OpenApiTestee()


def test_database_list(saas_access, saas_database):
access = saas_access

def listed_ids():
dbs = list_databases.sync(access.account_id, client=access.client)
return (db.id for db in dbs)

assert saas_database.id in listed_ids()


def test_database_lifecycle(saas_access):
def test_lifecycle(api_testee):
"""
This integration test uses the database created and provided by pytest
fixture ``saas_database`` to verify
Expand All @@ -105,20 +18,16 @@ def test_database_lifecycle(saas_access):
- delete_database deletes the database
- list_databases does not include the deleted database anymore
"""
access = saas_access

def listed_ids():
dbs = list_databases.sync(access.account_id, client=access.client)
return (db.id for db in dbs)

with database_context(saas_access, ignore_delete_failure=True) as db:
testee = api_testee
with testee.database(ignore_delete_failure=True) as db:
# verify state and clusters of created database
assert db.status == openapi.models.Status.TOCREATE and \
db.clusters.total == 1

# verify database is listed
assert db.id in listed_ids()
assert db.id in testee.list_database_ids()

# delete database and verify database is not listed anymore
delete_saas_database(access, db.id)
assert db.id not in listed_ids()
testee.delete_database(db.id)
assert db.id not in testee.list_database_ids()

0 comments on commit 5990868

Please sign in to comment.