From 465d26766d6d959e9f871bf3663d3491e4b82883 Mon Sep 17 00:00:00 2001 From: Omer Katz Date: Mon, 7 Sep 2020 17:44:35 +0300 Subject: [PATCH] Correctly skip these tests when the relevant dependency is missing. --- t/unit/backends/test_azureblockblob.py | 2 +- t/unit/backends/test_mongodb.py | 60 +++++++++++++------------- 2 files changed, 32 insertions(+), 30 deletions(-) diff --git a/t/unit/backends/test_azureblockblob.py b/t/unit/backends/test_azureblockblob.py index 07f1c6daeb3..969993290d4 100644 --- a/t/unit/backends/test_azureblockblob.py +++ b/t/unit/backends/test_azureblockblob.py @@ -9,7 +9,7 @@ MODULE_TO_MOCK = "celery.backends.azureblockblob" -pytest.importorskip('azure') +pytest.importorskip('azure.storage.blob') class test_AzureBlockBlobBackend: diff --git a/t/unit/backends/test_mongodb.py b/t/unit/backends/test_mongodb.py index 867754f3894..a67411f6121 100644 --- a/t/unit/backends/test_mongodb.py +++ b/t/unit/backends/test_mongodb.py @@ -31,7 +31,6 @@ class test_MongoBackend: - default_url = 'mongodb://uuuu:pwpw@hostname.dom/database' replica_set_url = ( 'mongodb://uuuu:pwpw@hostname.dom,' @@ -128,11 +127,10 @@ def test_init_with_settings(self): mb = MongoBackend(app=self.app, url='mongodb://') - @patch('dns.resolver.query') - def test_init_mongodb_dns_seedlist(self, dns_resolver_query): - from dns.name import Name - from dns.rdtypes.ANY.TXT import TXT - from dns.rdtypes.IN.SRV import SRV + def test_init_mongodb_dns_seedlist(self): + Name = pytest.importorskip('dns.name').Name + TXT = pytest.importorskip('dns.rdtypes.ANY.TXT').TXT + SRV = pytest.importorskip('dns.rdtypes.IN.SRV').SRV self.app.conf.mongodb_backend_settings = None @@ -150,8 +148,6 @@ def mock_resolver(_, rdtype, rdclass=None, lifetime=None, **kwargs): elif rdtype == 'TXT': return [TXT(0, 0, [b'replicaSet=rs0'])] - dns_resolver_query.side_effect = mock_resolver - # uri with user, password, database name, replica set, # DNS seedlist format uri = ('srv://' @@ -159,20 +155,21 @@ def mock_resolver(_, rdtype, rdclass=None, lifetime=None, **kwargs): 'dns-seedlist-host.example.com/' 'celerydatabase') - mb = MongoBackend(app=self.app, url=uri) - assert mb.mongo_host == [ - 'mongo1.example.com:27017', - 'mongo2.example.com:27017', - 'mongo3.example.com:27017', - ] - assert mb.options == dict( - mb._prepare_client_options(), - replicaset='rs0', - ssl=True - ) - assert mb.user == 'celeryuser' - assert mb.password == 'celerypassword' - assert mb.database_name == 'celerydatabase' + with patch('dns.resolver.query', side_effect=mock_resolver): + mb = MongoBackend(app=self.app, url=uri) + assert mb.mongo_host == [ + 'mongo1.example.com:27017', + 'mongo2.example.com:27017', + 'mongo3.example.com:27017', + ] + assert mb.options == dict( + mb._prepare_client_options(), + replicaset='rs0', + ssl=True + ) + assert mb.user == 'celeryuser' + assert mb.password == 'celerypassword' + assert mb.database_name == 'celerydatabase' def test_ensure_mongodb_uri_compliance(self): mb = MongoBackend(app=self.app, url=None) @@ -181,7 +178,7 @@ def test_ensure_mongodb_uri_compliance(self): assert compliant_uri('mongodb://') == 'mongodb://localhost' assert compliant_uri('mongodb+something://host') == \ - 'mongodb+something://host' + 'mongodb+something://host' assert compliant_uri('something://host') == 'mongodb+something://host' @@ -564,7 +561,8 @@ def test_encode(self, mongo_backend_factory, serializer, encoded_into): backend = mongo_backend_factory(serializer=serializer) assert isinstance(backend.encode(10), encoded_into) - def test_encode_decode(self, mongo_backend_factory, serializer, encoded_into): + def test_encode_decode(self, mongo_backend_factory, serializer, + encoded_into): backend = mongo_backend_factory(serializer=serializer) decoded = backend.decode(backend.encode(12)) assert decoded == 12 @@ -647,9 +645,11 @@ def find_one(self, task_id): monkeypatch.setattr(MongoBackend, "collection", FakeMongoCollection()) @pytest.mark.parametrize("serializer,result_type,result", [ - (s, type(i['result']), i['result']) for i in SUCCESS_RESULT_TEST_DATA for s in i['serializers']] - ) - def test_encode_success_results(self, mongo_backend_factory, serializer, result_type, result): + (s, type(i['result']), i['result']) for i in SUCCESS_RESULT_TEST_DATA + for s in i['serializers']] + ) + def test_encode_success_results(self, mongo_backend_factory, serializer, + result_type, result): backend = mongo_backend_factory(serializer=serializer) backend.store_result(TASK_ID, result, 'SUCCESS') recovered = backend.get_result(TASK_ID) @@ -658,8 +658,10 @@ def test_encode_success_results(self, mongo_backend_factory, serializer, result_ assert type(recovered) == result_type assert recovered == result - @pytest.mark.parametrize("serializer", ["bson", "pickle", "yaml", "json", "msgpack"]) - def test_encode_exception_error_results(self, mongo_backend_factory, serializer): + @pytest.mark.parametrize("serializer", + ["bson", "pickle", "yaml", "json", "msgpack"]) + def test_encode_exception_error_results(self, mongo_backend_factory, + serializer): backend = mongo_backend_factory(serializer=serializer) exception = Exception("Basic Exception") backend.store_result(TASK_ID, exception, 'FAILURE')