Skip to content

Commit d8274b7

Browse files
authored
Fix encryption tests (#2018)
1 parent 36480f9 commit d8274b7

File tree

7 files changed

+25
-31
lines changed

7 files changed

+25
-31
lines changed

.evergreen/config.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,7 @@ functions:
281281
"run tests":
282282
- command: subprocess.exec
283283
params:
284-
include_expansions_in_env: ["TEST_DATA_LAKE", "AUTH", "SSL", "TEST_INDEX_MANAGEMENT", "CRYPT_SHARED_LIB_PATH", "test_encryption", "test_encryption_pyopenssl", "test_crypt_shared", "test_pyopenssl", "test_loadbalancer", "test_serverless", "ORCHESTRATION_FILE"]
284+
include_expansions_in_env: ["TEST_DATA_LAKE", "PYTHON_BINARY", "AUTH", "SSL", "TEST_INDEX_MANAGEMENT", "CRYPT_SHARED_LIB_PATH", "test_encryption", "test_encryption_pyopenssl", "test_crypt_shared", "test_pyopenssl", "test_loadbalancer", "test_serverless", "ORCHESTRATION_FILE"]
285285
binary: bash
286286
working_dir: "src"
287287
args:

test/asynchronous/test_encryption.py

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1234,7 +1234,9 @@ async def test_03_bulk_batch_split(self):
12341234
doc2 = {"_id": "over_2mib_2", "unencrypted": "a" * _2_MiB}
12351235
self.listener.reset()
12361236
await self.coll_encrypted.bulk_write([InsertOne(doc1), InsertOne(doc2)])
1237-
self.assertEqual(self.listener.started_command_names(), ["insert", "insert"])
1237+
self.assertEqual(
1238+
len([c for c in self.listener.started_command_names() if c == "insert"]), 2
1239+
)
12381240

12391241
async def test_04_bulk_batch_split(self):
12401242
limits_doc = json_data("limits", "limits-doc.json")
@@ -1244,7 +1246,9 @@ async def test_04_bulk_batch_split(self):
12441246
doc2.update(limits_doc)
12451247
self.listener.reset()
12461248
await self.coll_encrypted.bulk_write([InsertOne(doc1), InsertOne(doc2)])
1247-
self.assertEqual(self.listener.started_command_names(), ["insert", "insert"])
1249+
self.assertEqual(
1250+
len([c for c in self.listener.started_command_names() if c == "insert"]), 2
1251+
)
12481252

12491253
async def test_05_insert_succeeds_just_under_16MiB(self):
12501254
doc = {"_id": "under_16mib", "unencrypted": "a" * (_16_MiB - 2000)}
@@ -1482,19 +1486,18 @@ class AzureGCPEncryptionTestMixin(AsyncEncryptionIntegrationTest):
14821486
KEYVAULT_COLL = "datakeys"
14831487
client: AsyncMongoClient
14841488

1485-
async def asyncSetUp(self):
1486-
self.client = self.simple_client()
1489+
async def _setup(self):
14871490
keyvault = self.client.get_database(self.KEYVAULT_DB).get_collection(self.KEYVAULT_COLL)
14881491
await create_key_vault(keyvault, self.DEK)
14891492

14901493
async def _test_explicit(self, expectation):
1494+
await self._setup()
14911495
client_encryption = self.create_client_encryption(
14921496
self.KMS_PROVIDER_MAP, # type: ignore[arg-type]
14931497
".".join([self.KEYVAULT_DB, self.KEYVAULT_COLL]),
14941498
async_client_context.client,
14951499
OPTS,
14961500
)
1497-
self.addAsyncCleanup(client_encryption.close)
14981501

14991502
ciphertext = await client_encryption.encrypt(
15001503
"string0",
@@ -1506,6 +1509,7 @@ async def _test_explicit(self, expectation):
15061509
self.assertEqual(await client_encryption.decrypt(ciphertext), "string0")
15071510

15081511
async def _test_automatic(self, expectation_extjson, payload):
1512+
await self._setup()
15091513
encrypted_db = "db"
15101514
encrypted_coll = "coll"
15111515
keyvault_namespace = ".".join([self.KEYVAULT_DB, self.KEYVAULT_COLL])
@@ -1520,7 +1524,6 @@ async def _test_automatic(self, expectation_extjson, payload):
15201524
client = await self.async_rs_or_single_client(
15211525
auto_encryption_opts=encryption_opts, event_listeners=[insert_listener]
15221526
)
1523-
self.addAsyncCleanup(client.aclose)
15241527

15251528
coll = client.get_database(encrypted_db).get_collection(
15261529
encrypted_coll, codec_options=OPTS, write_concern=WriteConcern("majority")
@@ -1594,6 +1597,7 @@ async def test_automatic(self):
15941597
# https://github.com/mongodb/specifications/blob/master/source/client-side-encryption/tests/README.md#deadlock-tests
15951598
class TestDeadlockProse(AsyncEncryptionIntegrationTest):
15961599
async def asyncSetUp(self):
1600+
await super().asyncSetUp()
15971601
self.client_test = await self.async_rs_or_single_client(
15981602
maxPoolSize=1, readConcernLevel="majority", w="majority", uuidRepresentation="standard"
15991603
)
@@ -1626,7 +1630,6 @@ async def asyncSetUp(self):
16261630
self.ciphertext = await client_encryption.encrypt(
16271631
"string0", Algorithm.AEAD_AES_256_CBC_HMAC_SHA_512_Deterministic, key_alt_name="local"
16281632
)
1629-
await client_encryption.close()
16301633

16311634
self.client_listener = OvertCommandListener()
16321635
self.topology_listener = TopologyEventListener()
@@ -1821,6 +1824,7 @@ async def test_case_8(self):
18211824
# https://github.com/mongodb/specifications/blob/master/source/client-side-encryption/tests/README.md#14-decryption-events
18221825
class TestDecryptProse(AsyncEncryptionIntegrationTest):
18231826
async def asyncSetUp(self):
1827+
await super().asyncSetUp()
18241828
self.client = async_client_context.client
18251829
await self.client.db.drop_collection("decryption_events")
18261830
await create_key_vault(self.client.keyvault.datakeys)
@@ -2256,6 +2260,7 @@ async def test_06_named_kms_providers_apply_tls_options_kmip(self):
22562260
# https://github.com/mongodb/specifications/blob/50e26fe/source/client-side-encryption/tests/README.md#unique-index-on-keyaltnames
22572261
class TestUniqueIndexOnKeyAltNamesProse(AsyncEncryptionIntegrationTest):
22582262
async def asyncSetUp(self):
2263+
await super().asyncSetUp()
22592264
self.client = async_client_context.client
22602265
await create_key_vault(self.client.keyvault.datakeys)
22612266
kms_providers_map = {"local": {"key": LOCAL_MASTER_KEY}}
@@ -2605,8 +2610,6 @@ async def AsyncMongoClient(**kwargs):
26052610
assert isinstance(res["encrypted_indexed"], Binary)
26062611
assert isinstance(res["encrypted_unindexed"], Binary)
26072612

2608-
await client_encryption.close()
2609-
26102613

26112614
# https://github.com/mongodb/specifications/blob/master/source/client-side-encryption/tests/README.md#22-range-explicit-encryption
26122615
class TestRangeQueryProse(AsyncEncryptionIntegrationTest):

test/asynchronous/unified_format.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -499,10 +499,6 @@ async def asyncSetUp(self):
499499
# process file-level runOnRequirements
500500
run_on_spec = self.TEST_SPEC.get("runOnRequirements", [])
501501
if not await self.should_run_on(run_on_spec):
502-
# Explicitly close async clients here
503-
# to prevent leaky monitor tasks
504-
if not _IS_SYNC:
505-
await async_client_context.client.close()
506502
raise unittest.SkipTest(f"{self.__class__.__name__} runOnRequirements not satisfied")
507503

508504
# add any special-casing for skipping tests here

test/asynchronous/utils_spec_runner.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -692,8 +692,6 @@ async def run_scenario(self, scenario_def, test):
692692
self.listener = listener
693693
self.pool_listener = pool_listener
694694
self.server_listener = server_listener
695-
# Close the client explicitly to avoid having too many threads open.
696-
self.addAsyncCleanup(client.close)
697695

698696
# Create session0 and session1.
699697
sessions = {}

test/test_encryption.py

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1230,7 +1230,9 @@ def test_03_bulk_batch_split(self):
12301230
doc2 = {"_id": "over_2mib_2", "unencrypted": "a" * _2_MiB}
12311231
self.listener.reset()
12321232
self.coll_encrypted.bulk_write([InsertOne(doc1), InsertOne(doc2)])
1233-
self.assertEqual(self.listener.started_command_names(), ["insert", "insert"])
1233+
self.assertEqual(
1234+
len([c for c in self.listener.started_command_names() if c == "insert"]), 2
1235+
)
12341236

12351237
def test_04_bulk_batch_split(self):
12361238
limits_doc = json_data("limits", "limits-doc.json")
@@ -1240,7 +1242,9 @@ def test_04_bulk_batch_split(self):
12401242
doc2.update(limits_doc)
12411243
self.listener.reset()
12421244
self.coll_encrypted.bulk_write([InsertOne(doc1), InsertOne(doc2)])
1243-
self.assertEqual(self.listener.started_command_names(), ["insert", "insert"])
1245+
self.assertEqual(
1246+
len([c for c in self.listener.started_command_names() if c == "insert"]), 2
1247+
)
12441248

12451249
def test_05_insert_succeeds_just_under_16MiB(self):
12461250
doc = {"_id": "under_16mib", "unencrypted": "a" * (_16_MiB - 2000)}
@@ -1476,19 +1480,18 @@ class AzureGCPEncryptionTestMixin(EncryptionIntegrationTest):
14761480
KEYVAULT_COLL = "datakeys"
14771481
client: MongoClient
14781482

1479-
def setUp(self):
1480-
self.client = self.simple_client()
1483+
def _setup(self):
14811484
keyvault = self.client.get_database(self.KEYVAULT_DB).get_collection(self.KEYVAULT_COLL)
14821485
create_key_vault(keyvault, self.DEK)
14831486

14841487
def _test_explicit(self, expectation):
1488+
self._setup()
14851489
client_encryption = self.create_client_encryption(
14861490
self.KMS_PROVIDER_MAP, # type: ignore[arg-type]
14871491
".".join([self.KEYVAULT_DB, self.KEYVAULT_COLL]),
14881492
client_context.client,
14891493
OPTS,
14901494
)
1491-
self.addCleanup(client_encryption.close)
14921495

14931496
ciphertext = client_encryption.encrypt(
14941497
"string0",
@@ -1500,6 +1503,7 @@ def _test_explicit(self, expectation):
15001503
self.assertEqual(client_encryption.decrypt(ciphertext), "string0")
15011504

15021505
def _test_automatic(self, expectation_extjson, payload):
1506+
self._setup()
15031507
encrypted_db = "db"
15041508
encrypted_coll = "coll"
15051509
keyvault_namespace = ".".join([self.KEYVAULT_DB, self.KEYVAULT_COLL])
@@ -1514,7 +1518,6 @@ def _test_automatic(self, expectation_extjson, payload):
15141518
client = self.rs_or_single_client(
15151519
auto_encryption_opts=encryption_opts, event_listeners=[insert_listener]
15161520
)
1517-
self.addCleanup(client.close)
15181521

15191522
coll = client.get_database(encrypted_db).get_collection(
15201523
encrypted_coll, codec_options=OPTS, write_concern=WriteConcern("majority")
@@ -1588,6 +1591,7 @@ def test_automatic(self):
15881591
# https://github.com/mongodb/specifications/blob/master/source/client-side-encryption/tests/README.md#deadlock-tests
15891592
class TestDeadlockProse(EncryptionIntegrationTest):
15901593
def setUp(self):
1594+
super().setUp()
15911595
self.client_test = self.rs_or_single_client(
15921596
maxPoolSize=1, readConcernLevel="majority", w="majority", uuidRepresentation="standard"
15931597
)
@@ -1618,7 +1622,6 @@ def setUp(self):
16181622
self.ciphertext = client_encryption.encrypt(
16191623
"string0", Algorithm.AEAD_AES_256_CBC_HMAC_SHA_512_Deterministic, key_alt_name="local"
16201624
)
1621-
client_encryption.close()
16221625

16231626
self.client_listener = OvertCommandListener()
16241627
self.topology_listener = TopologyEventListener()
@@ -1813,6 +1816,7 @@ def test_case_8(self):
18131816
# https://github.com/mongodb/specifications/blob/master/source/client-side-encryption/tests/README.md#14-decryption-events
18141817
class TestDecryptProse(EncryptionIntegrationTest):
18151818
def setUp(self):
1819+
super().setUp()
18161820
self.client = client_context.client
18171821
self.client.db.drop_collection("decryption_events")
18181822
create_key_vault(self.client.keyvault.datakeys)
@@ -2248,6 +2252,7 @@ def test_06_named_kms_providers_apply_tls_options_kmip(self):
22482252
# https://github.com/mongodb/specifications/blob/50e26fe/source/client-side-encryption/tests/README.md#unique-index-on-keyaltnames
22492253
class TestUniqueIndexOnKeyAltNamesProse(EncryptionIntegrationTest):
22502254
def setUp(self):
2255+
super().setUp()
22512256
self.client = client_context.client
22522257
create_key_vault(self.client.keyvault.datakeys)
22532258
kms_providers_map = {"local": {"key": LOCAL_MASTER_KEY}}
@@ -2589,8 +2594,6 @@ def MongoClient(**kwargs):
25892594
assert isinstance(res["encrypted_indexed"], Binary)
25902595
assert isinstance(res["encrypted_unindexed"], Binary)
25912596

2592-
client_encryption.close()
2593-
25942597

25952598
# https://github.com/mongodb/specifications/blob/master/source/client-side-encryption/tests/README.md#22-range-explicit-encryption
25962599
class TestRangeQueryProse(EncryptionIntegrationTest):

test/unified_format.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -498,10 +498,6 @@ def setUp(self):
498498
# process file-level runOnRequirements
499499
run_on_spec = self.TEST_SPEC.get("runOnRequirements", [])
500500
if not self.should_run_on(run_on_spec):
501-
# Explicitly close async clients here
502-
# to prevent leaky monitor tasks
503-
if not _IS_SYNC:
504-
client_context.client.close()
505501
raise unittest.SkipTest(f"{self.__class__.__name__} runOnRequirements not satisfied")
506502

507503
# add any special-casing for skipping tests here

test/utils_spec_runner.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -689,8 +689,6 @@ def run_scenario(self, scenario_def, test):
689689
self.listener = listener
690690
self.pool_listener = pool_listener
691691
self.server_listener = server_listener
692-
# Close the client explicitly to avoid having too many threads open.
693-
self.addCleanup(client.close)
694692

695693
# Create session0 and session1.
696694
sessions = {}

0 commit comments

Comments
 (0)