12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- from __future__ import absolute_import, unicode_literals
- import pytest
- from case import Mock, call, patch, skip
- from celery.backends import azureblockblob
- from celery.backends.azureblockblob import AzureBlockBlobBackend
- from celery.exceptions import ImproperlyConfigured
- MODULE_TO_MOCK = "celery.backends.azureblockblob"
- @skip.unless_module("azure")
- class test_AzureBlockBlobBackend:
- def setup(self):
- self.url = (
- "azureblockblob://"
- "DefaultEndpointsProtocol=protocol;"
- "AccountName=name;"
- "AccountKey=key;"
- "EndpointSuffix=suffix")
- self.backend = AzureBlockBlobBackend(
- app=self.app,
- url=self.url)
- def test_missing_third_party_sdk(self):
- azurestorage = azureblockblob.azurestorage
- try:
- azureblockblob.azurestorage = None
- with pytest.raises(ImproperlyConfigured):
- AzureBlockBlobBackend(app=self.app, url=self.url)
- finally:
- azureblockblob.azurestorage = azurestorage
- def test_bad_connection_url(self):
- with pytest.raises(ImproperlyConfigured):
- AzureBlockBlobBackend._parse_url("azureblockblob://")
- with pytest.raises(ImproperlyConfigured):
- AzureBlockBlobBackend._parse_url("")
- @patch(MODULE_TO_MOCK + ".BlockBlobService")
- def test_create_client(self, mock_blob_service_factory):
- mock_blob_service_instance = Mock()
- mock_blob_service_factory.return_value = mock_blob_service_instance
- backend = AzureBlockBlobBackend(app=self.app, url=self.url)
- # ensure container gets created on client access...
- assert mock_blob_service_instance.create_container.call_count == 0
- assert backend._client is not None
- assert mock_blob_service_instance.create_container.call_count == 1
- # ...but only once per backend instance
- assert backend._client is not None
- assert mock_blob_service_instance.create_container.call_count == 1
- @patch(MODULE_TO_MOCK + ".AzureBlockBlobBackend._client")
- def test_get(self, mock_client):
- self.backend.get(b"mykey")
- mock_client.get_blob_to_text.assert_called_once_with(
- "celery", "mykey")
- @patch(MODULE_TO_MOCK + ".AzureBlockBlobBackend._client")
- def test_get_missing(self, mock_client):
- mock_client.get_blob_to_text.side_effect = \
- azureblockblob.AzureMissingResourceHttpError("Missing", 404)
- assert self.backend.get(b"mykey") is None
- @patch(MODULE_TO_MOCK + ".AzureBlockBlobBackend._client")
- def test_set(self, mock_client):
- self.backend.set(b"mykey", "myvalue")
- mock_client.create_blob_from_text.assert_called_once_with(
- "celery", "mykey", "myvalue")
- @patch(MODULE_TO_MOCK + ".AzureBlockBlobBackend._client")
- def test_mget(self, mock_client):
- keys = [b"mykey1", b"mykey2"]
- self.backend.mget(keys)
- mock_client.get_blob_to_text.assert_has_calls(
- [call("celery", "mykey1"),
- call("celery", "mykey2")])
- @patch(MODULE_TO_MOCK + ".AzureBlockBlobBackend._client")
- def test_delete(self, mock_client):
- self.backend.delete(b"mykey")
- mock_client.delete_blob.assert_called_once_with(
- "celery", "mykey")
|