From df6f6496a4d9f7586a374b903560318ca4e292af Mon Sep 17 00:00:00 2001 From: Shane Harvey Date: Wed, 13 Oct 2021 10:29:38 -0700 Subject: [PATCH] PYTHON-2927 PYTHON-2937 Skip failing tests on PyPy (#753) Cleanup test clients more eagerly. --- test/test_client.py | 1 + test/test_pooling.py | 2 ++ test/test_read_write_concern_spec.py | 2 ++ test/test_retryable_writes.py | 1 + test/test_ssl.py | 9 ++++++++- test/test_transactions.py | 9 ++++++++- 6 files changed, 22 insertions(+), 2 deletions(-) diff --git a/test/test_client.py b/test/test_client.py index aee95692c..2187bde9d 100644 --- a/test/test_client.py +++ b/test/test_client.py @@ -1552,6 +1552,7 @@ class TestClient(IntegrationTest): @unittest.skipIf(sys.platform.startswith('java'), 'Jython does not support gc.get_objects') + @unittest.skipIf('PyPy' in sys.version, 'PYTHON-2927 fails often on PyPy') def test_continuous_network_errors(self): def server_description_count(): i = 0 diff --git a/test/test_pooling.py b/test/test_pooling.py index 266e080ca..ea2ed3224 100644 --- a/test/test_pooling.py +++ b/test/test_pooling.py @@ -421,6 +421,7 @@ class TestPoolMaxSize(_TestPoolingBase): def test_max_pool_size(self): max_pool_size = 4 c = rs_or_single_client(maxPoolSize=max_pool_size) + self.addCleanup(c.close) collection = c[DB].test # Need one document. @@ -456,6 +457,7 @@ class TestPoolMaxSize(_TestPoolingBase): def test_max_pool_size_none(self): c = rs_or_single_client(maxPoolSize=None) + self.addCleanup(c.close) collection = c[DB].test # Need one document. diff --git a/test/test_read_write_concern_spec.py b/test/test_read_write_concern_spec.py index b334ee935..d6c5a68c3 100644 --- a/test/test_read_write_concern_spec.py +++ b/test/test_read_write_concern_spec.py @@ -52,6 +52,7 @@ class TestReadWriteConcernSpec(IntegrationTest): listener = EventListener() # Client with default readConcern and writeConcern client = rs_or_single_client(event_listeners=[listener]) + self.addCleanup(client.close) collection = client.pymongo_test.collection # Prepare for tests of find() and aggregate(). collection.insert_many([{} for _ in range(10)]) @@ -209,6 +210,7 @@ class TestReadWriteConcernSpec(IntegrationTest): def test_write_error_details_exposes_errinfo(self): listener = EventListener() client = rs_or_single_client(event_listeners=[listener]) + self.addCleanup(client.close) db = client.errinfotest self.addCleanup(client.drop_database, "errinfotest") validator = {"x": {"$type": "string"}} diff --git a/test/test_retryable_writes.py b/test/test_retryable_writes.py index bf9f08721..ffc93eb2f 100644 --- a/test/test_retryable_writes.py +++ b/test/test_retryable_writes.py @@ -573,6 +573,7 @@ class TestRetryableWritesTxnNumber(IgnoreDeprecationsTest): listener = OvertCommandListener() client = rs_or_single_client( retryWrites=True, event_listeners=[listener]) + self.addCleanup(client.close) topology = client._topology select_server = topology.select_server diff --git a/test/test_ssl.py b/test/test_ssl.py index 45614034e..0162eb3a0 100644 --- a/test/test_ssl.py +++ b/test/test_ssl.py @@ -500,6 +500,7 @@ class TestSSL(IntegrationTest): ssl=True, tlsAllowInvalidCertificates=True, tlsCertificateKeyFile=CLIENT_PEM) + self.addCleanup(noauth.close) with self.assertRaises(OperationFailure): noauth.pymongo_test.test.find_one() @@ -512,6 +513,7 @@ class TestSSL(IntegrationTest): tlsAllowInvalidCertificates=True, tlsCertificateKeyFile=CLIENT_PEM, event_listeners=[listener]) + self.addCleanup(auth.close) # No error auth.pymongo_test.test.find_one() @@ -529,6 +531,7 @@ class TestSSL(IntegrationTest): ssl=True, tlsAllowInvalidCertificates=True, tlsCertificateKeyFile=CLIENT_PEM) + self.addCleanup(client.close) # No error client.pymongo_test.test.find_one() @@ -537,6 +540,7 @@ class TestSSL(IntegrationTest): ssl=True, tlsAllowInvalidCertificates=True, tlsCertificateKeyFile=CLIENT_PEM) + self.addCleanup(client.close) # No error client.pymongo_test.test.find_one() # Auth should fail if username and certificate do not match @@ -545,7 +549,9 @@ class TestSSL(IntegrationTest): quote_plus("not the username"), host, port)) bad_client = MongoClient( - uri, ssl=True, tlsAllowInvalidCertificates=True, tlsCertificateKeyFile=CLIENT_PEM) + uri, ssl=True, tlsAllowInvalidCertificates=True, + tlsCertificateKeyFile=CLIENT_PEM) + self.addCleanup(bad_client.close) with self.assertRaises(OperationFailure): bad_client.pymongo_test.test.find_one() @@ -557,6 +563,7 @@ class TestSSL(IntegrationTest): ssl=True, tlsAllowInvalidCertificates=True, tlsCertificateKeyFile=CLIENT_PEM) + self.addCleanup(bad_client.close) with self.assertRaises(OperationFailure): bad_client.pymongo_test.test.find_one() diff --git a/test/test_transactions.py b/test/test_transactions.py index de3066303..6c41f28cf 100644 --- a/test/test_transactions.py +++ b/test/test_transactions.py @@ -290,6 +290,9 @@ class TestTransactions(TransactionsBase): @client_context.require_version_min(4, 2) @client_context.require_transactions def test_transaction_starts_with_batched_write(self): + if 'PyPy' in sys.version and client_context.tls: + self.skipTest('PYTHON-2937 PyPy is so slow sending large ' + 'messages over TLS that this test fails') # Start a transaction with a batch of operations that needs to be # split. listener = OvertCommandListener() @@ -299,7 +302,8 @@ class TestTransactions(TransactionsBase): listener.reset() self.addCleanup(client.close) self.addCleanup(coll.drop) - ops = [InsertOne({'a': '1'*(10*1024*1024)}) for _ in range(10)] + large_str = '\0'*(10*1024*1024) + ops = [InsertOne({'a': large_str}) for _ in range(10)] with client.start_session() as session: with session.start_transaction(): coll.bulk_write(ops, session=session) @@ -364,6 +368,7 @@ class TestTransactionsConvenientAPI(TransactionsBase): def test_callback_not_retried_after_timeout(self): listener = OvertCommandListener() client = rs_client(event_listeners=[listener]) + self.addCleanup(client.close) coll = client[self.db.name].test def callback(session): @@ -393,6 +398,7 @@ class TestTransactionsConvenientAPI(TransactionsBase): def test_callback_not_retried_after_commit_timeout(self): listener = OvertCommandListener() client = rs_client(event_listeners=[listener]) + self.addCleanup(client.close) coll = client[self.db.name].test def callback(session): @@ -423,6 +429,7 @@ class TestTransactionsConvenientAPI(TransactionsBase): def test_commit_not_retried_after_timeout(self): listener = OvertCommandListener() client = rs_client(event_listeners=[listener]) + self.addCleanup(client.close) coll = client[self.db.name].test def callback(session):