diff --git a/modules/cosmosdb/README.rst b/modules/cosmosdb/README.rst index 94e0134fa..802cffa4e 100644 --- a/modules/cosmosdb/README.rst +++ b/modules/cosmosdb/README.rst @@ -1,3 +1,5 @@ -.. autoclass:: testcontainers.cosmosdb.MongoDBEmulatorContainer -.. autoclass:: testcontainers.cosmosdb.NoSQLEmulatorContainer -.. title:: testcontainers.cosmosdb.CosmosDBEmulatorContainer +.. autoclass:: testcontainers.cosmosdb.CosmosDBMongoEndpointContainer +.. title:: testcontainers.cosmosdb.CosmosDBMongoEndpointContainer + +.. autoclass:: testcontainers.cosmosdb.CosmosDBNoSQLEndpointContainer +.. title:: testcontainers.cosmosdb.CosmosDBNoSQLEndpointContainer diff --git a/modules/cosmosdb/testcontainers/cosmosdb/__init__.py b/modules/cosmosdb/testcontainers/cosmosdb/__init__.py index ab27eaa1a..619ddb3b4 100644 --- a/modules/cosmosdb/testcontainers/cosmosdb/__init__.py +++ b/modules/cosmosdb/testcontainers/cosmosdb/__init__.py @@ -1,4 +1,4 @@ -from .mongodb import MongoDBEmulatorContainer -from .nosql import NoSQLEmulatorContainer +from .mongodb import CosmosDBMongoEndpointContainer +from .nosql import CosmosDBNoSQLEndpointContainer -__all__ = ["MongoDBEmulatorContainer", "NoSQLEmulatorContainer"] +__all__ = ["CosmosDBMongoEndpointContainer", "CosmosDBNoSQLEndpointContainer"] diff --git a/modules/cosmosdb/testcontainers/cosmosdb/_emulator.py b/modules/cosmosdb/testcontainers/cosmosdb/_emulator.py index a6608b814..c5ce241c9 100644 --- a/modules/cosmosdb/testcontainers/cosmosdb/_emulator.py +++ b/modules/cosmosdb/testcontainers/cosmosdb/_emulator.py @@ -16,7 +16,10 @@ class CosmosDBEmulatorContainer(DockerContainer): """ - CosmosDB Emulator container. + Abstract class for CosmosDB Emulator endpoints. + + Concrete implementations for each endpoint is provided by a separate class: + NoSQLEmulatorContainer and MongoDBEmulatorContainer. """ def __init__( @@ -45,6 +48,9 @@ def __init__( @property def host(self) -> str: + """ + Emulator host + """ return self.get_container_host_ip() @property @@ -88,7 +94,7 @@ def _wait_until_ready(self) -> Self: def _download_cert(self) -> bytes: with grab.file( - self._container, "/tmp/cosmos/appdata/.system/profiles/Client/AppData/Local/CosmosDBEmulator/emulator.pem" + self.get_wrapped_container(), "/tmp/cosmos/appdata/.system/profiles/Client/AppData/Local/CosmosDBEmulator/emulator.pem" ) as cert: return cert.read() diff --git a/modules/cosmosdb/testcontainers/cosmosdb/_grab.py b/modules/cosmosdb/testcontainers/cosmosdb/_grab.py index cbf74a06b..86ac59247 100644 --- a/modules/cosmosdb/testcontainers/cosmosdb/_grab.py +++ b/modules/cosmosdb/testcontainers/cosmosdb/_grab.py @@ -4,14 +4,15 @@ import tarfile import tempfile from contextlib import contextmanager +from docker.models.containers import Container @contextmanager -def file(container, target): +def file(container: Container, target: str): target_path = Path(target) assert target_path.is_absolute(), "target must be an absolute path" - with tempfile.TemporaryDirectory() as tmpdirname: - archive = Path(tmpdirname) / 'grabbed.tar' + with tempfile.TemporaryDirectory() as tmp: + archive = Path(tmp) / 'grabbed.tar' # download from container as tar archive with open(archive, 'wb') as f: diff --git a/modules/cosmosdb/testcontainers/cosmosdb/mongodb.py b/modules/cosmosdb/testcontainers/cosmosdb/mongodb.py index 3351604f1..c36d1e9f5 100644 --- a/modules/cosmosdb/testcontainers/cosmosdb/mongodb.py +++ b/modules/cosmosdb/testcontainers/cosmosdb/mongodb.py @@ -1,20 +1,22 @@ import os from ._emulator import CosmosDBEmulatorContainer -__all__ = ["MongoDBEmulatorContainer"] +__all__ = ["CosmosDBMongoEndpointContainer"] ENDPOINT_PORT = 10255 -class MongoDBEmulatorContainer(CosmosDBEmulatorContainer): +class CosmosDBMongoEndpointContainer(CosmosDBEmulatorContainer): """ CosmosDB MongoDB enpoint Emulator. Example: .. doctest:: - >>> from testcontainers.cosmosdb import MongoDBEmulatorContainer - >>> with CosmosDBEmulatorContainer(mongodb_version="4.0") as emulator: - ... print(f"Point yout MongoDB client to {emulator.host}:{emulator.port}}") + + >>> from testcontainers.cosmosdb import CosmosDBMongoEndpointContainer + + >>> with CosmosDBMongoEndpointContainer(mongodb_version="4.0") as emulator: + ... print(f"Point your MongoDB client at {emulator.host}:{emulator.port}}") """ def __init__( @@ -31,6 +33,9 @@ def __init__( @property def port(self) -> str: + """ + The exposed port to the MongoDB endpoint + """ return self.get_exposed_port(ENDPOINT_PORT) def _configure(self) -> None: diff --git a/modules/cosmosdb/testcontainers/cosmosdb/nosql.py b/modules/cosmosdb/testcontainers/cosmosdb/nosql.py index b8cb8cd51..4030e2abc 100644 --- a/modules/cosmosdb/testcontainers/cosmosdb/nosql.py +++ b/modules/cosmosdb/testcontainers/cosmosdb/nosql.py @@ -4,25 +4,30 @@ from testcontainers.core.waiting_utils import wait_container_is_ready from ._emulator import CosmosDBEmulatorContainer -__all__ = ["NoSQLEmulatorContainer"] +__all__ = ["CosmosDBNoSQLEndpointContainer"] NOSQL_PORT = 8081 -class NoSQLEmulatorContainer(CosmosDBEmulatorContainer): +class CosmosDBNoSQLEndpointContainer(CosmosDBEmulatorContainer): """ CosmosDB NoSQL enpoint Emulator. Example: + .. doctest:: - >>> from testcontainers.cosmosdb import NoSQLEmulatorContainer - >>> with NoSQLEmulatorContainer() as emulator: - ... db = emulator.insecure_sync_client().create_database_if_not_exists("test") + + >>> from testcontainers.cosmosdb import CosmosDBNoSQLEndpointContainer + >>> with CosmosDBNoSQLEndpointContainer() as emulator: + ... db = emulator.insecure_sync_client().create_database_if_not_exists("test") .. doctest:: - >>> from testcontainers.cosmosdb import NoSQLEmulatorContainer - >>> with NoSQLEmulatorContainer() as emulator: - ... client = CosmosClient(url=emulator.url, credential=emulator.key, connection_verify=False) - ... db = client.create_database_if_not_exists("test") + + >>> from testcontainers.cosmosdb import CosmosDBNoSQLEndpointContainer + >>> from azure.cosmos import CosmosClient + + >>> with CosmosDBNoSQLEndpointContainer() as emulator: + ... client = CosmosClient(url=emulator.url, credential=emulator.key, connection_verify=False) + ... db = client.create_database_if_not_exists("test") """ @@ -43,13 +48,13 @@ def url(self) -> str: """ return f"https://{self.host}:{self.port}" - def insecure_async_client(self) -> AsyncCosmosClient: + def insecure_async_client(self): """ Returns an asynchronous CosmosClient instance """ return AsyncCosmosClient(url=self.url, credential=self.key, connection_verify=False) - def insecure_sync_client(self) -> SyncCosmosClient: + def insecure_sync_client(self): """ Returns a synchronous CosmosClient instance """ diff --git a/modules/cosmosdb/tests/test_mongodb.py b/modules/cosmosdb/tests/test_mongodb.py index a321d128f..b80f8c7c8 100644 --- a/modules/cosmosdb/tests/test_mongodb.py +++ b/modules/cosmosdb/tests/test_mongodb.py @@ -1,14 +1,14 @@ import pytest -from testcontainers.cosmosdb import MongoDBEmulatorContainer +from testcontainers.cosmosdb import CosmosDBMongoEndpointContainer def test_requires_a_version(): with pytest.raises(AssertionError, match="A MongoDB version is required"): - MongoDBEmulatorContainer() + CosmosDBMongoEndpointContainer() # instanciates - MongoDBEmulatorContainer(mongodb_version="4.0") + CosmosDBMongoEndpointContainer(mongodb_version="4.0") def test_runs(): - with MongoDBEmulatorContainer(mongodb_version="4.0", partition_count=1, bind_ports=False) as emulator: + with CosmosDBMongoEndpointContainer(mongodb_version="4.0", partition_count=1, bind_ports=False) as emulator: assert emulator.env["AZURE_COSMOS_EMULATOR_ENABLE_MONGODB_ENDPOINT"] == "4.0" assert emulator.get_exposed_port(10255) is not None, "The MongoDB endpoint's port should be exposed" diff --git a/modules/cosmosdb/tests/test_nosql.py b/modules/cosmosdb/tests/test_nosql.py index ce5053a12..ed91e8672 100644 --- a/modules/cosmosdb/tests/test_nosql.py +++ b/modules/cosmosdb/tests/test_nosql.py @@ -1,6 +1,6 @@ import pytest -from testcontainers.cosmosdb import NoSQLEmulatorContainer +from testcontainers.cosmosdb import CosmosDBNoSQLEndpointContainer def test_runs(): - with NoSQLEmulatorContainer(partition_count=1, bind_ports=False) as emulator: + with CosmosDBNoSQLEndpointContainer(partition_count=1, bind_ports=False) as emulator: assert emulator.get_exposed_port(8081) is not None, "The NoSQL endpoint's port should be exposed"