From b5c7a1b95af5470ee1b5109ed1fb8e1b3af52cf7 Mon Sep 17 00:00:00 2001 From: David Ankin Date: Tue, 2 Apr 2024 06:50:13 -0400 Subject: [PATCH] fix: Pin MongoDB images and improve test coverage for maintained versions (#448) for some reason this causes an issue, see #401 for details --------- Co-authored-by: Vemund Santi --- .../testcontainers/mongodb/__init__.py | 23 ++++----- modules/mongodb/tests/test_mongodb.py | 48 +++---------------- 2 files changed, 15 insertions(+), 56 deletions(-) diff --git a/modules/mongodb/testcontainers/mongodb/__init__.py b/modules/mongodb/testcontainers/mongodb/__init__.py index eee623c6..32e1f748 100644 --- a/modules/mongodb/testcontainers/mongodb/__init__.py +++ b/modules/mongodb/testcontainers/mongodb/__init__.py @@ -30,25 +30,20 @@ class MongoDbContainer(DbContainer): >>> from testcontainers.mongodb import MongoDbContainer - >>> with MongoDbContainer("mongo:latest") as mongo: + >>> with MongoDbContainer("mongo:7.0.7") as mongo: ... db = mongo.get_connection_client().test ... # Insert a database entry ... result = db.restaurants.insert_one( ... { - ... "address": { - ... "street": "2 Avenue", - ... "zipcode": "10075", - ... "building": "1480", - ... "coord": [-73.9557413, 40.7720266] - ... }, - ... "borough": "Manhattan", - ... "cuisine": "Italian", ... "name": "Vella", - ... "restaurant_id": "41704620" + ... "cuisine": "Italian", + ... "restaurant_id": "123456" ... } ... ) ... # Find the restaurant document - ... cursor = db.restaurants.find({"borough": "Manhattan"}) + ... result = db.restaurants.find_one({"name": "Vella"}) + ... result["restaurant_id"] + '123456' """ def __init__( @@ -62,9 +57,9 @@ def __init__( ) -> None: raise_for_deprecated_parameter(kwargs, "port_to_expose", "port") super().__init__(image=image, **kwargs) - self.username = username or os.environ.get("MONGO_INITDB_ROOT_USERNAME", "test") - self.password = password or os.environ.get("MONGO_INITDB_ROOT_PASSWORD", "test") - self.dbname = dbname or os.environ.get("MONGO_DB", "test") + self.username = username if username else os.environ.get("MONGO_INITDB_ROOT_USERNAME", "test") + self.password = password if password else os.environ.get("MONGO_INITDB_ROOT_PASSWORD", "test") + self.dbname = dbname if dbname else os.environ.get("MONGO_DB", "test") self.port = port self.with_exposed_ports(self.port) diff --git a/modules/mongodb/tests/test_mongodb.py b/modules/mongodb/tests/test_mongodb.py index 5b9d6be2..34642103 100644 --- a/modules/mongodb/tests/test_mongodb.py +++ b/modules/mongodb/tests/test_mongodb.py @@ -2,42 +2,12 @@ from pymongo import MongoClient from pymongo.errors import OperationFailure -from testcontainers.core.container import DockerContainer -from testcontainers.core.waiting_utils import wait_for from testcontainers.mongodb import MongoDbContainer -def test_docker_generic_db(): - with DockerContainer("mongo:latest").with_bind_ports(27017, 27017) as mongo_container: - - def connect(): - host = mongo_container.get_container_host_ip() - port = mongo_container.get_exposed_port(27017) - return MongoClient(f"mongodb://{host}:{port}") - - db = wait_for(connect).primer - result = db.restaurants.insert_one( - { - "address": { - "street": "2 Avenue", - "zipcode": "10075", - "building": "1480", - "coord": [-73.9557413, 40.7720266], - }, - "borough": "Manhattan", - "cuisine": "Italian", - "name": "Vella", - "restaurant_id": "41704620", - } - ) - assert result.inserted_id - cursor = db.restaurants.find({"borough": "Manhattan"}) - for document in cursor: - assert document - - -def test_docker_run_mongodb(): - with MongoDbContainer("mongo:latest") as mongo: +@pytest.mark.parametrize("version", ["7.0.7", "6.0.14", "5.0.26"]) +def test_docker_run_mongodb(version: str): + with MongoDbContainer(f"mongo:{version}") as mongo: db = mongo.get_connection_client().test doc = { "address": { @@ -51,14 +21,8 @@ def test_docker_run_mongodb(): "name": "Vella", "restaurant_id": "41704620", } - db.restaurants.insert_one(doc) + result = db.restaurants.insert_one(doc) + assert result.inserted_id + cursor = db.restaurants.find({"borough": "Manhattan"}) assert cursor.next()["restaurant_id"] == doc["restaurant_id"] - - -def test_docker_run_mongodb_connect_without_credentials(): - with MongoDbContainer() as mongo: - connection_url = f"mongodb://{mongo.get_container_host_ip()}:" f"{mongo.get_exposed_port(mongo.port)}" - db = MongoClient(connection_url).test - with pytest.raises(OperationFailure): - db.restaurants.insert_one({})