Skip to content

Commit

Permalink
fix: Pin MongoDB images and improve test coverage for maintained vers…
Browse files Browse the repository at this point in the history
…ions (#448)

for some reason this causes an issue, see #401 for details

---------

Co-authored-by: Vemund Santi <[email protected]>
  • Loading branch information
alexanderankin and santi authored Apr 2, 2024
1 parent f819c7a commit b5c7a1b
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 56 deletions.
23 changes: 9 additions & 14 deletions modules/mongodb/testcontainers/mongodb/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -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__(
Expand All @@ -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)

Expand Down
48 changes: 6 additions & 42 deletions modules/mongodb/tests/test_mongodb.py
Original file line number Diff line number Diff line change
Expand Up @@ -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": {
Expand All @@ -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({})

0 comments on commit b5c7a1b

Please sign in to comment.