Skip to content

Commit

Permalink
docs: rename classes as to not have the Mongo emulator mistaken for t…
Browse files Browse the repository at this point in the history
…he MongoDB testcontainer
  • Loading branch information
Mehdi BEN ABDALLAH authored and mbenabda committed May 26, 2024
1 parent ff6f04f commit 3a5900b
Show file tree
Hide file tree
Showing 8 changed files with 52 additions and 33 deletions.
8 changes: 5 additions & 3 deletions modules/cosmosdb/README.rst
Original file line number Diff line number Diff line change
@@ -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
6 changes: 3 additions & 3 deletions modules/cosmosdb/testcontainers/cosmosdb/__init__.py
Original file line number Diff line number Diff line change
@@ -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"]
10 changes: 8 additions & 2 deletions modules/cosmosdb/testcontainers/cosmosdb/_emulator.py
Original file line number Diff line number Diff line change
Expand Up @@ -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__(
Expand Down Expand Up @@ -45,6 +48,9 @@ def __init__(

@property
def host(self) -> str:
"""
Emulator host
"""
return self.get_container_host_ip()

@property
Expand Down Expand Up @@ -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()

Expand Down
7 changes: 4 additions & 3 deletions modules/cosmosdb/testcontainers/cosmosdb/_grab.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
15 changes: 10 additions & 5 deletions modules/cosmosdb/testcontainers/cosmosdb/mongodb.py
Original file line number Diff line number Diff line change
@@ -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__(
Expand All @@ -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:
Expand Down
27 changes: 16 additions & 11 deletions modules/cosmosdb/testcontainers/cosmosdb/nosql.py
Original file line number Diff line number Diff line change
Expand Up @@ -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")
"""

Expand All @@ -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
"""
Expand Down
8 changes: 4 additions & 4 deletions modules/cosmosdb/tests/test_mongodb.py
Original file line number Diff line number Diff line change
@@ -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"
4 changes: 2 additions & 2 deletions modules/cosmosdb/tests/test_nosql.py
Original file line number Diff line number Diff line change
@@ -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"

0 comments on commit 3a5900b

Please sign in to comment.