diff --git a/.gitignore b/.gitignore index 1d6c04b9bc2f..ba28299db35a 100644 --- a/.gitignore +++ b/.gitignore @@ -70,4 +70,6 @@ src/build # [begoldsm] ignore virtual env if it exists. adlEnv/ -code_reports \ No newline at end of file +code_reports +sdk/storage/azure-storage-blob/tests/settings_real.py +sdk/storage/azure-storage-queue/tests/settings_real.py diff --git a/sdk/storage/azure-storage-queue/azure/storage/queue/__init__.py b/sdk/storage/azure-storage-queue/azure/storage/queue/__init__.py index 5b396cd202e8..fdc2b2fa865f 100644 --- a/sdk/storage/azure-storage-queue/azure/storage/queue/__init__.py +++ b/sdk/storage/azure-storage-queue/azure/storage/queue/__init__.py @@ -3,3 +3,66 @@ # Licensed under the MIT License. See License.txt in the project root for # license information. # -------------------------------------------------------------------------- + +from .version import __version__ +from .queue_client import QueueClient +from .queue_service_client import QueueServiceClient +from ._shared.policies import ExponentialRetry, LinearRetry, NoRetry +from ._shared.models import( + LocationMode, + ResourceTypes, + AccountPermissions, + StorageErrorCode +) +from ._queue_utils import ( + MessageIterator, + TextBase64EncodePolicy, + TextBase64DecodePolicy, + BinaryBase64EncodePolicy, + BinaryBase64DecodePolicy, + TextXMLEncodePolicy, + TextXMLDecodePolicy, + NoEncodePolicy, + NoDecodePolicy +) +from .models import ( + QueueMessage, + QueueProperties, + QueuePropertiesPaged, + QueuePermissions, + AccessPolicy, + Logging, + Metrics, + CorsRule, + RetentionPolicy, +) + +__all__ = [ + 'QueueClient', + 'QueueServiceClient', + 'ExponentialRetry', + 'LinearRetry', + 'NoRetry', + 'LocationMode', + 'ResourceTypes', + 'AccountPermissions', + 'StorageErrorCode', + 'QueueMessage', + 'QueueProperties', + 'QueuePropertiesPaged', + 'QueuePermissions', + 'AccessPolicy', + 'TextBase64EncodePolicy', + 'TextBase64DecodePolicy', + 'BinaryBase64EncodePolicy', + 'BinaryBase64DecodePolicy', + 'TextXMLEncodePolicy', + 'TextXMLDecodePolicy', + 'NoEncodePolicy', + 'NoDecodePolicy', + 'MessageIterator', + 'Logging', + 'Metrics', + 'CorsRule', + 'RetentionPolicy', +] diff --git a/sdk/storage/azure-storage-queue/azure/storage/queue/_deserialize.py b/sdk/storage/azure-storage-queue/azure/storage/queue/_deserialize.py deleted file mode 100644 index 69ff28c95371..000000000000 --- a/sdk/storage/azure-storage-queue/azure/storage/queue/_deserialize.py +++ /dev/null @@ -1,20 +0,0 @@ -# ------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for -# license information. -# -------------------------------------------------------------------------- - -from .models import QueueProperties - - -def deserialize_metadata(response, obj, headers): - raw_metadata = {k: v for k, v in response.headers.items() if k.startswith("x-ms-meta-")} - return {k[10:]: v for k, v in raw_metadata.items()} - -def deserialize_queue_properties(response, obj, headers): - metadata = deserialize_metadata(response, obj, headers) - queue_properties = QueueProperties( - metadata=metadata, - **headers - ) - return queue_properties \ No newline at end of file diff --git a/sdk/storage/azure-storage-queue/azure/storage/queue/_error.py b/sdk/storage/azure-storage-queue/azure/storage/queue/_error.py deleted file mode 100644 index 94d134c91bf9..000000000000 --- a/sdk/storage/azure-storage-queue/azure/storage/queue/_error.py +++ /dev/null @@ -1,68 +0,0 @@ - -# ------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for -# license information. -# -------------------------------------------------------------------------- -import sys - -_ERROR_MESSAGE_SHOULD_BE_UNICODE = 'message should be of type unicode.' -_ERROR_MESSAGE_SHOULD_BE_STR = 'message should be of type str.' -_ERROR_MESSAGE_NOT_BASE64 = 'message is not a valid base64 value.' -_ERROR_MESSAGE_NOT_ENCRYPTED = 'Message was not encrypted.' -_ERROR_CONFLICT = 'Conflict ({0})' -_ERROR_NOT_FOUND = 'Not found ({0})' -_ERROR_UNKNOWN = 'Unknown error ({0})' -_ERROR_STORAGE_MISSING_INFO = \ - 'You need to provide an account name and either an account_key or sas_token when creating a storage service.' -_ERROR_EMULATOR_DOES_NOT_SUPPORT_FILES = \ - 'The emulator does not support the file service.' -_ERROR_ACCESS_POLICY = \ - 'share_access_policy must be either SignedIdentifier or AccessPolicy ' + \ - 'instance' -_ERROR_PARALLEL_NOT_SEEKABLE = 'Parallel operations require a seekable stream.' -_ERROR_VALUE_SHOULD_BE_BYTES = '{0} should be of type bytes.' -_ERROR_VALUE_SHOULD_BE_BYTES_OR_STREAM = '{0} should be of type bytes or a readable file-like/io.IOBase stream object.' -_ERROR_VALUE_SHOULD_BE_SEEKABLE_STREAM = '{0} should be a seekable file-like/io.IOBase type stream object.' -_ERROR_VALUE_SHOULD_BE_STREAM = '{0} should be a file-like/io.IOBase type stream object with a read method.' -_ERROR_VALUE_NONE = '{0} should not be None.' -_ERROR_VALUE_NONE_OR_EMPTY = '{0} should not be None or empty.' -_ERROR_VALUE_NEGATIVE = '{0} should not be negative.' -_ERROR_START_END_NEEDED_FOR_MD5 = \ - 'Both end_range and start_range need to be specified ' + \ - 'for getting content MD5.' -_ERROR_RANGE_TOO_LARGE_FOR_MD5 = \ - 'Getting content MD5 for a range greater than 4MB ' + \ - 'is not supported.' -_ERROR_MD5_MISMATCH = \ - 'MD5 mismatch. Expected value is \'{0}\', computed value is \'{1}\'.' -_ERROR_TOO_MANY_ACCESS_POLICIES = \ - 'Too many access policies provided. The server does not support setting more than 5 access policies on a single resource.' -_ERROR_OBJECT_INVALID = \ - '{0} does not define a complete interface. Value of {1} is either missing or invalid.' -_ERROR_UNSUPPORTED_ENCRYPTION_VERSION = \ - 'Encryption version is not supported.' -_ERROR_DECRYPTION_FAILURE = \ - 'Decryption failed' -_ERROR_ENCRYPTION_REQUIRED = \ - 'Encryption required but no key was provided.' -_ERROR_DECRYPTION_REQUIRED = \ - 'Decryption required but neither key nor resolver was provided.' + \ - ' If you do not want to decypt, please do not set the require encryption flag.' -_ERROR_INVALID_KID = \ - 'Provided or resolved key-encryption-key does not match the id of key used to encrypt.' -_ERROR_UNSUPPORTED_ENCRYPTION_ALGORITHM = \ - 'Specified encryption algorithm is not supported.' -_ERROR_UNSUPPORTED_METHOD_FOR_ENCRYPTION = 'The require_encryption flag is set, but encryption is not supported' + \ - ' for this method.' -_ERROR_UNKNOWN_KEY_WRAP_ALGORITHM = 'Unknown key wrap algorithm.' -_ERROR_DATA_NOT_ENCRYPTED = 'Encryption required, but received data does not contain appropriate metatadata.' + \ - 'Data was either not encrypted or metadata has been lost.' - -def _validate_message_type_text(param): - if sys.version_info < (3,): - if not isinstance(param, unicode): - raise TypeError(_ERROR_MESSAGE_SHOULD_BE_UNICODE) - else: - if not isinstance(param, str): - raise TypeError(_ERROR_MESSAGE_SHOULD_BE_STR) diff --git a/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/__init__.py b/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/__init__.py index beb459532937..f3ca950f4944 100644 --- a/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/__init__.py +++ b/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/__init__.py @@ -4,6 +4,7 @@ # Changes may cause incorrect behavior and will be lost if the code is # regenerated. # -------------------------------------------------------------------------- +# pylint: skip-file from ._configuration import AzureQueueStorageConfiguration from ._azure_queue_storage import AzureQueueStorage diff --git a/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/_azure_queue_storage.py b/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/_azure_queue_storage.py index 076e89e96881..8129624d2c7a 100644 --- a/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/_azure_queue_storage.py +++ b/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/_azure_queue_storage.py @@ -4,6 +4,7 @@ # Changes may cause incorrect behavior and will be lost if the code is # regenerated. # -------------------------------------------------------------------------- +# pylint: skip-file from azure.core import PipelineClient from msrest import Serializer, Deserializer diff --git a/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/_configuration.py b/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/_configuration.py index 8da01fc14f94..78e0f1b2e37a 100644 --- a/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/_configuration.py +++ b/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/_configuration.py @@ -4,6 +4,7 @@ # Changes may cause incorrect behavior and will be lost if the code is # regenerated. # -------------------------------------------------------------------------- +# pylint: skip-file from azure.core.configuration import Configuration, ConnectionConfiguration from azure.core.pipeline import policies diff --git a/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/aio/__init__.py b/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/aio/__init__.py index 2e7dbc5e617f..6cdb3f3b6528 100644 --- a/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/aio/__init__.py +++ b/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/aio/__init__.py @@ -4,6 +4,7 @@ # Changes may cause incorrect behavior and will be lost if the code is # regenerated. # -------------------------------------------------------------------------- +# pylint: skip-file from ._azure_queue_storage_async import AzureQueueStorage from ._configuration_async import AzureQueueStorageConfiguration diff --git a/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/aio/_azure_queue_storage_async.py b/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/aio/_azure_queue_storage_async.py index 9aa6234b6702..67bc78c251a7 100644 --- a/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/aio/_azure_queue_storage_async.py +++ b/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/aio/_azure_queue_storage_async.py @@ -4,6 +4,7 @@ # Changes may cause incorrect behavior and will be lost if the code is # regenerated. # -------------------------------------------------------------------------- +# pylint: skip-file from azure.core import AsyncPipelineClient from msrest import Serializer, Deserializer diff --git a/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/aio/_configuration_async.py b/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/aio/_configuration_async.py index 835144617df2..898075e85084 100644 --- a/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/aio/_configuration_async.py +++ b/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/aio/_configuration_async.py @@ -4,6 +4,7 @@ # Changes may cause incorrect behavior and will be lost if the code is # regenerated. # -------------------------------------------------------------------------- +# pylint: skip-file from azure.core.configuration import Configuration, ConnectionConfiguration from azure.core.pipeline import policies diff --git a/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/aio/operations_async/__init__.py b/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/aio/operations_async/__init__.py index 5881e5821dae..3f0b116c598d 100644 --- a/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/aio/operations_async/__init__.py +++ b/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/aio/operations_async/__init__.py @@ -4,6 +4,7 @@ # Changes may cause incorrect behavior and will be lost if the code is # regenerated. # -------------------------------------------------------------------------- +# pylint: skip-file from ._service_operations_async import ServiceOperations from ._queue_operations_async import QueueOperations diff --git a/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/aio/operations_async/_message_id_operations_async.py b/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/aio/operations_async/_message_id_operations_async.py index f839bdd54bbd..dec606a6b13a 100644 --- a/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/aio/operations_async/_message_id_operations_async.py +++ b/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/aio/operations_async/_message_id_operations_async.py @@ -4,6 +4,7 @@ # Changes may cause incorrect behavior and will be lost if the code is # regenerated. # -------------------------------------------------------------------------- +# pylint: skip-file from azure.core.exceptions import map_error @@ -91,7 +92,10 @@ async def update(self, queue_message, pop_receipt, visibilitytimeout, timeout=No header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str') # Construct body - body_content = self._serialize.body(queue_message, 'QueueMessage') + if queue_message is not None: + body_content = self._serialize.body(queue_message, 'QueueMessage') + else: + body_content = None # Construct and send request request = self._client.put(url, query_parameters, header_parameters, body_content) diff --git a/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/aio/operations_async/_messages_operations_async.py b/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/aio/operations_async/_messages_operations_async.py index 2015eeeafca5..30f14a557bc4 100644 --- a/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/aio/operations_async/_messages_operations_async.py +++ b/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/aio/operations_async/_messages_operations_async.py @@ -4,6 +4,7 @@ # Changes may cause incorrect behavior and will be lost if the code is # regenerated. # -------------------------------------------------------------------------- +# pylint: skip-file from azure.core.exceptions import map_error diff --git a/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/aio/operations_async/_queue_operations_async.py b/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/aio/operations_async/_queue_operations_async.py index 39b0d513790f..559e1f3cfe82 100644 --- a/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/aio/operations_async/_queue_operations_async.py +++ b/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/aio/operations_async/_queue_operations_async.py @@ -4,6 +4,7 @@ # Changes may cause incorrect behavior and will be lost if the code is # regenerated. # -------------------------------------------------------------------------- +# pylint: skip-file from azure.core.exceptions import map_error @@ -402,8 +403,10 @@ async def set_access_policy(self, queue_acl=None, timeout=None, request_id=None, header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str') # Construct body + serialization_ctxt = {'xml': {'name': 'SignedIdentifiers', 'itemsName': 'SignedIdentifier', 'wrapped': True}} if queue_acl is not None: - body_content = self._serialize.body(queue_acl, '[SignedIdentifier]') + body_content = self._serialize.serialize_iter(queue_acl, 'SignedIdentifier', + serialization_ctxt=serialization_ctxt) else: body_content = None diff --git a/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/aio/operations_async/_service_operations_async.py b/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/aio/operations_async/_service_operations_async.py index ed44edf46203..0a064c1f76f5 100644 --- a/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/aio/operations_async/_service_operations_async.py +++ b/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/aio/operations_async/_service_operations_async.py @@ -4,6 +4,7 @@ # Changes may cause incorrect behavior and will be lost if the code is # regenerated. # -------------------------------------------------------------------------- +# pylint: skip-file from azure.core.exceptions import map_error diff --git a/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/models/__init__.py b/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/models/__init__.py index bc619f432df3..27d8257fca7e 100644 --- a/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/models/__init__.py +++ b/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/models/__init__.py @@ -4,6 +4,7 @@ # Changes may cause incorrect behavior and will be lost if the code is # regenerated. # -------------------------------------------------------------------------- +# pylint: skip-file try: from ._models_py3 import AccessPolicy diff --git a/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/models/_azure_queue_storage_enums.py b/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/models/_azure_queue_storage_enums.py index 77fc04321e43..9921d66676e5 100644 --- a/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/models/_azure_queue_storage_enums.py +++ b/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/models/_azure_queue_storage_enums.py @@ -4,6 +4,7 @@ # Changes may cause incorrect behavior and will be lost if the code is # regenerated. # -------------------------------------------------------------------------- +# pylint: skip-file from enum import Enum diff --git a/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/models/_models.py b/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/models/_models.py index c8b07db700e3..1ecda4acd2cc 100644 --- a/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/models/_models.py +++ b/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/models/_models.py @@ -4,6 +4,7 @@ # Changes may cause incorrect behavior and will be lost if the code is # regenerated. # -------------------------------------------------------------------------- +# pylint: skip-file from msrest.serialization import Model from azure.core import HttpResponseError @@ -29,9 +30,11 @@ class AccessPolicy(Model): } _attribute_map = { - 'start': {'key': 'Start', 'type': 'iso-8601'}, - 'expiry': {'key': 'Expiry', 'type': 'iso-8601'}, - 'permission': {'key': 'Permission', 'type': 'str'}, + 'start': {'key': 'Start', 'type': 'str', 'xml': {'name': 'Start'}}, + 'expiry': {'key': 'Expiry', 'type': 'str', 'xml': {'name': 'Expiry'}}, + 'permission': {'key': 'Permission', 'type': 'str', 'xml': {'name': 'Permission'}}, + } + _xml_map = { } def __init__(self, **kwargs): @@ -81,11 +84,13 @@ class CorsRule(Model): } _attribute_map = { - 'allowed_origins': {'key': 'AllowedOrigins', 'type': 'str'}, - 'allowed_methods': {'key': 'AllowedMethods', 'type': 'str'}, - 'allowed_headers': {'key': 'AllowedHeaders', 'type': 'str'}, - 'exposed_headers': {'key': 'ExposedHeaders', 'type': 'str'}, - 'max_age_in_seconds': {'key': 'MaxAgeInSeconds', 'type': 'int'}, + 'allowed_origins': {'key': 'AllowedOrigins', 'type': 'str', 'xml': {'name': 'AllowedOrigins'}}, + 'allowed_methods': {'key': 'AllowedMethods', 'type': 'str', 'xml': {'name': 'AllowedMethods'}}, + 'allowed_headers': {'key': 'AllowedHeaders', 'type': 'str', 'xml': {'name': 'AllowedHeaders'}}, + 'exposed_headers': {'key': 'ExposedHeaders', 'type': 'str', 'xml': {'name': 'ExposedHeaders'}}, + 'max_age_in_seconds': {'key': 'MaxAgeInSeconds', 'type': 'int', 'xml': {'name': 'MaxAgeInSeconds'}}, + } + _xml_map = { } def __init__(self, **kwargs): @@ -136,13 +141,17 @@ class DequeuedMessageItem(Model): } _attribute_map = { - 'message_id': {'key': 'MessageId', 'type': 'str'}, - 'insertion_time': {'key': 'InsertionTime', 'type': 'rfc-1123'}, - 'expiration_time': {'key': 'ExpirationTime', 'type': 'rfc-1123'}, - 'pop_receipt': {'key': 'PopReceipt', 'type': 'str'}, - 'time_next_visible': {'key': 'TimeNextVisible', 'type': 'rfc-1123'}, - 'dequeue_count': {'key': 'DequeueCount', 'type': 'long'}, - 'message_text': {'key': 'MessageText', 'type': 'str'}, + 'message_id': {'key': 'MessageId', 'type': 'str', 'xml': {'name': 'MessageId'}}, + 'insertion_time': {'key': 'InsertionTime', 'type': 'rfc-1123', 'xml': {'name': 'InsertionTime'}}, + 'expiration_time': {'key': 'ExpirationTime', 'type': 'rfc-1123', 'xml': {'name': 'ExpirationTime'}}, + 'pop_receipt': {'key': 'PopReceipt', 'type': 'str', 'xml': {'name': 'PopReceipt'}}, + 'time_next_visible': {'key': 'TimeNextVisible', 'type': 'rfc-1123', 'xml': {'name': 'TimeNextVisible'}}, + 'dequeue_count': {'key': 'DequeueCount', 'type': 'long', 'xml': {'name': 'DequeueCount'}}, + 'message_text': {'key': 'MessageText', 'type': 'str', 'xml': {'name': 'MessageText'}}, + } + + _xml_map = { + 'name': 'QueueMessage' } def __init__(self, **kwargs): @@ -188,11 +197,15 @@ class EnqueuedMessage(Model): } _attribute_map = { - 'message_id': {'key': 'MessageId', 'type': 'str'}, - 'insertion_time': {'key': 'InsertionTime', 'type': 'rfc-1123'}, - 'expiration_time': {'key': 'ExpirationTime', 'type': 'rfc-1123'}, - 'pop_receipt': {'key': 'PopReceipt', 'type': 'str'}, - 'time_next_visible': {'key': 'TimeNextVisible', 'type': 'rfc-1123'}, + 'message_id': {'key': 'MessageId', 'type': 'str', 'xml': {'name': 'MessageId'}}, + 'insertion_time': {'key': 'InsertionTime', 'type': 'rfc-1123', 'xml': {'name': 'InsertionTime'}}, + 'expiration_time': {'key': 'ExpirationTime', 'type': 'rfc-1123', 'xml': {'name': 'ExpirationTime'}}, + 'pop_receipt': {'key': 'PopReceipt', 'type': 'str', 'xml': {'name': 'PopReceipt'}}, + 'time_next_visible': {'key': 'TimeNextVisible', 'type': 'rfc-1123', 'xml': {'name': 'TimeNextVisible'}}, + } + + _xml_map = { + 'name': 'QueueMessage' } def __init__(self, **kwargs): @@ -225,8 +238,10 @@ class GeoReplication(Model): } _attribute_map = { - 'status': {'key': 'Status', 'type': 'str'}, - 'last_sync_time': {'key': 'LastSyncTime', 'type': 'rfc-1123'}, + 'status': {'key': 'Status', 'type': 'str', 'xml': {'name': 'Status'}}, + 'last_sync_time': {'key': 'LastSyncTime', 'type': 'rfc-1123', 'xml': {'name': 'LastSyncTime'}}, + } + _xml_map = { } def __init__(self, **kwargs): @@ -262,12 +277,12 @@ class ListQueuesSegmentResponse(Model): } _attribute_map = { - 'service_endpoint': {'key': 'ServiceEndpoint', 'type': 'str'}, - 'prefix': {'key': 'Prefix', 'type': 'str'}, - 'marker': {'key': 'Marker', 'type': 'str'}, - 'max_results': {'key': 'MaxResults', 'type': 'int'}, - 'queue_items': {'key': 'QueueItems', 'type': '[QueueItem]'}, - 'next_marker': {'key': 'NextMarker', 'type': 'str'}, + 'service_endpoint': {'key': 'ServiceEndpoint', 'type': 'str', 'xml': {'name': 'ServiceEndpoint', 'attr': True}}, + 'prefix': {'key': 'Prefix', 'type': 'str', 'xml': {'name': 'Prefix'}}, + 'marker': {'key': 'Marker', 'type': 'str', 'xml': {'name': 'Marker'}}, + 'max_results': {'key': 'MaxResults', 'type': 'int', 'xml': {'name': 'MaxResults'}}, + 'queue_items': {'key': 'QueueItems', 'type': '[QueueItem]', 'xml': {'name': 'Queues', 'itemsName': 'Queues', 'wrapped': True}}, + 'next_marker': {'key': 'NextMarker', 'type': 'str', 'xml': {'name': 'NextMarker'}}, } def __init__(self, **kwargs): @@ -309,11 +324,13 @@ class Logging(Model): } _attribute_map = { - 'version': {'key': 'Version', 'type': 'str'}, - 'delete': {'key': 'Delete', 'type': 'bool'}, - 'read': {'key': 'Read', 'type': 'bool'}, - 'write': {'key': 'Write', 'type': 'bool'}, - 'retention_policy': {'key': 'RetentionPolicy', 'type': 'RetentionPolicy'}, + 'version': {'key': 'Version', 'type': 'str', 'xml': {'name': 'Version'}}, + 'delete': {'key': 'Delete', 'type': 'bool', 'xml': {'name': 'Delete'}}, + 'read': {'key': 'Read', 'type': 'bool', 'xml': {'name': 'Read'}}, + 'write': {'key': 'Write', 'type': 'bool', 'xml': {'name': 'Write'}}, + 'retention_policy': {'key': 'RetentionPolicy', 'type': 'RetentionPolicy', 'xml': {'name': 'RetentionPolicy'}}, + } + _xml_map = { } def __init__(self, **kwargs): @@ -347,10 +364,12 @@ class Metrics(Model): } _attribute_map = { - 'version': {'key': 'Version', 'type': 'str'}, - 'enabled': {'key': 'Enabled', 'type': 'bool'}, - 'include_ap_is': {'key': 'IncludeAPIs', 'type': 'bool'}, - 'retention_policy': {'key': 'RetentionPolicy', 'type': 'RetentionPolicy'}, + 'version': {'key': 'Version', 'type': 'str', 'xml': {'name': 'Version'}}, + 'enabled': {'key': 'Enabled', 'type': 'bool', 'xml': {'name': 'Enabled'}}, + 'include_apis': {'key': 'IncludeAPIs', 'type': 'bool', 'xml': {'name': 'IncludeAPIs'}}, + 'retention_policy': {'key': 'RetentionPolicy', 'type': 'RetentionPolicy', 'xml': {'name': 'RetentionPolicy'}}, + } + _xml_map = { } def __init__(self, **kwargs): @@ -391,11 +410,15 @@ class PeekedMessageItem(Model): } _attribute_map = { - 'message_id': {'key': 'MessageId', 'type': 'str'}, - 'insertion_time': {'key': 'InsertionTime', 'type': 'rfc-1123'}, - 'expiration_time': {'key': 'ExpirationTime', 'type': 'rfc-1123'}, - 'dequeue_count': {'key': 'DequeueCount', 'type': 'long'}, - 'message_text': {'key': 'MessageText', 'type': 'str'}, + 'message_id': {'key': 'MessageId', 'type': 'str', 'xml': {'name': 'MessageId'}}, + 'insertion_time': {'key': 'InsertionTime', 'type': 'rfc-1123', 'xml': {'name': 'InsertionTime'}}, + 'expiration_time': {'key': 'ExpirationTime', 'type': 'rfc-1123', 'xml': {'name': 'ExpirationTime'}}, + 'dequeue_count': {'key': 'DequeueCount', 'type': 'long', 'xml': {'name': 'DequeueCount'}}, + 'message_text': {'key': 'MessageText', 'type': 'str', 'xml': {'name': 'MessageText'}}, + } + + _xml_map = { + 'name': 'QueueMessage' } def __init__(self, **kwargs): @@ -423,8 +446,8 @@ class QueueItem(Model): } _attribute_map = { - 'name': {'key': 'Name', 'type': 'str'}, - 'metadata': {'key': 'Metadata', 'type': '{str}'}, + 'name': {'key': 'Name', 'type': 'str', 'xml': {'name': 'Name'}}, + 'metadata': {'key': 'Metadata', 'type': '{str}', 'xml': {'name': 'Metadata'}}, } def __init__(self, **kwargs): @@ -447,7 +470,11 @@ class QueueMessage(Model): } _attribute_map = { - 'message_text': {'key': 'MessageText', 'type': 'str'}, + 'message_text': {'key': 'MessageText', 'type': 'str', 'xml': {'name': 'MessageText'}}, + } + + _xml_map = { + 'name': 'QueueMessage' } def __init__(self, **kwargs): @@ -475,8 +502,10 @@ class RetentionPolicy(Model): } _attribute_map = { - 'enabled': {'key': 'Enabled', 'type': 'bool'}, - 'days': {'key': 'Days', 'type': 'int'}, + 'enabled': {'key': 'Enabled', 'type': 'bool', 'xml': {'name': 'Enabled'}}, + 'days': {'key': 'Days', 'type': 'int', 'xml': {'name': 'Days'}}, + } + _xml_map = { } def __init__(self, **kwargs): @@ -502,8 +531,10 @@ class SignedIdentifier(Model): } _attribute_map = { - 'id': {'key': 'Id', 'type': 'str'}, - 'access_policy': {'key': 'AccessPolicy', 'type': 'AccessPolicy'}, + 'id': {'key': 'Id', 'type': 'str', 'xml': {'name': 'Id'}}, + 'access_policy': {'key': 'AccessPolicy', 'type': 'AccessPolicy', 'xml': {'name': 'AccessPolicy'}}, + } + _xml_map = { } def __init__(self, **kwargs): @@ -520,7 +551,9 @@ class StorageError(Model): """ _attribute_map = { - 'message': {'key': 'Message', 'type': 'str'}, + 'message': {'key': 'Message', 'type': 'str', 'xml': {'name': 'Message'}}, + } + _xml_map = { } def __init__(self, **kwargs): @@ -560,10 +593,15 @@ class StorageServiceProperties(Model): """ _attribute_map = { - 'logging': {'key': 'Logging', 'type': 'Logging'}, - 'hour_metrics': {'key': 'HourMetrics', 'type': 'Metrics'}, - 'minute_metrics': {'key': 'MinuteMetrics', 'type': 'Metrics'}, - 'cors': {'key': 'Cors', 'type': '[CorsRule]'}, + 'logging': {'key': 'Logging', 'type': 'Logging', 'xml': {'name': 'Logging'}}, + 'hour_metrics': {'key': 'HourMetrics', 'type': 'Metrics', 'xml': {'name': 'HourMetrics'}}, + 'minute_metrics': {'key': 'MinuteMetrics', 'type': 'Metrics', 'xml': {'name': 'MinuteMetrics'}}, + 'cors': {'key': 'Cors', 'type': '[CorsRule]', 'xml': {'name': 'Cors', 'itemsName': 'CorsRule', 'wrapped': True}}, + 'default_service_version': {'key': 'DefaultServiceVersion', 'type': 'str', 'xml': {'name': 'DefaultServiceVersion'}}, + 'delete_retention_policy': {'key': 'DeleteRetentionPolicy', 'type': 'RetentionPolicy', 'xml': {'name': 'DeleteRetentionPolicy'}}, + 'static_website': {'key': 'StaticWebsite', 'type': 'StaticWebsite', 'xml': {'name': 'StaticWebsite'}}, + } + _xml_map = { } def __init__(self, **kwargs): @@ -583,7 +621,9 @@ class StorageServiceStats(Model): """ _attribute_map = { - 'geo_replication': {'key': 'GeoReplication', 'type': 'GeoReplication'}, + 'geo_replication': {'key': 'GeoReplication', 'type': 'GeoReplication', 'xml': {'name': 'GeoReplication'}}, + } + _xml_map = { } def __init__(self, **kwargs): diff --git a/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/models/_models_py3.py b/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/models/_models_py3.py index aee7f6a2efbe..f92cc55d2457 100644 --- a/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/models/_models_py3.py +++ b/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/models/_models_py3.py @@ -4,6 +4,7 @@ # Changes may cause incorrect behavior and will be lost if the code is # regenerated. # -------------------------------------------------------------------------- +# pylint: skip-file from msrest.serialization import Model from azure.core import HttpResponseError @@ -29,9 +30,11 @@ class AccessPolicy(Model): } _attribute_map = { - 'start': {'key': 'Start', 'type': 'iso-8601'}, - 'expiry': {'key': 'Expiry', 'type': 'iso-8601'}, - 'permission': {'key': 'Permission', 'type': 'str'}, + 'start': {'key': 'Start', 'type': 'str', 'xml': {'name': 'Start'}}, + 'expiry': {'key': 'Expiry', 'type': 'str', 'xml': {'name': 'Expiry'}}, + 'permission': {'key': 'Permission', 'type': 'str', 'xml': {'name': 'Permission'}}, + } + _xml_map = { } def __init__(self, *, start, expiry, permission: str, **kwargs) -> None: @@ -81,11 +84,13 @@ class CorsRule(Model): } _attribute_map = { - 'allowed_origins': {'key': 'AllowedOrigins', 'type': 'str'}, - 'allowed_methods': {'key': 'AllowedMethods', 'type': 'str'}, - 'allowed_headers': {'key': 'AllowedHeaders', 'type': 'str'}, - 'exposed_headers': {'key': 'ExposedHeaders', 'type': 'str'}, - 'max_age_in_seconds': {'key': 'MaxAgeInSeconds', 'type': 'int'}, + 'allowed_origins': {'key': 'AllowedOrigins', 'type': 'str', 'xml': {'name': 'AllowedOrigins'}}, + 'allowed_methods': {'key': 'AllowedMethods', 'type': 'str', 'xml': {'name': 'AllowedMethods'}}, + 'allowed_headers': {'key': 'AllowedHeaders', 'type': 'str', 'xml': {'name': 'AllowedHeaders'}}, + 'exposed_headers': {'key': 'ExposedHeaders', 'type': 'str', 'xml': {'name': 'ExposedHeaders'}}, + 'max_age_in_seconds': {'key': 'MaxAgeInSeconds', 'type': 'int', 'xml': {'name': 'MaxAgeInSeconds'}}, + } + _xml_map = { } def __init__(self, *, allowed_origins: str, allowed_methods: str, allowed_headers: str, exposed_headers: str, max_age_in_seconds: int, **kwargs) -> None: @@ -136,13 +141,17 @@ class DequeuedMessageItem(Model): } _attribute_map = { - 'message_id': {'key': 'MessageId', 'type': 'str'}, - 'insertion_time': {'key': 'InsertionTime', 'type': 'rfc-1123'}, - 'expiration_time': {'key': 'ExpirationTime', 'type': 'rfc-1123'}, - 'pop_receipt': {'key': 'PopReceipt', 'type': 'str'}, - 'time_next_visible': {'key': 'TimeNextVisible', 'type': 'rfc-1123'}, - 'dequeue_count': {'key': 'DequeueCount', 'type': 'long'}, - 'message_text': {'key': 'MessageText', 'type': 'str'}, + 'message_id': {'key': 'MessageId', 'type': 'str', 'xml': {'name': 'MessageId'}}, + 'insertion_time': {'key': 'InsertionTime', 'type': 'rfc-1123', 'xml': {'name': 'InsertionTime'}}, + 'expiration_time': {'key': 'ExpirationTime', 'type': 'rfc-1123', 'xml': {'name': 'ExpirationTime'}}, + 'pop_receipt': {'key': 'PopReceipt', 'type': 'str', 'xml': {'name': 'PopReceipt'}}, + 'time_next_visible': {'key': 'TimeNextVisible', 'type': 'rfc-1123', 'xml': {'name': 'TimeNextVisible'}}, + 'dequeue_count': {'key': 'DequeueCount', 'type': 'long', 'xml': {'name': 'DequeueCount'}}, + 'message_text': {'key': 'MessageText', 'type': 'str', 'xml': {'name': 'MessageText'}}, + } + + _xml_map = { + 'name': 'QueueMessage' } def __init__(self, *, message_id: str, insertion_time, expiration_time, pop_receipt: str, time_next_visible, dequeue_count: int, message_text: str, **kwargs) -> None: @@ -188,11 +197,15 @@ class EnqueuedMessage(Model): } _attribute_map = { - 'message_id': {'key': 'MessageId', 'type': 'str'}, - 'insertion_time': {'key': 'InsertionTime', 'type': 'rfc-1123'}, - 'expiration_time': {'key': 'ExpirationTime', 'type': 'rfc-1123'}, - 'pop_receipt': {'key': 'PopReceipt', 'type': 'str'}, - 'time_next_visible': {'key': 'TimeNextVisible', 'type': 'rfc-1123'}, + 'message_id': {'key': 'MessageId', 'type': 'str', 'xml': {'name': 'MessageId'}}, + 'insertion_time': {'key': 'InsertionTime', 'type': 'rfc-1123', 'xml': {'name': 'InsertionTime'}}, + 'expiration_time': {'key': 'ExpirationTime', 'type': 'rfc-1123', 'xml': {'name': 'ExpirationTime'}}, + 'pop_receipt': {'key': 'PopReceipt', 'type': 'str', 'xml': {'name': 'PopReceipt'}}, + 'time_next_visible': {'key': 'TimeNextVisible', 'type': 'rfc-1123', 'xml': {'name': 'TimeNextVisible'}}, + } + + _xml_map = { + 'name': 'QueueMessage' } def __init__(self, *, message_id: str, insertion_time, expiration_time, pop_receipt: str, time_next_visible, **kwargs) -> None: @@ -225,8 +238,10 @@ class GeoReplication(Model): } _attribute_map = { - 'status': {'key': 'Status', 'type': 'str'}, - 'last_sync_time': {'key': 'LastSyncTime', 'type': 'rfc-1123'}, + 'status': {'key': 'Status', 'type': 'str', 'xml': {'name': 'Status'}}, + 'last_sync_time': {'key': 'LastSyncTime', 'type': 'rfc-1123', 'xml': {'name': 'LastSyncTime'}}, + } + _xml_map = { } def __init__(self, *, status, last_sync_time, **kwargs) -> None: @@ -262,12 +277,12 @@ class ListQueuesSegmentResponse(Model): } _attribute_map = { - 'service_endpoint': {'key': 'ServiceEndpoint', 'type': 'str'}, - 'prefix': {'key': 'Prefix', 'type': 'str'}, - 'marker': {'key': 'Marker', 'type': 'str'}, - 'max_results': {'key': 'MaxResults', 'type': 'int'}, - 'queue_items': {'key': 'QueueItems', 'type': '[QueueItem]'}, - 'next_marker': {'key': 'NextMarker', 'type': 'str'}, + 'service_endpoint': {'key': 'ServiceEndpoint', 'type': 'str', 'xml': {'name': 'ServiceEndpoint', 'attr': True}}, + 'prefix': {'key': 'Prefix', 'type': 'str', 'xml': {'name': 'Prefix'}}, + 'marker': {'key': 'Marker', 'type': 'str', 'xml': {'name': 'Marker'}}, + 'max_results': {'key': 'MaxResults', 'type': 'int', 'xml': {'name': 'MaxResults'}}, + 'queue_items': {'key': 'QueueItems', 'type': '[QueueItem]', 'xml': {'name': 'Queues', 'itemsName': 'Queues', 'wrapped': True}}, + 'next_marker': {'key': 'NextMarker', 'type': 'str', 'xml': {'name': 'NextMarker'}}, } def __init__(self, *, service_endpoint: str, prefix: str, max_results: int, next_marker: str, marker: str=None, queue_items=None, **kwargs) -> None: @@ -309,11 +324,13 @@ class Logging(Model): } _attribute_map = { - 'version': {'key': 'Version', 'type': 'str'}, - 'delete': {'key': 'Delete', 'type': 'bool'}, - 'read': {'key': 'Read', 'type': 'bool'}, - 'write': {'key': 'Write', 'type': 'bool'}, - 'retention_policy': {'key': 'RetentionPolicy', 'type': 'RetentionPolicy'}, + 'version': {'key': 'Version', 'type': 'str', 'xml': {'name': 'Version'}}, + 'delete': {'key': 'Delete', 'type': 'bool', 'xml': {'name': 'Delete'}}, + 'read': {'key': 'Read', 'type': 'bool', 'xml': {'name': 'Read'}}, + 'write': {'key': 'Write', 'type': 'bool', 'xml': {'name': 'Write'}}, + 'retention_policy': {'key': 'RetentionPolicy', 'type': 'RetentionPolicy', 'xml': {'name': 'RetentionPolicy'}}, + } + _xml_map = { } def __init__(self, *, version: str, delete: bool, read: bool, write: bool, retention_policy, **kwargs) -> None: @@ -347,10 +364,12 @@ class Metrics(Model): } _attribute_map = { - 'version': {'key': 'Version', 'type': 'str'}, - 'enabled': {'key': 'Enabled', 'type': 'bool'}, - 'include_ap_is': {'key': 'IncludeAPIs', 'type': 'bool'}, - 'retention_policy': {'key': 'RetentionPolicy', 'type': 'RetentionPolicy'}, + 'version': {'key': 'Version', 'type': 'str', 'xml': {'name': 'Version'}}, + 'enabled': {'key': 'Enabled', 'type': 'bool', 'xml': {'name': 'Enabled'}}, + 'include_apis': {'key': 'IncludeAPIs', 'type': 'bool', 'xml': {'name': 'IncludeAPIs'}}, + 'retention_policy': {'key': 'RetentionPolicy', 'type': 'RetentionPolicy', 'xml': {'name': 'RetentionPolicy'}}, + } + _xml_map = { } def __init__(self, *, enabled: bool, version: str=None, include_ap_is: bool=None, retention_policy=None, **kwargs) -> None: @@ -391,11 +410,15 @@ class PeekedMessageItem(Model): } _attribute_map = { - 'message_id': {'key': 'MessageId', 'type': 'str'}, - 'insertion_time': {'key': 'InsertionTime', 'type': 'rfc-1123'}, - 'expiration_time': {'key': 'ExpirationTime', 'type': 'rfc-1123'}, - 'dequeue_count': {'key': 'DequeueCount', 'type': 'long'}, - 'message_text': {'key': 'MessageText', 'type': 'str'}, + 'message_id': {'key': 'MessageId', 'type': 'str', 'xml': {'name': 'MessageId'}}, + 'insertion_time': {'key': 'InsertionTime', 'type': 'rfc-1123', 'xml': {'name': 'InsertionTime'}}, + 'expiration_time': {'key': 'ExpirationTime', 'type': 'rfc-1123', 'xml': {'name': 'ExpirationTime'}}, + 'dequeue_count': {'key': 'DequeueCount', 'type': 'long', 'xml': {'name': 'DequeueCount'}}, + 'message_text': {'key': 'MessageText', 'type': 'str', 'xml': {'name': 'MessageText'}}, + } + + _xml_map = { + 'name': 'QueueMessage' } def __init__(self, *, message_id: str, insertion_time, expiration_time, dequeue_count: int, message_text: str, **kwargs) -> None: @@ -423,8 +446,8 @@ class QueueItem(Model): } _attribute_map = { - 'name': {'key': 'Name', 'type': 'str'}, - 'metadata': {'key': 'Metadata', 'type': '{str}'}, + 'name': {'key': 'Name', 'type': 'str', 'xml': {'name': 'Name'}}, + 'metadata': {'key': 'Metadata', 'type': '{str}', 'xml': {'name': 'Metadata'}}, } def __init__(self, *, name: str, metadata=None, **kwargs) -> None: @@ -447,7 +470,11 @@ class QueueMessage(Model): } _attribute_map = { - 'message_text': {'key': 'MessageText', 'type': 'str'}, + 'message_text': {'key': 'MessageText', 'type': 'str', 'xml': {'name': 'MessageText'}}, + } + + _xml_map = { + 'name': 'QueueMessage' } def __init__(self, *, message_text: str, **kwargs) -> None: @@ -475,8 +502,10 @@ class RetentionPolicy(Model): } _attribute_map = { - 'enabled': {'key': 'Enabled', 'type': 'bool'}, - 'days': {'key': 'Days', 'type': 'int'}, + 'enabled': {'key': 'Enabled', 'type': 'bool', 'xml': {'name': 'Enabled'}}, + 'days': {'key': 'Days', 'type': 'int', 'xml': {'name': 'Days'}}, + } + _xml_map = { } def __init__(self, *, enabled: bool, days: int=None, **kwargs) -> None: @@ -502,8 +531,10 @@ class SignedIdentifier(Model): } _attribute_map = { - 'id': {'key': 'Id', 'type': 'str'}, - 'access_policy': {'key': 'AccessPolicy', 'type': 'AccessPolicy'}, + 'id': {'key': 'Id', 'type': 'str', 'xml': {'name': 'Id'}}, + 'access_policy': {'key': 'AccessPolicy', 'type': 'AccessPolicy', 'xml': {'name': 'AccessPolicy'}}, + } + _xml_map = { } def __init__(self, *, id: str, access_policy, **kwargs) -> None: @@ -520,7 +551,9 @@ class StorageError(Model): """ _attribute_map = { - 'message': {'key': 'Message', 'type': 'str'}, + 'message': {'key': 'Message', 'type': 'str', 'xml': {'name': 'Message'}}, + } + _xml_map = { } def __init__(self, *, message: str=None, **kwargs) -> None: @@ -560,10 +593,12 @@ class StorageServiceProperties(Model): """ _attribute_map = { - 'logging': {'key': 'Logging', 'type': 'Logging'}, - 'hour_metrics': {'key': 'HourMetrics', 'type': 'Metrics'}, - 'minute_metrics': {'key': 'MinuteMetrics', 'type': 'Metrics'}, - 'cors': {'key': 'Cors', 'type': '[CorsRule]'}, + 'logging': {'key': 'Logging', 'type': 'Logging', 'xml': {'name': 'Logging'}}, + 'hour_metrics': {'key': 'HourMetrics', 'type': 'Metrics', 'xml': {'name': 'HourMetrics'}}, + 'minute_metrics': {'key': 'MinuteMetrics', 'type': 'Metrics', 'xml': {'name': 'MinuteMetrics'}}, + 'cors': {'key': 'Cors', 'type': '[CorsRule]', 'xml': {'name': 'Cors', 'itemsName': 'CorsRule', 'wrapped': True}}, + } + _xml_map = { } def __init__(self, *, logging=None, hour_metrics=None, minute_metrics=None, cors=None, **kwargs) -> None: @@ -583,7 +618,9 @@ class StorageServiceStats(Model): """ _attribute_map = { - 'geo_replication': {'key': 'GeoReplication', 'type': 'GeoReplication'}, + 'geo_replication': {'key': 'GeoReplication', 'type': 'GeoReplication', 'xml': {'name': 'GeoReplication'}}, + } + _xml_map = { } def __init__(self, *, geo_replication=None, **kwargs) -> None: diff --git a/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/operations/__init__.py b/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/operations/__init__.py index b003039c5ca4..454a7377fa00 100644 --- a/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/operations/__init__.py +++ b/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/operations/__init__.py @@ -4,6 +4,7 @@ # Changes may cause incorrect behavior and will be lost if the code is # regenerated. # -------------------------------------------------------------------------- +# pylint: skip-file from ._service_operations import ServiceOperations from ._queue_operations import QueueOperations diff --git a/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/operations/_message_id_operations.py b/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/operations/_message_id_operations.py index 83db4eb76133..0de068c5bc5d 100644 --- a/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/operations/_message_id_operations.py +++ b/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/operations/_message_id_operations.py @@ -4,6 +4,7 @@ # Changes may cause incorrect behavior and will be lost if the code is # regenerated. # -------------------------------------------------------------------------- +# pylint: skip-file from azure.core.exceptions import map_error @@ -91,7 +92,10 @@ def update(self, queue_message, pop_receipt, visibilitytimeout=None, timeout=Non header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str') # Construct body - body_content = self._serialize.body(queue_message, 'QueueMessage') + if queue_message is not None: + body_content = self._serialize.body(queue_message, 'QueueMessage') + else: + body_content = None # Construct and send request request = self._client.put(url, query_parameters, header_parameters, body_content) diff --git a/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/operations/_messages_operations.py b/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/operations/_messages_operations.py index 77c87c15dda4..a2c6a2a4632a 100644 --- a/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/operations/_messages_operations.py +++ b/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/operations/_messages_operations.py @@ -4,6 +4,7 @@ # Changes may cause incorrect behavior and will be lost if the code is # regenerated. # -------------------------------------------------------------------------- +# pylint: skip-file from azure.core.exceptions import map_error diff --git a/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/operations/_queue_operations.py b/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/operations/_queue_operations.py index ea16fe40e987..228caef49c45 100644 --- a/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/operations/_queue_operations.py +++ b/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/operations/_queue_operations.py @@ -4,6 +4,7 @@ # Changes may cause incorrect behavior and will be lost if the code is # regenerated. # -------------------------------------------------------------------------- +# pylint: skip-file from azure.core.exceptions import map_error @@ -402,8 +403,10 @@ def set_access_policy(self, queue_acl=None, timeout=None, request_id=None, cls=N header_parameters['x-ms-client-request-id'] = self._serialize.header("request_id", request_id, 'str') # Construct body + serialization_ctxt = {'xml': {'name': 'SignedIdentifiers', 'itemsName': 'SignedIdentifier', 'wrapped': True}} if queue_acl is not None: - body_content = self._serialize.body(queue_acl, '[SignedIdentifier]') + body_content = self._serialize.serialize_iter(queue_acl, 'SignedIdentifier', + serialization_ctxt=serialization_ctxt) else: body_content = None diff --git a/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/operations/_service_operations.py b/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/operations/_service_operations.py index 29e562c0bf07..a0716a82bc2c 100644 --- a/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/operations/_service_operations.py +++ b/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/operations/_service_operations.py @@ -4,6 +4,7 @@ # Changes may cause incorrect behavior and will be lost if the code is # regenerated. # -------------------------------------------------------------------------- +# pylint: skip-file from azure.core.exceptions import map_error diff --git a/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/version.py b/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/version.py index 0d63dc7c8f48..6b9a91fe2a5d 100644 --- a/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/version.py +++ b/sdk/storage/azure-storage-queue/azure/storage/queue/_generated/version.py @@ -4,6 +4,7 @@ # Changes may cause incorrect behavior and will be lost if the code is # regenerated. # -------------------------------------------------------------------------- +# pylint: skip-file VERSION = "2018-03-28" diff --git a/sdk/storage/azure-storage-queue/azure/storage/queue/_policies.py b/sdk/storage/azure-storage-queue/azure/storage/queue/_policies.py deleted file mode 100644 index 8eaaf0a764ff..000000000000 --- a/sdk/storage/azure-storage-queue/azure/storage/queue/_policies.py +++ /dev/null @@ -1,110 +0,0 @@ -# ------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for -# license information. -# -------------------------------------------------------------------------- - -import base64 -import hashlib -import sys -from time import time -from io import SEEK_SET -import logging -from wsgiref.handlers import format_date_time -try: - from urllib.parse import urlparse -except ImportError: - from urlparse import urlparse - -from azure.core.pipeline.policies import HeadersPolicy, SansIOHTTPPolicy -from azure.core.exceptions import AzureError - -try: - _unicode_type = unicode -except NameError: - _unicode_type = str - - -logger = logging.getLogger(__name__) - - -class StorageQueueSettings(object): - - def __init__(self, **kwargs): - pass - - -class StorageHeadersPolicy(HeadersPolicy): - - def on_request(self, request): - # type: (PipelineRequest, Any) -> None - super(StorageHeadersPolicy, self).on_request(request) - current_time = format_date_time(time()) - request.http_request.headers['x-ms-date'] = current_time - - -class StorageSecondaryAccount(SansIOHTTPPolicy): - - def on_request(self, request): - # type: (PipelineRequest, Any) -> None - use_secondary = request.context.options.pop('secondary_storage', False) - if use_secondary: - parsed_url = urlparse(request.http_request.url) - account = parsed_url.hostname.split(".queue.core.")[0] - secondary_account = account if account.endswith('-secondary') else account + '-secondary' - request.http_request.url = request.http_request.url.replace(account, secondary_account, 1) - - -class StorageContentValidation(SansIOHTTPPolicy): - """A simple policy that sends the given headers - with the request. - This will overwrite any headers already defined in the request. - """ - header_name = 'Content-MD5' - - def encode_base64(self, data): - if isinstance(data, _unicode_type): - data = data.encode('utf-8') - encoded = base64.b64encode(data) - return encoded.decode('utf-8') - - def get_content_md5(self, data): - md5 = hashlib.md5() - if isinstance(data, bytes): - md5.update(data) - elif hasattr(data, 'read'): - pos = 0 - try: - pos = data.tell() - except: - pass - for chunk in iter(lambda: data.read(4096), b""): - md5.update(chunk) - try: - data.seek(pos, SEEK_SET) - except (AttributeError, IOError): - raise ValueError("Data should be bytes or a seekable file-like object.") - else: - raise ValueError("Data should be bytes or a seekable file-like object.") - - return self.encode_base64(md5.digest()) - - def on_request(self, request): - # type: (PipelineRequest, Any) -> None - validate_content = request.context.options.pop('validate_content', False) - if validate_content and request.http_request.method != 'GET': - computed_md5 = self.get_content_md5(request.http_request.data) - request.http_request.headers[self.header_name] = computed_md5 - request.context['validate_content_md5'] = computed_md5 - request.context['validate_content'] = validate_content - - def on_response(self, request, response): - if response.context.get('validate_content', False) and response.http_response.headers.get('content-md5'): - computed_md5 = request.context.get('validate_content_md5') or \ - self.get_content_md5(response.http_response.body()) - if response.http_response.headers['content-md5'] != computed_md5: - raise AzureError( - 'MD5 mismatch. Expected value is \'{0}\', computed value is \'{1}\'.'.format( - response.http_response.headers['content-md5'],computed_md5), - response=response.http_response - ) diff --git a/sdk/storage/azure-storage-queue/azure/storage/queue/_queue_utils.py b/sdk/storage/azure-storage-queue/azure/storage/queue/_queue_utils.py new file mode 100644 index 000000000000..6f47357b99fb --- /dev/null +++ b/sdk/storage/azure-storage-queue/azure/storage/queue/_queue_utils.py @@ -0,0 +1,192 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +# pylint: disable=unused-argument + +from base64 import b64encode, b64decode +from xml.sax.saxutils import escape as xml_escape +from xml.sax.saxutils import unescape as xml_unescape + +import six +from azure.core.exceptions import ResourceExistsError, DecodeError + +from ._shared.models import StorageErrorCode +from ._shared.utils import process_storage_error +from ._shared.encryption import _decrypt_queue_message, _encrypt_queue_message +from ._generated.models import StorageErrorException +from .models import QueueProperties, QueueMessage + + +def deserialize_metadata(response, obj, headers): + raw_metadata = {k: v for k, v in response.headers.items() if k.startswith("x-ms-meta-")} + return {k[10:]: v for k, v in raw_metadata.items()} + + +def deserialize_queue_properties(response, obj, headers): + metadata = deserialize_metadata(response, obj, headers) + queue_properties = QueueProperties( + metadata=metadata, + **headers + ) + return queue_properties + + +def deserialize_queue_creation(response, obj, headers): + if response.status_code == 204: + error_code = StorageErrorCode.queue_already_exists + error = ResourceExistsError( + message="Queue already exists\nRequestId:{}\nTime:{}\nErrorCode:{}".format( + headers['x-ms-request-id'], + headers['Date'], + error_code + ), + response=response) + error.error_code = error_code + error.additional_info = {} + raise error + return headers + + +class MessageIterator(object): + + def __init__(self, command): + self._command = command + + def __iter__(self): + return self + + def __next__(self): + try: + messages = self._command() + if not messages: + raise StopIteration() + return [QueueMessage._from_generated(q) for q in messages] # pylint: disable=protected-access + except StorageErrorException as error: + process_storage_error(error) + + next = __next__ + + +class MessageEncodePolicy(object): + + def __init__(self): + self.require_encryption = False + self.key_encryption_key = None + self.resolver = None + + def __call__(self, content): + if content: + content = self.encode(content) + if self.key_encryption_key is not None: + content = _encrypt_queue_message(content, self.key_encryption_key) + return content + + def configure(self, require_encryption, key_encryption_key, resolver): + self.require_encryption = require_encryption + self.key_encryption_key = key_encryption_key + self.resolver = resolver + if self.require_encryption and not self.key_encryption_key: + raise ValueError("Encryption required but no key was provided.") + + def encode(self, content): + raise NotImplementedError("Must be implemented by child class.") + + +class MessageDecodePolicy(object): + + def __init__(self): + self.require_encryption = False + self.key_encryption_key = None + self.resolver = None + + def __call__(self, response, obj, headers): + for message in obj: + if message.message_text in [None, "", b""]: + continue + content = message.message_text + if (self.key_encryption_key is not None) or (self.resolver is not None): + content = _decrypt_queue_message( + content, response, + self.require_encryption, + self.key_encryption_key, + self.resolver) + message.message_text = self.decode(content, response) + return obj + + def configure(self, require_encryption, key_encryption_key, resolver): + self.require_encryption = require_encryption + self.key_encryption_key = key_encryption_key + self.resolver = resolver + + def decode(self, content, response): + raise NotImplementedError("Must be implemented by child class.") + + +class TextBase64EncodePolicy(MessageEncodePolicy): + + def encode(self, content): + if not isinstance(content, six.text_type): + raise TypeError("Message content must be text for base 64 encoding.") + return b64encode(content.encode('utf-8')).decode('utf-8') + + +class TextBase64DecodePolicy(MessageDecodePolicy): + + def decode(self, content, response): + try: + return b64decode(content.encode('utf-8')).decode('utf-8') + except (ValueError, TypeError) as error: + # ValueError for Python 3, TypeError for Python 2 + raise DecodeError( + message="Message content is not valid base 64.", + response=response, + error=error) + + +class BinaryBase64EncodePolicy(MessageEncodePolicy): + + def encode(self, content): + if not isinstance(content, six.binary_type): + raise TypeError("Message content must be bytes for base 64 encoding.") + return b64encode(content).decode('utf-8') + + +class BinaryBase64DecodePolicy(MessageDecodePolicy): + + def decode(self, content, response): + try: + return b64decode(content.encode('utf-8')) + except (ValueError, TypeError) as error: + # ValueError for Python 3, TypeError for Python 2 + raise DecodeError( + message="Message content is not valid base 64.", + response=response, + error=error) + + +class TextXMLEncodePolicy(MessageEncodePolicy): + + def encode(self, content): + if not isinstance(content, six.text_type): + raise TypeError("Message content must be text for XML encoding.") + return xml_escape(content) + + +class TextXMLDecodePolicy(MessageDecodePolicy): + + def decode(self, content, response): + return xml_unescape(content) + + +class NoEncodePolicy(MessageEncodePolicy): + + def encode(self, content): + return content + + +class NoDecodePolicy(MessageDecodePolicy): + + def decode(self, content, response): + return content diff --git a/sdk/storage/azure-storage-queue/azure/storage/queue/constants.py b/sdk/storage/azure-storage-queue/azure/storage/queue/_shared/__init__.py similarity index 51% rename from sdk/storage/azure-storage-queue/azure/storage/queue/constants.py rename to sdk/storage/azure-storage-queue/azure/storage/queue/_shared/__init__.py index c806e5013b39..5b396cd202e8 100644 --- a/sdk/storage/azure-storage-queue/azure/storage/queue/constants.py +++ b/sdk/storage/azure-storage-queue/azure/storage/queue/_shared/__init__.py @@ -3,10 +3,3 @@ # Licensed under the MIT License. See License.txt in the project root for # license information. # -------------------------------------------------------------------------- - -X_MS_VERSION = '2018-03-28' - -# Default credentials for Development Storage Service -DEV_ACCOUNT_NAME = 'devstoreaccount1' -DEV_ACCOUNT_SECONDARY_NAME = 'devstoreaccount1-secondary' -DEV_ACCOUNT_KEY = 'Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==' diff --git a/sdk/storage/azure-storage-queue/azure/storage/queue/authentication.py b/sdk/storage/azure-storage-queue/azure/storage/queue/_shared/authentication.py similarity index 85% rename from sdk/storage/azure-storage-queue/azure/storage/queue/authentication.py rename to sdk/storage/azure-storage-queue/azure/storage/queue/_shared/authentication.py index 92d84b7b520f..db425b424052 100644 --- a/sdk/storage/azure-storage-queue/azure/storage/queue/authentication.py +++ b/sdk/storage/azure-storage-queue/azure/storage/queue/_shared/authentication.py @@ -10,16 +10,14 @@ import logging import sys try: - from urllib.parse import urlparse, quote, unquote + from urllib.parse import urlparse, unquote except ImportError: from urlparse import urlparse - from urllib2 import quote, unquote + from urllib2 import unquote -from azure.core.exceptions import AzureError +from azure.core.exceptions import ClientAuthenticationError from azure.core.pipeline.policies import SansIOHTTPPolicy -from .constants import DEV_ACCOUNT_NAME, DEV_ACCOUNT_SECONDARY_NAME - if sys.version_info < (3,): _unicode_type = unicode # pylint: disable=undefined-variable else: @@ -73,7 +71,7 @@ def _wrap_exception(ex, desired_type): return desired_type('{}: {}'.format(ex.__class__.__name__, msg)) -class AzureSigningError(AzureError): +class AzureSigningError(ClientAuthenticationError): """ Represents a fatal error when attempting to sign a request. In general, the cause of this exception is user error. For example, the given account key is not valid. @@ -82,13 +80,12 @@ class AzureSigningError(AzureError): # pylint: disable=no-self-use -class SharedKeyCredentials(SansIOHTTPPolicy): +class SharedKeyCredentialPolicy(SansIOHTTPPolicy): - def __init__(self, account_name, account_key, is_emulated=False): + def __init__(self, account_name, account_key): self.account_name = account_name self.account_key = account_key - self.is_emulated = is_emulated - super(SharedKeyCredentials, self).__init__() + super(SharedKeyCredentialPolicy, self).__init__() def _get_headers(self, request, headers_to_sign): headers = dict((name.lower(), value) for name, value in request.http_request.headers.items() if value) @@ -101,13 +98,6 @@ def _get_verb(self, request): def _get_canonicalized_resource(self, request): uri_path = urlparse(request.http_request.url).path - - # for emulator, use the DEV_ACCOUNT_NAME instead of DEV_ACCOUNT_SECONDARY_NAME - # as this is how the emulator works - if self.is_emulated and uri_path.find(DEV_ACCOUNT_SECONDARY_NAME) == 1: - # only replace the first instance - uri_path = uri_path.replace(DEV_ACCOUNT_SECONDARY_NAME, DEV_ACCOUNT_NAME, 1) - return '/' + self.account_name + uri_path def _get_canonicalized_headers(self, request): @@ -141,7 +131,6 @@ def _add_authorization_header(self, request, string_to_sign): except Exception as ex: # Wrap any error that occurred as signing error # Doing so will clarify/locate the source of problem - # TODO: AzureSigningError raise _wrap_exception(ex, AzureSigningError) def on_request(self, request, **kwargs): @@ -160,4 +149,4 @@ def on_request(self, request, **kwargs): self._get_canonicalized_resource_query(request) self._add_authorization_header(request, string_to_sign) - logger.debug("String_to_sign=%s", string_to_sign) + #logger.debug("String_to_sign=%s", string_to_sign) diff --git a/sdk/storage/azure-storage-queue/azure/storage/queue/_shared/constants.py b/sdk/storage/azure-storage-queue/azure/storage/queue/_shared/constants.py new file mode 100644 index 000000000000..f8d6eb2461d1 --- /dev/null +++ b/sdk/storage/azure-storage-queue/azure/storage/queue/_shared/constants.py @@ -0,0 +1,24 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- + +import sys + + +X_MS_VERSION = '2018-03-28' + +# Socket timeout in seconds +DEFAULT_SOCKET_TIMEOUT = 20 + +# for python 3.5+, there was a change to the definition of the socket timeout (as far as socket.sendall is concerned) +# The socket timeout is now the maximum total duration to send all data. +if sys.version_info >= (3, 5): + # the timeout to connect is 20 seconds, and the read timeout is 2000 seconds + # the 2000 seconds was calculated with: 100MB (max block size)/ 50KB/s (an arbitrarily chosen minimum upload speed) + DEFAULT_SOCKET_TIMEOUT = (20, 2000) + +STORAGE_OAUTH_SCOPE = "https://storage.azure.com/.default" + +SERVICE_HOST_BASE = 'core.windows.net' diff --git a/sdk/storage/azure-storage-queue/azure/storage/queue/_shared/download_chunking.py b/sdk/storage/azure-storage-queue/azure/storage/queue/_shared/download_chunking.py new file mode 100644 index 000000000000..50c765dec2d0 --- /dev/null +++ b/sdk/storage/azure-storage-queue/azure/storage/queue/_shared/download_chunking.py @@ -0,0 +1,205 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +import threading + +from azure.core.exceptions import HttpResponseError + +from .models import ModifiedAccessConditions +from .utils import validate_and_format_range_headers, process_storage_error +from .encryption import _decrypt_blob + + +def process_range_and_offset(start_range, end_range, length, key_encryption_key, key_resolver_function): + start_offset, end_offset = 0, 0 + if key_encryption_key is not None or key_resolver_function is not None: + if start_range is not None: + # Align the start of the range along a 16 byte block + start_offset = start_range % 16 + start_range -= start_offset + + # Include an extra 16 bytes for the IV if necessary + # Because of the previous offsetting, start_range will always + # be a multiple of 16. + if start_range > 0: + start_offset += 16 + start_range -= 16 + + if length is not None: + # Align the end of the range along a 16 byte block + end_offset = 15 - (end_range % 16) + end_range += end_offset + + return (start_range, end_range), (start_offset, end_offset) + + +def process_content(blob, start_offset, end_offset, require_encryption, key_encryption_key, key_resolver_function): + if key_encryption_key is not None or key_resolver_function is not None: + try: + return _decrypt_blob( + require_encryption, + key_encryption_key, + key_resolver_function, + blob, + start_offset, + end_offset) + except Exception as error: + raise HttpResponseError( + message="Decryption failed.", + response=blob.response, + error=error) + else: + return b"".join(list(blob)) + + + + +class _BlobChunkDownloader(object): # pylint: disable=too-many-instance-attributes + + def __init__( + self, blob_service, download_size, chunk_size, progress, start_range, end_range, stream, + validate_content, access_conditions, mod_conditions, timeout, + require_encryption, key_encryption_key, key_resolver_function, **kwargs): + # identifiers for the blob + self.blob_service = blob_service + + # information on the download range/chunk size + self.chunk_size = chunk_size + self.download_size = download_size + self.start_index = start_range + self.blob_end = end_range + + # the destination that we will write to + self.stream = stream + + # download progress so far + self.progress_total = progress + + # encryption + self.require_encryption = require_encryption + self.key_encryption_key = key_encryption_key + self.key_resolver_function = key_resolver_function + + # parameters for each get blob operation + self.timeout = timeout + self.validate_content = validate_content + self.access_conditions = access_conditions + self.mod_conditions = mod_conditions + self.request_options = kwargs + + def _calculate_range(self, chunk_start): + if chunk_start + self.chunk_size > self.blob_end: + chunk_end = self.blob_end + else: + chunk_end = chunk_start + self.chunk_size + return chunk_start, chunk_end + + def get_chunk_offsets(self): + index = self.start_index + while index < self.blob_end: + yield index + index += self.chunk_size + + def process_chunk(self, chunk_start): + chunk_start, chunk_end = self._calculate_range(chunk_start) + chunk_data = self._download_chunk(chunk_start, chunk_end) + length = chunk_end - chunk_start + if length > 0: + self._write_to_stream(chunk_data, chunk_start) + self._update_progress(length) + + def yield_chunk(self, chunk_start): + chunk_start, chunk_end = self._calculate_range(chunk_start) + return self._download_chunk(chunk_start, chunk_end) + + # should be provided by the subclass + def _update_progress(self, length): + pass + + # should be provided by the subclass + def _write_to_stream(self, chunk_data, chunk_start): + pass + + def _download_chunk(self, chunk_start, chunk_end): + download_range, offset = process_range_and_offset( + chunk_start, + chunk_end, + chunk_end, + self.key_encryption_key, + self.key_resolver_function, + ) + range_header, range_validation = validate_and_format_range_headers( + download_range[0], + download_range[1] - 1, + check_content_md5=self.validate_content) + + try: + _, response = self.blob_service.download( + timeout=self.timeout, + range=range_header, + range_get_content_md5=range_validation, + lease_access_conditions=self.access_conditions, + modified_access_conditions=self.mod_conditions, + validate_content=self.validate_content, + data_stream_total=self.download_size, + download_stream_current=self.progress_total, + **self.request_options) + except HttpResponseError as error: + process_storage_error(error) + + chunk_data = process_content( + response, + offset[0], + offset[1], + self.require_encryption, + self.key_encryption_key, + self.key_resolver_function) + + # This makes sure that if_match is set so that we can validate + # that subsequent downloads are to an unmodified blob + if not self.mod_conditions: + self.mod_conditions = ModifiedAccessConditions() + self.mod_conditions.if_match = response.properties.etag + return chunk_data + + +class ParallelBlobChunkDownloader(_BlobChunkDownloader): + def __init__( + self, blob_service, download_size, chunk_size, progress, start_range, end_range, + stream, validate_content, access_conditions, mod_conditions, timeout, + require_encryption, key_encryption_key, key_resolver_function, **kwargs): + + super(ParallelBlobChunkDownloader, self).__init__( + blob_service, download_size, chunk_size, progress, start_range, end_range, + stream, validate_content, access_conditions, mod_conditions, timeout, + require_encryption, key_encryption_key, key_resolver_function, **kwargs) + + # for a parallel download, the stream is always seekable, so we note down the current position + # in order to seek to the right place when out-of-order chunks come in + self.stream_start = stream.tell() + + # since parallel operations are going on + # it is essential to protect the writing and progress reporting operations + self.stream_lock = threading.Lock() + self.progress_lock = threading.Lock() + + def _update_progress(self, length): + with self.progress_lock: + self.progress_total += length + + def _write_to_stream(self, chunk_data, chunk_start): + with self.stream_lock: + self.stream.seek(self.stream_start + (chunk_start - self.start_index)) + self.stream.write(chunk_data) + + +class SequentialBlobChunkDownloader(_BlobChunkDownloader): + + def _update_progress(self, length): + self.progress_total += length + + def _write_to_stream(self, chunk_data, chunk_start): + # chunk_start is ignored in the case of sequential download since we cannot seek the destination stream + self.stream.write(chunk_data) diff --git a/sdk/storage/azure-storage-queue/azure/storage/queue/_shared/encryption.py b/sdk/storage/azure-storage-queue/azure/storage/queue/_shared/encryption.py new file mode 100644 index 000000000000..a31ca1e85908 --- /dev/null +++ b/sdk/storage/azure-storage-queue/azure/storage/queue/_shared/encryption.py @@ -0,0 +1,551 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- + +import os +from os import urandom +from json import ( + dumps, + loads, +) +from collections import OrderedDict + +from cryptography.hazmat.backends import default_backend +from cryptography.hazmat.primitives.ciphers import Cipher +from cryptography.hazmat.primitives.ciphers.algorithms import AES +from cryptography.hazmat.primitives.ciphers.modes import CBC +from cryptography.hazmat.primitives.padding import PKCS7 + +from azure.core.exceptions import HttpResponseError + +from ..version import __version__ +from .authentication import _encode_base64, _decode_base64_to_bytes + + +_ENCRYPTION_PROTOCOL_V1 = '1.0' +_ERROR_VALUE_NONE = '{0} should not be None.' +_ERROR_OBJECT_INVALID = \ + '{0} does not define a complete interface. Value of {1} is either missing or invalid.' +_ERROR_DATA_NOT_ENCRYPTED = 'Encryption required, but received data does not contain appropriate metatadata.' + \ + 'Data was either not encrypted or metadata has been lost.' +_ERROR_UNSUPPORTED_ENCRYPTION_ALGORITHM = \ + 'Specified encryption algorithm is not supported.' + + +def _validate_not_none(param_name, param): + if param is None: + raise ValueError(_ERROR_VALUE_NONE.format(param_name)) + + +def _validate_key_encryption_key_wrap(kek): + # Note that None is not callable and so will fail the second clause of each check. + if not hasattr(kek, 'wrap_key') or not callable(kek.wrap_key): + raise AttributeError(_ERROR_OBJECT_INVALID.format('key encryption key', 'wrap_key')) + if not hasattr(kek, 'get_kid') or not callable(kek.get_kid): + raise AttributeError(_ERROR_OBJECT_INVALID.format('key encryption key', 'get_kid')) + if not hasattr(kek, 'get_key_wrap_algorithm') or not callable(kek.get_key_wrap_algorithm): + raise AttributeError(_ERROR_OBJECT_INVALID.format('key encryption key', 'get_key_wrap_algorithm')) + + +class _EncryptionAlgorithm(object): + ''' + Specifies which client encryption algorithm is used. + ''' + AES_CBC_256 = 'AES_CBC_256' + + +class _WrappedContentKey: + ''' + Represents the envelope key details stored on the service. + ''' + + def __init__(self, algorithm, encrypted_key, key_id): + ''' + :param str algorithm: + The algorithm used for wrapping. + :param bytes encrypted_key: + The encrypted content-encryption-key. + :param str key_id: + The key-encryption-key identifier string. + ''' + + _validate_not_none('algorithm', algorithm) + _validate_not_none('encrypted_key', encrypted_key) + _validate_not_none('key_id', key_id) + + self.algorithm = algorithm + self.encrypted_key = encrypted_key + self.key_id = key_id + + +class _EncryptionAgent: + ''' + Represents the encryption agent stored on the service. + It consists of the encryption protocol version and encryption algorithm used. + ''' + + def __init__(self, encryption_algorithm, protocol): + ''' + :param _EncryptionAlgorithm encryption_algorithm: + The algorithm used for encrypting the message contents. + :param str protocol: + The protocol version used for encryption. + ''' + + _validate_not_none('encryption_algorithm', encryption_algorithm) + _validate_not_none('protocol', protocol) + + self.encryption_algorithm = str(encryption_algorithm) + self.protocol = protocol + + +class _EncryptionData: + ''' + Represents the encryption data that is stored on the service. + ''' + + def __init__(self, content_encryption_IV, encryption_agent, wrapped_content_key, + key_wrapping_metadata): + ''' + :param bytes content_encryption_IV: + The content encryption initialization vector. + :param _EncryptionAgent encryption_agent: + The encryption agent. + :param _WrappedContentKey wrapped_content_key: + An object that stores the wrapping algorithm, the key identifier, + and the encrypted key bytes. + :param dict key_wrapping_metadata: + A dict containing metadata related to the key wrapping. + ''' + + _validate_not_none('content_encryption_IV', content_encryption_IV) + _validate_not_none('encryption_agent', encryption_agent) + _validate_not_none('wrapped_content_key', wrapped_content_key) + + self.content_encryption_IV = content_encryption_IV + self.encryption_agent = encryption_agent + self.wrapped_content_key = wrapped_content_key + self.key_wrapping_metadata = key_wrapping_metadata + + +def _generate_encryption_data_dict(kek, cek, iv): + ''' + Generates and returns the encryption metadata as a dict. + + :param object kek: The key encryption key. See calling functions for more information. + :param bytes cek: The content encryption key. + :param bytes iv: The initialization vector. + :return: A dict containing all the encryption metadata. + :rtype: dict + ''' + # Encrypt the cek. + wrapped_cek = kek.wrap_key(cek) + + # Build the encryption_data dict. + # Use OrderedDict to comply with Java's ordering requirement. + wrapped_content_key = OrderedDict() + wrapped_content_key['KeyId'] = kek.get_kid() + wrapped_content_key['EncryptedKey'] = _encode_base64(wrapped_cek) + wrapped_content_key['Algorithm'] = kek.get_key_wrap_algorithm() + + encryption_agent = OrderedDict() + encryption_agent['Protocol'] = _ENCRYPTION_PROTOCOL_V1 + encryption_agent['EncryptionAlgorithm'] = _EncryptionAlgorithm.AES_CBC_256 + + encryption_data_dict = OrderedDict() + encryption_data_dict['WrappedContentKey'] = wrapped_content_key + encryption_data_dict['EncryptionAgent'] = encryption_agent + encryption_data_dict['ContentEncryptionIV'] = _encode_base64(iv) + encryption_data_dict['KeyWrappingMetadata'] = {'EncryptionLibrary': 'Python ' + __version__} + + return encryption_data_dict + + +def _dict_to_encryption_data(encryption_data_dict): + ''' + Converts the specified dictionary to an EncryptionData object for + eventual use in decryption. + + :param dict encryption_data_dict: + The dictionary containing the encryption data. + :return: an _EncryptionData object built from the dictionary. + :rtype: _EncryptionData + ''' + try: + if encryption_data_dict['EncryptionAgent']['Protocol'] != _ENCRYPTION_PROTOCOL_V1: + raise ValueError("Unsupported encryption version.") + except KeyError: + raise ValueError("Unsupported encryption version.") + wrapped_content_key = encryption_data_dict['WrappedContentKey'] + wrapped_content_key = _WrappedContentKey(wrapped_content_key['Algorithm'], + _decode_base64_to_bytes(wrapped_content_key['EncryptedKey']), + wrapped_content_key['KeyId']) + + encryption_agent = encryption_data_dict['EncryptionAgent'] + encryption_agent = _EncryptionAgent(encryption_agent['EncryptionAlgorithm'], + encryption_agent['Protocol']) + + if 'KeyWrappingMetadata' in encryption_data_dict: + key_wrapping_metadata = encryption_data_dict['KeyWrappingMetadata'] + else: + key_wrapping_metadata = None + + encryption_data = _EncryptionData(_decode_base64_to_bytes(encryption_data_dict['ContentEncryptionIV']), + encryption_agent, + wrapped_content_key, + key_wrapping_metadata) + + return encryption_data + + +def _generate_AES_CBC_cipher(cek, iv): + ''' + Generates and returns an encryption cipher for AES CBC using the given cek and iv. + + :param bytes[] cek: The content encryption key for the cipher. + :param bytes[] iv: The initialization vector for the cipher. + :return: A cipher for encrypting in AES256 CBC. + :rtype: ~cryptography.hazmat.primitives.ciphers.Cipher + ''' + + backend = default_backend() + algorithm = AES(cek) + mode = CBC(iv) + return Cipher(algorithm, mode, backend) + + +def _validate_and_unwrap_cek(encryption_data, key_encryption_key=None, key_resolver=None): + ''' + Extracts and returns the content_encryption_key stored in the encryption_data object + and performs necessary validation on all parameters. + :param _EncryptionData encryption_data: + The encryption metadata of the retrieved value. + :param obj key_encryption_key: + The key_encryption_key used to unwrap the cek. Please refer to high-level service object + instance variables for more details. + :param func key_resolver: + A function used that, given a key_id, will return a key_encryption_key. Please refer + to high-level service object instance variables for more details. + :return: the content_encryption_key stored in the encryption_data object. + :rtype: bytes[] + ''' + + _validate_not_none('content_encryption_IV', encryption_data.content_encryption_IV) + _validate_not_none('encrypted_key', encryption_data.wrapped_content_key.encrypted_key) + + if _ENCRYPTION_PROTOCOL_V1 != encryption_data.encryption_agent.protocol: + raise ValueError('Encryption version is not supported.') + + content_encryption_key = None + + # If the resolver exists, give priority to the key it finds. + if key_resolver is not None: + key_encryption_key = key_resolver(encryption_data.wrapped_content_key.key_id) + + _validate_not_none('key_encryption_key', key_encryption_key) + if not hasattr(key_encryption_key, 'get_kid') or not callable(key_encryption_key.get_kid): + raise AttributeError(_ERROR_OBJECT_INVALID.format('key encryption key', 'get_kid')) + if not hasattr(key_encryption_key, 'unwrap_key') or not callable(key_encryption_key.unwrap_key): + raise AttributeError(_ERROR_OBJECT_INVALID.format('key encryption key', 'unwrap_key')) + if encryption_data.wrapped_content_key.key_id != key_encryption_key.get_kid(): + raise ValueError('Provided or resolved key-encryption-key does not match the id of key used to encrypt.') + # Will throw an exception if the specified algorithm is not supported. + content_encryption_key = key_encryption_key.unwrap_key(encryption_data.wrapped_content_key.encrypted_key, + encryption_data.wrapped_content_key.algorithm) + _validate_not_none('content_encryption_key', content_encryption_key) + + return content_encryption_key + + +def _encrypt_blob(blob, key_encryption_key): + ''' + Encrypts the given blob using AES256 in CBC mode with 128 bit padding. + Wraps the generated content-encryption-key using the user-provided key-encryption-key (kek). + Returns a json-formatted string containing the encryption metadata. This method should + only be used when a blob is small enough for single shot upload. Encrypting larger blobs + is done as a part of the upload_blob_chunks method. + + :param bytes blob: + The blob to be encrypted. + :param object key_encryption_key: + The user-provided key-encryption-key. Must implement the following methods: + wrap_key(key)--wraps the specified key using an algorithm of the user's choice. + get_key_wrap_algorithm()--returns the algorithm used to wrap the specified symmetric key. + get_kid()--returns a string key id for this key-encryption-key. + :return: A tuple of json-formatted string containing the encryption metadata and the encrypted blob data. + :rtype: (str, bytes) + ''' + + _validate_not_none('blob', blob) + _validate_not_none('key_encryption_key', key_encryption_key) + _validate_key_encryption_key_wrap(key_encryption_key) + + # AES256 uses 256 bit (32 byte) keys and always with 16 byte blocks + content_encryption_key = urandom(32) + initialization_vector = urandom(16) + + cipher = _generate_AES_CBC_cipher(content_encryption_key, initialization_vector) + + # PKCS7 with 16 byte blocks ensures compatibility with AES. + padder = PKCS7(128).padder() + padded_data = padder.update(blob) + padder.finalize() + + # Encrypt the data. + encryptor = cipher.encryptor() + encrypted_data = encryptor.update(padded_data) + encryptor.finalize() + encryption_data = _generate_encryption_data_dict(key_encryption_key, content_encryption_key, + initialization_vector) + encryption_data['EncryptionMode'] = 'FullBlob' + + return dumps(encryption_data), encrypted_data + + +def _generate_blob_encryption_data(key_encryption_key): + ''' + Generates the encryption_metadata for the blob. + + :param bytes key_encryption_key: + The key-encryption-key used to wrap the cek associate with this blob. + :return: A tuple containing the cek and iv for this blob as well as the + serialized encryption metadata for the blob. + :rtype: (bytes, bytes, str) + ''' + encryption_data = None + content_encryption_key = None + initialization_vector = None + if key_encryption_key: + _validate_key_encryption_key_wrap(key_encryption_key) + content_encryption_key = urandom(32) + initialization_vector = urandom(16) + encryption_data = _generate_encryption_data_dict(key_encryption_key, + content_encryption_key, + initialization_vector) + encryption_data['EncryptionMode'] = 'FullBlob' + encryption_data = dumps(encryption_data) + + return content_encryption_key, initialization_vector, encryption_data + + +def _decrypt_blob(require_encryption, key_encryption_key, key_resolver, + response, start_offset, end_offset): + ''' + Decrypts the given blob contents and returns only the requested range. + + :param bool require_encryption: + Whether or not the calling blob service requires objects to be decrypted. + :param object key_encryption_key: + The user-provided key-encryption-key. Must implement the following methods: + wrap_key(key)--wraps the specified key using an algorithm of the user's choice. + get_key_wrap_algorithm()--returns the algorithm used to wrap the specified symmetric key. + get_kid()--returns a string key id for this key-encryption-key. + :param key_resolver(kid): + The user-provided key resolver. Uses the kid string to return a key-encryption-key + implementing the interface defined above. + :return: The decrypted blob content. + :rtype: bytes + ''' + if response is None: + raise ValueError("Response cannot be None.") + content = b"".join(list(response)) + if not content: + return content + + try: + encryption_data = _dict_to_encryption_data(loads(response.response.headers['x-ms-meta-encryptiondata'])) + except: # pylint: disable=bare-except + if require_encryption: + raise ValueError(_ERROR_DATA_NOT_ENCRYPTED) + + return content + + if encryption_data.encryption_agent.encryption_algorithm != _EncryptionAlgorithm.AES_CBC_256: + raise ValueError(_ERROR_UNSUPPORTED_ENCRYPTION_ALGORITHM) + + blob_type = response.response.headers['x-ms-blob-type'] + + iv = None + unpad = False + if 'content-range' in response.response.headers: + content_range = response.response.headers['content-range'] + # Format: 'bytes x-y/size' + + # Ignore the word 'bytes' + content_range = content_range.split(' ') + + content_range = content_range[1].split('-') + content_range = content_range[1].split('/') + end_range = int(content_range[0]) + blob_size = int(content_range[1]) + + if start_offset >= 16: + iv = content[:16] + content = content[16:] + start_offset -= 16 + else: + iv = encryption_data.content_encryption_IV + + if end_range == blob_size - 1: + unpad = True + else: + unpad = True + iv = encryption_data.content_encryption_IV + + if blob_type == 'PageBlob': + unpad = False + + content_encryption_key = _validate_and_unwrap_cek(encryption_data, key_encryption_key, key_resolver) + cipher = _generate_AES_CBC_cipher(content_encryption_key, iv) + decryptor = cipher.decryptor() + + content = decryptor.update(content) + decryptor.finalize() + if unpad: + unpadder = PKCS7(128).unpadder() + content = unpadder.update(content) + unpadder.finalize() + + return content[start_offset: len(content) - end_offset] + + +def _get_blob_encryptor_and_padder(cek, iv, should_pad): + encryptor = None + padder = None + + if cek is not None and iv is not None: + cipher = _generate_AES_CBC_cipher(cek, iv) + encryptor = cipher.encryptor() + padder = PKCS7(128).padder() if should_pad else None + + return encryptor, padder + + +def _encrypt_queue_message(message, key_encryption_key): + ''' + Encrypts the given plain text message using AES256 in CBC mode with 128 bit padding. + Wraps the generated content-encryption-key using the user-provided key-encryption-key (kek). + Returns a json-formatted string containing the encrypted message and the encryption metadata. + + :param object message: + The plain text messge to be encrypted. + :param object key_encryption_key: + The user-provided key-encryption-key. Must implement the following methods: + wrap_key(key)--wraps the specified key using an algorithm of the user's choice. + get_key_wrap_algorithm()--returns the algorithm used to wrap the specified symmetric key. + get_kid()--returns a string key id for this key-encryption-key. + :return: A json-formatted string containing the encrypted message and the encryption metadata. + :rtype: str + ''' + + _validate_not_none('message', message) + _validate_not_none('key_encryption_key', key_encryption_key) + _validate_key_encryption_key_wrap(key_encryption_key) + + # AES256 uses 256 bit (32 byte) keys and always with 16 byte blocks + content_encryption_key = os.urandom(32) + initialization_vector = os.urandom(16) + + # Queue encoding functions all return unicode strings, and encryption should + # operate on binary strings. + message = message.encode('utf-8') + + cipher = _generate_AES_CBC_cipher(content_encryption_key, initialization_vector) + + # PKCS7 with 16 byte blocks ensures compatibility with AES. + padder = PKCS7(128).padder() + padded_data = padder.update(message) + padder.finalize() + + # Encrypt the data. + encryptor = cipher.encryptor() + encrypted_data = encryptor.update(padded_data) + encryptor.finalize() + + # Build the dictionary structure. + queue_message = {'EncryptedMessageContents': _encode_base64(encrypted_data), + 'EncryptionData': _generate_encryption_data_dict(key_encryption_key, + content_encryption_key, + initialization_vector)} + + return dumps(queue_message) + + +def _decrypt_queue_message(message, response, require_encryption, key_encryption_key, resolver): + ''' + Returns the decrypted message contents from an EncryptedQueueMessage. + If no encryption metadata is present, will return the unaltered message. + :param str message: + The JSON formatted QueueEncryptedMessage contents with all associated metadata. + :param bool require_encryption: + If set, will enforce that the retrieved messages are encrypted and decrypt them. + :param object key_encryption_key: + The user-provided key-encryption-key. Must implement the following methods: + unwrap_key(key, algorithm) + - returns the unwrapped form of the specified symmetric key usingthe string-specified algorithm. + get_kid() + - returns a string key id for this key-encryption-key. + :param function resolver(kid): + The user-provided key resolver. Uses the kid string to return a key-encryption-key + implementing the interface defined above. + :return: The plain text message from the queue message. + :rtype: str + ''' + + try: + message = loads(message) + + encryption_data = _dict_to_encryption_data(message['EncryptionData']) + decoded_data = _decode_base64_to_bytes(message['EncryptedMessageContents']) + except (KeyError, ValueError): + # Message was not json formatted and so was not encrypted + # or the user provided a json formatted message. + if require_encryption: + raise ValueError('Message was not encrypted.') + + return message + try: + return _decrypt(decoded_data, encryption_data, key_encryption_key, resolver).decode('utf-8') + except Exception as error: + raise HttpResponseError( + message="Decryption failed.", + response=response, + error=error) + + +def _decrypt(message, encryption_data, key_encryption_key=None, resolver=None): + ''' + Decrypts the given ciphertext using AES256 in CBC mode with 128 bit padding. + Unwraps the content-encryption-key using the user-provided or resolved key-encryption-key (kek). + Returns the original plaintex. + + :param str message: + The ciphertext to be decrypted. + :param _EncryptionData encryption_data: + The metadata associated with this ciphertext. + :param object key_encryption_key: + The user-provided key-encryption-key. Must implement the following methods: + unwrap_key(key, algorithm) + - returns the unwrapped form of the specified symmetric key using the string-specified algorithm. + get_kid() + - returns a string key id for this key-encryption-key. + :param function resolver(kid): + The user-provided key resolver. Uses the kid string to return a key-encryption-key + implementing the interface defined above. + :return: The decrypted plaintext. + :rtype: str + ''' + _validate_not_none('message', message) + content_encryption_key = _validate_and_unwrap_cek(encryption_data, key_encryption_key, resolver) + + if _EncryptionAlgorithm.AES_CBC_256 != encryption_data.encryption_agent.encryption_algorithm: + raise ValueError(_ERROR_UNSUPPORTED_ENCRYPTION_ALGORITHM) + + cipher = _generate_AES_CBC_cipher(content_encryption_key, encryption_data.content_encryption_IV) + + # decrypt data + decrypted_data = message + decryptor = cipher.decryptor() + decrypted_data = (decryptor.update(decrypted_data) + decryptor.finalize()) + + # unpad data + unpadder = PKCS7(128).unpadder() + decrypted_data = (unpadder.update(decrypted_data) + unpadder.finalize()) + + return decrypted_data diff --git a/sdk/storage/azure-storage-queue/azure/storage/queue/_shared/models.py b/sdk/storage/azure-storage-queue/azure/storage/queue/_shared/models.py new file mode 100644 index 000000000000..a694503b7be8 --- /dev/null +++ b/sdk/storage/azure-storage-queue/azure/storage/queue/_shared/models.py @@ -0,0 +1,435 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- + +from enum import Enum + + +def get_enum_value(value): + if value is None or value in ["None", ""]: + return None + try: + return value.value + except AttributeError: + return value + + +class StorageErrorCode(str, Enum): + + # Generic storage values + account_already_exists = "AccountAlreadyExists" + account_being_created = "AccountBeingCreated" + account_is_disabled = "AccountIsDisabled" + authentication_failed = "AuthenticationFailed" + authorization_failure = "AuthorizationFailure" + condition_headers_not_supported = "ConditionHeadersNotSupported" + condition_not_met = "ConditionNotMet" + empty_metadata_key = "EmptyMetadataKey" + insufficient_account_permissions = "InsufficientAccountPermissions" + internal_error = "InternalError" + invalid_authentication_info = "InvalidAuthenticationInfo" + invalid_header_value = "InvalidHeaderValue" + invalid_http_verb = "InvalidHttpVerb" + invalid_input = "InvalidInput" + invalid_md5 = "InvalidMd5" + invalid_metadata = "InvalidMetadata" + invalid_query_parameter_value = "InvalidQueryParameterValue" + invalid_range = "InvalidRange" + invalid_resource_name = "InvalidResourceName" + invalid_uri = "InvalidUri" + invalid_xml_document = "InvalidXmlDocument" + invalid_xml_node_value = "InvalidXmlNodeValue" + md5_mismatch = "Md5Mismatch" + metadata_too_large = "MetadataTooLarge" + missing_content_length_header = "MissingContentLengthHeader" + missing_required_query_parameter = "MissingRequiredQueryParameter" + missing_required_header = "MissingRequiredHeader" + missing_required_xml_node = "MissingRequiredXmlNode" + multiple_condition_headers_not_supported = "MultipleConditionHeadersNotSupported" + operation_timed_out = "OperationTimedOut" + out_of_range_input = "OutOfRangeInput" + out_of_range_query_parameter_value = "OutOfRangeQueryParameterValue" + request_body_too_large = "RequestBodyTooLarge" + resource_type_mismatch = "ResourceTypeMismatch" + request_url_failed_to_parse = "RequestUrlFailedToParse" + resource_already_exists = "ResourceAlreadyExists" + resource_not_found = "ResourceNotFound" + server_busy = "ServerBusy" + unsupported_header = "UnsupportedHeader" + unsupported_xml_node = "UnsupportedXmlNode" + unsupported_query_parameter = "UnsupportedQueryParameter" + unsupported_http_verb = "UnsupportedHttpVerb" + + # Blob values + append_position_condition_not_met = "AppendPositionConditionNotMet" + blob_already_exists = "BlobAlreadyExists" + blob_not_found = "BlobNotFound" + blob_overwritten = "BlobOverwritten" + blob_tier_inadequate_for_content_length = "BlobTierInadequateForContentLength" + block_count_exceeds_limit = "BlockCountExceedsLimit" + block_list_too_long = "BlockListTooLong" + cannot_change_to_lower_tier = "CannotChangeToLowerTier" + cannot_verify_copy_source = "CannotVerifyCopySource" + container_already_exists = "ContainerAlreadyExists" + container_being_deleted = "ContainerBeingDeleted" + container_disabled = "ContainerDisabled" + container_not_found = "ContainerNotFound" + content_length_larger_than_tier_limit = "ContentLengthLargerThanTierLimit" + copy_across_accounts_not_supported = "CopyAcrossAccountsNotSupported" + copy_id_mismatch = "CopyIdMismatch" + feature_version_mismatch = "FeatureVersionMismatch" + incremental_copy_blob_mismatch = "IncrementalCopyBlobMismatch" + incremental_copy_of_eralier_version_snapshot_not_allowed = "IncrementalCopyOfEralierVersionSnapshotNotAllowed" + incremental_copy_source_must_be_snapshot = "IncrementalCopySourceMustBeSnapshot" + infinite_lease_duration_required = "InfiniteLeaseDurationRequired" + invalid_blob_or_block = "InvalidBlobOrBlock" + invalid_blob_tier = "InvalidBlobTier" + invalid_blob_type = "InvalidBlobType" + invalid_block_id = "InvalidBlockId" + invalid_block_list = "InvalidBlockList" + invalid_operation = "InvalidOperation" + invalid_page_range = "InvalidPageRange" + invalid_source_blob_type = "InvalidSourceBlobType" + invalid_source_blob_url = "InvalidSourceBlobUrl" + invalid_version_for_page_blob_operation = "InvalidVersionForPageBlobOperation" + lease_already_present = "LeaseAlreadyPresent" + lease_already_broken = "LeaseAlreadyBroken" + lease_id_mismatch_with_blob_operation = "LeaseIdMismatchWithBlobOperation" + lease_id_mismatch_with_container_operation = "LeaseIdMismatchWithContainerOperation" + lease_id_mismatch_with_lease_operation = "LeaseIdMismatchWithLeaseOperation" + lease_id_missing = "LeaseIdMissing" + lease_is_breaking_and_cannot_be_acquired = "LeaseIsBreakingAndCannotBeAcquired" + lease_is_breaking_and_cannot_be_changed = "LeaseIsBreakingAndCannotBeChanged" + lease_is_broken_and_cannot_be_renewed = "LeaseIsBrokenAndCannotBeRenewed" + lease_lost = "LeaseLost" + lease_not_present_with_blob_operation = "LeaseNotPresentWithBlobOperation" + lease_not_present_with_container_operation = "LeaseNotPresentWithContainerOperation" + lease_not_present_with_lease_operation = "LeaseNotPresentWithLeaseOperation" + max_blob_size_condition_not_met = "MaxBlobSizeConditionNotMet" + no_pending_copy_operation = "NoPendingCopyOperation" + operation_not_allowed_on_incremental_copy_blob = "OperationNotAllowedOnIncrementalCopyBlob" + pending_copy_operation = "PendingCopyOperation" + previous_snapshot_cannot_be_newer = "PreviousSnapshotCannotBeNewer" + previous_snapshot_not_found = "PreviousSnapshotNotFound" + previous_snapshot_operation_not_supported = "PreviousSnapshotOperationNotSupported" + sequence_number_condition_not_met = "SequenceNumberConditionNotMet" + sequence_number_increment_too_large = "SequenceNumberIncrementTooLarge" + snapshot_count_exceeded = "SnapshotCountExceeded" + snaphot_operation_rate_exceeded = "SnaphotOperationRateExceeded" + snapshots_present = "SnapshotsPresent" + source_condition_not_met = "SourceConditionNotMet" + system_in_use = "SystemInUse" + target_condition_not_met = "TargetConditionNotMet" + unauthorized_blob_overwrite = "UnauthorizedBlobOverwrite" + blob_being_rehydrated = "BlobBeingRehydrated" + blob_archived = "BlobArchived" + blob_not_archived = "BlobNotArchived" + + # Queue values + invalid_marker = "InvalidMarker" + message_not_found = "MessageNotFound" + message_too_large = "MessageTooLarge" + pop_receipt_mismatch = "PopReceiptMismatch" + queue_already_exists = "QueueAlreadyExists" + queue_being_deleted = "QueueBeingDeleted" + queue_disabled = "QueueDisabled" + queue_not_empty = "QueueNotEmpty" + queue_not_found = "QueueNotFound" + + +class DictMixin(object): + + def __setitem__(self, key, item): + self.__dict__[key] = item + + def __getitem__(self, key): + return self.__dict__[key] + + def __repr__(self): + return str(self) + + def __len__(self): + return len(self.keys()) + + def __delitem__(self, key): + self.__dict__[key] = None + + def __eq__(self, other): + """Compare objects by comparing all attributes.""" + if isinstance(other, self.__class__): + return self.__dict__ == other.__dict__ + return False + + def __ne__(self, other): + """Compare objects by comparing all attributes.""" + return not self.__eq__(other) + + def __str__(self): + return str({k: v for k, v in self.__dict__.items() if not k.startswith('_')}) + + def has_key(self, k): + return k in self.__dict__ + + def update(self, *args, **kwargs): + return self.__dict__.update(*args, **kwargs) + + def keys(self): + return [k for k in self.__dict__ if not k.startswith('_')] + + def values(self): + return [v for k, v in self.__dict__.items() if not k.startswith('_')] + + def items(self): + return [(k, v) for k, v in self.__dict__.items() if not k.startswith('_')] + + def get(self, key, default=None): + if key in self.__dict__: + return self.__dict__[key] + return default + + +class ModifiedAccessConditions(object): + """Additional parameters for a set of operations. + + :param if_modified_since: Specify this header value to operate only on a + blob if it has been modified since the specified date/time. + :type if_modified_since: datetime + :param if_unmodified_since: Specify this header value to operate only on a + blob if it has not been modified since the specified date/time. + :type if_unmodified_since: datetime + :param if_match: Specify an ETag value to operate only on blobs with a + matching value. + :type if_match: str + :param if_none_match: Specify an ETag value to operate only on blobs + without a matching value. + :type if_none_match: str + """ + + def __init__(self, **kwargs): + self.if_modified_since = kwargs.get('if_modified_since', None) + self.if_unmodified_since = kwargs.get('if_unmodified_since', None) + self.if_match = kwargs.get('if_match', None) + self.if_none_match = kwargs.get('if_none_match', None) + + +class LocationMode(object): + """ + Specifies the location the request should be sent to. This mode only applies + for RA-GRS accounts which allow secondary read access. All other account types + must use PRIMARY. + """ + + PRIMARY = 'primary' #: Requests should be sent to the primary location. + SECONDARY = 'secondary' #: Requests should be sent to the secondary location, if possible. + + +class ResourceTypes(object): + """ + Specifies the resource types that are accessible with the account SAS. + + :ivar ResourceTypes ResourceTypes.CONTAINER: + Access to container-level APIs (e.g., Create/Delete Container, + Create/Delete Queue, Create/Delete Share, + List Blobs/Files and Directories) + :ivar ResourceTypes ResourceTypes.OBJECT: + Access to object-level APIs for blobs, queue messages, and + files(e.g. Put Blob, Query Entity, Get Messages, Create File, etc.) + :ivar ResourceTypes ResourceTypes.SERVICE: + Access to service-level APIs (e.g., Get/Set Service Properties, + Get Service Stats, List Containers/Queues/Shares) + """ + + SERVICE = None # type: ResourceTypes + CONTAINER = None # type: ResourceTypes + OBJECT = None # type: ResourceTypes + + def __init__(self, service=False, container=False, object=False, _str=None): # pylint: disable=redefined-builtin + """ + :param bool service: + Access to service-level APIs (e.g., Get/Set Service Properties, + Get Service Stats, List Containers/Queues/Shares) + :param bool container: + Access to container-level APIs (e.g., Create/Delete Container, + Create/Delete Queue, Create/Delete Share, + List Blobs/Files and Directories) + :param bool object: + Access to object-level APIs for blobs, queue messages, and + files(e.g. Put Blob, Query Entity, Get Messages, Create File, etc.) + :param str _str: + A string representing the resource types. + """ + if not _str: + _str = '' + self.service = service or ('s' in _str) + self.container = container or ('c' in _str) + self.object = object or ('o' in _str) + + def __or__(self, other): + return ResourceTypes(_str=str(self) + str(other)) + + def __add__(self, other): + return ResourceTypes(_str=str(self) + str(other)) + + def __str__(self): + return (('s' if self.service else '') + + ('c' if self.container else '') + + ('o' if self.object else '')) + + +ResourceTypes.SERVICE = ResourceTypes(service=True) +ResourceTypes.CONTAINER = ResourceTypes(container=True) +ResourceTypes.OBJECT = ResourceTypes(object=True) + + +class AccountPermissions(object): + """ + :class:`~ResourceTypes` class to be used with generate_shared_access_signature + method and for the AccessPolicies used with set_*_acl. There are two types of + SAS which may be used to grant resource access. One is to grant access to a + specific resource (resource-specific). Another is to grant access to the + entire service for a specific account and allow certain operations based on + perms found here. + + :ivar AccountPermissions AccountPermissions.ADD: + Valid for the following Object resource types only: queue messages and append blobs. + :ivar AccountPermissions AccountPermissions.CREATE: + Valid for the following Object resource types only: blobs and files. Users + can create new blobs or files, but may not overwrite existing blobs or files. + :ivar AccountPermissions AccountPermissions.DELETE: + Valid for Container and Object resource types, except for queue messages. + :ivar AccountPermissions AccountPermissions.LIST: + Valid for Service and Container resource types only. + :ivar AccountPermissions AccountPermissions.PROCESS: + Valid for the following Object resource type only: queue messages. + :ivar AccountPermissions AccountPermissions.READ: + Valid for all signed resources types (Service, Container, and Object). + Permits read permissions to the specified resource type. + :ivar AccountPermissions AccountPermissions.UPDATE: + Valid for the following Object resource types only: queue messages. + :ivar AccountPermissions AccountPermissions.WRITE: + Valid for all signed resources types (Service, Container, and Object). + Permits write permissions to the specified resource type. + """ + + READ = None # type: AccountPermissions + WRITE = None # type: AccountPermissions + DELETE = None # type: AccountPermissions + LIST = None # type: AccountPermissions + ADD = None # type: AccountPermissions + CREATE = None # type: AccountPermissions + UPDATE = None # type: AccountPermissions + PROCESS = None # type: AccountPermissions + + def __init__(self, read=False, write=False, delete=False, list=False, # pylint: disable=redefined-builtin + add=False, create=False, update=False, process=False, _str=None): + """ + :param bool read: + Valid for all signed resources types (Service, Container, and Object). + Permits read permissions to the specified resource type. + :param bool write: + Valid for all signed resources types (Service, Container, and Object). + Permits write permissions to the specified resource type. + :param bool delete: + Valid for Container and Object resource types, except for queue messages. + :param bool list: + Valid for Service and Container resource types only. + :param bool add: + Valid for the following Object resource types only: queue messages, and append blobs. + :param bool create: + Valid for the following Object resource types only: blobs and files. + Users can create new blobs or files, but may not overwrite existing + blobs or files. + :param bool update: + Valid for the following Object resource types only: queue messages. + :param bool process: + Valid for the following Object resource type only: queue messages. + :param str _str: + A string representing the permissions. + """ + if not _str: + _str = '' + self.read = read or ('r' in _str) + self.write = write or ('w' in _str) + self.delete = delete or ('d' in _str) + self.list = list or ('l' in _str) + self.add = add or ('a' in _str) + self.create = create or ('c' in _str) + self.update = update or ('u' in _str) + self.process = process or ('p' in _str) + + def __or__(self, other): + return AccountPermissions(_str=str(self) + str(other)) + + def __add__(self, other): + return AccountPermissions(_str=str(self) + str(other)) + + def __str__(self): + return (('r' if self.read else '') + + ('w' if self.write else '') + + ('d' if self.delete else '') + + ('l' if self.list else '') + + ('a' if self.add else '') + + ('c' if self.create else '') + + ('u' if self.update else '') + + ('p' if self.process else '')) + + +AccountPermissions.READ = AccountPermissions(read=True) +AccountPermissions.WRITE = AccountPermissions(write=True) +AccountPermissions.DELETE = AccountPermissions(delete=True) +AccountPermissions.LIST = AccountPermissions(list=True) +AccountPermissions.ADD = AccountPermissions(add=True) +AccountPermissions.CREATE = AccountPermissions(create=True) +AccountPermissions.UPDATE = AccountPermissions(update=True) +AccountPermissions.PROCESS = AccountPermissions(process=True) + + +class Services(object): + ''' + Specifies the services accessible with the account SAS. + + :ivar Services Services.BLOB: The blob service. + :ivar Services Services.FILE: The file service + :ivar Services Services.QUEUE: The queue service. + :ivar Services Services.TABLE: The table service. + ''' + + def __init__(self, blob=False, queue=False, file=False, table=False, _str=None): + ''' + :param bool blob: + Access to any blob service, for example, the `.BlockBlobService` + :param bool queue: + Access to the `.QueueService` + :param bool file: + Access to the `.FileService` + :param bool table: + Access to the TableService + :param str _str: + A string representing the services. + ''' + if not _str: + _str = '' + self.blob = blob or ('b' in _str) + self.queue = queue or ('q' in _str) + self.file = file or ('f' in _str) + self.table = table or ('t' in _str) + + def __or__(self, other): + return Services(_str=str(self) + str(other)) + + def __add__(self, other): + return Services(_str=str(self) + str(other)) + + def __str__(self): + return (('b' if self.blob else '') + + ('q' if self.queue else '') + + ('t' if self.table else '') + + ('f' if self.file else '')) + + +Services.BLOB = Services(blob=True) +Services.QUEUE = Services(queue=True) +Services.TABLE = Services(table=True) +Services.FILE = Services(file=True) diff --git a/sdk/storage/azure-storage-queue/azure/storage/queue/_shared/policies.py b/sdk/storage/azure-storage-queue/azure/storage/queue/_shared/policies.py new file mode 100644 index 000000000000..72bee6fdcf8d --- /dev/null +++ b/sdk/storage/azure-storage-queue/azure/storage/queue/_shared/policies.py @@ -0,0 +1,610 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- + +import base64 +import hashlib +import re +import random +from time import time +from io import SEEK_SET, UnsupportedOperation +import logging +import uuid +import types +from wsgiref.handlers import format_date_time +try: + from urllib.parse import ( + urlparse, + parse_qsl, + urlunparse, + urlencode, + ) +except ImportError: + from urllib import urlencode + from urlparse import ( + urlparse, + parse_qsl, + urlunparse, + ) + +from azure.core.pipeline.policies import ( + HeadersPolicy, + SansIOHTTPPolicy, + NetworkTraceLoggingPolicy, + HTTPPolicy) +from azure.core.pipeline.policies.base import RequestHistory +from azure.core.exceptions import AzureError, ServiceRequestError, ServiceResponseError + +from .models import LocationMode + +try: + _unicode_type = unicode +except NameError: + _unicode_type = str + + +_LOGGER = logging.getLogger(__name__) + + +def encode_base64(data): + if isinstance(data, _unicode_type): + data = data.encode('utf-8') + encoded = base64.b64encode(data) + return encoded.decode('utf-8') + + +def is_retry(response, mode): + """Is this method/status code retryable? (Based on whitelists and control + variables such as the number of total retries to allow, whether to + respect the Retry-After header, whether this header is present, and + whether the returned status code is on the list of status codes to + be retried upon on the presence of the aforementioned header) + """ + status = response.http_response.status_code + if 300 <= status < 500: + # An exception occured, but in most cases it was expected. Examples could + # include a 309 Conflict or 412 Precondition Failed. + if status == 404 and mode == LocationMode.SECONDARY: + # Response code 404 should be retried if secondary was used. + return True + if status == 408: + # Response code 408 is a timeout and should be retried. + return True + return False + if status >= 500: + # Response codes above 500 with the exception of 501 Not Implemented and + # 505 Version Not Supported indicate a server issue and should be retried. + if status in [501, 505]: + return False + return True + return False + + +def urljoin(base_url, stub_url): + parsed = urlparse(base_url) + parsed = parsed._replace(path=parsed.path + '/' + stub_url) + return parsed.geturl() + + +class QueueMessagePolicy(SansIOHTTPPolicy): + + def on_request(self, request, **kwargs): + message_id = request.context.options.pop('queue_message_id', None) + if message_id: + request.http_request.url = urljoin( + request.http_request.url, + message_id) + + +class StorageBlobSettings(object): + + def __init__(self, **kwargs): + self.max_single_put_size = kwargs.get('max_single_put_size', 64 * 1024 * 1024) + self.copy_polling_interval = 15 + + # Block blob uploads + self.max_block_size = kwargs.get('max_block_size', 4 * 1024 * 1024) + self.min_large_block_upload_threshold = kwargs.get('min_large_block_upload_threshold', 4 * 1024 * 1024 + 1) + self.use_byte_buffer = False + + # Page blob uploads + self.max_page_size = 4 * 1024 * 1024 + + # Blob downloads + self.max_single_get_size = 32 * 1024 * 1024 + self.max_chunk_get_size = 4 * 1024 * 1024 + + +class StorageHeadersPolicy(HeadersPolicy): + + def on_request(self, request, **kwargs): + # type: (PipelineRequest, Any) -> None + super(StorageHeadersPolicy, self).on_request(request) + current_time = format_date_time(time()) + request.http_request.headers['x-ms-date'] = current_time + + custom_id = request.context.options.pop('client_request_id', None) + request.http_request.headers['x-ms-client-request-id'] = custom_id or str(uuid.uuid1()) + + +class StorageHosts(SansIOHTTPPolicy): + + def __init__(self, hosts=None, **kwargs): # pylint: disable=unused-argument + self.hosts = hosts + super(StorageHosts, self).__init__() + + def on_request(self, request, **kwargs): + # type: (PipelineRequest, Any) -> None + request.context.options['hosts'] = self.hosts + parsed_url = urlparse(request.http_request.url) + + # Detect what location mode we're currently requesting with + location_mode = LocationMode.PRIMARY + for key, value in self.hosts.items(): + if parsed_url.netloc == value: + location_mode = key + + # See if a specific location mode has been specified, and if so, redirect + use_location = request.context.options.pop('use_location', None) + if use_location: + # Lock retries to the specific location + request.context.options['retry_to_secondary'] = False + if use_location not in self.hosts: + raise ValueError("Attempting to use undefined host location {}".format(use_location)) + if use_location != location_mode: + # Update request URL to use the specified location + updated = parsed_url._replace(netloc=self.hosts[use_location]) + request.http_request.url = updated.geturl() + location_mode = use_location + + request.context.options['location_mode'] = location_mode + + +class StorageLoggingPolicy(NetworkTraceLoggingPolicy): + """A policy that logs HTTP request and response to the DEBUG logger. + + This accepts both global configuration, and per-request level with "enable_http_logger" + """ + + def on_request(self, request, **kwargs): + # type: (PipelineRequest, Any) -> None + http_request = request.http_request + options = request.context.options + if options.pop("logging_enable", self.enable_http_logger): + request.context["logging_enable"] = True + if not _LOGGER.isEnabledFor(logging.DEBUG): + return + + try: + log_url = http_request.url + query_params = http_request.query + if 'sig' in query_params: + log_url = log_url.replace(query_params['sig'], "sig=*****") + _LOGGER.debug("Request URL: %r", log_url) + _LOGGER.debug("Request method: %r", http_request.method) + _LOGGER.debug("Request headers:") + for header, value in http_request.headers.items(): + if header.lower() == 'authorization': + value = '*****' + elif header.lower() == 'x-ms-copy-source' and 'sig' in value: + # take the url apart and scrub away the signed signature + scheme, netloc, path, params, query, fragment = urlparse(value) + parsed_qs = dict(parse_qsl(query)) + parsed_qs['sig'] = '*****' + + # the SAS needs to be put back together + value = urlunparse((scheme, netloc, path, params, urlencode(parsed_qs), fragment)) + + _LOGGER.debug(" %r: %r", header, value) + _LOGGER.debug("Request body:") + + # We don't want to log the binary data of a file upload. + if isinstance(http_request.body, types.GeneratorType): + _LOGGER.debug("File upload") + else: + _LOGGER.debug(str(http_request.body)) + except Exception as err: # pylint: disable=broad-except + _LOGGER.debug("Failed to log request: %r", err) + + def on_response(self, request, response, **kwargs): + # type: (PipelineRequest, PipelineResponse, Any) -> None + if response.context.pop("logging_enable", self.enable_http_logger): + if not _LOGGER.isEnabledFor(logging.DEBUG): + return + + try: + _LOGGER.debug("Response status: %r", response.http_response.status_code) + _LOGGER.debug("Response headers:") + for res_header, value in response.http_response.headers.items(): + _LOGGER.debug(" %r: %r", res_header, value) + + # We don't want to log binary data if the response is a file. + _LOGGER.debug("Response content:") + pattern = re.compile(r'attachment; ?filename=["\w.]+', re.IGNORECASE) + header = response.http_response.headers.get('content-disposition') + + if header and pattern.match(header): + filename = header.partition('=')[2] + _LOGGER.debug("File attachments: %s", filename) + elif response.http_response.headers.get("content-type", "").endswith("octet-stream"): + _LOGGER.debug("Body contains binary data.") + elif response.http_response.headers.get("content-type", "").startswith("image"): + _LOGGER.debug("Body contains image data.") + else: + if response.context.options.get('stream', False): + _LOGGER.debug("Body is streamable") + else: + _LOGGER.debug(response.http_response.text()) + except Exception as err: # pylint: disable=broad-except + _LOGGER.debug("Failed to log response: %s", repr(err)) + + +class StorageRequestHook(SansIOHTTPPolicy): + + def __init__(self, **kwargs): # pylint: disable=unused-argument + self._request_callback = kwargs.get('raw_request_hook') + super(StorageRequestHook, self).__init__() + + def on_request(self, request, **kwargs): + # type: (PipelineRequest) -> PipelineResponse + request_callback = request.context.options.pop('raw_request_hook', self._request_callback) + if request_callback: + request_callback(request) + + +class StorageResponseHook(HTTPPolicy): + + def __init__(self, **kwargs): # pylint: disable=unused-argument + self._response_callback = kwargs.get('raw_response_hook') + super(StorageResponseHook, self).__init__() + + def send(self, request): + # type: (PipelineRequest) -> PipelineResponse + data_stream_total = request.context.get('data_stream_total') or \ + request.context.options.pop('data_stream_total', None) + download_stream_current = request.context.get('download_stream_current') or \ + request.context.options.pop('download_stream_current', None) + upload_stream_current = request.context.get('upload_stream_current') or \ + request.context.options.pop('upload_stream_current', None) + response_callback = request.context.get('response_callback') or \ + request.context.options.pop('raw_response_hook', self._response_callback) + + response = self.next.send(request) + will_retry = is_retry(response, request.context.options.get('mode')) + if not will_retry and download_stream_current is not None: + download_stream_current += int(response.http_response.headers.get('Content-Length', 0)) + if data_stream_total is None: + content_range = response.http_response.headers.get('Content-Range') + if content_range: + data_stream_total = int(content_range.split(' ', 1)[1].split('/', 1)[1]) + else: + data_stream_total = download_stream_current + elif not will_retry and upload_stream_current is not None: + upload_stream_current += int(response.http_request.headers.get('Content-Length', 0)) + for pipeline_obj in [request, response]: + pipeline_obj.context['data_stream_total'] = data_stream_total + pipeline_obj.context['download_stream_current'] = download_stream_current + pipeline_obj.context['upload_stream_current'] = upload_stream_current + if response_callback: + response_callback(response) + request.context['response_callback'] = response_callback + return response + + +class StorageContentValidation(SansIOHTTPPolicy): + """A simple policy that sends the given headers + with the request. + + This will overwrite any headers already defined in the request. + """ + header_name = 'Content-MD5' + + def __init__(self, **kwargs): # pylint: disable=unused-argument + super(StorageContentValidation, self).__init__() + + @staticmethod + def get_content_md5(data): + md5 = hashlib.md5() + if isinstance(data, bytes): + md5.update(data) + elif hasattr(data, 'read'): + pos = 0 + try: + pos = data.tell() + except: # pylint: disable=bare-except + pass + for chunk in iter(lambda: data.read(4096), b""): + md5.update(chunk) + try: + data.seek(pos, SEEK_SET) + except (AttributeError, IOError): + raise ValueError("Data should be bytes or a seekable file-like object.") + else: + raise ValueError("Data should be bytes or a seekable file-like object.") + + return md5.digest() + + def on_request(self, request, **kwargs): + # type: (PipelineRequest, Any) -> None + validate_content = request.context.options.pop('validate_content', False) + if validate_content and request.http_request.method != 'GET': + computed_md5 = encode_base64(StorageContentValidation.get_content_md5(request.http_request.data)) + request.http_request.headers[self.header_name] = computed_md5 + request.context['validate_content_md5'] = computed_md5 + request.context['validate_content'] = validate_content + + def on_response(self, request, response, **kwargs): + if response.context.get('validate_content', False) and response.http_response.headers.get('content-md5'): + computed_md5 = request.context.get('validate_content_md5') or \ + encode_base64(StorageContentValidation.get_content_md5(response.http_response.body())) + if response.http_response.headers['content-md5'] != computed_md5: + raise AzureError( + 'MD5 mismatch. Expected value is \'{0}\', computed value is \'{1}\'.'.format( + response.http_response.headers['content-md5'], computed_md5), + response=response.http_response + ) + + +class StorageRetryPolicy(HTTPPolicy): + """ + The base class for Exponential and Linear retries containing shared code. + """ + + def __init__(self, **kwargs): + self.total_retries = kwargs.pop('retry_total', 10) + self.connect_retries = kwargs.pop('retry_connect', 3) + self.read_retries = kwargs.pop('retry_read', 3) + self.status_retries = kwargs.pop('retry_status', 3) + self.retry_to_secondary = kwargs.pop('retry_to_secondary', False) + super(StorageRetryPolicy, self).__init__() + + def _set_next_host_location(self, settings, request): # pylint: disable=no-self-use + """ + A function which sets the next host location on the request, if applicable. + + :param ~azure.storage.models.RetryContext context: + The retry context containing the previous host location and the request + to evaluate and possibly modify. + """ + if settings['hosts'] and all(settings['hosts'].values()): + url = urlparse(request.url) + # If there's more than one possible location, retry to the alternative + if settings['mode'] == LocationMode.PRIMARY: + settings['mode'] = LocationMode.SECONDARY + else: + settings['mode'] = LocationMode.PRIMARY + updated = url._replace(netloc=settings['hosts'].get(settings['mode'])) + request.url = updated.geturl() + + def configure_retries(self, request): # pylint: disable=no-self-use + body_position = None + if hasattr(request.http_request.body, 'read'): + try: + body_position = request.http_request.body.tell() + except (AttributeError, UnsupportedOperation): + # if body position cannot be obtained, then retries will not work + pass + options = request.context.options + return { + 'total': options.pop("retry_total", self.total_retries), + 'connect': options.pop("retry_connect", self.connect_retries), + 'read': options.pop("retry_read", self.read_retries), + 'status': options.pop("retry_status", self.status_retries), + 'retry_secondary': options.pop("retry_to_secondary", self.retry_to_secondary), + 'mode': options.pop("location_mode", LocationMode.PRIMARY), + 'hosts': options.pop("hosts", None), + 'hook': options.pop("retry_hook", None), + 'body_position': body_position, + 'count': 0, + 'history': [] + } + + def get_backoff_time(self, settings): # pylint: disable=unused-argument,no-self-use + """ Formula for computing the current backoff. + Should be calculated by child class. + + :rtype: float + """ + return 0 + + def sleep(self, settings, transport): + backoff = self.get_backoff_time(settings) + if not backoff or backoff < 0: + return + transport.sleep(backoff) + + def is_exhausted(self, settings): # pylint: disable=no-self-use + """Are we out of retries?""" + retry_counts = (settings['total'], settings['connect'], settings['read'], settings['status']) + retry_counts = list(filter(None, retry_counts)) + if not retry_counts: + return False + + return min(retry_counts) < 0 + + def increment(self, settings, request, response=None, error=None): + """Increment the retry counters. + + :param response: A pipeline response object. + :param error: An error encountered during the request, or + None if the response was received successfully. + + :return: Whether the retry attempts are exhausted. + """ + settings['total'] -= 1 + + if error and isinstance(error, ServiceRequestError): + # Errors when we're fairly sure that the server did not receive the + # request, so it should be safe to retry. + settings['connect'] -= 1 + settings['history'].append(RequestHistory(request, error=error)) + + elif error and isinstance(error, ServiceResponseError): + # Errors that occur after the request has been started, so we should + # assume that the server began processing it. + settings['read'] -= 1 + settings['history'].append(RequestHistory(request, error=error)) + + else: + # Incrementing because of a server error like a 500 in + # status_forcelist and a the given method is in the whitelist + if response: + settings['status'] -= 1 + settings['history'].append(RequestHistory(request, http_response=response)) + + if not self.is_exhausted(settings): + if request.method not in ['PUT'] and settings['retry_secondary']: + self._set_next_host_location(settings, request) + + # rewind the request body if it is a stream + if request.body and hasattr(request.body, 'read'): + # no position was saved, then retry would not work + if settings['body_position'] is None: + return False + try: + # attempt to rewind the body to the initial position + request.body.seek(settings['body_position'], SEEK_SET) + except UnsupportedOperation: + # if body is not seekable, then retry would not work + return False + if settings['hook']: + settings['hook']( + request=request, + response=response, + error=error, + retry_count=settings['count'], + location_mode=settings['mode']) + settings['count'] += 1 + return True + return False + + def send(self, request): + retries_remaining = True + response = None + retry_settings = self.configure_retries(request) + while retries_remaining: + try: + response = self.next.send(request) + if is_retry(response, retry_settings['mode']): + retries_remaining = self.increment( + retry_settings, + request=request.http_request, + response=response.http_response) + if retries_remaining: + self.sleep(retry_settings, request.context.transport) + + continue + break + except AzureError as err: + retries_remaining = self.increment( + retry_settings, request=request.http_request, error=err) + if retries_remaining: + self.sleep(retry_settings, request.context.transport) + continue + raise err + if retry_settings['history']: + response.context['history'] = retry_settings['history'] + response.http_response.location_mode = retry_settings['mode'] + return response + + +class NoRetry(StorageRetryPolicy): + + def __init__(self): + super(NoRetry, self).__init__(retry_total=0) + + def increment(self, *args, **kwargs): # pylint: disable=unused-argument,arguments-differ + return False + + +class ExponentialRetry(StorageRetryPolicy): + """Exponential retry.""" + + def __init__(self, initial_backoff=15, increment_base=3, retry_total=3, + retry_to_secondary=False, random_jitter_range=3, **kwargs): + ''' + Constructs an Exponential retry object. The initial_backoff is used for + the first retry. Subsequent retries are retried after initial_backoff + + increment_power^retry_count seconds. For example, by default the first retry + occurs after 15 seconds, the second after (15+3^1) = 18 seconds, and the + third after (15+3^2) = 24 seconds. + + :param int initial_backoff: + The initial backoff interval, in seconds, for the first retry. + :param int increment_base: + The base, in seconds, to increment the initial_backoff by after the + first retry. + :param int max_attempts: + The maximum number of retry attempts. + :param bool retry_to_secondary: + Whether the request should be retried to secondary, if able. This should + only be enabled of RA-GRS accounts are used and potentially stale data + can be handled. + :param int random_jitter_range: + A number in seconds which indicates a range to jitter/randomize for the back-off interval. + For example, a random_jitter_range of 3 results in the back-off interval x to vary between x+3 and x-3. + ''' + self.initial_backoff = initial_backoff + self.increment_base = increment_base + self.random_jitter_range = random_jitter_range + super(ExponentialRetry, self).__init__( + retry_total=retry_total, retry_to_secondary=retry_to_secondary, **kwargs) + + def get_backoff_time(self, settings): + """ + Calculates how long to sleep before retrying. + + :return: + An integer indicating how long to wait before retrying the request, + or None to indicate no retry should be performed. + :rtype: int or None + """ + random_generator = random.Random() + backoff = self.initial_backoff + (0 if settings['count'] == 0 else pow(self.increment_base, settings['count'])) + random_range_start = backoff - self.random_jitter_range if backoff > self.random_jitter_range else 0 + random_range_end = backoff + self.random_jitter_range + return random_generator.uniform(random_range_start, random_range_end) + + +class LinearRetry(StorageRetryPolicy): + """Linear retry.""" + + def __init__(self, backoff=15, retry_total=3, retry_to_secondary=False, random_jitter_range=3, **kwargs): + """ + Constructs a Linear retry object. + + :param int backoff: + The backoff interval, in seconds, between retries. + :param int max_attempts: + The maximum number of retry attempts. + :param bool retry_to_secondary: + Whether the request should be retried to secondary, if able. This should + only be enabled of RA-GRS accounts are used and potentially stale data + can be handled. + :param int random_jitter_range: + A number in seconds which indicates a range to jitter/randomize for the back-off interval. + For example, a random_jitter_range of 3 results in the back-off interval x to vary between x+3 and x-3. + """ + self.backoff = backoff + self.random_jitter_range = random_jitter_range + super(LinearRetry, self).__init__( + retry_total=retry_total, retry_to_secondary=retry_to_secondary, **kwargs) + + def get_backoff_time(self, settings): + """ + Calculates how long to sleep before retrying. + + :return: + An integer indicating how long to wait before retrying the request, + or None to indicate no retry should be performed. + :rtype: int or None + """ + random_generator = random.Random() + # the backoff interval normally does not change, however there is the possibility + # that it was modified by accessing the property directly after initializing the object + random_range_start = self.backoff - self.random_jitter_range \ + if self.backoff > self.random_jitter_range else 0 + random_range_end = self.backoff + self.random_jitter_range + return random_generator.uniform(random_range_start, random_range_end) diff --git a/sdk/storage/azure-storage-queue/azure/storage/queue/_shared_access_signature.py b/sdk/storage/azure-storage-queue/azure/storage/queue/_shared/shared_access_signature.py similarity index 57% rename from sdk/storage/azure-storage-queue/azure/storage/queue/_shared_access_signature.py rename to sdk/storage/azure-storage-queue/azure/storage/queue/_shared/shared_access_signature.py index 42cb8ee9e87b..cad3f270600b 100644 --- a/sdk/storage/azure-storage-queue/azure/storage/queue/_shared_access_signature.py +++ b/sdk/storage/azure-storage-queue/azure/storage/queue/_shared/shared_access_signature.py @@ -8,12 +8,12 @@ from datetime import date from .constants import X_MS_VERSION -from ._utils import _sign_string, url_quote, _QueryStringConstants +from .utils import _sign_string, url_quote, _QueryStringConstants if sys.version_info < (3,): def _str(value): - if isinstance(value, unicode): + if isinstance(value, unicode): # pylint: disable=undefined-variable return value.encode('utf-8') return str(value) @@ -24,12 +24,12 @@ def _str(value): def _to_utc_datetime(value): return value.strftime('%Y-%m-%dT%H:%M:%SZ') -# TODO: duplicate from blobs + class SharedAccessSignature(object): ''' Provides a factory for creating account access signature tokens with an account name and account key. Users can either - use the factory or can construct the appropriate service and use the + use the factory or can construct the appropriate service and use the generate_*_shared_access_signature method directly. ''' @@ -46,36 +46,37 @@ def __init__(self, account_name, account_key, x_ms_version=X_MS_VERSION): self.account_key = account_key self.x_ms_version = x_ms_version - def generate_account(self, resource_types, permission, expiry, start=None, + def generate_account(self, services, resource_types, permission, expiry, start=None, ip=None, protocol=None): ''' Generates a shared access signature for the account. - Use the returned signature with the sas_token parameter of the service + Use the returned signature with the sas_token parameter of the service or to create a new account object. + :param ResourceTypes resource_types: - Specifies the resource types that are accessible with the account - SAS. You can combine values to provide access to more than one - resource type. + Specifies the resource types that are accessible with the account + SAS. You can combine values to provide access to more than one + resource type. :param AccountPermissions permission: - The permissions associated with the shared access signature. The - user is restricted to operations allowed by the permissions. - Required unless an id is given referencing a stored access policy - which contains this field. This field must be omitted if it has been - specified in an associated stored access policy. You can combine + The permissions associated with the shared access signature. The + user is restricted to operations allowed by the permissions. + Required unless an id is given referencing a stored access policy + which contains this field. This field must be omitted if it has been + specified in an associated stored access policy. You can combine values to provide more than one permission. :param expiry: - The time at which the shared access signature becomes invalid. - Required unless an id is given referencing a stored access policy - which contains this field. This field must be omitted if it has - been specified in an associated stored access policy. Azure will always - convert values to UTC. If a date is passed in without timezone info, it + The time at which the shared access signature becomes invalid. + Required unless an id is given referencing a stored access policy + which contains this field. This field must be omitted if it has + been specified in an associated stored access policy. Azure will always + convert values to UTC. If a date is passed in without timezone info, it is assumed to be UTC. :type expiry: datetime or str :param start: - The time at which the shared access signature becomes valid. If - omitted, start time for this call is assumed to be the time when the - storage service receives the request. Azure will always convert values - to UTC. If a date is passed in without timezone info, it is assumed to + The time at which the shared access signature becomes valid. If + omitted, start time for this call is assumed to be the time when the + storage service receives the request. Azure will always convert values + to UTC. If a date is passed in without timezone info, it is assumed to be UTC. :type start: datetime or str :param str ip: @@ -90,20 +91,19 @@ def generate_account(self, resource_types, permission, expiry, start=None, ''' sas = _SharedAccessHelper() sas.add_base(permission, expiry, start, ip, protocol, self.x_ms_version) - sas.add_account('b', resource_types) + sas.add_account(services, resource_types) sas.add_account_signature(self.account_name, self.account_key) return sas.get_token() -# TODO: duplicate from blobs class _SharedAccessHelper(object): def __init__(self): self.query_dict = {} def _add_query(self, name, val): if val: - self.query_dict[name] = _str(val) if val else None + self.query_dict[name] = _str(val) if val is not None else None def add_base(self, permission, expiry, start, ip, protocol, x_ms_version): if isinstance(start, date): @@ -162,7 +162,7 @@ def get_value_to_append(query): get_value_to_append(_QueryStringConstants.SIGNED_PROTOCOL) + get_value_to_append(_QueryStringConstants.SIGNED_VERSION)) - if service == 'blob' or service == 'file': + if service in ['blob', 'file']: string_to_sign += \ (get_value_to_append(_QueryStringConstants.SIGNED_CACHE_CONTROL) + get_value_to_append(_QueryStringConstants.SIGNED_CONTENT_DISPOSITION) + @@ -200,6 +200,174 @@ def get_token(self): return '&'.join(['{0}={1}'.format(n, url_quote(v)) for n, v in self.query_dict.items() if v is not None]) +class BlobSharedAccessSignature(SharedAccessSignature): + ''' + Provides a factory for creating blob and container access + signature tokens with a common account name and account key. Users can either + use the factory or can construct the appropriate service and use the + generate_*_shared_access_signature method directly. + ''' + + def __init__(self, account_name, account_key): + ''' + :param str account_name: + The storage account name used to generate the shared access signatures. + :param str account_key: + The access key to generate the shares access signatures. + ''' + super(BlobSharedAccessSignature, self).__init__(account_name, account_key, x_ms_version=X_MS_VERSION) + + def generate_blob(self, container_name, blob_name, permission=None, + expiry=None, start=None, policy_id=None, ip=None, protocol=None, + cache_control=None, content_disposition=None, + content_encoding=None, content_language=None, + content_type=None): + ''' + Generates a shared access signature for the blob. + Use the returned signature with the sas_token parameter of any BlobService. + + :param str container_name: + Name of container. + :param str blob_name: + Name of blob. + :param BlobPermissions permission: + The permissions associated with the shared access signature. The + user is restricted to operations allowed by the permissions. + Permissions must be ordered read, write, delete, list. + Required unless an id is given referencing a stored access policy + which contains this field. This field must be omitted if it has been + specified in an associated stored access policy. + :param expiry: + The time at which the shared access signature becomes invalid. + Required unless an id is given referencing a stored access policy + which contains this field. This field must be omitted if it has + been specified in an associated stored access policy. Azure will always + convert values to UTC. If a date is passed in without timezone info, it + is assumed to be UTC. + :type expiry: datetime or str + :param start: + The time at which the shared access signature becomes valid. If + omitted, start time for this call is assumed to be the time when the + storage service receives the request. Azure will always convert values + to UTC. If a date is passed in without timezone info, it is assumed to + be UTC. + :type start: datetime or str + :param str id: + A unique value up to 64 characters in length that correlates to a + stored access policy. To create a stored access policy, use + set_blob_service_properties. + :param str ip: + Specifies an IP address or a range of IP addresses from which to accept requests. + If the IP address from which the request originates does not match the IP address + or address range specified on the SAS token, the request is not authenticated. + For example, specifying sip=168.1.5.65 or sip=168.1.5.60-168.1.5.70 on the SAS + restricts the request to those IP addresses. + :param str protocol: + Specifies the protocol permitted for a request made. The default value + is https,http. See :class:`~azure.storage.common.models.Protocol` for possible values. + :param str cache_control: + Response header value for Cache-Control when resource is accessed + using this shared access signature. + :param str content_disposition: + Response header value for Content-Disposition when resource is accessed + using this shared access signature. + :param str content_encoding: + Response header value for Content-Encoding when resource is accessed + using this shared access signature. + :param str content_language: + Response header value for Content-Language when resource is accessed + using this shared access signature. + :param str content_type: + Response header value for Content-Type when resource is accessed + using this shared access signature. + ''' + resource_path = container_name + '/' + blob_name + + sas = _SharedAccessHelper() + sas.add_base(permission, expiry, start, ip, protocol, self.x_ms_version) + sas.add_id(policy_id) + sas.add_resource('b') + sas.add_override_response_headers(cache_control, content_disposition, + content_encoding, content_language, + content_type) + sas.add_resource_signature(self.account_name, self.account_key, 'blob', resource_path) + + return sas.get_token() + + def generate_container(self, container_name, permission=None, expiry=None, + start=None, policy_id=None, ip=None, protocol=None, + cache_control=None, content_disposition=None, + content_encoding=None, content_language=None, + content_type=None): + ''' + Generates a shared access signature for the container. + Use the returned signature with the sas_token parameter of any BlobService. + + :param str container_name: + Name of container. + :param ContainerPermissions permission: + The permissions associated with the shared access signature. The + user is restricted to operations allowed by the permissions. + Permissions must be ordered read, write, delete, list. + Required unless an id is given referencing a stored access policy + which contains this field. This field must be omitted if it has been + specified in an associated stored access policy. + :param expiry: + The time at which the shared access signature becomes invalid. + Required unless an id is given referencing a stored access policy + which contains this field. This field must be omitted if it has + been specified in an associated stored access policy. Azure will always + convert values to UTC. If a date is passed in without timezone info, it + is assumed to be UTC. + :type expiry: datetime or str + :param start: + The time at which the shared access signature becomes valid. If + omitted, start time for this call is assumed to be the time when the + storage service receives the request. Azure will always convert values + to UTC. If a date is passed in without timezone info, it is assumed to + be UTC. + :type start: datetime or str + :param str policy_id: + A unique value up to 64 characters in length that correlates to a + stored access policy. To create a stored access policy, use + set_blob_service_properties. + :param str ip: + Specifies an IP address or a range of IP addresses from which to accept requests. + If the IP address from which the request originates does not match the IP address + or address range specified on the SAS token, the request is not authenticated. + For example, specifying sip=168.1.5.65 or sip=168.1.5.60-168.1.5.70 on the SAS + restricts the request to those IP addresses. + :param str protocol: + Specifies the protocol permitted for a request made. The default value + is https,http. See :class:`~azure.storage.common.models.Protocol` for possible values. + :param str cache_control: + Response header value for Cache-Control when resource is accessed + using this shared access signature. + :param str content_disposition: + Response header value for Content-Disposition when resource is accessed + using this shared access signature. + :param str content_encoding: + Response header value for Content-Encoding when resource is accessed + using this shared access signature. + :param str content_language: + Response header value for Content-Language when resource is accessed + using this shared access signature. + :param str content_type: + Response header value for Content-Type when resource is accessed + using this shared access signature. + ''' + sas = _SharedAccessHelper() + sas.add_base(permission, expiry, start, ip, protocol, self.x_ms_version) + sas.add_id(policy_id) + sas.add_resource('c') + sas.add_override_response_headers(cache_control, content_disposition, + content_encoding, content_language, + content_type) + sas.add_resource_signature(self.account_name, self.account_key, 'blob', container_name) + + return sas.get_token() + + class QueueSharedAccessSignature(SharedAccessSignature): ''' Provides a factory for creating queue shares access @@ -218,7 +386,7 @@ def __init__(self, account_name, account_key): super(QueueSharedAccessSignature, self).__init__(account_name, account_key, x_ms_version=X_MS_VERSION) def generate_queue(self, queue_name, permission=None, - expiry=None, start=None, id=None, + expiry=None, start=None, policy_id=None, ip=None, protocol=None): ''' Generates a shared access signature for the queue. @@ -247,7 +415,7 @@ def generate_queue(self, queue_name, permission=None, to UTC. If a date is passed in without timezone info, it is assumed to be UTC. :type start: datetime or str - :param str id: + :param str policy_id: A unique value up to 64 characters in length that correlates to a stored access policy. :param str ip: @@ -262,17 +430,15 @@ def generate_queue(self, queue_name, permission=None, ''' sas = _QueueSharedAccessHelper() sas.add_base(permission, expiry, start, ip, protocol, self.x_ms_version) - sas.add_id(id) + sas.add_id(policy_id) sas.add_resource_signature(self.account_name, self.account_key, queue_name) return sas.get_token() class _QueueSharedAccessHelper(_SharedAccessHelper): - def __init__(self): - super(_QueueSharedAccessHelper, self).__init__() - def add_resource_signature(self, account_name, account_key, path): + def add_resource_signature(self, account_name, account_key, path): # pylint: disable=arguments-differ def get_value_to_append(query): return_value = self.query_dict.get(query) or '' return return_value + '\n' diff --git a/sdk/storage/azure-storage-queue/azure/storage/queue/_shared/upload_chunking.py b/sdk/storage/azure-storage-queue/azure/storage/queue/_shared/upload_chunking.py new file mode 100644 index 000000000000..775c56853eac --- /dev/null +++ b/sdk/storage/azure-storage-queue/azure/storage/queue/_shared/upload_chunking.py @@ -0,0 +1,546 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +# pylint: disable=no-self-use + +from io import (BytesIO, IOBase, SEEK_CUR, SEEK_END, SEEK_SET, UnsupportedOperation) +from threading import Lock + +from math import ceil + +import six + +from .models import ModifiedAccessConditions +from .utils import ( + encode_base64, + url_quote, + get_length, + return_response_headers) +from .encryption import _get_blob_encryptor_and_padder + + +_LARGE_BLOB_UPLOAD_MAX_READ_BUFFER_SIZE = 4 * 1024 * 1024 +_ERROR_VALUE_SHOULD_BE_SEEKABLE_STREAM = '{0} should be a seekable file-like/io.IOBase type stream object.' + + +def upload_blob_chunks(blob_service, blob_size, block_size, stream, max_connections, validate_content, # pylint: disable=too-many-locals + access_conditions, uploader_class, append_conditions=None, modified_access_conditions=None, + timeout=None, content_encryption_key=None, initialization_vector=None, **kwargs): + + encryptor, padder = _get_blob_encryptor_and_padder( + content_encryption_key, + initialization_vector, + uploader_class is not PageBlobChunkUploader) + + uploader = uploader_class( + blob_service, + blob_size, + block_size, + stream, + max_connections > 1, + validate_content, + access_conditions, + append_conditions, + timeout, + encryptor, + padder, + **kwargs + ) + + # Access conditions do not work with parallelism + if max_connections > 1: + uploader.modified_access_conditions = None + else: + uploader.modified_access_conditions = modified_access_conditions + + if max_connections > 1: + import concurrent.futures + from threading import BoundedSemaphore + + # Ensures we bound the chunking so we only buffer and submit 'max_connections' + # amount of work items to the executor. This is necessary as the executor queue will keep + # accepting submitted work items, which results in buffering all the blocks if + # the max_connections + 1 ensures the next chunk is already buffered and ready for when + # the worker thread is available. + chunk_throttler = BoundedSemaphore(max_connections + 1) + + executor = concurrent.futures.ThreadPoolExecutor(max_connections) + futures = [] + running_futures = [] + + # Check for exceptions and fail fast. + for chunk in uploader.get_chunk_streams(): + for f in running_futures: + if f.done(): + if f.exception(): + raise f.exception() + running_futures.remove(f) + + chunk_throttler.acquire() + future = executor.submit(uploader.process_chunk, chunk) + + # Calls callback upon completion (even if the callback was added after the Future task is done). + future.add_done_callback(lambda x: chunk_throttler.release()) + futures.append(future) + running_futures.append(future) + + # result() will wait until completion and also raise any exceptions that may have been set. + range_ids = [f.result() for f in futures] + else: + range_ids = [uploader.process_chunk(result) for result in uploader.get_chunk_streams()] + + if any(range_ids): + return range_ids + return uploader.response_headers + + +def upload_blob_substream_blocks(blob_service, blob_size, block_size, stream, max_connections, + validate_content, access_conditions, uploader_class, + append_conditions=None, modified_access_conditions=None, timeout=None, **kwargs): + + uploader = uploader_class( + blob_service, + blob_size, + block_size, + stream, + max_connections > 1, + validate_content, + access_conditions, + append_conditions, + timeout, + None, + None, + **kwargs + ) + # ETag matching does not work with parallelism as a ranged upload may start + # before the previous finishes and provides an etag + if max_connections > 1: + uploader.modified_access_conditions = None + else: + uploader.modified_access_conditions = modified_access_conditions + + if max_connections > 1: + import concurrent.futures + executor = concurrent.futures.ThreadPoolExecutor(max_connections) + range_ids = list(executor.map(uploader.process_substream_block, uploader.get_substream_blocks())) + else: + range_ids = [uploader.process_substream_block(result) for result in uploader.get_substream_blocks()] + + return range_ids + + +class _BlobChunkUploader(object): # pylint: disable=too-many-instance-attributes + + def __init__(self, blob_service, blob_size, chunk_size, stream, parallel, validate_content, + access_conditions, append_conditions, timeout, encryptor, padder, **kwargs): + self.blob_service = blob_service + self.blob_size = blob_size + self.chunk_size = chunk_size + self.stream = stream + self.parallel = parallel + self.stream_start = stream.tell() if parallel else None + self.stream_lock = Lock() if parallel else None + self.progress_total = 0 + self.progress_lock = Lock() if parallel else None + self.validate_content = validate_content + self.lease_access_conditions = access_conditions + self.modified_access_conditions = None + self.append_conditions = append_conditions + self.timeout = timeout + self.encryptor = encryptor + self.padder = padder + self.response_headers = None + self.etag = None + self.last_modified = None + self.request_options = kwargs + + def get_chunk_streams(self): + index = 0 + while True: + data = b'' + read_size = self.chunk_size + + # Buffer until we either reach the end of the stream or get a whole chunk. + while True: + if self.blob_size: + read_size = min(self.chunk_size - len(data), self.blob_size - (index + len(data))) + temp = self.stream.read(read_size) + if not isinstance(temp, six.binary_type): + raise TypeError('Blob data should be of type bytes.') + data += temp or b"" + + # We have read an empty string and so are at the end + # of the buffer or we have read a full chunk. + if temp == b'' or len(data) == self.chunk_size: + break + + if len(data) == self.chunk_size: + if self.padder: + data = self.padder.update(data) + if self.encryptor: + data = self.encryptor.update(data) + yield index, data + else: + if self.padder: + data = self.padder.update(data) + self.padder.finalize() + if self.encryptor: + data = self.encryptor.update(data) + self.encryptor.finalize() + if data: + yield index, data + break + index += len(data) + + def process_chunk(self, chunk_data): + chunk_bytes = chunk_data[1] + chunk_offset = chunk_data[0] + return self._upload_chunk_with_progress(chunk_offset, chunk_bytes) + + def _update_progress(self, length): + if self.progress_lock is not None: + with self.progress_lock: + self.progress_total += length + else: + self.progress_total += length + + def _upload_chunk(self, chunk_offset, chunk_data): + raise NotImplementedError("Must be implemented by child class.") + + def _upload_chunk_with_progress(self, chunk_offset, chunk_data): + range_id = self._upload_chunk(chunk_offset, chunk_data) + self._update_progress(len(chunk_data)) + return range_id + + def get_substream_blocks(self): + assert self.chunk_size is not None + lock = self.stream_lock + blob_length = self.blob_size + + if blob_length is None: + blob_length = get_length(self.stream) + if blob_length is None: + raise ValueError("Unable to determine content length of upload data.") + + blocks = int(ceil(blob_length / (self.chunk_size * 1.0))) + last_block_size = self.chunk_size if blob_length % self.chunk_size == 0 else blob_length % self.chunk_size + + for i in range(blocks): + yield ('BlockId{}'.format("%05d" % i), + _SubStream(self.stream, i * self.chunk_size, last_block_size if i == blocks - 1 else self.chunk_size, + lock)) + + def process_substream_block(self, block_data): + return self._upload_substream_block_with_progress(block_data[0], block_data[1]) + + def _upload_substream_block(self, block_id, block_stream): + raise NotImplementedError("Must be implemented by child class.") + + def _upload_substream_block_with_progress(self, block_id, block_stream): + range_id = self._upload_substream_block(block_id, block_stream) + return range_id + + def set_response_properties(self, resp): + self.etag = resp.etag + self.last_modified = resp.last_modified + + +class BlockBlobChunkUploader(_BlobChunkUploader): + + def _upload_chunk(self, chunk_offset, chunk_data): + # TODO: This is incorrect, but works with recording. + block_id = encode_base64(url_quote(encode_base64('{0:032d}'.format(chunk_offset)))) + self.blob_service.stage_block( + block_id, + len(chunk_data), + chunk_data, + timeout=self.timeout, + lease_access_conditions=self.lease_access_conditions, + validate_content=self.validate_content, + data_stream_total=self.blob_size, + upload_stream_current=self.progress_total, + **self.request_options) + return block_id + + def _upload_substream_block(self, block_id, block_stream): + try: + self.blob_service.stage_block( + block_id, + len(block_stream), + block_stream, + validate_content=self.validate_content, + lease_access_conditions=self.lease_access_conditions, + timeout=self.timeout, + data_stream_total=self.blob_size, + upload_stream_current=self.progress_total, + **self.request_options) + finally: + block_stream.close() + return block_id + + +class PageBlobChunkUploader(_BlobChunkUploader): # pylint: disable=abstract-method + + def _is_chunk_empty(self, chunk_data): + # read until non-zero byte is encountered + # if reached the end without returning, then chunk_data is all 0's + for each_byte in chunk_data: + if each_byte not in [0, b'\x00']: + return False + return True + + def _upload_chunk(self, chunk_offset, chunk_data): + # avoid uploading the empty pages + if not self._is_chunk_empty(chunk_data): + chunk_end = chunk_offset + len(chunk_data) - 1 + content_range = 'bytes={0}-{1}'.format(chunk_offset, chunk_end) + computed_md5 = None + self.response_headers = self.blob_service.upload_pages( + chunk_data, + content_length=len(chunk_data), + transactional_content_md5=computed_md5, + timeout=self.timeout, + range=content_range, + lease_access_conditions=self.lease_access_conditions, + modified_access_conditions=self.modified_access_conditions, + validate_content=self.validate_content, + cls=return_response_headers, + data_stream_total=self.blob_size, + upload_stream_current=self.progress_total, + **self.request_options) + + if not self.parallel: + self.modified_access_conditions = ModifiedAccessConditions( + if_match=self.response_headers['etag']) + + +class AppendBlobChunkUploader(_BlobChunkUploader): # pylint: disable=abstract-method + + def __init__(self, *args, **kwargs): + super(AppendBlobChunkUploader, self).__init__(*args, **kwargs) + self.current_length = None + + def _upload_chunk(self, chunk_offset, chunk_data): + if self.current_length is None: + self.response_headers = self.blob_service.append_block( + chunk_data, + content_length=len(chunk_data), + timeout=self.timeout, + lease_access_conditions=self.lease_access_conditions, + modified_access_conditions=self.modified_access_conditions, + validate_content=self.validate_content, + append_position_access_conditions=self.append_conditions, + cls=return_response_headers, + data_stream_total=self.blob_size, + upload_stream_current=self.progress_total, + **self.request_options + ) + self.current_length = int(self.response_headers['blob_append_offset']) + else: + self.append_conditions.append_position = self.current_length + chunk_offset + self.response_headers = self.blob_service.append_block( + chunk_data, + content_length=len(chunk_data), + timeout=self.timeout, + lease_access_conditions=self.lease_access_conditions, + modified_access_conditions=self.modified_access_conditions, + validate_content=self.validate_content, + append_position_access_conditions=self.append_conditions, + cls=return_response_headers, + data_stream_total=self.blob_size, + upload_stream_current=self.progress_total, + **self.request_options + ) + + +class _SubStream(IOBase): + def __init__(self, wrapped_stream, stream_begin_index, length, lockObj): + # Python 2.7: file-like objects created with open() typically support seek(), but are not + # derivations of io.IOBase and thus do not implement seekable(). + # Python > 3.0: file-like objects created with open() are derived from io.IOBase. + try: + # only the main thread runs this, so there's no need grabbing the lock + wrapped_stream.seek(0, SEEK_CUR) + except: + raise ValueError("Wrapped stream must support seek().") + + self._lock = lockObj + self._wrapped_stream = wrapped_stream + self._position = 0 + self._stream_begin_index = stream_begin_index + self._length = length + self._buffer = BytesIO() + + # we must avoid buffering more than necessary, and also not use up too much memory + # so the max buffer size is capped at 4MB + self._max_buffer_size = length if length < _LARGE_BLOB_UPLOAD_MAX_READ_BUFFER_SIZE \ + else _LARGE_BLOB_UPLOAD_MAX_READ_BUFFER_SIZE + self._current_buffer_start = 0 + self._current_buffer_size = 0 + super(_SubStream, self).__init__() + + def __len__(self): + return self._length + + def close(self): + if self._buffer: + self._buffer.close() + self._wrapped_stream = None + IOBase.close(self) + + def fileno(self): + return self._wrapped_stream.fileno() + + def flush(self): + pass + + def read(self, n): + if self.closed: + raise ValueError("Stream is closed.") + + # adjust if out of bounds + if n + self._position >= self._length: + n = self._length - self._position + + # return fast + if n == 0 or self._buffer.closed: + return b'' + + # attempt first read from the read buffer and update position + read_buffer = self._buffer.read(n) + bytes_read = len(read_buffer) + bytes_remaining = n - bytes_read + self._position += bytes_read + + # repopulate the read buffer from the underlying stream to fulfill the request + # ensure the seek and read operations are done atomically (only if a lock is provided) + if bytes_remaining > 0: + with self._buffer: + # either read in the max buffer size specified on the class + # or read in just enough data for the current block/sub stream + current_max_buffer_size = min(self._max_buffer_size, self._length - self._position) + + # lock is only defined if max_connections > 1 (parallel uploads) + if self._lock: + with self._lock: + # reposition the underlying stream to match the start of the data to read + absolute_position = self._stream_begin_index + self._position + self._wrapped_stream.seek(absolute_position, SEEK_SET) + # If we can't seek to the right location, our read will be corrupted so fail fast. + if self._wrapped_stream.tell() != absolute_position: + raise IOError("Stream failed to seek to the desired location.") + buffer_from_stream = self._wrapped_stream.read(current_max_buffer_size) + else: + buffer_from_stream = self._wrapped_stream.read(current_max_buffer_size) + + if buffer_from_stream: + # update the buffer with new data from the wrapped stream + # we need to note down the start position and size of the buffer, in case seek is performed later + self._buffer = BytesIO(buffer_from_stream) + self._current_buffer_start = self._position + self._current_buffer_size = len(buffer_from_stream) + + # read the remaining bytes from the new buffer and update position + second_read_buffer = self._buffer.read(bytes_remaining) + read_buffer += second_read_buffer + self._position += len(second_read_buffer) + + return read_buffer + + def readable(self): + return True + + def readinto(self, b): + raise UnsupportedOperation + + def seek(self, offset, whence=0): + if whence is SEEK_SET: + start_index = 0 + elif whence is SEEK_CUR: + start_index = self._position + elif whence is SEEK_END: + start_index = self._length + offset = - offset + else: + raise ValueError("Invalid argument for the 'whence' parameter.") + + pos = start_index + offset + + if pos > self._length: + pos = self._length + elif pos < 0: + pos = 0 + + # check if buffer is still valid + # if not, drop buffer + if pos < self._current_buffer_start or pos >= self._current_buffer_start + self._current_buffer_size: + self._buffer.close() + self._buffer = BytesIO() + else: # if yes seek to correct position + delta = pos - self._current_buffer_start + self._buffer.seek(delta, SEEK_SET) + + self._position = pos + return pos + + def seekable(self): + return True + + def tell(self): + return self._position + + def write(self): + raise UnsupportedOperation + + def writelines(self): + raise UnsupportedOperation + + def writeable(self): + return False + + +class IterStreamer(object): + """ + File-like streaming iterator. + """ + def __init__(self, generator, encoding='UTF-8'): + self.generator = generator + self.iterator = iter(generator) + self.leftover = b'' + self.encoding = encoding + + def __len__(self): + return self.generator.__len__() + + def __iter__(self): + return self.iterator + + def seekable(self): + return False + + def next(self): + return next(self.iterator) + + def tell(self, *args, **kwargs): + raise UnsupportedOperation("Data generator does not support tell.") + + def seek(self, *args, **kwargs): + raise UnsupportedOperation("Data generator is unseekable.") + + def read(self, size): + data = self.leftover + count = len(self.leftover) + try: + while count < size: + chunk = self.next() + if isinstance(chunk, six.text_type): + chunk = chunk.encode(self.encoding) + data += chunk + count += len(chunk) + except StopIteration: + pass + + if count > size: + self.leftover = data[size:] + + return data[:size] diff --git a/sdk/storage/azure-storage-queue/azure/storage/queue/_shared/utils.py b/sdk/storage/azure-storage-queue/azure/storage/queue/_shared/utils.py new file mode 100644 index 000000000000..e15ce097618f --- /dev/null +++ b/sdk/storage/azure-storage-queue/azure/storage/queue/_shared/utils.py @@ -0,0 +1,607 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- + +from typing import ( # pylint: disable=unused-import + Union, Optional, Any, Iterable, Dict, List, Type, + TYPE_CHECKING +) +import base64 +import hashlib +import hmac +import logging +from os import fstat +from io import (SEEK_END, SEEK_SET, UnsupportedOperation) + +try: + from urllib.parse import quote, unquote, parse_qs +except ImportError: + from urlparse import parse_qs + from urllib2 import quote, unquote + +import six +import isodate + +from azure.core import Configuration +from azure.core.exceptions import raise_with_traceback +from azure.core.pipeline import Pipeline +from azure.core.pipeline.transport import RequestsTransport +from azure.core.pipeline.policies import ( + UserAgentPolicy, + RedirectPolicy, + ContentDecodePolicy, + BearerTokenCredentialPolicy, + ProxyPolicy) +from azure.core.exceptions import ( + HttpResponseError, + ResourceNotFoundError, + ResourceModifiedError, + ResourceExistsError, + ClientAuthenticationError, + DecodeError) + +from .constants import STORAGE_OAUTH_SCOPE, SERVICE_HOST_BASE, DEFAULT_SOCKET_TIMEOUT +from .models import LocationMode, StorageErrorCode +from .authentication import SharedKeyCredentialPolicy +from .policies import ( + StorageBlobSettings, + StorageHeadersPolicy, + StorageContentValidation, + StorageRequestHook, + StorageResponseHook, + StorageLoggingPolicy, + StorageHosts, + QueueMessagePolicy, + ExponentialRetry) + + +if TYPE_CHECKING: + from datetime import datetime + from azure.core.pipeline.transport import HttpTransport + from azure.core.pipeline.policies import HTTPPolicy + from azure.core.exceptions import AzureError + + +_LOGGER = logging.getLogger(__name__) + + +class _QueryStringConstants(object): + SIGNED_SIGNATURE = 'sig' + SIGNED_PERMISSION = 'sp' + SIGNED_START = 'st' + SIGNED_EXPIRY = 'se' + SIGNED_RESOURCE = 'sr' + SIGNED_IDENTIFIER = 'si' + SIGNED_IP = 'sip' + SIGNED_PROTOCOL = 'spr' + SIGNED_VERSION = 'sv' + SIGNED_CACHE_CONTROL = 'rscc' + SIGNED_CONTENT_DISPOSITION = 'rscd' + SIGNED_CONTENT_ENCODING = 'rsce' + SIGNED_CONTENT_LANGUAGE = 'rscl' + SIGNED_CONTENT_TYPE = 'rsct' + START_PK = 'spk' + START_RK = 'srk' + END_PK = 'epk' + END_RK = 'erk' + SIGNED_RESOURCE_TYPES = 'srt' + SIGNED_SERVICES = 'ss' + + @staticmethod + def to_list(): + return [ + _QueryStringConstants.SIGNED_SIGNATURE, + _QueryStringConstants.SIGNED_PERMISSION, + _QueryStringConstants.SIGNED_START, + _QueryStringConstants.SIGNED_EXPIRY, + _QueryStringConstants.SIGNED_RESOURCE, + _QueryStringConstants.SIGNED_IDENTIFIER, + _QueryStringConstants.SIGNED_IP, + _QueryStringConstants.SIGNED_PROTOCOL, + _QueryStringConstants.SIGNED_VERSION, + _QueryStringConstants.SIGNED_CACHE_CONTROL, + _QueryStringConstants.SIGNED_CONTENT_DISPOSITION, + _QueryStringConstants.SIGNED_CONTENT_ENCODING, + _QueryStringConstants.SIGNED_CONTENT_LANGUAGE, + _QueryStringConstants.SIGNED_CONTENT_TYPE, + _QueryStringConstants.START_PK, + _QueryStringConstants.START_RK, + _QueryStringConstants.END_PK, + _QueryStringConstants.END_RK, + _QueryStringConstants.SIGNED_RESOURCE_TYPES, + _QueryStringConstants.SIGNED_SERVICES, + ] + + +class StorageAccountHostsMixin(object): + + def __init__( + self, parsed_url, # type: str + service, # type: str + credential=None, # type: Optional[Any] + **kwargs # type: Any + ): + # type: (...) -> None + self._location_mode = kwargs.get('_location_mode', LocationMode.PRIMARY) + self._hosts = kwargs.get('_hosts') + self.scheme = parsed_url.scheme + + if service not in ['blob', 'queue', 'file']: + raise ValueError("Invalid service: {}".format(service)) + account = parsed_url.netloc.split(".{}.core.".format(service)) + secondary_hostname = None + self.credential = format_shared_key_credential(account, credential) + if self.scheme.lower() != 'https' and hasattr(self.credential, 'get_token'): + raise ValueError("Token credential is only supported with HTTPS.") + if hasattr(self.credential, 'account_name'): + secondary_hostname = "{}-secondary.{}.{}".format( + self.credential.account_name, service, SERVICE_HOST_BASE) + + if not self._hosts: + if len(account) > 1: + secondary_hostname = parsed_url.netloc.replace( + account[0], + account[0] + '-secondary') + if kwargs.get('secondary_hostname'): + secondary_hostname = kwargs['secondary_hostname'] + self._hosts = { + LocationMode.PRIMARY: parsed_url.netloc, + LocationMode.SECONDARY: secondary_hostname} + + self.require_encryption = kwargs.get('require_encryption', False) + self.key_encryption_key = kwargs.get('key_encryption_key') + self.key_resolver_function = kwargs.get('key_resolver_function') + + self._config, self._pipeline = create_pipeline(self.credential, hosts=self._hosts, **kwargs) + + def __enter__(self): + self._client.__enter__() + return self + + def __exit__(self, *args): + self._client.__exit__(*args) + + @property + def url(self): + return self._format_url(self._hosts[self._location_mode]) + + @property + def primary_endpoint(self): + return self._format_url(self._hosts[LocationMode.PRIMARY]) + + @property + def primary_hostname(self): + return self._hosts[LocationMode.PRIMARY] + + @property + def secondary_endpoint(self): + if not self._hosts[LocationMode.SECONDARY]: + raise ValueError("No secondary host configured.") + return self._format_url(self._hosts[LocationMode.SECONDARY]) + + @property + def secondary_hostname(self): + return self._hosts[LocationMode.SECONDARY] + + @property + def location_mode(self): + return self._location_mode + + @location_mode.setter + def location_mode(self, value): + if self._hosts.get(value): + self._location_mode = value + self._client._config.url = self.url # pylint: disable=protected-access + else: + raise ValueError("No host URL for location mode: {}".format(value)) + + def _format_query_string(self, sas_token, credential, snapshot=None): + query_str = "?" + if snapshot: + query_str += 'snapshot={}&'.format(self.snapshot) + if sas_token and not credential: + query_str += sas_token + elif is_credential_sastoken(credential): + query_str += credential.lstrip('?') + credential = None + return query_str.rstrip('?&'), credential + + +def format_shared_key_credential(account, credential): + if isinstance(credential, six.string_types): + if len(account) < 2: + raise ValueError("Unable to determine account name for shared key credential.") + credential = { + 'account_name': account[0], + 'account_key': credential + } + if isinstance(credential, dict): + if 'account_name' not in credential: + raise ValueError("Shared key credential missing 'account_name") + if 'account_key' not in credential: + raise ValueError("Shared key credential missing 'account_key") + return SharedKeyCredentialPolicy(**credential) + return credential + + +service_connection_params = { + 'blob': {'primary': 'BlobEndpoint', 'secondary': 'BlobSecondaryEndpoint'}, + 'queue': {'primary': 'QueueEndpoint', 'secondary': 'QueueSecondaryEndpoint'}, + 'file': {'primary': 'FileEndpoint', 'secondary': 'FileSecondaryEndpoint'}, +} + + +def parse_connection_str(conn_str, credential, service): + conn_str = conn_str.rstrip(';') + conn_settings = dict([s.split('=', 1) for s in conn_str.split(';')]) # pylint: disable=consider-using-dict-comprehension + endpoints = service_connection_params[service] + primary = None + secondary = None + if not credential: + try: + credential = { + 'account_name': conn_settings['AccountName'], + 'account_key': conn_settings['AccountKey'] + } + except KeyError: + credential = conn_settings.get('SharedAccessSignature') + if endpoints['primary'] in conn_settings: + primary = conn_settings[endpoints['primary']] + if endpoints['secondary'] in conn_settings: + secondary = conn_settings[endpoints['secondary']] + else: + if endpoints['secondary'] in conn_settings: + raise ValueError("Connection string specifies only secondary endpoint.") + try: + primary = "{}://{}.{}.{}".format( + conn_settings['DefaultEndpointsProtocol'], + conn_settings['AccountName'], + service, + conn_settings['EndpointSuffix'] + ) + secondary = "{}-secondary.{}.{}".format( + conn_settings['AccountName'], + service, + conn_settings['EndpointSuffix'] + ) + except KeyError: + pass + + if not primary: + try: + primary = "https://{}.{}.{}".format( + conn_settings['AccountName'], + service, + conn_settings.get('EndpointSuffix', SERVICE_HOST_BASE) + ) + except KeyError: + raise ValueError("Connection string missing required connection details.") + return primary, secondary, credential + + +def url_quote(url): + return quote(url) + + +def url_unquote(url): + return unquote(url) + + +def encode_base64(data): + if isinstance(data, six.text_type): + data = data.encode('utf-8') + encoded = base64.b64encode(data) + return encoded.decode('utf-8') + + +def decode_base64(data): + if isinstance(data, six.text_type): + data = data.encode('utf-8') + decoded = base64.b64decode(data) + return decoded.decode('utf-8') + + +def _decode_base64_to_bytes(data): + if isinstance(data, six.text_type): + data = data.encode('utf-8') + return base64.b64decode(data) + + +def _sign_string(key, string_to_sign, key_is_base64=True): + if key_is_base64: + key = _decode_base64_to_bytes(key) + else: + if isinstance(key, six.text_type): + key = key.encode('utf-8') + if isinstance(string_to_sign, six.text_type): + string_to_sign = string_to_sign.encode('utf-8') + signed_hmac_sha256 = hmac.HMAC(key, string_to_sign, hashlib.sha256) + digest = signed_hmac_sha256.digest() + encoded_digest = encode_base64(digest) + return encoded_digest + + +def serialize_iso(attr): + """Serialize Datetime object into ISO-8601 formatted string. + + :param Datetime attr: Object to be serialized. + :rtype: str + :raises: ValueError if format invalid. + """ + if not attr: + return None + if isinstance(attr, str): + attr = isodate.parse_datetime(attr) + try: + utc = attr.utctimetuple() + if utc.tm_year > 9999 or utc.tm_year < 1: + raise OverflowError("Hit max or min date") + + date = "{:04}-{:02}-{:02}T{:02}:{:02}:{:02}".format( + utc.tm_year, utc.tm_mon, utc.tm_mday, + utc.tm_hour, utc.tm_min, utc.tm_sec) + return date + 'Z' + except (ValueError, OverflowError) as err: + msg = "Unable to serialize datetime object." + raise_with_traceback(ValueError, msg, err) + except AttributeError as err: + msg = "ISO-8601 object must be valid Datetime object." + raise_with_traceback(TypeError, msg, err) + + +def get_length(data): + length = None + # Check if object implements the __len__ method, covers most input cases such as bytearray. + try: + length = len(data) + except: # pylint: disable=bare-except + pass + + if not length: + # Check if the stream is a file-like stream object. + # If so, calculate the size using the file descriptor. + try: + fileno = data.fileno() + except (AttributeError, UnsupportedOperation): + pass + else: + return fstat(fileno).st_size + + # If the stream is seekable and tell() is implemented, calculate the stream size. + try: + current_position = data.tell() + data.seek(0, SEEK_END) + length = data.tell() - current_position + data.seek(current_position, SEEK_SET) + except (AttributeError, UnsupportedOperation): + pass + + return length + + +def read_length(data): + try: + if hasattr(data, 'read'): + read_data = b'' + for chunk in iter(lambda: data.read(4096), b""): + read_data += chunk + return len(read_data), read_data + if hasattr(data, '__iter__'): + read_data = b'' + for chunk in data: + read_data += chunk + return len(read_data), read_data + except: # pylint: disable=bare-except + pass + raise ValueError("Unable to calculate content length, please specify.") + + +def parse_length_from_content_range(content_range): + ''' + Parses the blob length from the content range header: bytes 1-3/65537 + ''' + if content_range is None: + return None + + # First, split in space and take the second half: '1-3/65537' + # Next, split on slash and take the second half: '65537' + # Finally, convert to an int: 65537 + return int(content_range.split(' ', 1)[1].split('/', 1)[1]) + + +def validate_and_format_range_headers( + start_range, end_range, start_range_required=True, + end_range_required=True, check_content_md5=False, align_to_page=False): + # If end range is provided, start range must be provided + if (start_range_required or end_range is not None) and start_range is None: + raise ValueError("start_range value cannot be None.") + if end_range_required and end_range is None: + raise ValueError("end_range value cannot be None.") + + # Page ranges must be 512 aligned + if align_to_page: + if start_range is not None and start_range % 512 != 0: + raise ValueError("Invalid page blob start_range: {0}. " + "The size must be aligned to a 512-byte boundary.".format(start_range)) + if end_range is not None and end_range % 512 != 511: + raise ValueError("Invalid page blob end_range: {0}. " + "The size must be aligned to a 512-byte boundary.".format(end_range)) + + # Format based on whether end_range is present + range_header = None + if end_range is not None: + range_header = 'bytes={0}-{1}'.format(start_range, end_range) + elif start_range is not None: + range_header = "bytes={0}-".format(start_range) + + # Content MD5 can only be provided for a complete range less than 4MB in size + range_validation = None + if check_content_md5: + if start_range is None or end_range is None: + raise ValueError("Both start and end range requied for MD5 content validation.") + if end_range - start_range > 4 * 1024 * 1024: + raise ValueError("Getting content MD5 for a range greater than 4MB is not supported.") + range_validation = 'true' + + return range_header, range_validation + + +def normalize_headers(headers): + normalized = {} + for key, value in headers.items(): + if key.startswith('x-ms-'): + key = key[5:] + normalized[key.lower().replace('-', '_')] = value + return normalized + + +def return_response_headers(response, deserialized, response_headers): # pylint: disable=unused-argument + return normalize_headers(response_headers) + + +def return_headers_and_deserialized(response, deserialized, response_headers): # pylint: disable=unused-argument + return normalize_headers(response_headers), deserialized + + +def return_context_and_deserialized(response, deserialized, response_headers): # pylint: disable=unused-argument + return response.location_mode, deserialized + + +def create_configuration(**kwargs): + # type: (**Any) -> Configuration + if 'connection_timeout' not in kwargs: + kwargs['connection_timeout'] = DEFAULT_SOCKET_TIMEOUT + config = Configuration(**kwargs) + config.headers_policy = StorageHeadersPolicy(**kwargs) + config.user_agent_policy = UserAgentPolicy(**kwargs) + config.retry_policy = kwargs.get('retry_policy') or ExponentialRetry(**kwargs) + config.redirect_policy = RedirectPolicy(**kwargs) + config.logging_policy = StorageLoggingPolicy(**kwargs) + config.proxy_policy = ProxyPolicy(**kwargs) + config.blob_settings = StorageBlobSettings(**kwargs) + return config + + +def create_pipeline(credential, **kwargs): + # type: (Configuration, Optional[HTTPPolicy], **Any) -> Tuple[Configuration, Pipeline] + credential_policy = None + if hasattr(credential, 'get_token'): + credential_policy = BearerTokenCredentialPolicy(credential, STORAGE_OAUTH_SCOPE) + elif isinstance(credential, SharedKeyCredentialPolicy): + credential_policy = credential + elif credential is not None: + raise TypeError("Unsupported credential: {}".format(credential)) + + config = create_configuration(**kwargs) + if kwargs.get('_pipeline'): + return config, kwargs['_pipeline'] + transport = kwargs.get('transport') # type: HttpTransport + if not transport: + transport = RequestsTransport(config) + policies = [ + QueueMessagePolicy(), + config.user_agent_policy, + config.headers_policy, + StorageContentValidation(), + StorageRequestHook(**kwargs), + credential_policy, + ContentDecodePolicy(), + config.redirect_policy, + StorageHosts(**kwargs), + config.retry_policy, + config.logging_policy, + StorageResponseHook(**kwargs), + ] + return config, Pipeline(transport, policies=policies) + + +def parse_query(query_str): + sas_values = _QueryStringConstants.to_list() + parsed_query = {k: v[0] for k, v in parse_qs(query_str).items()} + sas_params = ["{}={}".format(k, v) for k, v in parsed_query.items() if k in sas_values] + sas_token = None + if sas_params: + sas_token = '&'.join(sas_params) + + return parsed_query.get('snapshot'), sas_token + + +def is_credential_sastoken(credential): + if not credential or not isinstance(credential, six.string_types): + return False + + sas_values = _QueryStringConstants.to_list() + parsed_query = parse_qs(credential.lstrip('?')) + if parsed_query and all([k in sas_values for k in parsed_query.keys()]): + return True + return False + + +def add_metadata_headers(metadata): + # type: (Dict[str, str]) -> Dict[str, str] + headers = {} + if metadata: + for key, value in metadata.items(): + headers['x-ms-meta-{}'.format(key)] = value + return headers + + +def process_storage_error(storage_error): + raise_error = HttpResponseError + error_code = storage_error.response.headers.get('x-ms-error-code') + error_message = storage_error.message + additional_data = {} + try: + error_body = ContentDecodePolicy.deserialize_from_http_generics(storage_error.response) + if error_body: + for info in error_body.iter(): + if info.tag.lower() == 'code': + error_code = info.text + elif info.tag.lower() == 'message': + error_message = info.text + else: + additional_data[info.tag] = info.text + except DecodeError: + pass + + try: + if error_code: + error_code = StorageErrorCode(error_code) + if error_code in [StorageErrorCode.condition_not_met, + StorageErrorCode.blob_overwritten]: + raise_error = ResourceModifiedError + if error_code in [StorageErrorCode.invalid_authentication_info, + StorageErrorCode.authentication_failed]: + raise_error = ClientAuthenticationError + if error_code in [StorageErrorCode.resource_not_found, + StorageErrorCode.blob_not_found, + StorageErrorCode.queue_not_found, + StorageErrorCode.container_not_found]: + raise_error = ResourceNotFoundError + if error_code in [StorageErrorCode.account_already_exists, + StorageErrorCode.account_being_created, + StorageErrorCode.resource_already_exists, + StorageErrorCode.resource_type_mismatch, + StorageErrorCode.blob_already_exists, + StorageErrorCode.queue_already_exists, + StorageErrorCode.container_already_exists, + StorageErrorCode.container_being_deleted, + StorageErrorCode.queue_being_deleted]: + raise_error = ResourceExistsError + except ValueError: + # Got an unknown error code + pass + + try: + error_message += "\nErrorCode:{}".format(error_code.value) + except AttributeError: + error_message += "\nErrorCode:{}".format(error_code) + for name, info in additional_data.items(): + error_message += "\n{}:{}".format(name, info) + + error = raise_error(message=error_message, response=storage_error.response) + error.error_code = error_code + error.additional_info = additional_data + raise error diff --git a/sdk/storage/azure-storage-queue/azure/storage/queue/_utils.py b/sdk/storage/azure-storage-queue/azure/storage/queue/_utils.py deleted file mode 100644 index 84168b86ffaa..000000000000 --- a/sdk/storage/azure-storage-queue/azure/storage/queue/_utils.py +++ /dev/null @@ -1,223 +0,0 @@ -# ------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for -# license information. -# -------------------------------------------------------------------------- - -import logging -from typing import ( # pylint: disable=unused-import - Union, Optional, Any, Iterable, Dict, List, Type, - TYPE_CHECKING -) - -try: - from urllib.parse import urlparse, quote, unquote, parse_qs -except ImportError: - from urlparse import urlparse, parse_qs - from urllib2 import quote, unquote - -from azure.core import Configuration -from azure.core.exceptions import ResourceNotFoundError -from azure.core.pipeline import Pipeline -from azure.core.pipeline.transport import RequestsTransport -from .authentication import SharedKeyCredentials -from azure.core.pipeline.policies import ( - UserAgentPolicy, - RetryPolicy, - RedirectPolicy, - ContentDecodePolicy, - NetworkTraceLoggingPolicy, - ProxyPolicy, - CustomHookPolicy -) - -from ._policies import ( - StorageQueueSettings, - StorageHeadersPolicy, - StorageContentValidation, - StorageSecondaryAccount) -from ._generated import AzureQueueStorage - -if TYPE_CHECKING: - from azure.core.pipeline.transport import HttpTransport - from azure.core.pipeline.policies import HTTPPolicy - - -_LOGGER = logging.getLogger(__name__) - - -def create_client(url, pipeline): - # type: (str, Pipeline) -> AzureQueueStorage - return AzureQueueStorage(url, pipeline=pipeline) - -def create_configuration(**kwargs): - # type: (**Any) -> Configuration - config = Configuration(**kwargs) - config.headers_policy = StorageHeadersPolicy(**kwargs) - config.user_agent_policy = UserAgentPolicy(**kwargs) - config.retry_policy = RetryPolicy(**kwargs) - config.redirect_policy = RedirectPolicy(**kwargs) - config.logging_policy = NetworkTraceLoggingPolicy(**kwargs) - config.proxy_policy = ProxyPolicy(**kwargs) - config.custom_hook_policy = CustomHookPolicy(**kwargs) - config.queue_settings = StorageQueueSettings(**kwargs) - return config - -#TODO: duplicate from blob -def create_pipeline(configuration, credentials, **kwargs): - # type: (Configuration, Optional[HTTPPolicy], **Any) -> Tuple[Configuration, Pipeline] - config = configuration or create_configuration(**kwargs) - if kwargs.get('_pipeline'): - return config, kwargs['_pipeline'] - transport = kwargs.get('transport') # type: HttpTransport - if not transport: - transport = RequestsTransport(config) - policies = [ - StorageSecondaryAccount(), - config.user_agent_policy, - config.headers_policy, - StorageContentValidation(), - credentials, - ContentDecodePolicy(), - config.redirect_policy, - config.retry_policy, - config.logging_policy, - config.custom_hook_policy, - ] - return config, Pipeline(transport, policies=policies) - -def parse_connection_str(conn_str, credentials=None): - conn_settings = dict([s.split('=', 1) for s in conn_str.split(';')]) - try: - account_url = "{}://{}.queue.{}".format( - conn_settings['DefaultEndpointsProtocol'], - conn_settings['AccountName'], - conn_settings['EndpointSuffix'] - ) - creds = credentials or SharedKeyCredentials( - conn_settings['AccountName'], conn_settings['AccountKey']) - return account_url, creds - except KeyError as error: - raise ValueError("Connection string missing setting: '{}'".format(error.args[0])) - -# TODO: duplicate from blob -def normalize_headers(headers): - normalized = {} - for key, value in headers.items(): - if key.startswith('x-ms-'): - key = key[5:] - normalized[key.lower().replace('-', '_')] = value - return normalized - -# TODO: duplicate from blob -def return_response_headers(response, deserialized, response_headers): - return normalize_headers(response_headers) - -def return_headers_and_deserialized(response, deserialized, response_headers): - return normalize_headers(response_headers), deserialized - -# TODO: duplicate from blob -def is_credential_sastoken(credential): - if credential or not isinstance(credential, six.string_types): - return False - - parsed_query = parse_qs(credential) - if parsed_query and all([k in sas_values for k in parsed_query.keys()]): - return True - return False - -# TODO: duplicate from blob -def parse_query(query_str): - sas_values = _QueryStringConstants.to_list() - parsed_query = {k: v[0] for k, v in parse_qs(query_str).items()} - sas_params = ["{}={}".format(k, v) for k, v in parsed_query.items() if k in sas_values] - sas_token = None - if sas_params: - sas_token = '&'.join(sas_params) - return parsed_query.get('snapshot'), sas_token - -# TODO: duplicate from blob -def process_storage_error(error): - error.error_code = error.response.headers.get('x-ms-error-code') - if error.error_code: - error.message += "\nErrorCode: {}".format(error.error_code) - raise error - -# TODO: duplicate from blob -def basic_error_map(): - # type: () -> Dict[int, Type] - return { - 404: ResourceNotFoundError - } - -def _sign_string(key, string_to_sign, key_is_base64=True): - if key_is_base64: - key = _decode_base64_to_bytes(key) - else: - if isinstance(key, six.text_type): - key = key.encode('utf-8') - if isinstance(string_to_sign, six.text_type): - string_to_sign = string_to_sign.encode('utf-8') - signed_hmac_sha256 = hmac.HMAC(key, string_to_sign, hashlib.sha256) - digest = signed_hmac_sha256.digest() - encoded_digest = encode_base64(digest) - return encoded_diges - -def add_metadata_headers(metadata): - # type: (Dict[str, str]) -> Dict[str, str] - headers = {} - if metadata: - for key, value in metadata.items(): - headers['x-ms-meta-{}'.format(key)] = value - return headers - -def url_quote(url): - return quote(url) - - -class _QueryStringConstants(object): - SIGNED_SIGNATURE = 'sig' - SIGNED_PERMISSION = 'sp' - SIGNED_START = 'st' - SIGNED_EXPIRY = 'se' - SIGNED_RESOURCE = 'sr' - SIGNED_IDENTIFIER = 'si' - SIGNED_IP = 'sip' - SIGNED_PROTOCOL = 'spr' - SIGNED_VERSION = 'sv' - SIGNED_CACHE_CONTROL = 'rscc' - SIGNED_CONTENT_DISPOSITION = 'rscd' - SIGNED_CONTENT_ENCODING = 'rsce' - SIGNED_CONTENT_LANGUAGE = 'rscl' - SIGNED_CONTENT_TYPE = 'rsct' - START_PK = 'spk' - START_RK = 'srk' - END_PK = 'epk' - END_RK = 'erk' - SIGNED_RESOURCE_TYPES = 'srt' - SIGNED_SERVICES = 'ss' - - @staticmethod - def to_list(): - return [ - _QueryStringConstants.SIGNED_SIGNATURE, - _QueryStringConstants.SIGNED_PERMISSION, - _QueryStringConstants.SIGNED_START, - _QueryStringConstants.SIGNED_EXPIRY, - _QueryStringConstants.SIGNED_RESOURCE, - _QueryStringConstants.SIGNED_IDENTIFIER, - _QueryStringConstants.SIGNED_IP, - _QueryStringConstants.SIGNED_PROTOCOL, - _QueryStringConstants.SIGNED_VERSION, - _QueryStringConstants.SIGNED_CACHE_CONTROL, - _QueryStringConstants.SIGNED_CONTENT_DISPOSITION, - _QueryStringConstants.SIGNED_CONTENT_ENCODING, - _QueryStringConstants.SIGNED_CONTENT_LANGUAGE, - _QueryStringConstants.SIGNED_CONTENT_TYPE, - _QueryStringConstants.START_PK, - _QueryStringConstants.START_RK, - _QueryStringConstants.END_PK, - _QueryStringConstants.END_RK, - _QueryStringConstants.SIGNED_RESOURCE_TYPES, - _QueryStringConstants.SIGNED_SERVICES, - ] diff --git a/sdk/storage/azure-storage-queue/azure/storage/queue/models.py b/sdk/storage/azure-storage-queue/azure/storage/queue/models.py index 69569cc3c524..c10b0b18928b 100644 --- a/sdk/storage/azure-storage-queue/azure/storage/queue/models.py +++ b/sdk/storage/azure-storage-queue/azure/storage/queue/models.py @@ -4,132 +4,213 @@ # license information. # -------------------------------------------------------------------------- # pylint: disable=too-few-public-methods, too-many-instance-attributes +# pylint: disable=super-init-not-called -from ._generated.models import StorageServiceProperties -from ._generated.models import StorageErrorException - - -class DictMixin(object): - - def __setitem__(self, key, item): - self.__dict__[key] = item - - def __getitem__(self, key): - return self.__dict__[key] - - def __repr__(self): - return repr(self.__dict__) +from azure.core.paging import Paged - def __len__(self): - return len(self.__dict__) - - def __delitem__(self, key): - self.__dict__[key] = None - - def __eq__(self, other): - """Compare objects by comparing all attributes.""" - if isinstance(other, self.__class__): - return self.__dict__ == other.__dict__ - return False - - def __ne__(self, other): - """Compare objects by comparing all attributes.""" - return not self.__eq__(other) - - def __str__(self): - return str(self.__dict__) - - def has_key(self, k): - return k in self.__dict__ +from ._shared.utils import ( + return_context_and_deserialized, + process_storage_error) +from ._shared.models import DictMixin +from ._generated.models import StorageErrorException +from ._generated.models import AccessPolicy as GenAccessPolicy +from ._generated.models import Logging as GeneratedLogging +from ._generated.models import Metrics as GeneratedMetrics +from ._generated.models import RetentionPolicy as GeneratedRetentionPolicy +from ._generated.models import CorsRule as GeneratedCorsRule + + +class Logging(GeneratedLogging): + """Azure Analytics Logging settings. + + All required parameters must be populated in order to send to Azure. + + :param version: Required. The version of Storage Analytics to configure. + :type version: str + :param delete: Required. Indicates whether all delete requests should be + logged. + :type delete: bool + :param read: Required. Indicates whether all read requests should be + logged. + :type read: bool + :param write: Required. Indicates whether all write requests should be + logged. + :type write: bool + :param retention_policy: Required. + :type retention_policy: ~azure.storage.queue.models.RetentionPolicy + """ - def update(self, *args, **kwargs): - return self.__dict__.update(*args, **kwargs) + def __init__(self, **kwargs): + self.version = kwargs.get('version', u'1.0') + self.delete = kwargs.get('delete', False) + self.read = kwargs.get('read', False) + self.write = kwargs.get('write', False) + self.retention_policy = kwargs.get('retention_policy') or RetentionPolicy() - def keys(self): - return self.__dict__.keys() - def values(self): - return self.__dict__.values() +class Metrics(GeneratedMetrics): + """A summary of request statistics grouped by API in hour or minute aggregates. - def items(self): - return self.__dict__.items() + All required parameters must be populated in order to send to Azure. + :param version: The version of Storage Analytics to configure. + :type version: str + :param enabled: Required. Indicates whether metrics are enabled for the service. + :type enabled: bool + :param include_ap_is: Indicates whether metrics should generate summary + statistics for called API operations. + :type include_ap_is: bool + :param retention_policy: + :type retention_policy: ~azure.storage.queue.models.RetentionPolicy + """ -class SignedIdentifier(object): + def __init__(self, **kwargs): + self.version = kwargs.get('version', u'1.0') + self.enabled = kwargs.get('enabled', False) + self.include_apis = kwargs.get('include_apis') + self.retention_policy = kwargs.get('retention_policy') or RetentionPolicy() + + +class RetentionPolicy(GeneratedRetentionPolicy): + """the retention policy which determines how long the associated data should + persist. + + All required parameters must be populated in order to send to Azure. + + :param enabled: Required. Indicates whether a retention policy is enabled + for the storage service + :type enabled: bool + :param days: Indicates the number of days that metrics or logging or + soft-deleted data should be retained. All data older than this value will + be deleted + :type days: int + """ + + def __init__(self, enabled=False, days=None): + self.enabled = enabled + self.days = days + if self.enabled and (self.days is None): + raise ValueError("If policy is enabled, 'days' must be specified.") + + +class CorsRule(GeneratedCorsRule): + """CORS is an HTTP feature that enables a web application running under one + domain to access resources in another domain. Web browsers implement a + security restriction known as same-origin policy that prevents a web page + from calling APIs in a different domain; CORS provides a secure way to + allow one domain (the origin domain) to call APIs in another domain. + + All required parameters must be populated in order to send to Azure. + + :param allowed_origins: + A list of origin domains that will be allowed via CORS, or "*" to allow + all domains. The list of must contain at least one entry. Limited to 64 + origin domains. Each allowed origin can have up to 256 characters. + :type allowed_origins: list(str) + :param allowed_methods: + A list of HTTP methods that are allowed to be executed by the origin. + The list of must contain at least one entry. For Azure Storage, + permitted methods are DELETE, GET, HEAD, MERGE, POST, OPTIONS or PUT. + :type allowed_methods: list(str) + :param int max_age_in_seconds: + The number of seconds that the client/browser should cache a + preflight response. + :param exposed_headers: + Defaults to an empty list. A list of response headers to expose to CORS + clients. Limited to 64 defined headers and two prefixed headers. Each + header can be up to 256 characters. + :type exposed_headers: list(str) + :param allowed_headers: + Defaults to an empty list. A list of headers allowed to be part of + the cross-origin request. Limited to 64 defined headers and 2 prefixed + headers. Each header can be up to 256 characters. + :type allowed_headers: list(str) + """ + + def __init__(self, allowed_origins, allowed_methods, **kwargs): + self.allowed_origins = ','.join(allowed_origins) + self.allowed_methods = ','.join(allowed_methods) + self.allowed_headers = ','.join(kwargs.get('allowed_headers', [])) + self.exposed_headers = ','.join(kwargs.get('exposed_headers', [])) + self.max_age_in_seconds = kwargs.get('max_age_in_seconds', 0) + + +class AccessPolicy(GenAccessPolicy): ''' - Signed Identifier class used by the set and get acl methods in each service. - A stored access policy can specify the start time, expiry time, and - permissions for the Shared Access Signatures with which it's associated. + Access Policy class used by the set and get acl methods in each service. + + A stored access policy can specify the start time, expiry time, and + permissions for the Shared Access Signatures with which it's associated. Depending on how you want to control access to your resource, you can - specify all of these parameters within the stored access policy, and omit - them from the URL for the Shared Access Signature. Doing so permits you to - modify the associated signature's behavior at any time, as well as to revoke - it. Or you can specify one or more of the access policy parameters within - the stored access policy, and the others on the URL. Finally, you can - specify all of the parameters on the URL. In this case, you can use the + specify all of these parameters within the stored access policy, and omit + them from the URL for the Shared Access Signature. Doing so permits you to + modify the associated signature's behavior at any time, as well as to revoke + it. Or you can specify one or more of the access policy parameters within + the stored access policy, and the others on the URL. Finally, you can + specify all of the parameters on the URL. In this case, you can use the stored access policy to revoke the signature, but not to modify its behavior. - Together the Shared Access Signature and the stored access policy must - include all fields required to authenticate the signature. If any required - fields are missing, the request will fail. Likewise, if a field is specified - both in the Shared Access Signature URL and in the stored access policy, the + + Together the Shared Access Signature and the stored access policy must + include all fields required to authenticate the signature. If any required + fields are missing, the request will fail. Likewise, if a field is specified + both in the Shared Access Signature URL and in the stored access policy, the request will fail with status code 400 (Bad Request). ''' - def __init__(self, id=None, permission=None, expiry=None, start=None): + def __init__(self, permission=None, expiry=None, start=None): ''' :param str permission: - The permissions associated with the shared access signature. The - user is restricted to operations allowed by the permissions. - Required unless an id is given referencing a stored access policy - which contains this field. This field must be omitted if it has been + The permissions associated with the shared access signature. The + user is restricted to operations allowed by the permissions. + Required unless an id is given referencing a stored access policy + which contains this field. This field must be omitted if it has been specified in an associated stored access policy. :param expiry: - The time at which the shared access signature becomes invalid. - Required unless an id is given referencing a stored access policy - which contains this field. This field must be omitted if it has - been specified in an associated stored access policy. Azure will always - convert values to UTC. If a date is passed in without timezone info, it + The time at which the shared access signature becomes invalid. + Required unless an id is given referencing a stored access policy + which contains this field. This field must be omitted if it has + been specified in an associated stored access policy. Azure will always + convert values to UTC. If a date is passed in without timezone info, it is assumed to be UTC. :type expiry: datetime or str :param start: - The time at which the shared access signature becomes valid. If - omitted, start time for this call is assumed to be the time when the - storage service receives the request. Azure will always convert values - to UTC. If a date is passed in without timezone info, it is assumed to + The time at which the shared access signature becomes valid. If + omitted, start time for this call is assumed to be the time when the + storage service receives the request. Azure will always convert values + to UTC. If a date is passed in without timezone info, it is assumed to be UTC. :type start: datetime or str ''' - self.id = id self.start = start self.expiry = expiry self.permission = permission -class QueueMessage(object): - ''' - Queue message class. - :param str id: - A GUID value assigned to the message by the Queue service that - identifies the message in the queue. This value may be used together - with the value of pop_receipt to delete a message from the queue after - it has been retrieved with the get messages operation. - :param date insertion_time: +class QueueMessage(DictMixin): + ''' + Queue message class. + :param str id: + A GUID value assigned to the message by the Queue service that + identifies the message in the queue. This value may be used together + with the value of pop_receipt to delete a message from the queue after + it has been retrieved with the get messages operation. + :param date insertion_time: A UTC date value representing the time the messages was inserted. - :param date expiration_time: + :param date expiration_time: A UTC date value representing the time the message expires. - :param int dequeue_count: - Begins with a value of 1 the first time the message is dequeued. This + :param int dequeue_count: + Begins with a value of 1 the first time the message is dequeued. This value is incremented each time the message is subsequently dequeued. - :param obj content: - The message content. Type is determined by the decode_function set on + :param obj content: + The message content. Type is determined by the decode_function set on the service. Default is str. - :param str pop_receipt: - A receipt str which can be used together with the message_id element to - delete a message from the queue after it has been retrieved with the get - messages operation. Only returned by get messages operations. Set to + :param str pop_receipt: + A receipt str which can be used together with the message_id element to + delete a message from the queue after it has been retrieved with the get + messages operation. Only returned by get messages operations. Set to None for peek messages. - :param date time_next_visible: - A UTC date value representing the time the message will next be visible. + :param date time_next_visible: + A UTC date value representing the time the message will next be visible. Only returned by get messages operations. Set to None for peek messages. ''' @@ -142,47 +223,111 @@ def __init__(self, content=None): self.pop_receipt = None self.time_next_visible = None -class QueueMessageFormat: - ''' - Encoding and decoding methods which can be used to modify how the queue service - encodes and decodes queue messages. Set these to queueservice.encode_function - and queueservice.decode_function to modify the behavior. The defaults are - text_xmlencode and text_xmldecode, respectively. - ''' + @classmethod + def _from_generated(cls, generated): + message = cls(content=generated.message_text) + message.id = generated.message_id + message.insertion_time = generated.insertion_time + message.expiration_time = generated.expiration_time + message.dequeue_count = generated.dequeue_count + if hasattr(generated, 'pop_receipt'): + message.pop_receipt = generated.pop_receipt + message.time_next_visible = generated.time_next_visible + return message + class QueueProperties(DictMixin): ''' Queue Properties. - - :ivar str name: + + :ivar str name: The name of the queue. - :ivar metadata: + :ivar metadata: A dict containing name-value pairs associated with the queue as metadata. - This var is set to None unless the include=metadata param was included - for the list queues operation. If this parameter was specified but the + This var is set to None unless the include=metadata param was included + for the list queues operation. If this parameter was specified but the queue has no metadata, metadata will be set to an empty dictionary. :vartype metadata: dict(str, str) ''' def __init__(self, **kwargs): self.name = None - self.last_modified = kwargs.get('Last-Modified') self.metadata = kwargs.get('metadata') + self.approximate_message_count = kwargs.get('x-ms-approximate-messages-count') + + @classmethod + def _from_generated(cls, generated): + props = cls() + props.name = generated.name + props.metadata = generated.metadata + return props + + +class QueuePropertiesPaged(Paged): + + def __init__(self, command, prefix=None, results_per_page=None, marker=None): + super(QueuePropertiesPaged, self).__init__(command, None) + self.service_endpoint = None + self.prefix = prefix + self.current_marker = None + self.results_per_page = results_per_page + self.next_marker = marker or "" + self.location_mode = None + + def _advance_page(self): + # type: () -> List[Model] + """Force moving the cursor to the next azure call. + + This method is for advanced usage, iterator protocol is prefered. + + :raises: StopIteration if no further page + :return: The current page list + :rtype: list + """ + if self.next_marker is None: + raise StopIteration("End of paging") + self._current_page_iter_index = 0 + try: + self.location_mode, self._response = self._get_next( + marker=self.next_marker or None, + maxresults=self.results_per_page, + cls=return_context_and_deserialized, + use_location=self.location_mode) + except StorageErrorException as error: + process_storage_error(error) + self.service_endpoint = self._response.service_endpoint + self.prefix = self._response.prefix + self.current_marker = self._response.marker + self.results_per_page = self._response.max_results + self.current_page = self._response.queue_items + self.next_marker = self._response.next_marker or None + return self.current_page + + def __next__(self): + item = super(QueuePropertiesPaged, self).__next__() + if isinstance(item, QueueProperties): + return item + return QueueProperties._from_generated(item) # pylint: disable=protected-access + + next = __next__ class QueuePermissions(object): ''' - QueuePermissions class to be used with :func:`~azure.storage.queue.queueservice.QueueService.generate_queue_shared_access_signature` - method and for the AccessPolicies used with :func:`~azure.storage.queue.queueservice.QueueService.set_queue_acl`. - :ivar QueuePermissions QueuePermissions.READ: - Read metadata and properties, including message count. Peek at messages. - :ivar QueuePermissions QueuePermissions.ADD: + QueuePermissions class to be used with + :func:`~azure.storage.queue.queue_client.QueueClient.generate_shared_access_signature` + method and for the AccessPolicies used with + :func:`~azure.storage.queue.queue_client.QueueClient.set_queue_access_policy`. + + :ivar QueuePermissions QueuePermissions.READ: + Read metadata and properties, including message count. Peek at messages. + :ivar QueuePermissions QueuePermissions.ADD: Add messages to the queue. :ivar QueuePermissions QueuePermissions.UPDATE: - Update messages in the queue. Note: Use the Process permission with + Update messages in the queue. Note: Use the Process permission with Update so you can first get the message you want to update. :ivar QueuePermissions QueuePermissions.PROCESS: Delete entities. - Get and delete messages from the queue. + Get and delete messages from the queue. ''' def __init__(self, read=False, add=False, update=False, process=False, _str=None): @@ -192,11 +337,11 @@ def __init__(self, read=False, add=False, update=False, process=False, _str=None :param bool add: Add messages to the queue. :param bool update: - Update messages in the queue. Note: Use the Process permission with + Update messages in the queue. Note: Use the Process permission with Update so you can first get the message you want to update. - :param bool process: + :param bool process: Get and delete messages from the queue. - :param str _str: + :param str _str: A string representing the permissions. ''' if not _str: diff --git a/sdk/storage/azure-storage-queue/azure/storage/queue/queue_client.py b/sdk/storage/azure-storage-queue/azure/storage/queue/queue_client.py index f05b61817cfa..0ea94974582e 100644 --- a/sdk/storage/azure-storage-queue/azure/storage/queue/queue_client.py +++ b/sdk/storage/azure-storage-queue/azure/storage/queue/queue_client.py @@ -4,109 +4,192 @@ # license information. # -------------------------------------------------------------------------- +import functools from typing import ( # pylint: disable=unused-import Union, Optional, Any, IO, Iterable, AnyStr, Dict, List, Tuple, - TYPE_CHECKING -) + TYPE_CHECKING) +try: + from urllib.parse import urlparse, quote, unquote +except ImportError: + from urlparse import urlparse + from urllib2 import quote, unquote -from ._utils import ( - create_client, - create_configuration, - create_pipeline, - parse_query, - is_credential_sastoken, - parse_connection_str, - process_storage_error, - basic_error_map, +import six + +from ._shared.shared_access_signature import QueueSharedAccessSignature +from ._shared.utils import ( + StorageAccountHostsMixin, add_metadata_headers, + process_storage_error, return_response_headers, - return_headers_and_deserialized -) - -from ._deserialize import ( - deserialize_queue_properties + return_headers_and_deserialized, + parse_query, + serialize_iso, + parse_connection_str ) +from ._queue_utils import ( + MessageIterator, + TextXMLEncodePolicy, + TextXMLDecodePolicy, + deserialize_queue_properties, + deserialize_queue_creation) +from ._generated import AzureQueueStorage +from ._generated.models import StorageErrorException, SignedIdentifier +from ._generated.models import QueueMessage as GenQueueMessage -from .models import SignedIdentifier, QueueMessage -from ._generated.models import StorageErrorException -from .queue_iterator import QueueIterator - -from azure.core import Configuration -try: - from urllib.parse import urlparse, quote, unquote, parse_qs -except ImportError: - from urlparse import urlparse, parse_qs - from urllib2 import quote, unquote +from .models import QueueMessage, AccessPolicy if TYPE_CHECKING: from azure.core.pipeline.policies import HTTPPolicy + from .models import QueuePermissions -class QueueClient(object): +class QueueClient(StorageAccountHostsMixin): def __init__( self, queue_url, # type: str - queue_name=None, # type: Optional[str] - credentials=None, # type: Optional[HTTPPolicy] - configuration=None, # type: Optional[Configuration] + queue=None, # type: Optional[str] + credential=None, # type: Optional[HTTPPolicy] **kwargs # type: Any ): # type: (...) -> None """Creates a new QueueClient. This client represents interaction with a specific queue, although that queue may not yet exist. - :param str queue_url: The full URI to the queue. - :param ~azure.storage.queue.authentication.SharedKeyCredentials credentials: Optional shared - key credentials. This is not necessary if the URL contains a SAS token, or if the queue is - publicly available. - :param configuration: A optional pipeline configuration. - This can be retrieved with :func:`QueueClient.create_configuration()` + + :param str queue_url: The full URI to the queue. This can also be a URL to the storage + account, in which case the queue must also be specified. + :param queue: The queue. If specified, this value will override + a queue value specified in the blob URL. + :type queue: str or ~azure.storage.queue.models.QueueProperties + :param credential: """ + try: + if not queue_url.lower().startswith('http'): + queue_url = "https://" + queue_url + except AttributeError: + raise ValueError("Queue URL must be a string.") parsed_url = urlparse(queue_url.rstrip('/')) - if not parsed_url.path and not queue_name: + if not parsed_url.path and not queue: raise ValueError("Please specify a queue name.") - self.queue_name = queue_name or unquote(parsed_url.path.split('/')[1]) + if not parsed_url.netloc: + raise ValueError("Invalid URL: {}".format(parsed_url)) - self.scheme = parsed_url.scheme - self.credentials = credentials - self.account = parsed_url.hostname.split(".queue.core.")[0] - self.queue_url = queue_url if parsed_url.path else "{}://{}/{}".format( - self.scheme, - parsed_url.hostname, - quote(self.queue_name) - ) + path_queue = "" + if parsed_url.path: + path_queue = parsed_url.path.lstrip('/').partition('/')[0] + _, sas_token = parse_query(parsed_url.query) + if not sas_token and not credential: + raise ValueError("You need to provide either a SAS token or an account key to authenticate.") + try: + self.queue_name = queue.name + except AttributeError: + self.queue_name = queue or unquote(path_queue) + self._query_str, credential = self._format_query_string(sas_token, credential) + super(QueueClient, self).__init__(parsed_url, 'queue', credential, **kwargs) - self.require_encryption = kwargs.get('require_encryption', False) - self.key_encryption_key = kwargs.get('key_encryption_key') - self.key_resolver_function = kwargs.get('key_resolver_function') + self._config.message_encode_policy = kwargs.get('message_encode_policy') or TextXMLEncodePolicy() + self._config.message_decode_policy = kwargs.get('message_decode_policy') or TextXMLDecodePolicy() + self._client = AzureQueueStorage(self.url, pipeline=self._pipeline) - self._config, self._pipeline = create_pipeline(configuration, credentials, **kwargs) - self._client = create_client(self.queue_url, self._pipeline) - self._queue_iterator = QueueIterator() + def _format_url(self, hostname): + queue_name = self.queue_name + if isinstance(queue_name, six.text_type): + queue_name = queue_name.encode('UTF-8') + return "{}://{}/{}{}".format( + self.scheme, + hostname, + quote(queue_name), + self._query_str) @classmethod def from_connection_string( cls, conn_str, # type: str - queue_name=None, # type: Optional[str] - configuration=None, # type: Optional[Configuration] + queue, # type: Union[str, QueueProperties] + credential=None, # type: Any **kwargs # type: Any ): # type: (...) -> None """ Create QueueClient from a Connection String. """ - account_url, creds = parse_connection_str(conn_str) - return cls( - account_url, queue_name=queue_name, - credentials=creds, configuration=configuration, **kwargs) + account_url, secondary, credential = parse_connection_str( + conn_str, credential, 'queue') + if 'secondary_hostname' not in kwargs: + kwargs['secondary_hostname'] = secondary + return cls(account_url, queue=queue, credential=credential, **kwargs) + + def generate_shared_access_signature( + self, permission=None, # type: Optional[Union[QueuePermissions, str]] + expiry=None, # type: Optional[Union[datetime, str]] + start=None, # type: Optional[Union[datetime, str]] + policy_id=None, # type: Optional[str] + ip=None, # type: Optional[str] + protocol=None # type: Optional[str] + ): + ''' + Generates a shared access signature for the queue. + Use the returned signature with the sas_token parameter of QueueService. + + :param str queue_name: + The name of the queue to create a SAS token for. + :param QueuePermissions permission: + The permissions associated with the shared access signature. The + user is restricted to operations allowed by the permissions. + Required unless an id is given referencing a stored access policy + which contains this field. This field must be omitted if it has been + specified in an associated stored access policy. + :param expiry: + The time at which the shared access signature becomes invalid. + Required unless an id is given referencing a stored access policy + which contains this field. This field must be omitted if it has + been specified in an associated stored access policy. Azure will always + convert values to UTC. If a date is passed in without timezone info, it + is assumed to be UTC. + :type expiry: datetime or str + :param start: + The time at which the shared access signature becomes valid. If + omitted, start time for this call is assumed to be the time when the + storage service receives the request. Azure will always convert values + to UTC. If a date is passed in without timezone info, it is assumed to + be UTC. + :type start: datetime or str + :param str id: + A unique value up to 64 characters in length that correlates to a + stored access policy. To create a stored access policy, use :func:`~set_queue_acl`. + :param str ip: + Specifies an IP address or a range of IP addresses from which to accept requests. + If the IP address from which the request originates does not match the IP address + or address range specified on the SAS token, the request is not authenticated. + For example, specifying sip='168.1.5.65' or sip='168.1.5.60-168.1.5.70' on the SAS + restricts the request to those IP addresses. + :param str protocol: + Specifies the protocol permitted for a request made. The default value + is https,http. See :class:`~azure.storage.common.models.Protocol` for possible values. + :return: A Shared Access Signature (sas) token. + :rtype: str + ''' + if not hasattr(self.credential, 'account_key') and not self.credential.account_key: + raise ValueError("No account SAS key available.") + sas = QueueSharedAccessSignature( + self.credential.account_name, self.credential.account_key) + return sas.generate_queue( + self.queue_name, + permission=permission, + expiry=expiry, + start=start, + policy_id=policy_id, + ip=ip, + protocol=protocol, + ) def create_queue(self, metadata=None, timeout=None, **kwargs): # type: (Optional[Dict[str, Any]], Optional[int]) -> bool - """ - Creates a queue under the given account. + """Creates a queue under the given account. + :param metadata: - A dict containing name-value pairs to associate with the queue as - metadata. Note that metadata names preserve the case with which they - were created, but are case-insensitive when set or read. + A dict containing name-value pairs to associate with the queue as + metadata. Note that metadata names preserve the case with which they + were created, but are case-insensitive when set or read. :type metadata: dict(str, str) :param int timeout: The server timeout, expressed in seconds. @@ -115,167 +198,161 @@ def create_queue(self, metadata=None, timeout=None, **kwargs): :raises: :class:`StorageErrorException` """ - if self.require_encryption or (self.key_encryption_key is not None): - raise ValueError('The require_encryption flag is set, but encryption is not supported for this method.') headers = kwargs.pop('headers', {}) headers.update(add_metadata_headers(metadata)) try: return self._client.queue.create( metadata=metadata, timeout=timeout, - error_map=basic_error_map(), headers=headers, - cls=return_response_headers, - **kwargs - ) + cls=deserialize_queue_creation, + **kwargs) except StorageErrorException as error: process_storage_error(error) - + def delete_queue(self, timeout=None, **kwargs): # type: (Optional[int]) -> bool - """ - Deletes the specified queue and any messages it contains. - When a queue is successfully deleted, it is immediately marked for deletion - and is no longer accessible to clients. The queue is later removed from + """Deletes the specified queue and any messages it contains. + + When a queue is successfully deleted, it is immediately marked for deletion + and is no longer accessible to clients. The queue is later removed from the Queue service during garbage collection. - Note that deleting a queue is likely to take at least 40 seconds to complete. - If an operation is attempted against the queue while it was being deleted, - an :class:`AzureConflictHttpError` will be thrown. + Note that deleting a queue is likely to take at least 40 seconds to complete. + If an operation is attempted against the queue while it was being deleted, + an :class:`HttpResponseError` will be thrown. + :param int timeout: The server timeout, expressed in seconds. - :return: - A boolean indicating whether the queue was deleted. If fail_not_exist - was set to True, this will throw instead of returning false. - :rtype: bool + :rtype: None """ try: - self._client.queue.delete( - timeout=timeout, - error_map=basic_error_map(), - **kwargs - ) + self._client.queue.delete(timeout=timeout, **kwargs) except StorageErrorException as error: process_storage_error(error) - def get_queue_metadata(self, timeout=None, **kwargs): - # type: (Optional[int]) -> Dict[str, str] + def get_queue_properties(self, timeout=None, **kwargs): + # type: (Optional[Union[LeaseClient, str]], Optional[int], **Any) -> ContainerProperties """ - Retrieves user-defined metadata and queue properties on the specified - queue. Metadata is associated with the queue as name-value pairs. + Returns all user-defined metadata for the specified queue. + + The data returned does not include the queue's list of messages. + :param int timeout: - The server timeout, expressed in seconds. - :return: - A dictionary representing the queue metadata with an - approximate_message_count int property on the dict estimating the - number of messages in the queue. - :rtype: dict(str, str) + The timeout parameter is expressed in seconds. + :return: properties for the specified container within a container object. + :rtype: ~azure.storage.queue.models.QueueProperties """ try: - queue_props = self._client.queue.get_properties( + response = self._client.queue.get_properties( timeout=timeout, - error_map=basic_error_map(), cls=deserialize_queue_properties, - **kwargs - ) + **kwargs) except StorageErrorException as error: process_storage_error(error) - queue_props.name = self.queue_name - return queue_props + response.name = self.queue_name + return response def set_queue_metadata(self, metadata=None, timeout=None, **kwargs): # type: (Optional[Dict[str, Any]], Optional[int]) -> None - """ - Sets user-defined metadata on the specified queue. Metadata is - associated with the queue as name-value pairs. - :param dict metadata: + """Sets user-defined metadata on the specified queue. + + Metadata is associated with the queue as name-value pairs. + + :param dict(str, str) metadata: A dict containing name-value pairs to associate with the queue as metadata. :param int timeout: The server timeout, expressed in seconds. """ + headers = kwargs.pop('headers', {}) + headers.update(add_metadata_headers(metadata)) try: return self._client.queue.set_metadata( - metadata=metadata, timeout=timeout, - error_map=basic_error_map(), + headers=headers, cls=return_response_headers, **kwargs) except StorageErrorException as error: process_storage_error(error) - def get_queue_acl(self, timeout=None, **kwargs): + def get_queue_access_policy(self, timeout=None, **kwargs): # type: (Optional[int]) -> Dict[str, Any] - """ - Returns details about any stored access policies specified on the + """Returns details about any stored access policies specified on the queue that may be used with Shared Access Signatures. + :param int timeout: The server timeout, expressed in seconds. :return: A dictionary of access policies associated with the queue. :rtype: dict(str, :class:`~azure.storage.common.models.AccessPolicy`) """ try: - response, identifiers = self._client.queue.get_access_policy( + _, identifiers = self._client.queue.get_access_policy( timeout=timeout, - error_map=basic_error_map(), cls=return_headers_and_deserialized, **kwargs) except StorageErrorException as error: process_storage_error(error) - return { - 'response': response, - 'signed_identifiers': identifiers or [] - } + return {s.id: s.access_policy or AccessPolicy() for s in identifiers} - def set_queue_acl(self, signed_identifiers=None, timeout=None, **kwargs): - # type: (Optional[List[SignedIdentifier]], Optional[int]) -> None - """ - Sets stored access policies for the queue that may be used with Shared - Access Signatures. - - When you set permissions for a queue, the existing permissions are replaced. - To update the queue's permissions, call :func:`~get_queue_acl` to fetch - all access policies associated with the queue, modify the access policy - that you wish to change, and then call this function with the complete + def set_queue_access_policy(self, signed_identifiers=None, timeout=None, **kwargs): + # type: (Optional[Dict[str, Optional[AccessPolicy]]], Optional[int]) -> None + """Sets stored access policies for the queue that may be used with Shared + Access Signatures. + + When you set permissions for a queue, the existing permissions are replaced. + To update the queue's permissions, call :func:`~get_queue_access_policy` to fetch + all access policies associated with the queue, modify the access policy + that you wish to change, and then call this function with the complete set of data to perform the update. - When you establish a stored access policy on a queue, it may take up to - 30 seconds to take effect. During this interval, a shared access signature - that is associated with the stored access policy will throw an - :class:`AzureHttpError` until the access policy becomes active. + When you establish a stored access policy on a queue, it may take up to + 30 seconds to take effect. During this interval, a shared access signature + that is associated with the stored access policy will throw an + :class:`HttpResponseError` until the access policy becomes active. :param signed_identifiers: - A list of SignedIdentifier access policies to associate with the queue. The - list may contain up to 5 elements. An empty list - will clear the access policies set on the service. - :type signed_identifiers: dict(str, :class:`queue.models.SignedIdentifier`) + A list of SignedIdentifier access policies to associate with the queue. The + list may contain up to 5 elements. An empty list + will clear the access policies set on the service. + :type signed_identifiers: dict(str, :class:`queue.models.AccessPolicy`) :param int timeout: The server timeout, expressed in seconds. + :rtype: dict(str, Any) """ - if signed_identifiers and len(signed_identifiers) > 15: - raise ValueError("Too many access policies") + if signed_identifiers: + if len(signed_identifiers) > 15: + raise ValueError( + 'Too many access policies provided. The server does not support setting ' + 'more than 15 access policies on a single resource.') + identifiers = [] + for key, value in signed_identifiers.items(): + if value: + value.start = serialize_iso(value.start) + value.expiry = serialize_iso(value.expiry) + identifiers.append(SignedIdentifier(id=key, access_policy=value)) + signed_identifiers = identifiers try: self._client.queue.set_access_policy( - queue_acl=signed_identifiers, + queue_acl=signed_identifiers or None, timeout=timeout, - error_map=basic_error_map(), - cls=return_response_headers, **kwargs) except StorageErrorException as error: process_storage_error(error) def enqueue_message(self, content, visibility_timeout=None, time_to_live=None, timeout=None, **kwargs): # type: (Any, Optional[int], Optional[int], Optional[int]) -> QueueMessage - """ - Adds a new message to the back of the message queue. - The visibility timeout specifies the time that the message will be - invisible. After the timeout expires, the message will become visible. + """Adds a new message to the back of the message queue. + + The visibility timeout specifies the time that the message will be + invisible. After the timeout expires, the message will become visible. If a visibility timeout is not specified, the default value of 0 is used. - The message time-to-live specifies how long a message will remain in the - queue. The message will be deleted from the queue when the time-to-live + The message time-to-live specifies how long a message will remain in the + queue. The message will be deleted from the queue when the time-to-live period expires. If the key-encryption-key field is set on the local service object, this method will encrypt the content before uploading. + :param obj content: - Message content. Allowed type is determined by the encode_function - set on the service. Default is str. The encoded message can be up to + Message content. Allowed type is determined by the encode_function + set on the service. Default is str. The encoded message can be up to 64KB in size. :param int visibility_timeout: If not specified, the default value is 0. Specifies the @@ -296,27 +373,40 @@ def enqueue_message(self, content, visibility_timeout=None, time_to_live=None, t returned from the service. :rtype: :class:`~azure.storage.queue.models.QueueMessage` """ - queue_message = QueueMessage(content=content) + self._config.message_encode_policy.configure( + self.require_encryption, + self.key_encryption_key, + self.key_resolver_function) + content = self._config.message_encode_policy(content) + new_message = GenQueueMessage(message_text=content) try: - self._queue_iterator.put(queue_message) - self._client.messages.enqueue( - queue_message=queue_message, + enqueued = self._client.messages.enqueue( + queue_message=new_message, visibilitytimeout=visibility_timeout, message_time_to_live=time_to_live, timeout=timeout, - error_map=basic_error_map(), - **kwargs - ) + **kwargs) + queue_message = QueueMessage(content=new_message.message_text) + queue_message.id = enqueued[0].message_id + queue_message.insertion_time = enqueued[0].insertion_time + queue_message.expiration_time = enqueued[0].expiration_time + queue_message.pop_receipt = enqueued[0].pop_receipt + queue_message.time_next_visible = enqueued[0].time_next_visible return queue_message except StorageErrorException as error: process_storage_error(error) - def dequeue_messages(self, visibility_timeout=None, timeout=None, **kwargs): + def dequeue_messages(self, num_messages=None, visibility_timeout=None, timeout=None, **kwargs): # type: (Optional[int], Optional[int]) -> QueueMessage """ Removes one or more messages from top of the queue. Returns message iterator of dict-like Message objects + :param int num_messages: + A nonzero integer value that specifies the number of + messages to retrieve from the queue, up to a maximum of 32. If + fewer are visible, the visible messages are returned. By default, + a single message is retrieved from the queue with this operation. :param int visibility_timeout: If not specified, the default value is 0. Specifies the new visibility timeout value, in seconds, relative to server time. @@ -332,15 +422,20 @@ def dequeue_messages(self, visibility_timeout=None, timeout=None, **kwargs): returned from the service. :rtype: :class:`~azure.storage.queue.models.QueueMessage` """ + self._config.message_decode_policy.configure( + self.require_encryption, + self.key_encryption_key, + self.key_resolver_function) try: - message = self._client.messages.dequeue( + command = functools.partial( + self._client.messages.dequeue, + number_of_messages=num_messages, visibilitytimeout=visibility_timeout, timeout=timeout, - error_map=basic_error_map(), + cls=self._config.message_decode_policy, **kwargs ) - next(self._queue_iterator) - return message + return MessageIterator(command) except StorageErrorException as error: process_storage_error(error) @@ -350,17 +445,15 @@ def update_message(self, message, visibility_timeout=None, pop_receipt=None, """ Updates the visibility timeout of a message. You can also use this operation to update the contents of a message. - This operation can be used to continually extend the invisibility of a - queue message. This functionality can be useful if you want a worker role - to "lease" a queue message. For example, if a worker role calls get_messages - and recognizes that it needs more time to process a message, it can - continually extend the message's invisibility until it is processed. If - the worker role were to fail during processing, eventually the message + This operation can be used to continually extend the invisibility of a + queue message. This functionality can be useful if you want a worker role + to "lease" a queue message. For example, if a worker role calls get_messages + and recognizes that it needs more time to process a message, it can + continually extend the message's invisibility until it is processed. If + the worker role were to fail during processing, eventually the message would become visible again and another worker role could process it. If the key-encryption-key field is set on the local service object, this method will encrypt the content before uploading. - :param str queue_name: - The name of the queue containing the message to update. :param str message: The message object or message id identifying the message to update. :param str pop_receipt: @@ -373,41 +466,72 @@ def update_message(self, message, visibility_timeout=None, pop_receipt=None, message cannot be set to a value later than the expiry time. A message can be updated until it has been deleted or has expired. :param obj content: - Message content. Allowed type is determined by the encode_function + Message content. Allowed type is determined by the encode_function set on the service. Default is str. :param int timeout: The server timeout, expressed in seconds. - :return: + :return: A list of :class:`~azure.storage.queue.models.QueueMessage` objects. For convenience, this object is also populated with the content, although it is not returned by the service. - :rtype: list(:class:`~azure.storage.queue.models.QueueMessage`) + :rtype: :class:`~azure.storage.queue.models.QueueMessage` """ - pop_receipt = pop_receipt or message.pop_receipt - if pop_receipt is None: + try: + message_id = message.id + message_text = content or message.content + receipt = pop_receipt or message.pop_receipt + insertion_time = message.insertion_time + expiration_time = message.expiration_time + dequeue_count = message.dequeue_count + except AttributeError: + message_id = message + message_text = content + receipt = pop_receipt + insertion_time = None + expiration_time = None + dequeue_count = None + + if receipt is None: raise ValueError("pop_receipt must be present") + if message_text is not None: + self._config.message_encode_policy.configure( + self.require_encryption, + self.key_encryption_key, + self.key_resolver_function) + message_text = self._config.message_encode_policy(message_text) + updated = GenQueueMessage(message_text=message_text) + else: + updated = None try: - self._client.message_id.update( - queue_message=message, - visibilitytimeout=visibility_timeout, + response = self._client.message_id.update( + queue_message=updated, + visibilitytimeout=visibility_timeout or 0, timeout=timeout, - pop_receipt=pop_receipt, - error_map=basic_error_map(), - **kwargs - ) + pop_receipt=receipt, + cls=return_response_headers, + queue_message_id=message_id, + **kwargs) + new_message = QueueMessage(content=message_text) + new_message.id = message_id + new_message.insertion_time = insertion_time + new_message.expiration_time = expiration_time + new_message.dequeue_count = dequeue_count + new_message.pop_receipt = response['popreceipt'] + new_message.time_next_visible = response['time_next_visible'] + return new_message except StorageErrorException as error: process_storage_error(error) def peek_messages(self, max_messages=None, timeout=None, **kwargs): # type: (Optional[int], Optional[int]) -> List[QueueMessage] - """ - Retrieves one or more messages from the front of the queue, but does + """Retrieves one or more messages from the front of the queue, but does not alter the visibility of the message. - Only messages that are visible may be retrieved. When a message is retrieved - for the first time with a call to get_messages, its dequeue_count property - is set to 1. If it is not deleted and is subsequently retrieved again, the - dequeue_count property is incremented. The client may use this value to - determine how many times a message has been retrieved. Note that a call - to peek_messages does not increment the value of DequeueCount, but returns + + Only messages that are visible may be retrieved. When a message is retrieved + for the first time with a call to get_messages, its dequeue_count property + is set to 1. If it is not deleted and is subsequently retrieved again, the + dequeue_count property is incremented. The client may use this value to + determine how many times a message has been retrieved. Note that a call + to peek_messages does not increment the value of DequeueCount, but returns this value for the client to read. If the key-encryption-key or resolver field is set on the local service object, the messages will be decrypted before being returned. @@ -417,20 +541,28 @@ def peek_messages(self, max_messages=None, timeout=None, **kwargs): a single message is peeked from the queue with this operation. :param int timeout: The server timeout, expressed in seconds. - :return: - A list of :class:`~azure.storage.queue.models.QueueMessage` objects. Note that - time_next_visible and pop_receipt will not be populated as peek does + :return: + A list of :class:`~azure.storage.queue.models.QueueMessage` objects. Note that + time_next_visible and pop_receipt will not be populated as peek does not pop the message and can only retrieve already visible messages. :rtype: list(:class:`~azure.storage.queue.models.QueueMessage`) """ if max_messages and not 1 <= max_messages <= 32: raise ValueError("Number of messages to peek should be between 1 and 32") + self._config.message_decode_policy.configure( + self.require_encryption, + self.key_encryption_key, + self.key_resolver_function) try: - return self._client.messages.peek( + messages = self._client.messages.peek( number_of_messages=max_messages, timeout=timeout, - error_map=basic_error_map(), + cls=self._config.message_decode_policy, **kwargs) + wrapped_messages = [] + for peeked in messages: + wrapped_messages.append(QueueMessage._from_generated(peeked)) # pylint: disable=protected-access + return wrapped_messages except StorageErrorException as error: process_storage_error(error) @@ -442,28 +574,24 @@ def clear_messages(self, timeout=None, **kwargs): The server timeout, expressed in seconds. """ try: - self._client.messages.clear( - timeout=timeout, - error_map=basic_error_map(), - **kwargs - ) + self._client.messages.clear(timeout=timeout, **kwargs) except StorageErrorException as error: process_storage_error(error) - def delete_message(self, message=None, pop_receipt=None, timeout=None, **kwargs): + def delete_message(self, message, pop_receipt=None, timeout=None, **kwargs): # type: (Any, Optional[str], Optional[str], Optional[int]) -> None """ Deletes the specified message. - Normally after a client retrieves a message with the get_messages operation, - the client is expected to process and delete the message. To delete the - message, you must have two items of data: id and pop_receipt. The - id is returned from the previous get_messages operation. The - pop_receipt is returned from the most recent :func:`~get_messages` or - :func:`~update_message` operation. In order for the delete_message operation - to succeed, the pop_receipt specified on the request must match the - pop_receipt returned from the :func:`~get_messages` or :func:`~update_message` + Normally after a client retrieves a message with the get_messages operation, + the client is expected to process and delete the message. To delete the + message, you must have two items of data: id and pop_receipt. The + id is returned from the previous get_messages operation. The + pop_receipt is returned from the most recent :func:`~get_messages` or + :func:`~update_message` operation. In order for the delete_message operation + to succeed, the pop_receipt specified on the request must match the + pop_receipt returned from the :func:`~get_messages` or :func:`~update_message` operation. - + :param str message: The message object identifying the message to delete. :param str pop_receipt: @@ -472,16 +600,20 @@ def delete_message(self, message=None, pop_receipt=None, timeout=None, **kwargs) :param int timeout: The server timeout, expressed in seconds. """ - if not message and not pop_receipt: - raise ValueError("Either a message object or a pop receipt must be given") - pop_receipt = pop_receipt or message.pop_receipt - if not pop_receipt: - raise ValueError("pop_receipt is required.") + try: + message_id = message.id + receipt = pop_receipt or message.pop_receipt + except AttributeError: + message_id = message + receipt = pop_receipt + + if receipt is None: + raise ValueError("pop_receipt must be present") try: self._client.message_id.delete( - pop_receipt=pop_receipt, + pop_receipt=receipt, timeout=timeout, - error_map=basic_error_map(), + queue_message_id=message_id, **kwargs ) except StorageErrorException as error: diff --git a/sdk/storage/azure-storage-queue/azure/storage/queue/queue_iterator.py b/sdk/storage/azure-storage-queue/azure/storage/queue/queue_iterator.py deleted file mode 100644 index 9b531e90e353..000000000000 --- a/sdk/storage/azure-storage-queue/azure/storage/queue/queue_iterator.py +++ /dev/null @@ -1,57 +0,0 @@ -# ------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for -# license information. -# -------------------------------------------------------------------------- -# pylint: disable=too-few-public-methods, too-many-instance-attributes - -from ._utils import process_storage_error -from .models import StorageErrorException -from collections import deque - -class QueueIterator(object): - """An Iterable message stream. - - This iterator acts as an iterable message stream. - """ - - def __init__(self, timeout=None, **kwargs): - self._queue = deque() - self.timeout = timeout - - def __iter__(self): - return self - - def __next__(self, timeout=None): - while True: - try: - return self.next(timeout) - except StopIteration: - raise - except StorageErrorException as error: - process_storage_error(error) - - def next(self, timeout=None): - ''' - Get the next element from the queue. If no more elements - are expected, then raise StopIteration; otherwise if no elements - are available element, wait timeout seconds, before raising Empty. - ''' - try: - return self.get(timeout=timeout) - except StopIteration: - raise - - def get(self, timeout=None): - """ - Remove and return an item from the queue. - """ - if timeout is not None and timeout < 0: - raise ValueError("'timeout' must be a non-negative number") - return self._queue.popleft() - - def put(self, item): - """ - Add an item to the queue - """ - self._queue.append(item) diff --git a/sdk/storage/azure-storage-queue/azure/storage/queue/queue_service_client.py b/sdk/storage/azure-storage-queue/azure/storage/queue/queue_service_client.py index dc4f0df94f7e..e707b51bd6a7 100644 --- a/sdk/storage/azure-storage-queue/azure/storage/queue/queue_service_client.py +++ b/sdk/storage/azure-storage-queue/azure/storage/queue/queue_service_client.py @@ -7,95 +7,118 @@ import functools from typing import ( # pylint: disable=unused-import Union, Optional, Any, Iterable, Dict, List, - TYPE_CHECKING -) - -from .queue_client import QueueClient -from ._utils import ( - create_client, - create_pipeline, - create_configuration, - parse_connection_str, - process_storage_error, - basic_error_map -) -from .models import StorageServiceProperties, StorageErrorException -from ._generated.models import ListQueuesIncludeType -from ._shared_access_signature import QueueSharedAccessSignature - + TYPE_CHECKING) try: from urllib.parse import urlparse except ImportError: from urlparse import urlparse +from ._shared.shared_access_signature import SharedAccessSignature +from ._shared.models import LocationMode, Services +from ._shared.utils import ( + StorageAccountHostsMixin, + parse_query, + parse_connection_str, + process_storage_error) +from ._generated import AzureQueueStorage +from ._generated.models import StorageServiceProperties, StorageErrorException + +from .models import QueuePropertiesPaged +from .queue_client import QueueClient + if TYPE_CHECKING: from azure.core import Configuration from azure.core.pipeline.policies import HTTPPolicy -class QueueServiceClient(object): +class QueueServiceClient(StorageAccountHostsMixin): + """ A client interact with the Queue Service at the account level. + + This client provides operations to retrieve and configure the account properties + as well as list, create and delete queues within the account. + For operations relating to a specific queue, a client for this entity + can be retrieved using the `get_queue_client` function. + + :ivar str url: + The full endpoint URL to the Queue service account. This could be either the + primary endpoint, or the secondard endpint depending on the current `location_mode`. + :ivar str primary_endpoint: + The full primary endpoint URL. + :ivar str primary_hostname: + The hostname of the primary endpoint. + :ivar str secondary_endpoint: + The full secondard endpoint URL if configured. If not available + a ValueError will be raised. To explicitly specify a secondary hostname, use the optional + `secondary_hostname` keyword argument on instantiation. + :ivar str secondary_hostname: + The hostname of the secondary endpoint. If not available this + will be None. To explicitly specify a secondary hostname, use the optional + `secondary_hostname` keyword argument on instantiation. + :ivar str location_mode: + The location mode that the client is currently using. By default + this will be "primary". Options include "primary" and "secondary". + """ def __init__( self, account_url, # type: str - credentials=None, # type: Optional[HTTPPolicy] - configuration=None, # type: Optional[Configuration] + credential=None, # type: Optional[Any] **kwargs # type: Any ): # type: (...) -> None + """A new QueueServiceClient. + + :param str account_url: + The URL to the queue storage account. Any other entities included + in the URL path (e.g. queue) will be discarded. This URL can be optionally + authenticated with a SAS token. + :param credential: + The credentials with which to authenticate. This is optional if the + account URL already has a SAS token. The value can be a SAS token string, and account + shared access key, or an instance of a TokenCredentials class from azure.identity. """ - :param str account_name: - The storage account name. This is used to authenticate requests - signed with an account key and to construct the storage endpoint. It - is required unless a connection string is given. - :param credentials: Optional credentials object to override the SAS key as provided - in the connection string. - :param configuration: Optional pipeline configuration settings. - :type configuration: ~azure.core.configuration.Configuration - """ + try: + if not account_url.lower().startswith('http'): + account_url = "https://" + account_url + except AttributeError: + raise ValueError("Account URL must be a string.") parsed_url = urlparse(account_url.rstrip('/')) - self.scheme = parsed_url.scheme - self.account = parsed_url.hostname.split(".queue.core.")[0] - self.credentials = credentials - self.url = account_url if not parsed_url.path else "{}://{}".format( - self.scheme, - parsed_url.hostname - ) + if not parsed_url.netloc: + raise ValueError("Invalid URL: {}".format(account_url)) - self.require_encryption = kwargs.get('require_encryption', False) - self.key_encryption_key = kwargs.get('key_encryption_key') - self.key_resolver_function = kwargs.get('key_resolver_function') + _, sas_token = parse_query(parsed_url.query) + if not sas_token and not credential: + raise ValueError("You need to provide either a SAS token or an account key to authenticate.") + self._query_str, credential = self._format_query_string(sas_token, credential) + super(QueueServiceClient, self).__init__(parsed_url, 'queue', credential, **kwargs) + self._client = AzureQueueStorage(self.url, pipeline=self._pipeline) - self._config, self._pipeline = create_pipeline(configuration, credentials, **kwargs) - self._client = create_client(self.url, self._pipeline) + def _format_url(self, hostname): + """Format the endpoint URL according to the current location + mode hostname. + """ + return "{}://{}/{}".format(self.scheme, hostname, self._query_str) @classmethod def from_connection_string( cls, conn_str, # type: str - credentials=None, # type: Optional[HTTPPolicy] - configuration=None, # type: Optional[Configuration] + credential=None, # type: Optional[HTTPPolicy] **kwargs # type: Any ): - """ - Create QueueServiceClient from a Connection String. - :param str conn_str: A connection string to an Azure Storage account. - :param credentials: Optional credentials object to override the SAS key as provided - in the connection string. - :param configuration: Optional pipeline configuration settings. - :type configuration: ~azure.core.configuration.Configuration - """ - account_url, creds = parse_connection_str(conn_str, credentials) - return cls(account_url, credentials=creds, configuration=configuration, **kwargs) + """Create QueueServiceClient from a Connection String. - @staticmethod - def create_configuration(**kwargs): - # type: (**Any) -> Configuration + :param str conn_str: + A connection string to an Azure Storage account. + :param credential: + The credentials with which to authenticate. This is optional if the + account URL already has a SAS token, or the connection string already has shared + access key values. The value can be a SAS token string, and account shared access + key, or an instance of a TokenCredentials class from azure.identity. """ - Get an HTTP Pipeline Configuration with all default policies for the Blob - Storage service. - :rtype: ~azure.core.configuration.Configuration - """ - return create_configuration(**kwargs) - + account_url, secondary, credential = parse_connection_str( + conn_str, credential, 'queue') + if 'secondary_hostname' not in kwargs: + kwargs['secondary_hostname'] = secondary + return cls(account_url, credential=credential, **kwargs) def generate_shared_access_signature( self, resource_types, # type: Union[ResourceTypes, str] @@ -105,9 +128,10 @@ def generate_shared_access_signature( ip=None, # type: Optional[str] protocol=None # type: Optional[str] ): - """ - Generates a shared access signature for the queue service. + """Generates a shared access signature for the queue service. + Use the returned signature with the sas_token parameter of any QueueService. + :param ResourceTypes resource_types: Specifies the resource types that are accessible with the account SAS. :param AccountPermissions permission: @@ -143,18 +167,18 @@ def generate_shared_access_signature( :return: A Shared Access Signature (sas) token. :rtype: str """ - if not hasattr(self.credentials, 'account_key') and not self.credentials.account_key: + if not hasattr(self.credential, 'account_key') and not self.credential.account_key: raise ValueError("No account SAS key available.") - sas = SharedAccessSignature(self.account, self.credentials.account_key) - return sas.generate_account(resource_types, permission, - expiry, start=start, ip=ip, protocol=protocol) + sas = SharedAccessSignature(self.credential.account_name, self.credential.account_key) + return sas.generate_account( + Services.QUEUE, resource_types, permission, expiry, start=start, ip=ip, protocol=protocol) def get_service_stats(self, timeout=None, **kwargs): # type: (Optional[int], Optional[Any]) -> Dict[str, Any] - """ - Retrieves statistics related to replication for the Queue service. It is - only available when read-access geo-redundant replication is enabled for + """Retrieves statistics related to replication for the Queue service. + + It is only available when read-access geo-redundant replication is enabled for the storage account. With geo-redundant replication, Azure Storage maintains your data durable in two locations. In both locations, Azure Storage constantly maintains @@ -168,63 +192,64 @@ def get_service_stats(self, timeout=None, **kwargs): center that resides in the same region as the primary location. Read-only access is available from the secondary location, if read-access geo-redundant replication is enabled for your storage account. + :param int timeout: The timeout parameter is expressed in seconds. :return: The queue service stats. :rtype: ~azure.storage.queue._generated.models.StorageServiceStats """ try: - return self._client.service.get_statistics(timeout=timeout, **kwargs) + return self._client.service.get_statistics( + timeout=timeout, use_location=LocationMode.SECONDARY, **kwargs) except StorageErrorException as error: process_storage_error(error) def get_service_properties(self, timeout=None, **kwargs): # type(Optional[int], Optional[Any]) -> Dict[str, Any] - """ - Gets the properties of a storage account's Queue service, including + """Gets the properties of a storage account's Queue service, including Azure Storage Analytics. + :param int timeout: The timeout parameter is expressed in seconds. :rtype: ~azure.storage.queue._generated.models.StorageServiceProperties """ try: - return self._client.service.get_properties( - timeout=timeout, - error_map=basic_error_map(), - **kwargs) + return self._client.service.get_properties(timeout=timeout, **kwargs) except StorageErrorException as error: process_storage_error(error) def set_service_properties( - self, logging=None, # type: Optional[Union[Logging, Dict[str, Any]]] - hour_metrics=None, # type: Optional[Union[Metrics, Dict[str, Any]]] - minute_metrics=None, # type: Optional[Union[Metrics, Dict[str, Any]]] - cors=None, # type: Optional[List[Union[CorsRule, Dict[str, Any]]]] + self, logging=None, # type: Optional[Logging] + hour_metrics=None, # type: Optional[Metrics] + minute_metrics=None, # type: Optional[Metrics] + cors=None, # type: Optional[List[CorsRule]] timeout=None, # type: Optional[int] **kwargs ): # type: (...) -> None - """ - Sets the properties of a storage account's Queue service, including - Azure Storage Analytics. If an element (e.g. Logging) is left as None, the + """Sets the properties of a storage account's Queue service, including + Azure Storage Analytics. + + If an element (e.g. Logging) is left as None, the existing settings on the service for that functionality are preserved. + :param logging: Groups the Azure Analytics Logging settings. :type logging: :class:`~azure.storage.queue.models.Logging` :param hour_metrics: - The hour metrics settings provide a summary of request + The hour metrics settings provide a summary of request statistics grouped by API in hourly aggregates for queues. :type hour_metrics: :class:`~azure.storage.queue.models.Metrics` :param minute_metrics: - The minute metrics settings provide request statistics + The minute metrics settings provide request statistics for each minute for queues. :type minute_metrics: :class:`~azure.storage.queue.models.Metrics` :param cors: - You can include up to five CorsRule elements in the - list. If an empty list is specified, all CORS rules will be deleted, + You can include up to five CorsRule elements in the + list. If an empty list is specified, all CORS rules will be deleted, and CORS will be disabled for the service. :type cors: list(:class:`~azure.storage.queue.models.CorsRule`) :param int timeout: @@ -238,52 +263,116 @@ def set_service_properties( cors=cors ) try: - return self._client.service.set_properties( - props, - timeout=timeout, - error_map=basic_error_map(), - **kwargs) + return self._client.service.set_properties(props, timeout=timeout, **kwargs) except StorageErrorException as error: process_storage_error(error) - def list_queues(self, prefix=None, include_metadata=None, timeout=None, **kwargs): - """ - Returns an auto-paging iterable of dict-like QueueProperties. - :param str prefix: - Filters the results to return only queues with names that begin - with the specified prefix. + def list_queues( + self, name_starts_with=None, # type: Optional[str] + include_metadata=False, # type: Optional[bool] + marker=None, # type: Optional[str] + results_per_page=None, # type: Optional[int] + timeout=None, # type: Optional[int] + **kwargs + ): + # type: (...) -> QueuePropertiesPaged + """Returns a generator to list the queues under the specified account. + The generator will lazily follow the continuation tokens returned by + the service and stop when all queues have been returned. + + :param str name_starts_with: + Filters the results to return only queues whose names + begin with the specified prefix. :param bool include_metadata: - Specifies that container metadata be returned in the response. + Specifies that queue metadata be returned in the response. + :param str marker: + An opaque continuation token. This value can be retrieved from the + next_marker field of a previous generator object. If specified, + this generator will begin returning results from this point. + :param int results_per_page: + The maximum number of queue names to retrieve per API + call. If the request does not specify the server will return up to 5,000 items. :param int timeout: - The server timeout, expressed in seconds. This function may make multiple - calls to the service in which case the timeout value specified will be + The server timeout, expressed in seconds. This function may make multiple + calls to the service in which case the timeout value specified will be applied to each individual call. + :returns: An iterable (auto-paging) of QueueProperties. + :rtype: ~azure.core.queue.models.QueuePropertiesPaged """ - if include_metadata and not isinstance(include_metadata, list): - include_metadata = [include_metadata] - try: - return self._client.service.list_queues_segment( - prefix=prefix, - include=include_metadata, - timeout=timeout, - error_map=basic_error_map(), - **kwargs - ) - except StorageErrorException as error: - process_storage_error(error) + include = ['metadata'] if include_metadata else None + command = functools.partial( + self._client.service.list_queues_segment, + prefix=name_starts_with, + include=include, + timeout=timeout, + **kwargs) + return QueuePropertiesPaged( + command, prefix=name_starts_with, results_per_page=results_per_page, marker=marker) - def get_queue_client(self, queue_name): - # type: (str) -> QueueClient + def create_queue( + self, name, # type: str + metadata=None, # type: Optional[Dict[str, str]] + timeout=None, # type: Optional[int] + **kwargs + ): + # type: (...) -> ContainerClient + """Creates a new queue under the specified account. If a queue + with the same name already exists, the operation fails. Returns a client with + which to interact with the newly created queue. + + :param str name: The name of the queue to create. + :param metadata: + A dict with name_value pairs to associate with the + queue as metadata. Example:{'Category':'test'} + :type metadata: dict(str, str) + :param int timeout: + The timeout parameter is expressed in seconds. + :rtype: ~azure.storage.queue.queue_client.QueueClient + """ + queue = self.get_queue_client(name) + queue.create_queue( + metadata=metadata, timeout=timeout, **kwargs) + return queue + + def delete_queue( + self, queue, # type: Union[QueueProperties, str] + timeout=None, # type: Optional[int] + **kwargs + ): + # type: (...) -> None + """Deletes the specified queue and any messages it contains. + + When a queue is successfully deleted, it is immediately marked for deletion + and is no longer accessible to clients. The queue is later removed from + the Queue service during garbage collection. + Note that deleting a queue is likely to take at least 40 seconds to complete. + If an operation is attempted against the queue while it was being deleted, + an :class:`HttpResponseError` will be thrown. + + :param queue: + The queue to delete. This can either be the name of the queue, + or an instance of QueueProperties. + :type queue: str or ~azure.storage.queue.models.QueueProperties + :param int timeout: + The timeout parameter is expressed in seconds. + :rtype: None """ - Get a client to interact with the specified queue. + queue = self.get_queue_client(queue) + queue.delete_queue(timeout=timeout, **kwargs) + + def get_queue_client(self, queue, **kwargs): + # type: (Union[QueueProperties, str]) -> QueueClient + """Get a client to interact with the specified queue. The queue need not already exist. - :param queue_name: The name of the queue with which to interact. - :type queue: str + + :param queue: + The queue. This can either be the name of the queue, + or an instance of QueueProperties. + :type queue: str or ~azure.storage.queue.models.QueueProperties :returns: A QueueClient. :rtype: ~azure.core.queue.queue_client.QueueClient """ return QueueClient( - self.url, queue_name=queue_name, credentials=self.credentials, - configuration=self._config, _pipeline=self._pipeline, + self.url, queue=queue, credential=self.credential, key_resolver_function=self.key_resolver_function, require_encryption=self.require_encryption, key_encryption_key=self.key_encryption_key, - key_resolver_function=self.key_resolver_function) + _pipeline=self._pipeline, _location_mode=self._location_mode, _hosts=self._hosts, **kwargs) diff --git a/sdk/storage/azure-storage-queue/azure/storage/queue/version.py b/sdk/storage/azure-storage-queue/azure/storage/queue/version.py index 9ed7b1240a1c..665e0c92c8e2 100644 --- a/sdk/storage/azure-storage-queue/azure/storage/queue/version.py +++ b/sdk/storage/azure-storage-queue/azure/storage/queue/version.py @@ -9,4 +9,4 @@ # regenerated. # -------------------------------------------------------------------------- -VERSION = "1.0.0" +__version__ = "1.0.0" diff --git a/sdk/storage/azure-storage-queue/dev_requirements.txt b/sdk/storage/azure-storage-queue/dev_requirements.txt index c30b53f97ef7..6ac6eff04942 100644 --- a/sdk/storage/azure-storage-queue/dev_requirements.txt +++ b/sdk/storage/azure-storage-queue/dev_requirements.txt @@ -1,4 +1,4 @@ --e ../../../azure-sdk-tools +-e ../../../tools/azure-sdk-tools -e ../../core/azure-core pylint==2.1.1; python_version >= '3.4' pylint==1.8.4; python_version < '3.4' diff --git a/sdk/storage/azure-storage-queue/tests/common/__init__.py b/sdk/storage/azure-storage-queue/tests/common/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/sdk/storage/azure-storage-queue/tests/common/test_client.py b/sdk/storage/azure-storage-queue/tests/common/test_client.py new file mode 100644 index 000000000000..ad6526a7c94e --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/common/test_client.py @@ -0,0 +1,352 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +import unittest +import pytest + +from azure.storage.queue import ( + QueueServiceClient, + QueueClient, +) +from tests.testcase import ( + StorageTestCase, + record, +) +#from azure.storage.common import TokenCredential + +# ------------------------------------------------------------------------------ +SERVICES = { + QueueServiceClient: 'queue', + QueueClient: 'queue', +} + +_CONNECTION_ENDPOINTS = {'queue': 'QueueEndpoint'} + +_CONNECTION_ENDPOINTS_SECONDARY = {'queue': 'QueueSecondaryEndpoint'} + +class StorageClientTest(StorageTestCase): + def setUp(self): + super(StorageClientTest, self).setUp() + self.account_name = self.settings.STORAGE_ACCOUNT_NAME + self.account_key = self.settings.STORAGE_ACCOUNT_KEY + self.sas_token = '?sv=2015-04-05&st=2015-04-29T22%3A18%3A26Z&se=2015-04-30T02%3A23%3A26Z&sr=b&sp=rw&sip=168.1.5.60-168.1.5.70&spr=https&sig=Z%2FRHIX5Xcg0Mq2rqI3OlWTjEg2tYkboXr1P9ZUXDtkk%3D' + self.token_credential = self.generate_oauth_token() + self.connection_string = self.settings.CONNECTION_STRING + + # --Helpers----------------------------------------------------------------- + def validate_standard_account_endpoints(self, service, url_type): + self.assertIsNotNone(service) + self.assertEqual(service.credential.account_name, self.account_name) + self.assertEqual(service.credential.account_key, self.account_key) + self.assertTrue('{}.{}.core.windows.net'.format(self.account_name, url_type) in service.url) + self.assertTrue('{}-secondary.{}.core.windows.net'.format(self.account_name, url_type) in service.secondary_endpoint) + + # --Direct Parameters Test Cases -------------------------------------------- + def test_create_service_with_key(self): + # Arrange + + for client, url in SERVICES.items(): + # Act + service = client( + self._get_queue_url(), credential=self.account_key, queue='foo') + + # Assert + self.validate_standard_account_endpoints(service, url) + self.assertEqual(service.scheme, 'https') + + def test_create_service_with_connection_string(self): + + for service_type in SERVICES.items(): + # Act + service = service_type[0].from_connection_string( + self.connection_string, queue="test") + + # Assert + self.validate_standard_account_endpoints(service, service_type[1]) + self.assertEqual(service.scheme, 'https') + + def test_create_service_with_sas(self): + # Arrange + + for service_type in SERVICES: + # Act + service = service_type( + self._get_queue_url(), credential=self.sas_token, queue='foo') + + # Assert + self.assertIsNotNone(service) + self.assertTrue(service.url.startswith('https://' + self.account_name + '.queue.core.windows.net')) + self.assertTrue(service.url.endswith(self.sas_token)) + self.assertIsNone(service.credential) + + def test_create_service_with_token(self): + for service_type in SERVICES: + # Act + service = service_type( + self._get_queue_url(), credential=self.token_credential, queue='foo') + + # Assert + self.assertIsNotNone(service) + self.assertTrue(service.url.startswith('https://' + self.account_name + '.queue.core.windows.net')) + self.assertEqual(service.credential, self.token_credential) + self.assertFalse(hasattr(service.credential, 'account_key')) + self.assertTrue(hasattr(service.credential, 'get_token')) + + def test_create_service_with_token_and_http(self): + for service_type in SERVICES: + # Act + with self.assertRaises(ValueError): + url = self._get_queue_url().replace('https', 'http') + service_type(url, credential=self.token_credential, queue='foo') + + def test_create_service_china(self): + # Arrange + + for service_type in SERVICES.items(): + # Act + url = self._get_queue_url().replace('core.windows.net', 'core.chinacloudapi.cn') + service = service_type[0]( + url, credential=self.account_key, queue='foo') + + # Assert + self.assertIsNotNone(service) + self.assertEqual(service.credential.account_name, self.account_name) + self.assertEqual(service.credential.account_key, self.account_key) + self.assertTrue(service.primary_endpoint.startswith( + 'https://{}.{}.core.chinacloudapi.cn'.format(self.account_name, service_type[1]))) + self.assertTrue(service.secondary_endpoint.startswith( + 'https://{}-secondary.{}.core.chinacloudapi.cn'.format(self.account_name, service_type[1]))) + + def test_create_service_protocol(self): + # Arrange + + for service_type in SERVICES.items(): + # Act + url = self._get_queue_url().replace('https', 'http') + service = service_type[0]( + url, credential=self.account_key, queue='foo') + + # Assert + self.validate_standard_account_endpoints(service, service_type[1]) + self.assertEqual(service.scheme, 'http') + + def test_create_service_empty_key(self): + # Arrange + QUEUE_SERVICES = [QueueServiceClient, QueueClient] + + for service_type in QUEUE_SERVICES: + # Act + with self.assertRaises(ValueError) as e: + test_service = service_type('testaccount', credential='', queue='foo') + + self.assertEqual( + str(e.exception), "You need to provide either a SAS token or an account key to authenticate.") + + def test_create_service_missing_arguments(self): + # Arrange + + for service_type in SERVICES: + # Act + with self.assertRaises(ValueError): + service = service_type(None) + + # Assert + + def test_create_service_with_socket_timeout(self): + # Arrange + + for service_type in SERVICES.items(): + # Act + default_service = service_type[0]( + self._get_queue_url(), credential=self.account_key, queue='foo') + service = service_type[0]( + self._get_queue_url(), credential=self.account_key, + queue='foo', connection_timeout=22) + + # Assert + self.validate_standard_account_endpoints(service, service_type[1]) + self.assertEqual(service._config.connection.timeout, 22) + self.assertTrue(default_service._config.connection.timeout in [20, (20, 2000)]) + + # --Connection String Test Cases -------------------------------------------- + + def test_create_service_with_connection_string_key(self): + # Arrange + conn_string = 'AccountName={};AccountKey={};'.format(self.account_name, self.account_key) + + for service_type in SERVICES.items(): + # Act + service = service_type[0].from_connection_string(conn_string, queue='foo') + + # Assert + self.validate_standard_account_endpoints(service, service_type[1]) + self.assertEqual(service.scheme, 'https') + + def test_create_service_with_connection_string_sas(self): + # Arrange + conn_string = 'AccountName={};SharedAccessSignature={};'.format(self.account_name, self.sas_token) + + for service_type in SERVICES: + # Act + service = service_type.from_connection_string(conn_string, queue='foo') + + # Assert + self.assertIsNotNone(service) + self.assertTrue(service.url.startswith('https://' + self.account_name + '.queue.core.windows.net')) + self.assertTrue(service.url.endswith(self.sas_token)) + self.assertIsNone(service.credential) + + def test_create_service_with_connection_string_endpoint_protocol(self): + # Arrange + conn_string = 'AccountName={};AccountKey={};DefaultEndpointsProtocol=http;EndpointSuffix=core.chinacloudapi.cn;'.format( + self.account_name, self.account_key) + + for service_type in SERVICES.items(): + # Act + service = service_type[0].from_connection_string(conn_string, queue="foo") + + # Assert + self.assertIsNotNone(service) + self.assertEqual(service.credential.account_name, self.account_name) + self.assertEqual(service.credential.account_key, self.account_key) + self.assertTrue( + service.primary_endpoint.startswith( + 'http://{}.{}.core.chinacloudapi.cn/'.format(self.account_name, service_type[1]))) + self.assertTrue( + service.secondary_endpoint.startswith( + 'http://{}-secondary.{}.core.chinacloudapi.cn'.format(self.account_name, service_type[1]))) + self.assertEqual(service.scheme, 'http') + + def test_create_service_with_connection_string_emulated(self): + # Arrange + for service_type in SERVICES.items(): + conn_string = 'UseDevelopmentStorage=true;'.format(self.account_name, self.account_key) + + # Act + with self.assertRaises(ValueError): + service = service_type[0].from_connection_string(conn_string, queue="foo") + + def test_create_service_with_connection_string_custom_domain(self): + # Arrange + for service_type in SERVICES.items(): + conn_string = 'AccountName={};AccountKey={};QueueEndpoint=www.mydomain.com;'.format( + self.account_name, self.account_key) + + # Act + service = service_type[0].from_connection_string(conn_string, queue="foo") + + # Assert + self.assertIsNotNone(service) + self.assertEqual(service.credential.account_name, self.account_name) + self.assertEqual(service.credential.account_key, self.account_key) + self.assertTrue(service.primary_endpoint.startswith('https://www.mydomain.com/')) + self.assertTrue(service.secondary_endpoint.startswith('https://' + self.account_name + '-secondary.queue.core.windows.net')) + + def test_create_service_with_connection_string_custom_domain_trailing_slash(self): + # Arrange + for service_type in SERVICES.items(): + conn_string = 'AccountName={};AccountKey={};QueueEndpoint=www.mydomain.com/;'.format( + self.account_name, self.account_key) + + # Act + service = service_type[0].from_connection_string(conn_string, queue="foo") + + # Assert + self.assertIsNotNone(service) + self.assertEqual(service.credential.account_name, self.account_name) + self.assertEqual(service.credential.account_key, self.account_key) + self.assertTrue(service.primary_endpoint.startswith('https://www.mydomain.com/')) + self.assertTrue(service.secondary_endpoint.startswith('https://' + self.account_name + '-secondary.queue.core.windows.net')) + + + def test_create_service_with_connection_string_custom_domain_secondary_override(self): + # Arrange + for service_type in SERVICES.items(): + conn_string = 'AccountName={};AccountKey={};QueueEndpoint=www.mydomain.com/;'.format( + self.account_name, self.account_key) + + # Act + service = service_type[0].from_connection_string( + conn_string, secondary_hostname="www-sec.mydomain.com", queue="foo") + + # Assert + self.assertIsNotNone(service) + self.assertEqual(service.credential.account_name, self.account_name) + self.assertEqual(service.credential.account_key, self.account_key) + self.assertTrue(service.primary_endpoint.startswith('https://www.mydomain.com/')) + self.assertTrue(service.secondary_endpoint.startswith('https://www-sec.mydomain.com/')) + + + def test_create_service_with_connection_string_fails_if_secondary_without_primary(self): + for service_type in SERVICES.items(): + # Arrange + conn_string = 'AccountName={};AccountKey={};{}=www.mydomain.com;'.format( + self.account_name, self.account_key, + _CONNECTION_ENDPOINTS_SECONDARY.get(service_type[1])) + + # Act + + # Fails if primary excluded + with self.assertRaises(ValueError): + service = service_type[0].from_connection_string(conn_string, queue="foo") + + def test_create_service_with_connection_string_succeeds_if_secondary_with_primary(self): + for service_type in SERVICES.items(): + # Arrange + conn_string = 'AccountName={};AccountKey={};{}=www.mydomain.com;{}=www-sec.mydomain.com;'.format( + self.account_name, + self.account_key, + _CONNECTION_ENDPOINTS.get(service_type[1]), + _CONNECTION_ENDPOINTS_SECONDARY.get(service_type[1])) + + # Act + service = service_type[0].from_connection_string(conn_string, queue="foo") + + # Assert + self.assertIsNotNone(service) + self.assertEqual(service.credential.account_name, self.account_name) + self.assertEqual(service.credential.account_key, self.account_key) + self.assertTrue(service.primary_endpoint.startswith('https://www.mydomain.com/')) + self.assertTrue(service.secondary_endpoint.startswith('https://www-sec.mydomain.com/')) + + @record + def test_request_callback_signed_header(self): + # Arrange + service = QueueServiceClient(self._get_queue_url(), credential=self.account_key) + name = self.get_resource_name('cont') + + # Act + def callback(request): + if request.http_request.method == 'PUT': + request.http_request.headers['x-ms-meta-hello'] = 'world' + + # Assert + try: + queue = service.create_queue(name, raw_request_hook=callback) + metadata = queue.get_queue_properties().metadata + self.assertEqual(metadata, {'hello': 'world'}) + finally: + service.delete_queue(name) + + @record + def test_response_callback(self): + # Arrange + service = QueueServiceClient(self._get_queue_url(), credential=self.account_key) + name = self.get_resource_name('cont') + queue = service.get_queue_client(name) + + # Act + def callback(response): + response.http_response.status_code = 200 + response.http_response.headers.clear() + + # Assert + exists = queue.get_queue_properties(raw_response_hook=callback) + self.assertTrue(exists) + + +# ------------------------------------------------------------------------------ +if __name__ == '__main__': + unittest.main() diff --git a/sdk/storage/azure-storage-queue/tests/common/test_service_properties.py b/sdk/storage/azure-storage-queue/tests/common/test_service_properties.py new file mode 100644 index 000000000000..fc85292fa8a0 --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/common/test_service_properties.py @@ -0,0 +1,231 @@ +# coding: utf-8 + +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +import unittest + +from msrest.exceptions import ValidationError # TODO This should be an azure-core error. +from azure.core.exceptions import HttpResponseError + +from azure.storage.queue import ( + QueueServiceClient, + QueueClient, + Logging, + Metrics, + CorsRule, + RetentionPolicy, +) + +from tests.testcase import ( + StorageTestCase, + record, + not_for_emulator, +) + + +# ------------------------------------------------------------------------------ + + +class ServicePropertiesTest(StorageTestCase): + def setUp(self): + super(ServicePropertiesTest, self).setUp() + + url = self._get_queue_url() + credential = self._get_shared_key_credential() + self.qsc = QueueServiceClient(url, credential=credential) + + # --Helpers----------------------------------------------------------------- + def _assert_properties_default(self, prop): + self.assertIsNotNone(prop) + + self._assert_logging_equal(prop.logging, Logging()) + self._assert_metrics_equal(prop.hour_metrics, Metrics()) + self._assert_metrics_equal(prop.minute_metrics, Metrics()) + self._assert_cors_equal(prop.cors, list()) + + def _assert_logging_equal(self, log1, log2): + if log1 is None or log2 is None: + self.assertEqual(log1, log2) + return + + self.assertEqual(log1.version, log2.version) + self.assertEqual(log1.read, log2.read) + self.assertEqual(log1.write, log2.write) + self.assertEqual(log1.delete, log2.delete) + self._assert_retention_equal(log1.retention_policy, log2.retention_policy) + + def _assert_delete_retention_policy_equal(self, policy1, policy2): + if policy1 is None or policy2 is None: + self.assertEqual(policy1, policy2) + return + + self.assertEqual(policy1.enabled, policy2.enabled) + self.assertEqual(policy1.days, policy2.days) + + def _assert_static_website_equal(self, prop1, prop2): + if prop1 is None or prop2 is None: + self.assertEqual(prop1, prop2) + return + + self.assertEqual(prop1.enabled, prop2.enabled) + self.assertEqual(prop1.index_document, prop2.index_document) + self.assertEqual(prop1.error_document404_path, prop2.error_document404_path) + + def _assert_delete_retention_policy_not_equal(self, policy1, policy2): + if policy1 is None or policy2 is None: + self.assertNotEqual(policy1, policy2) + return + + self.assertFalse(policy1.enabled == policy2.enabled + and policy1.days == policy2.days) + + def _assert_metrics_equal(self, metrics1, metrics2): + if metrics1 is None or metrics2 is None: + self.assertEqual(metrics1, metrics2) + return + + self.assertEqual(metrics1.version, metrics2.version) + self.assertEqual(metrics1.enabled, metrics2.enabled) + self.assertEqual(metrics1.include_apis, metrics2.include_apis) + self._assert_retention_equal(metrics1.retention_policy, metrics2.retention_policy) + + def _assert_cors_equal(self, cors1, cors2): + if cors1 is None or cors2 is None: + self.assertEqual(cors1, cors2) + return + + self.assertEqual(len(cors1), len(cors2)) + + for i in range(0, len(cors1)): + rule1 = cors1[i] + rule2 = cors2[i] + self.assertEqual(len(rule1.allowed_origins), len(rule2.allowed_origins)) + self.assertEqual(len(rule1.allowed_methods), len(rule2.allowed_methods)) + self.assertEqual(rule1.max_age_in_seconds, rule2.max_age_in_seconds) + self.assertEqual(len(rule1.exposed_headers), len(rule2.exposed_headers)) + self.assertEqual(len(rule1.allowed_headers), len(rule2.allowed_headers)) + + def _assert_retention_equal(self, ret1, ret2): + self.assertEqual(ret1.enabled, ret2.enabled) + self.assertEqual(ret1.days, ret2.days) + + # --Test cases per service --------------------------------------- + + @record + def test_queue_service_properties(self): + # Arrange + + # Act + resp = self.qsc.set_service_properties( + logging=Logging(), + hour_metrics=Metrics(), + minute_metrics=Metrics(), + cors=list()) + + # Assert + self.assertIsNone(resp) + self._assert_properties_default(self.qsc.get_service_properties()) + + + # --Test cases per feature --------------------------------------- + + @record + def test_set_logging(self): + # Arrange + logging = Logging(read=True, write=True, delete=True, retention_policy=RetentionPolicy(enabled=True, days=5)) + + # Act + self.qsc.set_service_properties(logging=logging) + + # Assert + received_props = self.qsc.get_service_properties() + self._assert_logging_equal(received_props.logging, logging) + + @record + def test_set_hour_metrics(self): + # Arrange + hour_metrics = Metrics(enabled=True, include_apis=True, retention_policy=RetentionPolicy(enabled=True, days=5)) + + # Act + self.qsc.set_service_properties(hour_metrics=hour_metrics) + + # Assert + received_props = self.qsc.get_service_properties() + self._assert_metrics_equal(received_props.hour_metrics, hour_metrics) + + @record + def test_set_minute_metrics(self): + # Arrange + minute_metrics = Metrics(enabled=True, include_apis=True, + retention_policy=RetentionPolicy(enabled=True, days=5)) + + # Act + self.qsc.set_service_properties(minute_metrics=minute_metrics) + + # Assert + received_props = self.qsc.get_service_properties() + self._assert_metrics_equal(received_props.minute_metrics, minute_metrics) + + @record + def test_set_cors(self): + # Arrange + cors_rule1 = CorsRule(['www.xyz.com'], ['GET']) + + allowed_origins = ['www.xyz.com', "www.ab.com", "www.bc.com"] + allowed_methods = ['GET', 'PUT'] + max_age_in_seconds = 500 + exposed_headers = ["x-ms-meta-data*", "x-ms-meta-source*", "x-ms-meta-abc", "x-ms-meta-bcd"] + allowed_headers = ["x-ms-meta-data*", "x-ms-meta-target*", "x-ms-meta-xyz", "x-ms-meta-foo"] + cors_rule2 = CorsRule( + allowed_origins, + allowed_methods, + max_age_in_seconds=max_age_in_seconds, + exposed_headers=exposed_headers, + allowed_headers=allowed_headers) + + cors = [cors_rule1, cors_rule2] + + # Act + self.qsc.set_service_properties(cors=cors) + + # Assert + received_props = self.qsc.get_service_properties() + self._assert_cors_equal(received_props.cors, cors) + + # --Test cases for errors --------------------------------------- + @record + def test_retention_no_days(self): + # Assert + self.assertRaises(ValueError, + RetentionPolicy, + True, None) + + @record + def test_too_many_cors_rules(self): + # Arrange + cors = [] + for i in range(0, 6): + cors.append(CorsRule(['www.xyz.com'], ['GET'])) + + # Assert + self.assertRaises(HttpResponseError, + self.qsc.set_service_properties, None, None, None, cors) + + @record + def test_retention_too_long(self): + # Arrange + minute_metrics = Metrics(enabled=True, include_apis=True, + retention_policy=RetentionPolicy(enabled=True, days=366)) + + # Assert + self.assertRaises(HttpResponseError, + self.qsc.set_service_properties, + None, None, minute_metrics) + + +# ------------------------------------------------------------------------------ +if __name__ == '__main__': + unittest.main() diff --git a/sdk/storage/azure-storage-queue/tests/common/test_service_stats.py b/sdk/storage/azure-storage-queue/tests/common/test_service_stats.py new file mode 100644 index 000000000000..cf0a487cf01b --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/common/test_service_stats.py @@ -0,0 +1,74 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +import unittest +import pytest + +from azure.storage.queue import QueueServiceClient + +from tests.testcase import ( + StorageTestCase, + record, +) + +SERVICE_UNAVAILABLE_RESP_BODY = 'unavailable ' + + +# --Test Class ----------------------------------------------------------------- +class ServiceStatsTest(StorageTestCase): + # --Helpers----------------------------------------------------------------- + def _assert_stats_default(self, stats): + self.assertIsNotNone(stats) + self.assertIsNotNone(stats.geo_replication) + + self.assertEqual(stats.geo_replication.status, 'live') + self.assertIsNotNone(stats.geo_replication.last_sync_time) + + def _assert_stats_unavailable(self, stats): + self.assertIsNotNone(stats) + self.assertIsNotNone(stats.geo_replication) + + self.assertEqual(stats.geo_replication.status, 'unavailable') + self.assertIsNone(stats.geo_replication.last_sync_time) + + @staticmethod + def override_response_body_with_unavailable_status(response): + response.http_response.text = lambda: SERVICE_UNAVAILABLE_RESP_BODY + + # --Test cases per service --------------------------------------- + + @record + def test_queue_service_stats_f(self): + # Arrange + url = self._get_queue_url() + credential = self._get_shared_key_credential() + qsc = QueueServiceClient(url, credential=credential) + + # Act + stats = qsc.get_service_stats() + + # Assert + self._assert_stats_default(stats) + + @record + def test_queue_service_stats_when_unavailable(self): + # Arrange + url = self._get_queue_url() + credential = self._get_shared_key_credential() + qsc = QueueServiceClient(url, credential=credential) + + # Act + stats = qsc.get_service_stats( + raw_response_hook=self.override_response_body_with_unavailable_status) + + # Assert + self._assert_stats_unavailable(stats) + + +# ------------------------------------------------------------------------------ +if __name__ == '__main__': + unittest.main() diff --git a/sdk/storage/azure-storage-queue/tests/queues/test_queue.py b/sdk/storage/azure-storage-queue/tests/queues/test_queue.py index f2798acb59d5..7907702db4b2 100644 --- a/sdk/storage/azure-storage-queue/tests/queues/test_queue.py +++ b/sdk/storage/azure-storage-queue/tests/queues/test_queue.py @@ -5,33 +5,31 @@ # Licensed under the MIT License. See License.txt in the project root for # license information. # -------------------------------------------------------------------------- + import unittest +import pytest +from dateutil.tz import tzutc from datetime import ( datetime, timedelta, date, ) -from azure.common import ( - AzureHttpError, - AzureConflictHttpError, - AzureMissingResourceHttpError, - AzureException, -) -from azure.core.exceptions import HttpResponseError, ResourceNotFoundError -from azure.storage.queue._generated.models import StorageErrorException -from azure.storage.queue.models import QueuePermissions -from dateutil.tz import tzutc +from azure.core.exceptions import ( + HttpResponseError, + ResourceNotFoundError, + ResourceExistsError) -from azure.storage.common import ( +from azure.storage.queue import ( + QueueServiceClient, + QueueClient, + QueuePermissions, AccessPolicy, ResourceTypes, AccountPermissions, - TokenCredential, + #TokenCredential, ) -from azure.storage.queue.queue_client import QueueClient -from azure.storage.queue.queue_service_client import QueueServiceClient -from azure.storage.queue.authentication import SharedKeyCredentials + from tests.testcase import ( StorageTestCase, TestMode, @@ -51,92 +49,59 @@ def setUp(self): super(StorageQueueTest, self).setUp() queue_url = self._get_queue_url() - self.queue_name = TEST_QUEUE_PREFIX - self.config = QueueServiceClient.create_configuration() - credentials = SharedKeyCredentials(*self._get_shared_key_credentials()) - self.qsc = QueueServiceClient(account_url=queue_url, credentials=credentials) - self.qs = QueueClient(queue_url=queue_url, queue_name=self.queue_name, credentials=credentials, configuration=self.config) - + credentials = self._get_shared_key_credential() + self.qsc = QueueServiceClient(account_url=queue_url, credential=credentials) self.test_queues = [] def tearDown(self): if not self.is_playback(): - for queue_name in self.test_queues: + for queue in self.test_queues: try: - queue_client.delete_queue(queue_name) + queue.delete_queue() except: pass return super(StorageQueueTest, self).tearDown() # --Helpers----------------------------------------------------------------- def _get_queue_reference(self, prefix=TEST_QUEUE_PREFIX): - queue_name = self.queue_name - self.test_queues.append(queue_name) - return queue_name + queue_name = self.get_resource_name(prefix) + queue = self.qsc.get_queue_client(queue_name) + self.test_queues.append(queue) + return queue def _create_queue(self, prefix=TEST_QUEUE_PREFIX): - queue_client = self.qsc.get_queue_client(prefix) - try: - queue_client.create_queue() - except: - pass - return queue_client + queue = self._get_queue_reference(prefix) + created = queue.create_queue() + return queue # --Test cases for queues ---------------------------------------------- @record def test_create_queue(self): # Action - queue_name = self._get_queue_reference() - queue_client = self.qsc.get_queue_client(queue_name=queue_name) + queue_client = self._get_queue_reference() created = queue_client.create_queue() # Asserts self.assertTrue(created) - @record - def test_create_queue_already_exist(self): - # Action - queue_name = self._get_queue_reference() - queue_client = self.qsc.get_queue_client(queue_name) - created1 = queue_client.create_queue() - with self.assertRaises(StorageErrorException): - queue_client.create_queue() - - # Asserts - self.assertTrue(created1) - @record def test_create_queue_fail_on_exist(self): # Action - queue_name = self._get_queue_reference() - queue_client = self.qsc.get_queue_client(queue_name) + queue_client = self._get_queue_reference() created = queue_client.create_queue() - with self.assertRaises(StorageErrorException): + with self.assertRaises(ResourceExistsError): queue_client.create_queue() # Asserts self.assertTrue(created) - @record - def test_create_queue_already_exist_different_metadata(self): - # Action - queue_name = self._get_queue_reference() - queue_client = self.qsc.get_queue_client(queue_name) - created = queue_client.create_queue() - created2 = queue_client.create_queue({"val": "value"}) - - # Asserts - self.assertTrue(created1) - self.assertFalse(created2) - @record def test_create_queue_fail_on_exist_different_metadata(self): # Action - queue_name = self._get_queue_reference() - queue_client = self.qsc.get_queue_client(queue_name) + queue_client = self._get_queue_reference() created = queue_client.create_queue() - with self.assertRaises(HttpResponseError): - queue_client.create_queue({"val": "value"}, True) + with self.assertRaises(ResourceExistsError): + queue_client.create_queue(metadata={"val": "value"}) # Asserts self.assertTrue(created) @@ -144,41 +109,31 @@ def test_create_queue_fail_on_exist_different_metadata(self): @record def test_create_queue_with_options(self): # Action - queue_name = self._get_queue_reference() - queue_client = self.qsc.get_queue_client(queue_name) + queue_client = self._get_queue_reference() queue_client.create_queue( metadata={'val1': 'test', 'val2': 'blah'}) - metadata = queue_client.get_queue_metadata() + props = queue_client.get_queue_properties() # Asserts - self.assertEqual(0, metadata.approximate_message_count) - self.assertEqual(2, len(metadata)) - self.assertEqual('test', metadata['val1']) - self.assertEqual('blah', metadata['val2']) + self.assertEqual(0, props.approximate_message_count) + self.assertEqual(2, len(props.metadata)) + self.assertEqual('test', props.metadata['val1']) + self.assertEqual('blah', props.metadata['val2']) @record def test_delete_non_existing_queue(self): # Action - queue_name = self._get_queue_reference() - queue_client = self.qsc.get_queue_client(queue_name + "1") - created = queue_client.create_queue() - deleted = queue_client.delete_queue() - # Asserts - self.assertIsNone(deleted) + queue_client = self._get_queue_reference() - @record - def test_delete_non_existing_queue_fail_not_exist(self): - # Action - queue_name = self._get_queue_reference() - queue_client = self.qsc.get_queue_client(queue_name) - with self.assertRaises(HttpResponseError): + # Asserts + with self.assertRaises(ResourceNotFoundError): queue_client.delete_queue() @record def test_delete_existing_queue_fail_not_exist(self): # Action - queue_name = self._get_queue_reference() - queue_client = self.qsc.get_queue_client(queue_name) + queue_client = self._get_queue_reference() + created = queue_client.create_queue() deleted = queue_client.delete_queue() @@ -188,11 +143,12 @@ def test_delete_existing_queue_fail_not_exist(self): @record def test_list_queues(self): # Action - queues = self.qsc.list_queues() + queues = list(self.qsc.list_queues()) # Asserts self.assertIsNotNone(queues) - + self.assertTrue(len(self.test_queues) <= len(queues)) + @record def test_list_queues_with_options(self): # Arrange @@ -201,32 +157,48 @@ def test_list_queues_with_options(self): self._create_queue(prefix + str(i)) # Action - queues = self.qsc.list_queues(prefix=prefix) - print(queues) + generator1 = self.qsc.list_queues( + name_starts_with=prefix, + results_per_page=3) + next(generator1) + queues1 = generator1.current_page + + generator2 = self.qsc.list_queues( + name_starts_with=prefix, + marker=generator1.next_marker, + include_metadata=True) + next(generator2) + queues2 = generator2.current_page # Asserts - self.assertIsNotNone(queues) - #self.assertEqual(4, len(queues.queue_items)) - self.assertIsNotNone(queues.queue_items) - #self.assertIsNone(queues1[0].metadata) - #self.assertNotEqual('', queues1[0].name) + self.assertIsNotNone(queues1) + self.assertEqual(3, len(queues1)) + self.assertIsNotNone(queues1[0]) + self.assertIsNone(queues1[0].metadata) + self.assertNotEqual('', queues1[0].name) + # Asserts + self.assertIsNotNone(queues2) + self.assertTrue(len(self.test_queues) - 3 <= len(queues2)) + self.assertIsNotNone(queues2[0]) + self.assertNotEqual('', queues2[0].name) @record def test_list_queues_with_metadata(self): # Action - queue_name = self._get_queue_reference() - queue_client = self.qsc.get_queue_client(queue_name) - created = queue_client.create_queue() - queue_client.set_queue_metadata(metadata={'val1': 'test', 'val2': 'blah'}) + queue = self._create_queue() + queue.set_queue_metadata(metadata={'val1': 'test', 'val2': 'blah'}) + + listed_queue = list(self.qsc.list_queues( + name_starts_with=queue.queue_name, + results_per_page=1, + include_metadata=True))[0] - queue = self.qsc.list_queues(include_metadata="True") - print(queue) # Asserts - self.assertIsNotNone(queue) - self.assertEqual(queue_name, queue.name) - self.assertIsNotNone(queue.metadata) - self.assertEqual(len(queue.metadata), 2) - self.assertEqual(queue.metadata['val1'], 'test') + self.assertIsNotNone(listed_queue) + self.assertEqual(queue.queue_name, listed_queue.name) + self.assertIsNotNone(listed_queue.metadata) + self.assertEqual(len(listed_queue.metadata), 2) + self.assertEqual(listed_queue.metadata['val1'], 'test') @record def test_set_queue_metadata(self): @@ -236,7 +208,7 @@ def test_set_queue_metadata(self): # Act queue.set_queue_metadata(metadata) - metadata_from_response = queue.get_queue_metadata().metadata + metadata_from_response = queue.get_queue_properties().metadata # Assert self.assertDictEqual(metadata_from_response, metadata) @@ -245,11 +217,32 @@ def test_get_queue_metadata_message_count(self): # Action queue_client = self._create_queue() queue_client.enqueue_message(u'message1') - metadata = queue_client.get_queue_metadata(queue_name) + props = queue_client.get_queue_properties() # Asserts - self.assertTrue(metadata.approximate_message_count >= 1) - self.assertEqual(0, len(metadata)) + self.assertTrue(props.approximate_message_count >= 1) + self.assertEqual(0, len(props.metadata)) + + @record + def test_queue_exists(self): + # Arrange + queue = self._create_queue() + + # Act + exists = queue.get_queue_properties() + + # Assert + self.assertTrue(exists) + + @record + def test_queue_not_exists(self): + # Arrange + queue = self.qsc.get_queue_client(self.get_resource_name('missing')) + # Act + with self.assertRaises(ResourceNotFoundError): + queue.get_queue_properties() + + # Assert @record def test_put_message(self): @@ -279,8 +272,9 @@ def test_put_message_large_time_to_live(self): messages = queue_client.peek_messages() # Assert - self.assertGreaterEqual(messages[0].expiration_time, - messages[0].insertion_time + timedelta(seconds=1024 * 1024 * 1024 - 3600)) + self.assertGreaterEqual( + messages[0].expiration_time, + messages[0].insertion_time + timedelta(seconds=1024 * 1024 * 1024 - 3600)) @record def test_put_message_infinite_time_to_live(self): @@ -302,7 +296,7 @@ def test_get_messages(self): queue_client.enqueue_message(u'message2') queue_client.enqueue_message(u'message3') queue_client.enqueue_message(u'message4') - result = queue_client.get_messages() + result = next(queue_client.dequeue_messages()) # Asserts self.assertIsNotNone(result) @@ -326,7 +320,7 @@ def test_get_messages_with_options(self): queue_client.enqueue_message(u'message2') queue_client.enqueue_message(u'message3') queue_client.enqueue_message(u'message4') - result = queue_client.get_messages(num_messages=4, visibility_timeout=20) + result = next(queue_client.dequeue_messages(num_messages=4, visibility_timeout=20)) # Asserts self.assertIsNotNone(result) @@ -373,7 +367,7 @@ def test_peek_messages_with_options(self): queue_client.enqueue_message(u'message2') queue_client.enqueue_message(u'message3') queue_client.enqueue_message(u'message4') - result = queue_client.peek_messages(num_messages=4) + result = queue_client.peek_messages(max_messages=4) # Asserts self.assertIsNotNone(result) @@ -406,15 +400,14 @@ def test_clear_messages(self): @record def test_delete_message(self): # Action - queue_name = self._get_queue_reference() - queue_client = self.qsc.get_queue_client(queue_name) + queue_client = self._create_queue() queue_client.enqueue_message(u'message1') queue_client.enqueue_message(u'message2') queue_client.enqueue_message(u'message3') queue_client.enqueue_message(u'message4') - result = queue_client.dequeue_messages() - queue_client.delete_message(result[0].id, result[0].pop_receipt) - result2 = queue_client.get_messages(num_messages=32) + result = next(queue_client.dequeue_messages()) + queue_client.delete_message(result[0]) + result2 = next(queue_client.dequeue_messages(num_messages=32)) # Asserts self.assertIsNotNone(result2) @@ -425,11 +418,13 @@ def test_update_message(self): # Action queue_client = self._create_queue() queue_client.enqueue_message(u'message1') - list_result1 = queue_client.get_messages() - message = queue_client.update_message(list_result1[0].id, - list_result1[0].pop_receipt, - 0) - list_result2 = queue_client.get_messages() + messages = queue_client.dequeue_messages() + list_result1 = next(messages)[0] + message = queue_client.update_message( + list_result1.id, + pop_receipt=list_result1.pop_receipt, + visibility_timeout=0) + list_result2 = next(messages) # Asserts # Update response @@ -442,7 +437,7 @@ def test_update_message(self): self.assertIsNotNone(list_result2) message = list_result2[0] self.assertIsNotNone(message) - self.assertEqual(list_result1[0].id, message.id) + self.assertEqual(list_result1.id, message.id) self.assertEqual(u'message1', message.content) self.assertEqual(2, message.dequeue_count) self.assertIsNotNone(message.pop_receipt) @@ -455,12 +450,15 @@ def test_update_message_content(self): # Action queue_client = self._create_queue() queue_client.enqueue_message(u'message1') - list_result1 = queue_client.get_messages() - message = queue_client.update_message(list_result1[0].id, - list_result1[0].pop_receipt, - 0, - content=u'new text', ) - list_result2 = queue_client.get_messages() + + messages = queue_client.dequeue_messages() + list_result1 = next(messages)[0] + message = queue_client.update_message( + list_result1.id, + pop_receipt=list_result1.pop_receipt, + visibility_timeout=0, + content=u'new text') + list_result2 = next(messages) # Asserts # Update response @@ -473,7 +471,7 @@ def test_update_message_content(self): self.assertIsNotNone(list_result2) message = list_result2[0] self.assertIsNotNone(message) - self.assertEqual(list_result1[0].id, message.id) + self.assertEqual(list_result1.id, message.id) self.assertEqual(u'new text', message.content) self.assertEqual(2, message.dequeue_count) self.assertIsNotNone(message.pop_receipt) @@ -489,7 +487,7 @@ def test_account_sas(self): # Arrange queue_client = self._create_queue() queue_client.enqueue_message(u'message1') - token = queue_client.generate_account_shared_access_signature( + token = self.qsc.generate_shared_access_signature( ResourceTypes.OBJECT, AccountPermissions.READ, datetime.utcnow() + timedelta(hours=1), @@ -497,12 +495,12 @@ def test_account_sas(self): ) # Act - service = QueueService( - account_name=self.settings.STORAGE_ACCOUNT_NAME, - sas_token=token, + service = QueueServiceClient( + account_url=self.qsc.url, + credential=token, ) - self._set_test_proxy(service, self.settings) - result = service.peek_messages() + new_queue_client = service.get_queue_client(queue_client.queue_name) + result = new_queue_client.peek_messages() # Assert self.assertIsNotNone(result) @@ -514,6 +512,7 @@ def test_account_sas(self): @record def test_token_credential(self): + pytest.skip('pending oauth') token_credential = TokenCredential(self.generate_oauth_token()) # Action 1: make sure token works @@ -540,18 +539,17 @@ def test_sas_read(self): # Arrange queue_client = self._create_queue() queue_client.enqueue_message(u'message1') - token = queue_client.generate_queue_shared_access_signature( + token = queue_client.generate_shared_access_signature( QueuePermissions.READ, datetime.utcnow() + timedelta(hours=1), datetime.utcnow() - timedelta(minutes=5) ) # Act - service = QueueService( - account_name=self.settings.STORAGE_ACCOUNT_NAME, - sas_token=token, + service = QueueClient( + queue_url=queue_client.url, + credential=token, ) - self._set_test_proxy(service, self.settings) result = service.peek_messages() # Assert @@ -569,21 +567,20 @@ def test_sas_add(self): # Arrange queue_client = self._create_queue() - token = queue_client.generate_queue_shared_access_signature( + token = queue_client.generate_shared_access_signature( QueuePermissions.ADD, datetime.utcnow() + timedelta(hours=1), ) # Act - service = QueueService( - account_name=self.settings.STORAGE_ACCOUNT_NAME, - sas_token=token, + service = QueueClient( + queue_url=queue_client.url, + credential=token, ) - self._set_test_proxy(service, self.settings) - result = service.put_message(u'addedmessage') + result = service.enqueue_message(u'addedmessage') # Assert - result = queue_client.get_messages() + result = next(queue_client.dequeue_messages()) self.assertEqual(u'addedmessage', result[0].content) def test_sas_update(self): @@ -594,27 +591,27 @@ def test_sas_update(self): # Arrange queue_client = self._create_queue() queue_client.enqueue_message(u'message1') - token = queue_client.generate_queue_shared_access_signature( + token = queue_client.generate_shared_access_signature( QueuePermissions.UPDATE, datetime.utcnow() + timedelta(hours=1), ) - result = queue_client.get_messages() + messages = queue_client.dequeue_messages() + result = next(messages) # Act - service = QueueService( - account_name=self.settings.STORAGE_ACCOUNT_NAME, - sas_token=token, + service = QueueClient( + queue_url=queue_client.url, + credential=token, ) - self._set_test_proxy(service, self.settings) service.update_message( result[0].id, - result[0].pop_receipt, + pop_receipt=result[0].pop_receipt, visibility_timeout=0, content=u'updatedmessage1', ) # Assert - result = queue_client.get_messages() + result = next(messages) self.assertEqual(u'updatedmessage1', result[0].content) def test_sas_process(self): @@ -625,18 +622,17 @@ def test_sas_process(self): # Arrange queue_client = self._create_queue() queue_client.enqueue_message(u'message1') - token = queue_client.generate_queue_shared_access_signature( + token = queue_client.generate_shared_access_signature( QueuePermissions.PROCESS, datetime.utcnow() + timedelta(hours=1), ) # Act - service = QueueService( - account_name=self.settings.STORAGE_ACCOUNT_NAME, - sas_token=token, + service = QueueClient( + queue_url=queue_client.url, + credential=token, ) - self._set_test_proxy(service, self.settings) - result = service.get_messages() + result = next(service.dequeue_messages()) # Assert self.assertIsNotNone(result) @@ -660,20 +656,19 @@ def test_sas_signed_identifier(self): identifiers = {'testid': access_policy} queue_client = self._create_queue() - resp = queue_client.set_queue_acl(identifiers) + resp = queue_client.set_queue_access_policy(identifiers) queue_client.enqueue_message(u'message1') - token = queue_client.generate_queue_shared_access_signature( - id='testid' + token = queue_client.generate_shared_access_signature( + policy_id='testid' ) # Act - service = QueueService( - account_name=self.settings.STORAGE_ACCOUNT_NAME, - sas_token=token, + service = QueueClient( + queue_url=queue_client.url, + credential=token, ) - self._set_test_proxy(service, self.settings) result = service.peek_messages() # Assert @@ -687,26 +682,37 @@ def test_sas_signed_identifier(self): @record def test_get_queue_acl(self): # Arrange - queue_name = self._get_queue_reference() - queue_client = self.qsc.get_queue_client(queue_name=queue_name) - created = queue_client.create_queue() + queue_client = self._create_queue() # Act - acl = queue_client.get_queue_acl() + acl = queue_client.get_queue_access_policy() # Assert self.assertIsNotNone(acl) - self.assertEqual(len(acl.get('signed_identifiers')), 0) + self.assertEqual(len(acl), 0) + + @record + def test_get_queue_acl_iter(self): + # Arrange + queue_client = self._create_queue() + + # Act + acl = queue_client.get_queue_access_policy() + for signed_identifier in acl: + pass + + # Assert + self.assertIsNotNone(acl) + self.assertEqual(len(acl), 0) @record def test_get_queue_acl_with_non_existing_queue(self): # Arrange - queue_name = self._get_queue_reference() - queue_client = self.qsc.get_queue_client(queue_name=queue_name) + queue_client = self._get_queue_reference() # Act with self.assertRaises(ResourceNotFoundError): - queue_client.get_queue_acl() + queue_client.get_queue_access_policy() # Assert @@ -716,11 +722,11 @@ def test_set_queue_acl(self): queue_client = self._create_queue() # Act - resp = queue_client.set_queue_acl() + resp = queue_client.set_queue_access_policy() # Assert self.assertIsNone(resp) - acl = queue_client.get_queue_acl() + acl = queue_client.get_queue_access_policy() self.assertIsNotNone(acl) @record @@ -729,10 +735,10 @@ def test_set_queue_acl_with_empty_signed_identifiers(self): queue_client = self._create_queue() # Act - queue_client.set_queue_acl(signed_identifiers=[]) + queue_client.set_queue_access_policy(signed_identifiers={}) # Assert - acl = queue_client.get_queue_acl() + acl = queue_client.get_queue_access_policy() self.assertIsNotNone(acl) self.assertEqual(len(acl), 0) @@ -742,10 +748,10 @@ def test_set_queue_acl_with_empty_signed_identifier(self): queue_client = self._create_queue() # Act - queue_client.set_queue_acl(signed_identifiers=[AccessPolicy()]) + queue_client.set_queue_access_policy(signed_identifiers={'empty': AccessPolicy()}) # Assert - acl = queue_client.get_queue_acl() + acl = queue_client.get_queue_access_policy() self.assertIsNotNone(acl) self.assertEqual(len(acl), 1) self.assertIsNotNone(acl['empty']) @@ -760,15 +766,15 @@ def test_set_queue_acl_with_signed_identifiers(self): # Act access_policy = AccessPolicy(permission=QueuePermissions.READ, - expiry='2011-10-12', - start='2011-10-11') - identifiers = [access_policy] + expiry=datetime.utcnow() + timedelta(hours=1), + start=datetime.utcnow() - timedelta(minutes=5)) + identifiers = {'testid': access_policy} - resp = queue_client.set_queue_acl(signed_identifiers=identifiers) + resp = queue_client.set_queue_access_policy(signed_identifiers=identifiers) # Assert self.assertIsNone(resp) - acl = queue_client.get_queue_acl() + acl = queue_client.get_queue_access_policy() self.assertIsNotNone(acl) self.assertEqual(len(acl), 1) self.assertTrue('testid' in acl) @@ -785,17 +791,16 @@ def test_set_queue_acl_too_many_ids(self): # Assert with self.assertRaises(ValueError): - queue_client.set_queue_acl(identifiers) + queue_client.set_queue_access_policy(identifiers) @record def test_set_queue_acl_with_non_existing_queue(self): # Arrange - name = self._get_queue_reference() - queue_client = self.qsc.get_queue_client(name) + queue_client = self._get_queue_reference() # Act - with self.assertRaises(HttpResponseError): - queue_client.set_queue_acl() + with self.assertRaises(ResourceNotFoundError): + queue_client.set_queue_access_policy() # Assert @@ -816,7 +821,7 @@ def test_unicode_get_messages_unicode_data(self): # Action queue_client = self._create_queue() queue_client.enqueue_message(u'message1㚈') - result = queue_client.deque_message() + result = next(queue_client.dequeue_messages()) # Asserts self.assertIsNotNone(result) @@ -827,33 +832,34 @@ def test_unicode_get_messages_unicode_data(self): self.assertEqual(u'message1㚈', message.content) self.assertNotEqual('', message.pop_receipt) self.assertEqual(1, message.dequeue_count) - self.assertNotEqual('', message.insertion_time) - self.assertNotEqual('', message.expiration_time) - self.assertNotEqual('', message.time_next_visible) + self.assertIsInstance(message.insertion_time, datetime) + self.assertIsInstance(message.expiration_time, datetime) + self.assertIsInstance(message.time_next_visible, datetime) @record def test_unicode_update_message_unicode_data(self): # Action queue_client = self._create_queue() queue_client.enqueue_message(u'message1') - list_result1 = queue_client.get_messages() - queue_client.update_message(list_result1[0].id, - list_result1[0].pop_receipt, - content=u'啊齄丂狛狜', - visibility_timeout=0) - list_result2 = queue_client.get_messages() + messages = queue_client.dequeue_messages() + + list_result1 = next(messages)[0] + list_result1.content = u'啊齄丂狛狜' + queue_client.update_message(list_result1, visibility_timeout=0) + + list_result2 = next(messages) # Asserts self.assertIsNotNone(list_result2) message = list_result2[0] self.assertIsNotNone(message) - self.assertNotEqual('', message.id) + self.assertEqual(list_result1.id, message.id) self.assertEqual(u'啊齄丂狛狜', message.content) self.assertNotEqual('', message.pop_receipt) self.assertEqual(2, message.dequeue_count) - self.assertNotEqual('', message.insertion_time) - self.assertNotEqual('', message.expiration_time) - self.assertNotEqual('', message.time_next_visible) + self.assertIsInstance(message.insertion_time, datetime) + self.assertIsInstance(message.expiration_time, datetime) + self.assertIsInstance(message.time_next_visible, datetime) # ------------------------------------------------------------------------------ diff --git a/sdk/storage/azure-storage-queue/tests/queues/test_queue_encodings.py b/sdk/storage/azure-storage-queue/tests/queues/test_queue_encodings.py index aa87ea0051c4..4602fe14148e 100644 --- a/sdk/storage/azure-storage-queue/tests/queues/test_queue_encodings.py +++ b/sdk/storage/azure-storage-queue/tests/queues/test_queue_encodings.py @@ -7,13 +7,19 @@ # -------------------------------------------------------------------------- import unittest -from azure.common import ( - AzureHttpError, - AzureException, -) +from azure.core.exceptions import HttpResponseError, DecodeError, ResourceExistsError +from azure.storage.queue import ( + QueueClient, + QueueServiceClient, + TextBase64EncodePolicy, + TextBase64DecodePolicy, + BinaryBase64EncodePolicy, + BinaryBase64DecodePolicy, + TextXMLEncodePolicy, + TextXMLDecodePolicy, + NoEncodePolicy, + NoDecodePolicy) -from azure.storage.queue.queue_client import QueueClient -from azure.storage.queue.queue_service_client import QueueServiceClient from tests.testcase import ( StorageTestCase, record, @@ -29,38 +35,47 @@ class StorageQueueEncodingTest(StorageTestCase): def setUp(self): super(StorageQueueEncodingTest, self).setUp() - self.qs = self._create_storage_service(QueueClient, self.settings) + queue_url = self._get_queue_url() + credentials = self._get_shared_key_credential() + self.qsc = QueueServiceClient(account_url=queue_url, credential=credentials) self.test_queues = [] def tearDown(self): if not self.is_playback(): - for queue_name in self.test_queues: + for queue in self.test_queues: try: - self.qs.delete_queue(queue_name) + self.qsc.delete_queue(queue.queue_name) except: pass return super(StorageQueueEncodingTest, self).tearDown() # --Helpers----------------------------------------------------------------- - def _get_queue_reference(self): - queue_name = self.get_resource_name(TEST_QUEUE_PREFIX + str(len(self.test_queues))) - self.test_queues.append(queue_name) - return queue_name - - def _create_queue(self): - queue_name = self._get_queue_reference() - self.qs.create_queue(queue_name) - return queue_name + def _get_queue_reference(self, prefix=TEST_QUEUE_PREFIX): + queue_name = self.get_resource_name(prefix) + queue = self.qsc.get_queue_client(queue_name) + self.test_queues.append(queue) + return queue + + def _create_queue(self, prefix=TEST_QUEUE_PREFIX): + queue = self._get_queue_reference(prefix) + try: + created = queue.create_queue() + except ResourceExistsError: + pass + return queue - def _validate_encoding(self, qs, message): + def _validate_encoding(self, queue, message): # Arrange - queue_name = self._create_queue() + try: + created = queue.create_queue() + except ResourceExistsError: + pass # Action. - qs.put_message(queue_name, message) + queue.enqueue_message(message) # Asserts - messages = qs.get_messages(queue_name) + messages = next(queue.dequeue_messages()) self.assertEqual(message, messages[0].content) # -------------------------------------------------------------------------- @@ -69,103 +84,121 @@ def _validate_encoding(self, qs, message): def test_message_text_xml(self): # Arrange. message = u'' + queue = self.qsc.get_queue_client(self.get_resource_name(TEST_QUEUE_PREFIX)) # Asserts - self._validate_encoding(self.qs, message) + self._validate_encoding(queue, message) @record def test_message_text_xml_whitespace(self): # Arrange. message = u' mess\t age1\n' + queue = self.qsc.get_queue_client(self.get_resource_name(TEST_QUEUE_PREFIX)) # Asserts - self._validate_encoding(self.qs, message) + self._validate_encoding(queue, message) @record def test_message_text_xml_invalid_chars(self): # Action. - queue_name = self._get_queue_reference() + queue = self._get_queue_reference() message = u'\u0001' # Asserts - with self.assertRaises(AzureHttpError): - self.qs.put_message(queue_name, message) + with self.assertRaises(HttpResponseError): + queue.enqueue_message(message) @record def test_message_text_base64(self): # Arrange. - qs2 = self._create_storage_service(QueueService, self.settings) - qs2.encode_function = QueueMessageFormat.text_base64encode - qs2.decode_function = QueueMessageFormat.text_base64decode + queue_url = self._get_queue_url() + credentials = self._get_shared_key_credential() + queue = QueueClient( + queue_url=queue_url, + queue=self.get_resource_name(TEST_QUEUE_PREFIX), + credential=credentials, + message_encode_policy=TextBase64EncodePolicy(), + message_decode_policy=TextBase64DecodePolicy()) + message = u'\u0001' # Asserts - self._validate_encoding(qs2, message) + self._validate_encoding(queue, message) @record def test_message_bytes_base64(self): # Arrange. - qs2 = self._create_storage_service(QueueService, self.settings) - qs2.encode_function = QueueMessageFormat.binary_base64encode - qs2.decode_function = QueueMessageFormat.binary_base64decode + queue_url = self._get_queue_url() + credentials = self._get_shared_key_credential() + queue = QueueClient( + queue_url=queue_url, + queue=self.get_resource_name(TEST_QUEUE_PREFIX), + credential=credentials, + message_encode_policy=BinaryBase64EncodePolicy(), + message_decode_policy=BinaryBase64DecodePolicy()) + message = b'xyz' # Asserts - self._validate_encoding(qs2, message) + self._validate_encoding(queue, message) @record def test_message_bytes_fails(self): # Arrange - queue_name = self._get_queue_reference() + queue = self._get_queue_reference() # Action. - try: + with self.assertRaises(TypeError) as e: message = b'xyz' - self.qs.put_message(queue_name, message) - self.fail('Passing binary to text encoder should fail.') - except TypeError as e: - self.assertTrue(str(e).startswith('message should be of type')) + queue.enqueue_message(message) - # Asserts + # Asserts + self.assertTrue(str(e.exception).startswith('Message content must be text')) @record def test_message_text_fails(self): # Arrange - qs2 = self._create_storage_service(QueueService, self.settings) - qs2.encode_function = QueueMessageFormat.binary_base64encode - qs2.decode_function = QueueMessageFormat.binary_base64decode - - queue_name = self._get_queue_reference() + queue_url = self._get_queue_url() + credentials = self._get_shared_key_credential() + queue = QueueClient( + queue_url=queue_url, + queue=self.get_resource_name(TEST_QUEUE_PREFIX), + credential=credentials, + message_encode_policy=BinaryBase64EncodePolicy(), + message_decode_policy=BinaryBase64DecodePolicy()) # Action. - try: + with self.assertRaises(TypeError) as e: message = u'xyz' - qs2.put_message(queue_name, message) - self.fail('Passing text to binary encoder should fail.') - except TypeError as e: - self.assertEqual(str(e), 'message should be of type bytes.') + queue.enqueue_message(message) - # Asserts + # Asserts + self.assertTrue(str(e.exception).startswith('Message content must be bytes')) @record def test_message_base64_decode_fails(self): # Arrange - qs2 = self._create_storage_service(QueueService, self.settings) - qs2.encode_function = QueueMessageFormat.text_xmlencode - qs2.decode_function = QueueMessageFormat.binary_base64decode - - queue_name = self._create_queue() + queue_url = self._get_queue_url() + credentials = self._get_shared_key_credential() + queue = QueueClient( + queue_url=queue_url, + queue=self.get_resource_name(TEST_QUEUE_PREFIX), + credential=credentials, + message_encode_policy=TextXMLEncodePolicy(), + message_decode_policy=BinaryBase64DecodePolicy()) + try: + queue.create_queue() + except ResourceExistsError: + pass message = u'xyz' - qs2.put_message(queue_name, message) + queue.enqueue_message(message) # Action. - try: - qs2.peek_messages(queue_name) - self.fail('Decoding unicode string as base64 should fail.') - except AzureException as e: - self.assertNotEqual(-1, str(e).find('message is not a valid base64 value.')) + with self.assertRaises(DecodeError) as e: + queue.peek_messages() - # Asserts + # Asserts + self.assertNotEqual(-1, str(e.exception).find('Message content is not valid base 64')) # ------------------------------------------------------------------------------ diff --git a/sdk/storage/azure-storage-queue/tests/queues/test_queue_encryption.py b/sdk/storage/azure-storage-queue/tests/queues/test_queue_encryption.py index ddb328f79f99..6d2a2759e823 100644 --- a/sdk/storage/azure-storage-queue/tests/queues/test_queue_encryption.py +++ b/sdk/storage/azure-storage-queue/tests/queues/test_queue_encryption.py @@ -12,37 +12,31 @@ dumps, ) -from azure.common import ( - AzureHttpError, - AzureException, -) from cryptography.hazmat import backends from cryptography.hazmat.primitives.ciphers import Cipher from cryptography.hazmat.primitives.ciphers.algorithms import AES from cryptography.hazmat.primitives.ciphers.modes import CBC from cryptography.hazmat.primitives.padding import PKCS7 -from azure.storage.queue.authentication import SharedKeyCredentials +from azure.core.exceptions import HttpResponseError, ResourceExistsError -from azure.storage.common._common_conversion import _decode_base64_to_bytes -from azure.storage.common._constants import __version__ -from azure.storage.common._encryption import ( +from azure.storage.queue._shared.utils import _decode_base64_to_bytes +from azure.storage.queue._shared.encryption import ( + _ERROR_OBJECT_INVALID, _WrappedContentKey, _EncryptionAgent, _EncryptionData, ) -from azure.storage.common._error import ( - _ERROR_OBJECT_INVALID, - _ERROR_DECRYPTION_FAILURE, - _ERROR_ENCRYPTION_REQUIRED, -) -from azure.storage.queue._error import ( - _ERROR_MESSAGE_NOT_ENCRYPTED, -) -from azure.storage.queue.queue_client import QueueClient -from azure.storage.queue.queue_service_client import QueueServiceClient -from azure.storage.queue.models import QueueMessageFormat +from azure.storage.queue import ( + __version__, + QueueServiceClient, + QueueClient, + BinaryBase64EncodePolicy, + BinaryBase64DecodePolicy, + NoEncodePolicy, + NoDecodePolicy +) from tests.encryption_test_helper import ( KeyWrapper, KeyResolver, @@ -63,51 +57,48 @@ class StorageQueueEncryptionTest(StorageTestCase): def setUp(self): - super(StorageQueueTest, self).setUp() + super(StorageQueueEncryptionTest, self).setUp() queue_url = self._get_queue_url() - self.queue_name = TEST_QUEUE_PREFIX - self.config = QueueServiceClient.create_configuration() - credentials = SharedKeyCredentials(*self._get_shared_key_credentials()) - self.qsc = QueueServiceClient(account_url=queue_url, credentials=credentials) - self.qs = QueueClient(queue_url=queue_url, queue_name=self.queue_name, credentials=credentials, configuration=self.config) - + credentials = self._get_shared_key_credential() + self.qsc = QueueServiceClient(account_url=queue_url, credential=credentials) self.test_queues = [] def tearDown(self): if not self.is_playback(): - for queue_name in self.test_queues: + for queue in self.test_queues: try: - self.qs.delete_queue(queue_name) + self.qsc.delete_queue(queue.queue_name) except: pass return super(StorageQueueEncryptionTest, self).tearDown() # --Helpers----------------------------------------------------------------- def _get_queue_reference(self, prefix=TEST_QUEUE_PREFIX): - queue_name = self.queue_name - self.test_queues.append(queue_name) - return queue_name + queue_name = self.get_resource_name(prefix) + queue = self.qsc.get_queue_client(queue_name) + self.test_queues.append(queue) + return queue def _create_queue(self, prefix=TEST_QUEUE_PREFIX): - queue_client = self.qsc.get_queue_client(prefix) + queue = self._get_queue_reference(prefix) try: - queue_client.create_queue() - except: + created = queue.create_queue() + except ResourceExistsError: pass - return queue_client + return queue # -------------------------------------------------------------------------- @record def test_get_messages_encrypted_kek(self): # Arrange - self.qs.key_encryption_key = KeyWrapper('key1') - queue_name = self._create_queue() - self.qs.put_message(queue_name, u'encrypted_message_2') + self.qsc.key_encryption_key = KeyWrapper('key1') + queue = self._create_queue() + queue.enqueue_message(u'encrypted_message_2') # Act - li = self.qs.get_messages(queue_name) + li = next(queue.dequeue_messages()) # Assert self.assertEqual(li[0].content, u'encrypted_message_2') @@ -115,16 +106,16 @@ def test_get_messages_encrypted_kek(self): @record def test_get_messages_encrypted_resolver(self): # Arrange - self.qs.key_encryption_key = KeyWrapper('key1') - queue_name = self._create_queue() - self.qs.put_message(queue_name, u'encrypted_message_2') + self.qsc.key_encryption_key = KeyWrapper('key1') + queue = self._create_queue() + queue.enqueue_message(u'encrypted_message_2') key_resolver = KeyResolver() - key_resolver.put_key(self.qs.key_encryption_key) - self.qs.key_resolver_function = key_resolver.resolve_key - self.qs.key_encryption_key = None # Ensure that the resolver is used + key_resolver.put_key(self.qsc.key_encryption_key) + queue.key_resolver_function = key_resolver.resolve_key + queue.key_encryption_key = None # Ensure that the resolver is used # Act - li = self.qs.get_messages(queue_name) + li = next(queue.dequeue_messages()) # Assert self.assertEqual(li[0].content, u'encrypted_message_2') @@ -132,12 +123,12 @@ def test_get_messages_encrypted_resolver(self): @record def test_peek_messages_encrypted_kek(self): # Arrange - self.qs.key_encryption_key = KeyWrapper('key1') - queue_name = self._create_queue() - self.qs.put_message(queue_name, u'encrypted_message_3') + self.qsc.key_encryption_key = KeyWrapper('key1') + queue = self._create_queue() + queue.enqueue_message(u'encrypted_message_3') # Act - li = self.qs.peek_messages(queue_name) + li = queue.peek_messages() # Assert self.assertEqual(li[0].content, u'encrypted_message_3') @@ -145,15 +136,16 @@ def test_peek_messages_encrypted_kek(self): @record def test_peek_messages_encrypted_resolver(self): # Arrange - self.qs.key_encryption_key = KeyWrapper('key1') - queue_name = self._create_queue() - self.qs.put_message(queue_name, u'encrypted_message_4') + self.qsc.key_encryption_key = KeyWrapper('key1') + queue = self._create_queue() + queue.enqueue_message(u'encrypted_message_4') key_resolver = KeyResolver() - key_resolver.put_key(self.qs.key_encryption_key) - self.resolver = key_resolver.resolve_key + key_resolver.put_key(self.qsc.key_encryption_key) + queue.key_resolver_function = key_resolver.resolve_key + queue.key_encryption_key = None # Ensure that the resolver is used # Act - li = self.qs.peek_messages(queue_name) + li = queue.peek_messages() # Assert self.assertEqual(li[0].content, u'encrypted_message_4') @@ -166,140 +158,141 @@ def test_peek_messages_encrypted_kek_RSA(self): return # Arrange - self.qs.key_encryption_key = RSAKeyWrapper('key2') - queue_name = self._create_queue() - self.qs.put_message(queue_name, u'encrypted_message_3') + self.qsc.key_encryption_key = RSAKeyWrapper('key2') + queue = self._create_queue() + queue.enqueue_message(u'encrypted_message_3') # Act - li = self.qs.peek_messages(queue_name) + li = queue.peek_messages() # Assert self.assertEqual(li[0].content, u'encrypted_message_3') @record def test_update_encrypted_message(self): + # TODO: Recording doesn't work + if TestMode.need_recording_file(self.test_mode): + return # Arrange - queue_name = self._create_queue() - self.qs.key_encryption_key = KeyWrapper('key1') - self.qs.put_message(queue_name, u'Update Me') - list_result1 = self.qs.get_messages(queue_name) + queue = self._create_queue() + queue.key_encryption_key = KeyWrapper('key1') + queue.enqueue_message(u'Update Me') + + messages = queue.dequeue_messages() + list_result1 = next(messages)[0] + list_result1.content = u'Updated' # Act - message = self.qs.update_message(queue_name, - list_result1[0].id, - list_result1[0].pop_receipt, - 0, - content=u'Updated', ) - list_result2 = self.qs.get_messages(queue_name) + message = queue.update_message(list_result1) + list_result2 = next(messages)[0] # Assert - message = list_result2[0] - self.assertEqual(u'Updated', message.content) + self.assertEqual(u'Updated', list_result2.content) @record def test_update_encrypted_binary_message(self): # Arrange - queue_name = self._create_queue() - self.qs.key_encryption_key = KeyWrapper('key1') - self.qs.encode_function = QueueMessageFormat.binary_base64encode - self.qs.decode_function = QueueMessageFormat.binary_base64decode + queue = self._create_queue() + queue.key_encryption_key = KeyWrapper('key1') + queue._config.message_encode_policy = BinaryBase64EncodePolicy() + queue._config.message_decode_policy = BinaryBase64DecodePolicy() + binary_message = self.get_random_bytes(100) - self.qs.put_message(queue_name, binary_message) - list_result1 = self.qs.get_messages(queue_name) + queue.enqueue_message(binary_message) + messages = queue.dequeue_messages() + list_result1 = next(messages)[0] # Act binary_message = self.get_random_bytes(100) - self.qs.update_message(queue_name, - list_result1[0].id, - list_result1[0].pop_receipt, - 0, - content=binary_message, ) - list_result2 = self.qs.get_messages(queue_name) + list_result1.content = binary_message + queue.update_message(list_result1) + + list_result2 = next(messages)[0] # Assert - message = list_result2[0] - self.assertEqual(binary_message, message.content) + self.assertEqual(binary_message, list_result2.content) @record def test_update_encrypted_raw_text_message(self): + # TODO: Recording doesn't work + if TestMode.need_recording_file(self.test_mode): + return # Arrange - queue_name = self._create_queue() - self.qs.key_encryption_key = KeyWrapper('key1') - self.qs.encode_function = QueueMessageFormat.noencode - self.qs.decode_function = QueueMessageFormat.nodecode + queue = self._create_queue() + queue.key_encryption_key = KeyWrapper('key1') + queue._config.message_encode_policy = NoEncodePolicy() + queue._config.message_decode_policy = NoDecodePolicy() + raw_text = u'Update Me' - self.qs.put_message(queue_name, raw_text) - list_result1 = self.qs.get_messages(queue_name) + queue.enqueue_message(raw_text) + messages = queue.dequeue_messages() + list_result1 = next(messages)[0] # Act raw_text = u'Updated' - self.qs.update_message(queue_name, - list_result1[0].id, - list_result1[0].pop_receipt, - 0, - content=raw_text, ) - list_result2 = self.qs.get_messages(queue_name) + list_result1.content = raw_text + queue.update_message(list_result1) + + list_result2 = next(messages)[0] # Assert - message = list_result2[0] - self.assertEqual(raw_text, message.content) + self.assertEqual(raw_text, list_result2.content) @record def test_update_encrypted_json_message(self): + # TODO: Recording doesn't work + if TestMode.need_recording_file(self.test_mode): + return # Arrange - queue_name = self._create_queue() - self.qs.key_encryption_key = KeyWrapper('key1') - self.qs.encode_function = QueueMessageFormat.noencode - self.qs.decode_function = QueueMessageFormat.nodecode + queue = self._create_queue() + queue.key_encryption_key = KeyWrapper('key1') + queue._config.message_encode_policy = NoEncodePolicy() + queue._config.message_decode_policy = NoDecodePolicy() + message_dict = {'val1': 1, 'val2': '2'} json_text = dumps(message_dict) - self.qs.put_message(queue_name, json_text) - list_result1 = self.qs.get_messages(queue_name) + queue.enqueue_message(json_text) + messages = queue.dequeue_messages() + list_result1 = next(messages)[0] # Act message_dict['val1'] = 0 message_dict['val2'] = 'updated' json_text = dumps(message_dict) - self.qs.update_message(queue_name, - list_result1[0].id, - list_result1[0].pop_receipt, - 0, - content=json_text, ) - list_result2 = self.qs.get_messages(queue_name) + list_result1.content = json_text + queue.update_message(list_result1) + + list_result2 = next(messages)[0] # Assert - message = list_result2[0] - self.assertEqual(message_dict, loads(message.content)) + self.assertEqual(message_dict, loads(list_result2.content)) @record def test_invalid_value_kek_wrap(self): # Arrange - queue_name = self._create_queue() - self.qs.key_encryption_key = KeyWrapper('key1') + queue = self._create_queue() + queue.key_encryption_key = KeyWrapper('key1') + queue.key_encryption_key.get_kid = None - self.qs.key_encryption_key.get_kid = None - try: - self.qs.put_message(queue_name, u'message') - self.fail() - except AttributeError as e: - self.assertEqual(str(e), _ERROR_OBJECT_INVALID.format('key encryption key', 'get_kid')) + with self.assertRaises(AttributeError) as e: + queue.enqueue_message(u'message') - self.qs.key_encryption_key = KeyWrapper('key1') + self.assertEqual(str(e.exception), _ERROR_OBJECT_INVALID.format('key encryption key', 'get_kid')) - self.qs.key_encryption_key.get_kid = None + queue.key_encryption_key = KeyWrapper('key1') + queue.key_encryption_key.get_kid = None with self.assertRaises(AttributeError): - self.qs.put_message(queue_name, u'message') - - self.qs.key_encryption_key = KeyWrapper('key1') + queue.enqueue_message(u'message') - self.qs.key_encryption_key.wrap_key = None + queue.key_encryption_key = KeyWrapper('key1') + queue.key_encryption_key.wrap_key = None with self.assertRaises(AttributeError): - self.qs.put_message(queue_name, u'message') + queue.enqueue_message(u'message') @record def test_missing_attribute_kek_wrap(self): # Arrange - queue_name = self._create_queue() + queue = self._create_queue() valid_key = KeyWrapper('key1') @@ -308,101 +301,104 @@ def test_missing_attribute_kek_wrap(self): invalid_key_1.get_key_wrap_algorithm = valid_key.get_key_wrap_algorithm invalid_key_1.get_kid = valid_key.get_kid # No attribute wrap_key - self.qs.key_encryption_key = invalid_key_1 + queue.key_encryption_key = invalid_key_1 with self.assertRaises(AttributeError): - self.qs.put_message(queue_name, u'message') + queue.enqueue_message(u'message') invalid_key_2 = lambda: None # functions are objects, so this effectively creates an empty object invalid_key_2.wrap_key = valid_key.wrap_key invalid_key_2.get_kid = valid_key.get_kid # No attribute get_key_wrap_algorithm - self.qs.key_encryption_key = invalid_key_2 + queue.key_encryption_key = invalid_key_2 with self.assertRaises(AttributeError): - self.qs.put_message(queue_name, u'message') + queue.enqueue_message(u'message') invalid_key_3 = lambda: None # functions are objects, so this effectively creates an empty object invalid_key_3.get_key_wrap_algorithm = valid_key.get_key_wrap_algorithm invalid_key_3.wrap_key = valid_key.wrap_key # No attribute get_kid - self.qs.key_encryption_key = invalid_key_3 + queue.key_encryption_key = invalid_key_3 with self.assertRaises(AttributeError): - self.qs.put_message(queue_name, u'message') + queue.enqueue_message(u'message') @record def test_invalid_value_kek_unwrap(self): # Arrange - queue_name = self._create_queue() - self.qs.key_encryption_key = KeyWrapper('key1') - self.qs.put_message(queue_name, u'message') + queue = self._create_queue() + queue.key_encryption_key = KeyWrapper('key1') + queue.enqueue_message(u'message') # Act - self.qs.key_encryption_key.unwrap_key = None - with self.assertRaises(AzureException): - self.qs.peek_messages(queue_name) + queue.key_encryption_key.unwrap_key = None + with self.assertRaises(HttpResponseError): + queue.peek_messages() - self.qs.key_encryption_key.get_kid = None - with self.assertRaises(AzureException): - self.qs.peek_messages(queue_name) + queue.key_encryption_key.get_kid = None + with self.assertRaises(HttpResponseError): + queue.peek_messages() @record def test_missing_attribute_kek_unrwap(self): # Arrange - queue_name = self._create_queue() - self.qs.key_encryption_key = KeyWrapper('key1') - self.qs.put_message(queue_name, u'message') + queue = self._create_queue() + queue.key_encryption_key = KeyWrapper('key1') + queue.enqueue_message(u'message') # Act valid_key = KeyWrapper('key1') invalid_key_1 = lambda: None # functions are objects, so this effectively creates an empty object invalid_key_1.unwrap_key = valid_key.unwrap_key # No attribute get_kid - self.qs.key_encryption_key = invalid_key_1 - try: - self.qs.peek_messages(queue_name) - self.fail() - except AzureException as e: - self.assertEqual(str(e), _ERROR_DECRYPTION_FAILURE) + queue.key_encryption_key = invalid_key_1 + with self.assertRaises(HttpResponseError) as e: + queue.peek_messages() + + self.assertEqual(str(e.exception), "Decryption failed.") invalid_key_2 = lambda: None # functions are objects, so this effectively creates an empty object invalid_key_2.get_kid = valid_key.get_kid # No attribute unwrap_key - self.qs.key_encryption_key = invalid_key_2 - with self.assertRaises(AzureException): - self.qs.peek_messages(queue_name) + queue.key_encryption_key = invalid_key_2 + with self.assertRaises(HttpResponseError): + queue.peek_messages() @record def test_validate_encryption(self): # Arrange - queue_name = self._create_queue() + queue = self._create_queue() kek = KeyWrapper('key1') - self.qs.key_encryption_key = kek - self.qs.put_message(queue_name, u'message') + queue.key_encryption_key = kek + queue.enqueue_message(u'message') # Act - self.qs.key_encryption_key = None # Message will not be decrypted - li = self.qs.peek_messages(queue_name) + queue.key_encryption_key = None # Message will not be decrypted + li = queue.peek_messages() message = li[0].content message = loads(message) encryption_data = message['EncryptionData'] wrapped_content_key = encryption_data['WrappedContentKey'] - wrapped_content_key = _WrappedContentKey(wrapped_content_key['Algorithm'], - b64decode( - wrapped_content_key['EncryptedKey'].encode(encoding='utf-8')), - wrapped_content_key['KeyId']) + wrapped_content_key = _WrappedContentKey( + wrapped_content_key['Algorithm'], + b64decode(wrapped_content_key['EncryptedKey'].encode(encoding='utf-8')), + wrapped_content_key['KeyId']) encryption_agent = encryption_data['EncryptionAgent'] - encryption_agent = _EncryptionAgent(encryption_agent['EncryptionAlgorithm'], - encryption_agent['Protocol']) + encryption_agent = _EncryptionAgent( + encryption_agent['EncryptionAlgorithm'], + encryption_agent['Protocol']) + + encryption_data = _EncryptionData( + b64decode(encryption_data['ContentEncryptionIV'].encode(encoding='utf-8')), + encryption_agent, + wrapped_content_key, + {'EncryptionLibrary': __version__}) - encryption_data = _EncryptionData(b64decode(encryption_data['ContentEncryptionIV'].encode(encoding='utf-8')), - encryption_agent, - wrapped_content_key, - {'EncryptionLibrary': __version__}) message = message['EncryptedMessageContents'] - content_encryption_key = kek.unwrap_key(encryption_data.wrapped_content_key.encrypted_key, - encryption_data.wrapped_content_key.algorithm) + content_encryption_key = kek.unwrap_key( + encryption_data.wrapped_content_key.encrypted_key, + encryption_data.wrapped_content_key.algorithm) # Create decryption cipher backend = backends.default_backend() @@ -427,64 +423,62 @@ def test_validate_encryption(self): @record def test_put_with_strict_mode(self): # Arrange - queue_name = self._create_queue() + queue = self._create_queue() kek = KeyWrapper('key1') - self.qs.key_encryption_key = kek - self.qs.require_encryption = True + queue.key_encryption_key = kek + queue.require_encryption = True - self.qs.put_message(queue_name, u'message') - self.qs.key_encryption_key = None + queue.enqueue_message(u'message') + queue.key_encryption_key = None # Assert - try: - self.qs.put_message(queue_name, u'message') - self.fail() - except ValueError as e: - self.assertEqual(str(e), _ERROR_ENCRYPTION_REQUIRED) + with self.assertRaises(ValueError) as e: + queue.enqueue_message(u'message') + + self.assertEqual(str(e.exception), "Encryption required but no key was provided.") @record def test_get_with_strict_mode(self): # Arrange - queue_name = self._create_queue() - self.qs.put_message(queue_name, u'message') + queue = self._create_queue() + queue.enqueue_message(u'message') - self.qs.require_encryption = True - self.qs.key_encryption_key = KeyWrapper('key1') - try: - self.qs.get_messages(queue_name) - except ValueError as e: - self.assertEqual(str(e), _ERROR_MESSAGE_NOT_ENCRYPTED) + queue.require_encryption = True + queue.key_encryption_key = KeyWrapper('key1') + with self.assertRaises(ValueError) as e: + next(queue.dequeue_messages()) + + self.assertEqual(str(e.exception), 'Message was not encrypted.') @record def test_encryption_add_encrypted_64k_message(self): # Arrange - queue_name = self._create_queue() + queue = self._create_queue() message = u'a' * 1024 * 64 # Act - self.qs.put_message(queue_name, message) + queue.enqueue_message(message) # Assert - self.qs.key_encryption_key = KeyWrapper('key1') - with self.assertRaises(AzureHttpError): - self.qs.put_message(queue_name, message) + queue.key_encryption_key = KeyWrapper('key1') + with self.assertRaises(HttpResponseError): + queue.enqueue_message(message) @record def test_encryption_nonmatching_kid(self): # Arrange - queue_name = self._create_queue() - self.qs.key_encryption_key = KeyWrapper('key1') - self.qs.put_message(queue_name, u'message') + queue = self._create_queue() + queue.key_encryption_key = KeyWrapper('key1') + queue.enqueue_message(u'message') # Act - self.qs.key_encryption_key.kid = 'Invalid' + queue.key_encryption_key.kid = 'Invalid' # Assert - try: - self.qs.get_messages(queue_name) - self.fail() - except AzureException as e: - self.assertEqual(str(e), _ERROR_DECRYPTION_FAILURE) + with self.assertRaises(HttpResponseError) as e: + next(queue.dequeue_messages()) + + self.assertEqual(str(e.exception), "Decryption failed.") # ------------------------------------------------------------------------------ diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_client.test_request_callback_signed_header.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_client.test_request_callback_signed_header.yaml new file mode 100644 index 000000000000..536f2a160db1 --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_client.test_request_callback_signed_header.yaml @@ -0,0 +1,490 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 0d64f6d8-952a-11e9-8b18-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:25 GMT + x-ms-meta-hello: + - world + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/contce2f1322 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:12:25 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - adc33e53-f003-0036-5f36-29c952000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 0daf9030-952a-11e9-9d9c-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:26 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://remotestoragename.queue.core.windows.net/contce2f1322?comp=metadata + response: + body: + string: '' + headers: + Cache-Control: + - no-cache + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:12:25 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Vary: + - Origin + x-ms-approximate-messages-count: + - '0' + x-ms-meta-hello: + - world + x-ms-request-id: + - adc33e63-f003-0036-6836-29c952000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 0db932de-952a-11e9-b0aa-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:26 GMT + x-ms-version: + - '2018-03-28' + method: DELETE + uri: https://remotestoragename.queue.core.windows.net/contce2f1322 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:12:26 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - adc33e6c-f003-0036-6e36-29c952000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - cf5b34d2-952a-11e9-8f4d-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:17:51 GMT + x-ms-meta-hello: + - world + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/contce2f1322 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:17:51 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 2efe1fa1-9003-00a5-7d37-295f19000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - cfe16c64-952a-11e9-aac2-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:17:52 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/contce2f1322?comp=metadata + response: + body: + string: '' + headers: + Cache-Control: + - no-cache + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:17:51 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Vary: + - Origin + x-ms-approximate-messages-count: + - '0' + x-ms-meta-hello: + - world + x-ms-request-id: + - 2efe1fc4-9003-00a5-1a37-295f19000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - cff09cf4-952a-11e9-beea-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:17:52 GMT + x-ms-version: + - '2018-03-28' + method: DELETE + uri: https://storagename.queue.core.windows.net/contce2f1322 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:17:51 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 2efe1fc9-9003-00a5-1f37-295f19000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 63a36af6-952b-11e9-8ed1-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:21:59 GMT + x-ms-meta-hello: + - world + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/contce2f1322 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:00 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 742d8ada-4003-00ac-5a38-294597000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 641e386c-952b-11e9-8454-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:00 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/contce2f1322?comp=metadata + response: + body: + string: '' + headers: + Cache-Control: + - no-cache + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:00 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Vary: + - Origin + x-ms-approximate-messages-count: + - '0' + x-ms-meta-hello: + - world + x-ms-request-id: + - 742d8b5e-4003-00ac-4338-294597000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 64285cc0-952b-11e9-a3f7-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:00 GMT + x-ms-version: + - '2018-03-28' + method: DELETE + uri: https://storagename.queue.core.windows.net/contce2f1322 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:00 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 742d8b69-4003-00ac-4c38-294597000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - a119f2d8-952d-11e9-be4e-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:02 GMT + x-ms-meta-hello: + - world + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/contce2f1322 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:38:02 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 84e36ac3-7003-004a-0b3a-295467000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - a158fc9c-952d-11e9-8858-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:02 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/contce2f1322?comp=metadata + response: + body: + string: '' + headers: + Cache-Control: + - no-cache + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:38:02 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Vary: + - Origin + x-ms-approximate-messages-count: + - '0' + x-ms-meta-hello: + - world + x-ms-request-id: + - 84e36acd-7003-004a-133a-295467000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - a1644cdc-952d-11e9-93a5-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:02 GMT + x-ms-version: + - '2018-03-28' + method: DELETE + uri: https://storagename.queue.core.windows.net/contce2f1322 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:38:02 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 84e36ad6-7003-004a-193a-295467000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_client.test_response_callback.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_client.test_response_callback.yaml new file mode 100644 index 000000000000..dea50d663f2b --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_client.test_response_callback.yaml @@ -0,0 +1,178 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 0dcbc3ae-952a-11e9-80bf-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:26 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://remotestoragename.queue.core.windows.net/contf4c30de7?comp=metadata + response: + body: + string: "\uFEFFQueueNotFoundThe\ + \ specified queue does not exist.\nRequestId:b4fd3b60-0003-00c6-7236-29193c000000\n\ + Time:2019-06-22T20:12:26.6260107Z" + headers: + Content-Length: + - '217' + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:12:25 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Vary: + - Origin + x-ms-error-code: + - QueueNotFound + x-ms-request-id: + - b4fd3b60-0003-00c6-7236-29193c000000 + x-ms-version: + - '2018-03-28' + status: + code: 404 + message: The specified queue does not exist. +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - d015228c-952a-11e9-9ab2-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:17:52 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/contf4c30de7?comp=metadata + response: + body: + string: "\uFEFFQueueNotFoundThe\ + \ specified queue does not exist.\nRequestId:c545ec84-9003-00ae-3c37-29476d000000\n\ + Time:2019-06-22T20:17:52.6270410Z" + headers: + Content-Length: + - '217' + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:17:51 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Vary: + - Origin + x-ms-error-code: + - QueueNotFound + x-ms-request-id: + - c545ec84-9003-00ae-3c37-29476d000000 + x-ms-version: + - '2018-03-28' + status: + code: 404 + message: The specified queue does not exist. +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 644866a8-952b-11e9-8047-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:01 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/contf4c30de7?comp=metadata + response: + body: + string: "\uFEFFQueueNotFoundThe\ + \ specified queue does not exist.\nRequestId:aea4743a-0003-00cd-7438-290148000000\n\ + Time:2019-06-22T20:22:01.2413285Z" + headers: + Content-Length: + - '217' + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:00 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Vary: + - Origin + x-ms-error-code: + - QueueNotFound + x-ms-request-id: + - aea4743a-0003-00cd-7438-290148000000 + x-ms-version: + - '2018-03-28' + status: + code: 404 + message: The specified queue does not exist. +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - a199f046-952d-11e9-af89-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:02 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/contf4c30de7?comp=metadata + response: + body: + string: "\uFEFFQueueNotFoundThe\ + \ specified queue does not exist.\nRequestId:6e6754af-d003-004c-233a-29a31f000000\n\ + Time:2019-06-22T20:38:03.1156230Z" + headers: + Content-Length: + - '217' + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:02 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Vary: + - Origin + x-ms-error-code: + - QueueNotFound + x-ms-request-id: + - 6e6754af-d003-004c-233a-29a31f000000 + x-ms-version: + - '2018-03-28' + status: + code: 404 + message: The specified queue does not exist. +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_clear_messages.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_clear_messages.yaml new file mode 100644 index 000000000000..c37df70205c7 --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_clear_messages.yaml @@ -0,0 +1,1230 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 1931932c-952a-11e9-b5a7-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:45 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/pythonqueuebf740c50 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:12:45 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 16b54ee5-6003-005e-2636-299703000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message1' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 19521ac0-952a-11e9-8be4-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:45 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://remotestoragename.queue.core.windows.net/pythonqueuebf740c50/messages + response: + body: + string: "\uFEFF76b297ff-1aca-439a-952c-c84b470ad97dSat,\ + \ 22 Jun 2019 20:12:45 GMTSat, 29 Jun 2019\ + \ 20:12:45 GMTAgAAAAMAAAAAAAAAyCEY2zYp1QE=Sat,\ + \ 22 Jun 2019 20:12:45 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:12:45 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 16b54eea-6003-005e-2936-299703000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message2' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 195c92d4-952a-11e9-9c16-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:45 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://remotestoragename.queue.core.windows.net/pythonqueuebf740c50/messages + response: + body: + string: "\uFEFFcb341fad-37f5-4706-85a5-b06b389f288eSat,\ + \ 22 Jun 2019 20:12:45 GMTSat, 29 Jun 2019\ + \ 20:12:45 GMTAgAAAAMAAAAAAAAANvki2zYp1QE=Sat,\ + \ 22 Jun 2019 20:12:45 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:12:45 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 16b54eed-6003-005e-2c36-299703000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message3' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 196658be-952a-11e9-a824-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:45 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://remotestoragename.queue.core.windows.net/pythonqueuebf740c50/messages + response: + body: + string: "\uFEFF16e5f553-ffea-4e92-bb44-080985e37504Sat,\ + \ 22 Jun 2019 20:12:45 GMTSat, 29 Jun 2019\ + \ 20:12:45 GMTAgAAAAMAAAAAAAAAoCIs2zYp1QE=Sat,\ + \ 22 Jun 2019 20:12:45 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:12:45 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 16b54ef2-6003-005e-3136-299703000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message4' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 196f4082-952a-11e9-8124-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:45 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://remotestoragename.queue.core.windows.net/pythonqueuebf740c50/messages + response: + body: + string: "\uFEFF5695f253-b18d-4afb-ab8c-9b5845f49606Sat,\ + \ 22 Jun 2019 20:12:45 GMTSat, 29 Jun 2019\ + \ 20:12:45 GMTAgAAAAMAAAAAAAAAxtY02zYp1QE=Sat,\ + \ 22 Jun 2019 20:12:45 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:12:45 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 16b54ef5-6003-005e-3436-299703000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 1977eaca-952a-11e9-b18a-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:45 GMT + x-ms-version: + - '2018-03-28' + method: DELETE + uri: https://remotestoragename.queue.core.windows.net/pythonqueuebf740c50/messages + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:12:46 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 16b54ef9-6003-005e-3736-299703000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 19e2e80c-952a-11e9-8844-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:46 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://remotestoragename.queue.core.windows.net/pythonqueuebf740c50/messages?peekonly=true + response: + body: + string: "\uFEFF" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:12:46 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 16b54f2a-6003-005e-5d36-299703000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - d9fea4b4-952a-11e9-945e-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:09 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueuebf740c50 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:08 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 742d325b-4003-00ac-7d37-294597000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message1' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - da224d2e-952a-11e9-b318-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:09 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueuebf740c50/messages + response: + body: + string: "\uFEFF0f0e43c8-6991-4ec1-bd29-a20274d1e9eeSat,\ + \ 22 Jun 2019 20:18:09 GMTSat, 29 Jun 2019\ + \ 20:18:09 GMTAgAAAAMAAAAAAAAAcT7pmzcp1QE=Sat,\ + \ 22 Jun 2019 20:18:09 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:08 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 742d3268-4003-00ac-0537-294597000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message2' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - da2b6422-952a-11e9-812e-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:09 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueuebf740c50/messages + response: + body: + string: "\uFEFF5ff7f13c-afa9-465b-b813-8468663988a7Sat,\ + \ 22 Jun 2019 20:18:09 GMTSat, 29 Jun 2019\ + \ 20:18:09 GMTAgAAAAMAAAAAAAAAm/Lxmzcp1QE=Sat,\ + \ 22 Jun 2019 20:18:09 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:09 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 742d3270-4003-00ac-0c37-294597000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message3' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - da343570-952a-11e9-bbc8-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:09 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueuebf740c50/messages + response: + body: + string: "\uFEFFca495d5a-3d91-4138-b335-4505fb6eb9dbSat,\ + \ 22 Jun 2019 20:18:09 GMTSat, 29 Jun 2019\ + \ 20:18:09 GMTAgAAAAMAAAAAAAAABxz7mzcp1QE=Sat,\ + \ 22 Jun 2019 20:18:09 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:09 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 742d3276-4003-00ac-1237-294597000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message4' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - da3d1b90-952a-11e9-97f0-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:09 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueuebf740c50/messages + response: + body: + string: "\uFEFFd25cce7b-21fa-4285-b5a9-52b5f8e739c6Sat,\ + \ 22 Jun 2019 20:18:09 GMTSat, 29 Jun 2019\ + \ 20:18:09 GMTAgAAAAMAAAAAAAAAFakDnDcp1QE=Sat,\ + \ 22 Jun 2019 20:18:09 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:09 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 742d327e-4003-00ac-1a37-294597000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - da45d56e-952a-11e9-94d6-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:09 GMT + x-ms-version: + - '2018-03-28' + method: DELETE + uri: https://storagename.queue.core.windows.net/pythonqueuebf740c50/messages + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:09 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 742d3282-4003-00ac-1e37-294597000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - daa6b60c-952a-11e9-a3d0-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:10 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueuebf740c50/messages?peekonly=true + response: + body: + string: "\uFEFF" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:09 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 742d32ba-4003-00ac-4d37-294597000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 6e52f94c-952b-11e9-af5a-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:17 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueuebf740c50 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:17 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - a17f4c51-f003-0097-2f38-2907c9000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message1' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 6e74d3a2-952b-11e9-b0d2-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:18 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueuebf740c50/messages + response: + body: + string: "\uFEFFb4bab5ab-bfb1-4e85-98ef-a56aba47a13fSat,\ + \ 22 Jun 2019 20:22:18 GMTSat, 29 Jun 2019\ + \ 20:22:18 GMTAgAAAAMAAAAAAAAA+WU8MDgp1QE=Sat,\ + \ 22 Jun 2019 20:22:18 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:17 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - a17f4c59-f003-0097-3238-2907c9000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message2' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 6e7e4b80-952b-11e9-871c-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:18 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueuebf740c50/messages + response: + body: + string: "\uFEFF1a58e5ec-85ca-4db0-ac72-2d543b0a9b07Sat,\ + \ 22 Jun 2019 20:22:18 GMTSat, 29 Jun 2019\ + \ 20:22:18 GMTAgAAAAMAAAAAAAAAk91FMDgp1QE=Sat,\ + \ 22 Jun 2019 20:22:18 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:18 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - a17f4c5e-f003-0097-3638-2907c9000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message3' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 6e87caca-952b-11e9-8ca2-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:18 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueuebf740c50/messages + response: + body: + string: "\uFEFF03c8fb0d-24a1-441b-847d-63838d3a9873Sat,\ + \ 22 Jun 2019 20:22:18 GMTSat, 29 Jun 2019\ + \ 20:22:18 GMTAgAAAAMAAAAAAAAA+wZPMDgp1QE=Sat,\ + \ 22 Jun 2019 20:22:18 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:18 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - a17f4c60-f003-0097-3838-2907c9000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message4' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 6e90ad18-952b-11e9-a129-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:18 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueuebf740c50/messages + response: + body: + string: "\uFEFF00c84a13-5431-46f3-a809-630d8034acc8Sat,\ + \ 22 Jun 2019 20:22:18 GMTSat, 29 Jun 2019\ + \ 20:22:18 GMTAgAAAAMAAAAAAAAADZRXMDgp1QE=Sat,\ + \ 22 Jun 2019 20:22:18 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:18 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - a17f4c64-f003-0097-3b38-2907c9000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 6e99121c-952b-11e9-bb88-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:18 GMT + x-ms-version: + - '2018-03-28' + method: DELETE + uri: https://storagename.queue.core.windows.net/pythonqueuebf740c50/messages + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:19 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - a17f4c66-f003-0097-3d38-2907c9000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 6f7d8ea6-952b-11e9-aecc-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:19 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueuebf740c50/messages?peekonly=true + response: + body: + string: "\uFEFF" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:19 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - a17f4cbb-f003-0097-7c38-2907c9000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - ab944950-952d-11e9-a041-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:19 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueuebf740c50 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:38:19 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 81b14f40-b003-0057-6a3a-298d8d000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message1' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - abb4b886-952d-11e9-909a-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:19 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueuebf740c50/messages + response: + body: + string: "\uFEFF92863ce0-4b17-45d9-80cf-b16f29d77728Sat,\ + \ 22 Jun 2019 20:38:19 GMTSat, 29 Jun 2019\ + \ 20:38:19 GMTAgAAAAMAAAAAAAAAqUF9bTop1QE=Sat,\ + \ 22 Jun 2019 20:38:19 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:19 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 81b14f4e-b003-0057-763a-298d8d000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message2' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - abbe359e-952d-11e9-a57f-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:19 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueuebf740c50/messages + response: + body: + string: "\uFEFFb7cf194c-1949-4bfc-ac61-94b492abe7a3Sat,\ + \ 22 Jun 2019 20:38:19 GMTSat, 29 Jun 2019\ + \ 20:38:19 GMTAgAAAAMAAAAAAAAA5hyGbTop1QE=Sat,\ + \ 22 Jun 2019 20:38:19 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:19 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 81b14f5c-b003-0057-043a-298d8d000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message3' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - abc702f0-952d-11e9-853e-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:19 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueuebf740c50/messages + response: + body: + string: "\uFEFF73913a9b-43b1-4f68-b1b4-7c721645e10cSat,\ + \ 22 Jun 2019 20:38:20 GMTSat, 29 Jun 2019\ + \ 20:38:20 GMTAgAAAAMAAAAAAAAAPh+PbTop1QE=Sat,\ + \ 22 Jun 2019 20:38:20 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:19 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 81b14f67-b003-0057-0f3a-298d8d000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message4' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - abcff5e8-952d-11e9-a13b-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:20 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueuebf740c50/messages + response: + body: + string: "\uFEFF349cbae5-a134-40ba-8708-da2dd961d236Sat,\ + \ 22 Jun 2019 20:38:20 GMTSat, 29 Jun 2019\ + \ 20:38:20 GMTAgAAAAMAAAAAAAAAfvqXbTop1QE=Sat,\ + \ 22 Jun 2019 20:38:20 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:19 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 81b14f79-b003-0057-203a-298d8d000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - abd8c6c0-952d-11e9-b0d3-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:20 GMT + x-ms-version: + - '2018-03-28' + method: DELETE + uri: https://storagename.queue.core.windows.net/pythonqueuebf740c50/messages + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:38:20 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 81b14f84-b003-0057-2b3a-298d8d000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - ac8a6f74-952d-11e9-83df-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:21 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueuebf740c50/messages?peekonly=true + response: + body: + string: "\uFEFF" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:20 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 81b15087-b003-0057-0d3a-298d8d000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_create_queue.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_create_queue.yaml new file mode 100644 index 000000000000..785c619bdbad --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_create_queue.yaml @@ -0,0 +1,154 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 1a14782c-952a-11e9-afcc-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:47 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/pythonqueuea7af0b8a + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:12:46 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - a2742c4e-4003-00a7-1736-295de3000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - dae7adc6-952a-11e9-bcb6-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:10 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueuea7af0b8a + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:10 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - ab0dc302-d003-00a9-2b37-29b1e8000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 6fc936e4-952b-11e9-bc00-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:20 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueuea7af0b8a + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:23 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 400e3090-8003-0098-2938-29ea3f000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - ace449d8-952d-11e9-b6a2-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:21 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueuea7af0b8a + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:38:21 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - f7730fec-1003-005a-4f3a-296281000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_create_queue_fail_on_exist.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_create_queue_fail_on_exist.yaml new file mode 100644 index 000000000000..5b23050d07c1 --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_create_queue_fail_on_exist.yaml @@ -0,0 +1,306 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 1a569838-952a-11e9-992e-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:47 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/pythonqueue736a114d + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:12:46 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 7bd8bbf5-3003-00ce-7236-29024f000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 1a76a57e-952a-11e9-b98e-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:47 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/pythonqueue736a114d + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:12:47 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 7bd8bc03-3003-00ce-7b36-29024f000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - db2d9a70-952a-11e9-a9cf-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:10 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueue736a114d + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:11 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 7f7a10a7-4003-002f-3b37-29e53a000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - db4df1b4-952a-11e9-ae03-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:11 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueue736a114d + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:11 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 7f7a10aa-4003-002f-3c37-29e53a000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 72209de2-952b-11e9-93aa-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:24 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueue736a114d + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:23 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 5f7859e6-d003-008b-5e38-29dfde000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 72403f08-952b-11e9-8daa-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:24 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueue736a114d + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:23 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 5f7859f1-d003-008b-6738-29dfde000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - ad36ca8a-952d-11e9-bc2c-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:22 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueue736a114d + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:38:21 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 400f0b1f-8003-0098-513a-29ea3f000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - ad5a5324-952d-11e9-a6c0-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:22 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueue736a114d + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:38:21 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 400f0b28-8003-0098-573a-29ea3f000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_create_queue_fail_on_exist_different_metadata.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_create_queue_fail_on_exist_different_metadata.yaml new file mode 100644 index 000000000000..a62e0112092e --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_create_queue_fail_on_exist_different_metadata.yaml @@ -0,0 +1,346 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 1a9e49a8-952a-11e9-b8de-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:47 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/pythonqueue9101903 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:12:48 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 4a2e3e63-2003-009e-6836-291d47000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 1abeef64-952a-11e9-8594-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:48 GMT + x-ms-meta: + - '{''val'': ''value''}' + x-ms-meta-val: + - value + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/pythonqueue9101903 + response: + body: + string: "\uFEFFQueueAlreadyExistsThe\ + \ specified queue already exists.\nRequestId:4a2e3e6d-2003-009e-7036-291d47000000\n\ + Time:2019-06-22T20:12:48.2005434Z" + headers: + Content-Length: + - '222' + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:12:48 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-error-code: + - QueueAlreadyExists + x-ms-request-id: + - 4a2e3e6d-2003-009e-7036-291d47000000 + x-ms-version: + - '2018-03-28' + status: + code: 409 + message: The specified queue already exists. +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - db7d1d8c-952a-11e9-b494-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:11 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueue9101903 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:11 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - e7a1cace-d003-00cf-2137-2903b2000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - db9e8968-952a-11e9-811d-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:11 GMT + x-ms-meta: + - '{''val'': ''value''}' + x-ms-meta-val: + - value + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueue9101903 + response: + body: + string: "\uFEFFQueueAlreadyExistsThe\ + \ specified queue already exists.\nRequestId:e7a1cae7-d003-00cf-3837-2903b2000000\n\ + Time:2019-06-22T20:18:12.3021037Z" + headers: + Content-Length: + - '222' + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:11 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-error-code: + - QueueAlreadyExists + x-ms-request-id: + - e7a1cae7-d003-00cf-3837-2903b2000000 + x-ms-version: + - '2018-03-28' + status: + code: 409 + message: The specified queue already exists. +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 72782d3a-952b-11e9-86dd-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:24 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueue9101903 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:24 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 2b8363b6-8003-0032-3b38-293cd0000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 729b087a-952b-11e9-b77e-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:25 GMT + x-ms-meta: + - '{''val'': ''value''}' + x-ms-meta-val: + - value + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueue9101903 + response: + body: + string: "\uFEFFQueueAlreadyExistsThe\ + \ specified queue already exists.\nRequestId:2b8363cd-8003-0032-4f38-293cd0000000\n\ + Time:2019-06-22T20:22:25.1056924Z" + headers: + Content-Length: + - '222' + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:24 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-error-code: + - QueueAlreadyExists + x-ms-request-id: + - 2b8363cd-8003-0032-4f38-293cd0000000 + x-ms-version: + - '2018-03-28' + status: + code: 409 + message: The specified queue already exists. +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - ad96883a-952d-11e9-82e9-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:22 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueue9101903 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:38:22 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 69127b5f-f003-001f-1c3a-29bf10000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - adb7a8d0-952d-11e9-b601-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:23 GMT + x-ms-meta: + - '{''val'': ''value''}' + x-ms-meta-val: + - value + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueue9101903 + response: + body: + string: "\uFEFFQueueAlreadyExistsThe\ + \ specified queue already exists.\nRequestId:69127b65-f003-001f-1e3a-29bf10000000\n\ + Time:2019-06-22T20:38:23.2865921Z" + headers: + Content-Length: + - '222' + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:22 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-error-code: + - QueueAlreadyExists + x-ms-request-id: + - 69127b65-f003-001f-1e3a-29bf10000000 + x-ms-version: + - '2018-03-28' + status: + code: 409 + message: The specified queue already exists. +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_create_queue_with_options.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_create_queue_with_options.yaml new file mode 100644 index 000000000000..a4d0a6349f9c --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_create_queue_with_options.yaml @@ -0,0 +1,362 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 1ae91974-952a-11e9-9970-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:48 GMT + x-ms-meta: + - '{''val1'': ''test'', ''val2'': ''blah''}' + x-ms-meta-val1: + - test + x-ms-meta-val2: + - blah + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/pythonqueue63ff1110 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:12:48 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - d95e0587-d003-00ed-6636-296d84000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 1b098614-952a-11e9-95c9-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:48 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://remotestoragename.queue.core.windows.net/pythonqueue63ff1110?comp=metadata + response: + body: + string: '' + headers: + Cache-Control: + - no-cache + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:12:48 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Vary: + - Origin + x-ms-approximate-messages-count: + - '0' + x-ms-meta-val1: + - test + x-ms-meta-val2: + - blah + x-ms-request-id: + - d95e059b-d003-00ed-7736-296d84000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - dc1eabe8-952a-11e9-8d0d-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:12 GMT + x-ms-meta: + - '{''val1'': ''test'', ''val2'': ''blah''}' + x-ms-meta-val1: + - test + x-ms-meta-val2: + - blah + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueue63ff1110 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:11 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 02b4f8e0-3003-0064-7637-29d4a0000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - dc400d46-952a-11e9-93d2-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:12 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueue63ff1110?comp=metadata + response: + body: + string: '' + headers: + Cache-Control: + - no-cache + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:11 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Vary: + - Origin + x-ms-approximate-messages-count: + - '0' + x-ms-meta-val1: + - test + x-ms-meta-val2: + - blah + x-ms-request-id: + - 02b4f8f6-3003-0064-0937-29d4a0000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 72d2e5b0-952b-11e9-987a-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:25 GMT + x-ms-meta: + - '{''val1'': ''test'', ''val2'': ''blah''}' + x-ms-meta-val1: + - test + x-ms-meta-val2: + - blah + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueue63ff1110 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:25 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - caff802e-6003-00d6-1938-292fda000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 735f2fd4-952b-11e9-bee0-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:26 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueue63ff1110?comp=metadata + response: + body: + string: '' + headers: + Cache-Control: + - no-cache + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:25 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Vary: + - Origin + x-ms-approximate-messages-count: + - '0' + x-ms-meta-val1: + - test + x-ms-meta-val2: + - blah + x-ms-request-id: + - caff8112-6003-00d6-6838-292fda000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - adf9899e-952d-11e9-9321-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:23 GMT + x-ms-meta: + - '{''val1'': ''test'', ''val2'': ''blah''}' + x-ms-meta-val1: + - test + x-ms-meta-val2: + - blah + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueue63ff1110 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:38:23 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - f7c27705-8003-0054-3f3a-298e8a000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - ae1af764-952d-11e9-8c5c-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:23 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueue63ff1110?comp=metadata + response: + body: + string: '' + headers: + Cache-Control: + - no-cache + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:38:23 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Vary: + - Origin + x-ms-approximate-messages-count: + - '0' + x-ms-meta-val1: + - test + x-ms-meta-val2: + - blah + x-ms-request-id: + - f7c27718-8003-0054-4f3a-298e8a000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_delete_existing_queue_fail_not_exist.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_delete_existing_queue_fail_not_exist.yaml new file mode 100644 index 000000000000..aaff71f77169 --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_delete_existing_queue_fail_not_exist.yaml @@ -0,0 +1,306 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 1b314fbe-952a-11e9-a9e0-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:48 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/pythonqueue38c6158a + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:12:48 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - f08e94f3-e003-00a1-8036-29aa9b000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 1b51598a-952a-11e9-b996-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:49 GMT + x-ms-version: + - '2018-03-28' + method: DELETE + uri: https://remotestoragename.queue.core.windows.net/pythonqueue38c6158a + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:12:48 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - f08e94f9-e003-00a1-0436-29aa9b000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - dc6fd646-952a-11e9-9216-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:13 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueue38c6158a + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:13 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - e6028d85-9003-0026-3737-29ffb4000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - dc945f52-952a-11e9-9481-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:13 GMT + x-ms-version: + - '2018-03-28' + method: DELETE + uri: https://storagename.queue.core.windows.net/pythonqueue38c6158a + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:13 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - e6028d8a-9003-0026-3a37-29ffb4000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 7399842c-952b-11e9-bdd6-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:26 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueue38c6158a + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:26 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 96783a36-b003-009b-4038-29e938000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 73bbe88c-952b-11e9-a5bf-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:26 GMT + x-ms-version: + - '2018-03-28' + method: DELETE + uri: https://storagename.queue.core.windows.net/pythonqueue38c6158a + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:26 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 96783a4b-b003-009b-5138-29e938000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - ae58c152-952d-11e9-8b12-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:24 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueue38c6158a + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:38:24 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 9df0b0ca-e003-0066-163a-29d65a000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - ae79ef9e-952d-11e9-972d-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:24 GMT + x-ms-version: + - '2018-03-28' + method: DELETE + uri: https://storagename.queue.core.windows.net/pythonqueue38c6158a + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:38:24 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 9df0b0cd-e003-0066-173a-29d65a000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_delete_message.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_delete_message.yaml new file mode 100644 index 000000000000..51d38817ff39 --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_delete_message.yaml @@ -0,0 +1,1442 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 1b7a7e3a-952a-11e9-bd27-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:49 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/pythonqueuebf910c49 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:12:49 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - fd4a8222-9003-00c8-3c36-29f537000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message1' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 1b9a01c6-952a-11e9-8b0c-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:49 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://remotestoragename.queue.core.windows.net/pythonqueuebf910c49/messages + response: + body: + string: "\uFEFF442e2d59-b9ee-4fc1-b57f-1eede999ed26Sat,\ + \ 22 Jun 2019 20:12:49 GMTSat, 29 Jun 2019\ + \ 20:12:49 GMTAgAAAAMAAAAAAAAAZ71f3TYp1QE=Sat,\ + \ 22 Jun 2019 20:12:49 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:12:49 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - fd4a822e-9003-00c8-4436-29f537000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message2' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 1ba2cc3e-952a-11e9-84a6-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:49 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://remotestoragename.queue.core.windows.net/pythonqueuebf910c49/messages + response: + body: + string: "\uFEFF4b1f4b61-a5c0-48fa-8473-231196864687Sat,\ + \ 22 Jun 2019 20:12:49 GMTSat, 29 Jun 2019\ + \ 20:12:49 GMTAgAAAAMAAAAAAAAAayNo3TYp1QE=Sat,\ + \ 22 Jun 2019 20:12:49 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:12:49 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - fd4a8238-9003-00c8-4e36-29f537000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message3' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 1bab46ca-952a-11e9-8a40-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:49 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://remotestoragename.queue.core.windows.net/pythonqueuebf910c49/messages + response: + body: + string: "\uFEFFbc529b8c-9f40-41ef-96f3-354cb25025b7Sat,\ + \ 22 Jun 2019 20:12:49 GMTSat, 29 Jun 2019\ + \ 20:12:49 GMTAgAAAAMAAAAAAAAAkNdw3TYp1QE=Sat,\ + \ 22 Jun 2019 20:12:49 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:12:49 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - fd4a8241-9003-00c8-5536-29f537000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message4' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 1bb3e9c6-952a-11e9-b2c0-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:49 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://remotestoragename.queue.core.windows.net/pythonqueuebf910c49/messages + response: + body: + string: "\uFEFF635425fc-8557-4a2c-81fb-14a27d8b1c50Sat,\ + \ 22 Jun 2019 20:12:49 GMTSat, 29 Jun 2019\ + \ 20:12:49 GMTAgAAAAMAAAAAAAAApmR53TYp1QE=Sat,\ + \ 22 Jun 2019 20:12:49 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:12:49 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - fd4a8249-9003-00c8-5c36-29f537000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 1bbc4aba-952a-11e9-9d3a-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:49 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://remotestoragename.queue.core.windows.net/pythonqueuebf910c49/messages + response: + body: + string: "\uFEFF442e2d59-b9ee-4fc1-b57f-1eede999ed26Sat,\ + \ 22 Jun 2019 20:12:49 GMTSat, 29 Jun 2019\ + \ 20:12:49 GMTAgAAAAMAAAAAAAAAhkZj7zYp1QE=Sat,\ + \ 22 Jun 2019 20:13:19 GMT1message1" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:12:49 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - fd4a8253-9003-00c8-6536-29f537000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 1bc4c398-952a-11e9-9d06-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:49 GMT + x-ms-version: + - '2018-03-28' + method: DELETE + uri: https://remotestoragename.queue.core.windows.net/pythonqueuebf910c49/messages/442e2d59-b9ee-4fc1-b57f-1eede999ed26?popreceipt=AgAAAAMAAAAAAAAAhkZj7zYp1QE%3D + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:12:49 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - fd4a825b-9003-00c8-6c36-29f537000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 1bcd588c-952a-11e9-895b-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:49 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://remotestoragename.queue.core.windows.net/pythonqueuebf910c49/messages?numofmessages=32 + response: + body: + string: "\uFEFF4b1f4b61-a5c0-48fa-8473-231196864687Sat,\ + \ 22 Jun 2019 20:12:49 GMTSat, 29 Jun 2019\ + \ 20:12:49 GMTAgAAAAMAAAAAAAAA16507zYp1QE=Sat,\ + \ 22 Jun 2019 20:13:19 GMT1message2bc529b8c-9f40-41ef-96f3-354cb25025b7Sat,\ + \ 22 Jun 2019 20:12:49 GMTSat, 29 Jun 2019\ + \ 20:12:49 GMTAgAAAAMAAAAAAAAA16507zYp1QE=Sat,\ + \ 22 Jun 2019 20:13:19 GMT1message3635425fc-8557-4a2c-81fb-14a27d8b1c50Sat,\ + \ 22 Jun 2019 20:12:49 GMTSat, 29 Jun 2019\ + \ 20:12:49 GMTAgAAAAMAAAAAAAAA16507zYp1QE=Sat,\ + \ 22 Jun 2019 20:13:19 GMT1message4" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:12:49 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - fd4a8261-9003-00c8-7236-29f537000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - dcd5898c-952a-11e9-806a-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:13 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueuebf910c49 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:13 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 0b5f410d-2003-0070-7d37-2917c4000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message1' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - dcf60022-952a-11e9-954d-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:13 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueuebf910c49/messages + response: + body: + string: "\uFEFF1208b99d-12bd-4073-a3c8-9b0ad6bfdf33Sat,\ + \ 22 Jun 2019 20:18:14 GMTSat, 29 Jun 2019\ + \ 20:18:14 GMTAgAAAAMAAAAAAAAASC69njcp1QE=Sat,\ + \ 22 Jun 2019 20:18:14 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:13 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 0b5f411d-2003-0070-0a37-2917c4000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message2' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - dcff4f9c-952a-11e9-83d3-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:14 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueuebf910c49/messages + response: + body: + string: "\uFEFF3de1106c-a4cf-4a5f-a7dc-d5f70ad5c8b0Sat,\ + \ 22 Jun 2019 20:18:14 GMTSat, 29 Jun 2019\ + \ 20:18:14 GMTAgAAAAMAAAAAAAAAzn7Gnjcp1QE=Sat,\ + \ 22 Jun 2019 20:18:14 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:13 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 0b5f412a-2003-0070-1637-2917c4000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message3' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - dd08b014-952a-11e9-aee4-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:14 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueuebf910c49/messages + response: + body: + string: "\uFEFF4ec3ee4b-b0f3-48e9-a5d1-8b7fc1e2180aSat,\ + \ 22 Jun 2019 20:18:14 GMTSat, 29 Jun 2019\ + \ 20:18:14 GMTAgAAAAMAAAAAAAAA+DLPnjcp1QE=Sat,\ + \ 22 Jun 2019 20:18:14 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:13 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 0b5f4137-2003-0070-1f37-2917c4000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message4' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - dd11436e-952a-11e9-8240-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:14 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueuebf910c49/messages + response: + body: + string: "\uFEFFea4ee1a4-2c09-42d5-bad1-210be95e91c7Sat,\ + \ 22 Jun 2019 20:18:14 GMTSat, 29 Jun 2019\ + \ 20:18:14 GMTAgAAAAMAAAAAAAAATzXYnjcp1QE=Sat,\ + \ 22 Jun 2019 20:18:14 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:13 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 0b5f4149-2003-0070-2e37-2917c4000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - dd1a7bd2-952a-11e9-95d1-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:14 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueuebf910c49/messages + response: + body: + string: "\uFEFF1208b99d-12bd-4073-a3c8-9b0ad6bfdf33Sat,\ + \ 22 Jun 2019 20:18:14 GMTSat, 29 Jun 2019\ + \ 20:18:14 GMTAgAAAAMAAAAAAAAAkLPCsDcp1QE=Sat,\ + \ 22 Jun 2019 20:18:44 GMT1message1" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:13 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 0b5f4151-2003-0070-3637-2917c4000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - dd23aae8-952a-11e9-b0bf-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:14 GMT + x-ms-version: + - '2018-03-28' + method: DELETE + uri: https://storagename.queue.core.windows.net/pythonqueuebf910c49/messages/1208b99d-12bd-4073-a3c8-9b0ad6bfdf33?popreceipt=AgAAAAMAAAAAAAAAkLPCsDcp1QE%3D + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:14 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 0b5f4164-2003-0070-4737-2917c4000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - dd2c7de6-952a-11e9-9262-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:14 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueuebf910c49/messages?numofmessages=32 + response: + body: + string: "\uFEFF3de1106c-a4cf-4a5f-a7dc-d5f70ad5c8b0Sat,\ + \ 22 Jun 2019 20:18:14 GMTSat, 29 Jun 2019\ + \ 20:18:14 GMTAgAAAAMAAAAAAAAAV9/UsDcp1QE=Sat,\ + \ 22 Jun 2019 20:18:44 GMT1message24ec3ee4b-b0f3-48e9-a5d1-8b7fc1e2180aSat,\ + \ 22 Jun 2019 20:18:14 GMTSat, 29 Jun 2019\ + \ 20:18:14 GMTAgAAAAMAAAAAAAAAV9/UsDcp1QE=Sat,\ + \ 22 Jun 2019 20:18:44 GMT1message3ea4ee1a4-2c09-42d5-bad1-210be95e91c7Sat,\ + \ 22 Jun 2019 20:18:14 GMTSat, 29 Jun 2019\ + \ 20:18:14 GMTAgAAAAMAAAAAAAAAV9/UsDcp1QE=Sat,\ + \ 22 Jun 2019 20:18:44 GMT1message4" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:14 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 0b5f4172-2003-0070-5337-2917c4000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 740b52d2-952b-11e9-9d3a-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:27 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueuebf910c49 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:26 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - f5f43da9-6003-0099-3638-29ebc2000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message1' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 742c9034-952b-11e9-95de-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:27 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueuebf910c49/messages + response: + body: + string: "\uFEFF193f415e-aabc-46e0-9209-48d6f7dad682Sat,\ + \ 22 Jun 2019 20:22:27 GMTSat, 29 Jun 2019\ + \ 20:22:27 GMTAgAAAAMAAAAAAAAAxCb0NTgp1QE=Sat,\ + \ 22 Jun 2019 20:22:27 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:26 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - f5f43db1-6003-0099-3a38-29ebc2000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message2' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 7435d566-952b-11e9-a739-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:27 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueuebf910c49/messages + response: + body: + string: "\uFEFF5b8f5b8c-25ca-42c2-a759-8feeba150f7cSat,\ + \ 22 Jun 2019 20:22:27 GMTSat, 29 Jun 2019\ + \ 20:22:27 GMTAgAAAAMAAAAAAAAAGyn9NTgp1QE=Sat,\ + \ 22 Jun 2019 20:22:27 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:26 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - f5f43db7-6003-0099-3f38-29ebc2000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message3' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 743eee58-952b-11e9-8745-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:27 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueuebf910c49/messages + response: + body: + string: "\uFEFFd867e71b-a641-4b87-b534-4659d5016cfdSat,\ + \ 22 Jun 2019 20:22:27 GMTSat, 29 Jun 2019\ + \ 20:22:27 GMTAgAAAAMAAAAAAAAAcysGNjgp1QE=Sat,\ + \ 22 Jun 2019 20:22:27 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:26 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - f5f43dba-6003-0099-4238-29ebc2000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message4' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 74482aa4-952b-11e9-9902-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:27 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueuebf910c49/messages + response: + body: + string: "\uFEFF1cafa96b-c8b4-41b7-8dcf-407fffd8661cSat,\ + \ 22 Jun 2019 20:22:27 GMTSat, 29 Jun 2019\ + \ 20:22:27 GMTAgAAAAMAAAAAAAAA+XsPNjgp1QE=Sat,\ + \ 22 Jun 2019 20:22:27 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:26 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - f5f43dbe-6003-0099-4538-29ebc2000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 74515192-952b-11e9-be15-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:27 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueuebf910c49/messages + response: + body: + string: "\uFEFF193f415e-aabc-46e0-9209-48d6f7dad682Sat,\ + \ 22 Jun 2019 20:22:27 GMTSat, 29 Jun 2019\ + \ 20:22:27 GMTAgAAAAMAAAAAAAAAl5b6Rzgp1QE=Sat,\ + \ 22 Jun 2019 20:22:57 GMT1message1" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:27 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - f5f43dbf-6003-0099-4638-29ebc2000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 745b1524-952b-11e9-b3c4-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:27 GMT + x-ms-version: + - '2018-03-28' + method: DELETE + uri: https://storagename.queue.core.windows.net/pythonqueuebf910c49/messages/193f415e-aabc-46e0-9209-48d6f7dad682?popreceipt=AgAAAAMAAAAAAAAAl5b6Rzgp1QE%3D + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:27 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - f5f43dc3-6003-0099-4a38-29ebc2000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 74643122-952b-11e9-b8fb-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:28 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueuebf910c49/messages?numofmessages=32 + response: + body: + string: "\uFEFF5b8f5b8c-25ca-42c2-a759-8feeba150f7cSat,\ + \ 22 Jun 2019 20:22:27 GMTSat, 29 Jun 2019\ + \ 20:22:27 GMTAgAAAAMAAAAAAAAAul4NSDgp1QE=Sat,\ + \ 22 Jun 2019 20:22:58 GMT1message2d867e71b-a641-4b87-b534-4659d5016cfdSat,\ + \ 22 Jun 2019 20:22:27 GMTSat, 29 Jun 2019\ + \ 20:22:27 GMTAgAAAAMAAAAAAAAAul4NSDgp1QE=Sat,\ + \ 22 Jun 2019 20:22:58 GMT1message31cafa96b-c8b4-41b7-8dcf-407fffd8661cSat,\ + \ 22 Jun 2019 20:22:27 GMTSat, 29 Jun 2019\ + \ 20:22:27 GMTAgAAAAMAAAAAAAAAul4NSDgp1QE=Sat,\ + \ 22 Jun 2019 20:22:58 GMT1message4" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:27 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - f5f43dc5-6003-0099-4c38-29ebc2000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - aee1db86-952d-11e9-9f94-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:25 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueuebf910c49 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:38:24 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 24506b4c-4003-00ca-6e3a-29f7cd000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message1' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - af02a3ac-952d-11e9-bdc7-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:25 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueuebf910c49/messages + response: + body: + string: "\uFEFF914e12cd-da29-4d7f-828a-393828adfbbeSat,\ + \ 22 Jun 2019 20:38:25 GMTSat, 29 Jun 2019\ + \ 20:38:25 GMTAgAAAAMAAAAAAAAAeuTKcDop1QE=Sat,\ + \ 22 Jun 2019 20:38:25 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:24 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 24506b5e-4003-00ca-7e3a-29f7cd000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message2' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - af0bd666-952d-11e9-a81d-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:25 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueuebf910c49/messages + response: + body: + string: "\uFEFFcd560872-1500-4081-9887-44a67792f515Sat,\ + \ 22 Jun 2019 20:38:25 GMTSat, 29 Jun 2019\ + \ 20:38:25 GMTAgAAAAMAAAAAAAAAzubTcDop1QE=Sat,\ + \ 22 Jun 2019 20:38:25 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:24 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 24506b71-4003-00ca-103a-29f7cd000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message3' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - af14a5f4-952d-11e9-bfa3-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:25 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueuebf910c49/messages + response: + body: + string: "\uFEFFa047b162-8bd6-4ca3-8393-245d7af6dd90Sat,\ + \ 22 Jun 2019 20:38:25 GMTSat, 29 Jun 2019\ + \ 20:38:25 GMTAgAAAAMAAAAAAAAA3HPccDop1QE=Sat,\ + \ 22 Jun 2019 20:38:25 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:24 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 24506b7f-4003-00ca-1d3a-29f7cd000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message4' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - af1d518c-952d-11e9-bc94-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:25 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueuebf910c49/messages + response: + body: + string: "\uFEFFcb60022d-89e1-4c86-afdb-627d48e3250fSat,\ + \ 22 Jun 2019 20:38:25 GMTSat, 29 Jun 2019\ + \ 20:38:25 GMTAgAAAAMAAAAAAAAAAijlcDop1QE=Sat,\ + \ 22 Jun 2019 20:38:25 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:24 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 24506b9c-4003-00ca-363a-29f7cd000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - af261bca-952d-11e9-8a6d-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:25 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueuebf910c49/messages + response: + body: + string: "\uFEFF914e12cd-da29-4d7f-828a-393828adfbbeSat,\ + \ 22 Jun 2019 20:38:25 GMTSat, 29 Jun 2019\ + \ 20:38:25 GMTAgAAAAMAAAAAAAAAVs3Pgjop1QE=Sat,\ + \ 22 Jun 2019 20:38:55 GMT1message1" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:24 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 24506baa-4003-00ca-443a-29f7cd000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - af2f5190-952d-11e9-a222-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:25 GMT + x-ms-version: + - '2018-03-28' + method: DELETE + uri: https://storagename.queue.core.windows.net/pythonqueuebf910c49/messages/914e12cd-da29-4d7f-828a-393828adfbbe?popreceipt=AgAAAAMAAAAAAAAAVs3Pgjop1QE%3D + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:38:24 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 24506bc9-4003-00ca-5e3a-29f7cd000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - af389908-952d-11e9-9591-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:25 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueuebf910c49/messages?numofmessages=32 + response: + body: + string: "\uFEFFcd560872-1500-4081-9887-44a67792f515Sat,\ + \ 22 Jun 2019 20:38:25 GMTSat, 29 Jun 2019\ + \ 20:38:25 GMTAgAAAAMAAAAAAAAAX27igjop1QE=Sat,\ + \ 22 Jun 2019 20:38:55 GMT1message2a047b162-8bd6-4ca3-8393-245d7af6dd90Sat,\ + \ 22 Jun 2019 20:38:25 GMTSat, 29 Jun 2019\ + \ 20:38:25 GMTAgAAAAMAAAAAAAAAX27igjop1QE=Sat,\ + \ 22 Jun 2019 20:38:55 GMT1message3cb60022d-89e1-4c86-afdb-627d48e3250fSat,\ + \ 22 Jun 2019 20:38:25 GMTSat, 29 Jun 2019\ + \ 20:38:25 GMTAgAAAAMAAAAAAAAAX27igjop1QE=Sat,\ + \ 22 Jun 2019 20:38:55 GMT1message4" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:24 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 24506bd7-4003-00ca-6b3a-29f7cd000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_delete_non_existing_queue.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_delete_non_existing_queue.yaml new file mode 100644 index 000000000000..06badb54a8de --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_delete_non_existing_queue.yaml @@ -0,0 +1,178 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 1c028bc6-952a-11e9-8166-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:50 GMT + x-ms-version: + - '2018-03-28' + method: DELETE + uri: https://remotestoragename.queue.core.windows.net/pythonqueue637410fd + response: + body: + string: "\uFEFFQueueNotFoundThe\ + \ specified queue does not exist.\nRequestId:1ecb1021-6003-0038-0236-292559000000\n\ + Time:2019-06-22T20:12:50.4701156Z" + headers: + Content-Length: + - '217' + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:12:49 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-error-code: + - QueueNotFound + x-ms-request-id: + - 1ecb1021-6003-0038-0236-292559000000 + x-ms-version: + - '2018-03-28' + status: + code: 404 + message: The specified queue does not exist. +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - dd73ec6c-952a-11e9-a2be-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:14 GMT + x-ms-version: + - '2018-03-28' + method: DELETE + uri: https://storagename.queue.core.windows.net/pythonqueue637410fd + response: + body: + string: "\uFEFFQueueNotFoundThe\ + \ specified queue does not exist.\nRequestId:003b1c7a-3003-0046-3837-29ba96000000\n\ + Time:2019-06-22T20:18:15.0360363Z" + headers: + Content-Length: + - '217' + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:14 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-error-code: + - QueueNotFound + x-ms-request-id: + - 003b1c7a-3003-0046-3837-29ba96000000 + x-ms-version: + - '2018-03-28' + status: + code: 404 + message: The specified queue does not exist. +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 74c34338-952b-11e9-a579-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:28 GMT + x-ms-version: + - '2018-03-28' + method: DELETE + uri: https://storagename.queue.core.windows.net/pythonqueue637410fd + response: + body: + string: "\uFEFFQueueNotFoundThe\ + \ specified queue does not exist.\nRequestId:762115a2-a003-0025-0438-29fcb3000000\n\ + Time:2019-06-22T20:22:28.8953884Z" + headers: + Content-Length: + - '217' + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:28 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-error-code: + - QueueNotFound + x-ms-request-id: + - 762115a2-a003-0025-0438-29fcb3000000 + x-ms-version: + - '2018-03-28' + status: + code: 404 + message: The specified queue does not exist. +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - afa695b6-952d-11e9-a5c1-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:26 GMT + x-ms-version: + - '2018-03-28' + method: DELETE + uri: https://storagename.queue.core.windows.net/pythonqueue637410fd + response: + body: + string: "\uFEFFQueueNotFoundThe\ + \ specified queue does not exist.\nRequestId:7eec24bd-1003-0037-3a3a-29c8af000000\n\ + Time:2019-06-22T20:38:26.6802231Z" + headers: + Content-Length: + - '217' + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:26 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-error-code: + - QueueNotFound + x-ms-request-id: + - 7eec24bd-1003-0037-3a3a-29c8af000000 + x-ms-version: + - '2018-03-28' + status: + code: 404 + message: The specified queue does not exist. +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_get_messages.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_get_messages.yaml new file mode 100644 index 000000000000..76b6524f397c --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_get_messages.yaml @@ -0,0 +1,1086 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 1c4117cc-952a-11e9-9bc1-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:50 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/pythonqueuea7c20b89 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:12:50 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - b31c3690-0003-0067-2e36-29d7a7000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message1' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 1c61d58c-952a-11e9-b12b-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:50 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://remotestoragename.queue.core.windows.net/pythonqueuea7c20b89/messages + response: + body: + string: "\uFEFF6a602203-637a-4658-b3ef-d58caa8c9610Sat,\ + \ 22 Jun 2019 20:12:50 GMTSat, 29 Jun 2019\ + \ 20:12:50 GMTAgAAAAMAAAAAAAAAtZ4n3jYp1QE=Sat,\ + \ 22 Jun 2019 20:12:50 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:12:50 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - b31c369d-0003-0067-3836-29d7a7000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message2' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 1c6ac34c-952a-11e9-b1fb-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:50 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://remotestoragename.queue.core.windows.net/pythonqueuea7c20b89/messages + response: + body: + string: "\uFEFFf674a405-7e8c-4ae8-ae4e-63379f42e093Sat,\ + \ 22 Jun 2019 20:12:50 GMTSat, 29 Jun 2019\ + \ 20:12:50 GMTAgAAAAMAAAAAAAAA9Xkw3jYp1QE=Sat,\ + \ 22 Jun 2019 20:12:50 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:12:50 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - b31c36a2-0003-0067-3d36-29d7a7000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message3' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 1c73d96e-952a-11e9-9a7f-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:51 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://remotestoragename.queue.core.windows.net/pythonqueuea7c20b89/messages + response: + body: + string: "\uFEFF11d3220a-4d9c-4c14-bf37-ca0ee4696530Sat,\ + \ 22 Jun 2019 20:12:51 GMTSat, 29 Jun 2019\ + \ 20:12:51 GMTAgAAAAMAAAAAAAAASHw53jYp1QE=Sat,\ + \ 22 Jun 2019 20:12:51 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:12:50 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - b31c36a6-0003-0067-3f36-29d7a7000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message4' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 1c7cb750-952a-11e9-9d05-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:51 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://remotestoragename.queue.core.windows.net/pythonqueuea7c20b89/messages + response: + body: + string: "\uFEFFe35a9913-6827-4713-9b08-ee5054fcce6fSat,\ + \ 22 Jun 2019 20:12:51 GMTSat, 29 Jun 2019\ + \ 20:12:51 GMTAgAAAAMAAAAAAAAAgldC3jYp1QE=Sat,\ + \ 22 Jun 2019 20:12:51 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:12:50 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - b31c36ab-0003-0067-4236-29d7a7000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 1c85c322-952a-11e9-abe0-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:51 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://remotestoragename.queue.core.windows.net/pythonqueuea7c20b89/messages + response: + body: + string: "\uFEFF6a602203-637a-4658-b3ef-d58caa8c9610Sat,\ + \ 22 Jun 2019 20:12:50 GMTSat, 29 Jun 2019\ + \ 20:12:50 GMTAgAAAAMAAAAAAAAAwtUs8DYp1QE=Sat,\ + \ 22 Jun 2019 20:13:21 GMT1message1" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:12:50 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - b31c36ae-0003-0067-4536-29d7a7000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - ddc70028-952a-11e9-b923-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:15 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueuea7c20b89 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:14 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - b1c7ced8-0003-0023-3537-290bcb000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message1' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - ddeb685a-952a-11e9-8751-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:15 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueuea7c20b89/messages + response: + body: + string: "\uFEFF3284ac50-0055-45ec-b88d-65800548a26cSat,\ + \ 22 Jun 2019 20:18:15 GMTSat, 29 Jun 2019\ + \ 20:18:15 GMTAgAAAAMAAAAAAAAAemmynzcp1QE=Sat,\ + \ 22 Jun 2019 20:18:15 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:14 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - b1c7cee4-0003-0023-3b37-290bcb000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message2' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - ddf48e1c-952a-11e9-93d3-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:15 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueuea7c20b89/messages + response: + body: + string: "\uFEFFba8dd6b8-4f7a-4a2b-9f7f-0c13150ca130Sat,\ + \ 22 Jun 2019 20:18:15 GMTSat, 29 Jun 2019\ + \ 20:18:15 GMTAgAAAAMAAAAAAAAAu0S7nzcp1QE=Sat,\ + \ 22 Jun 2019 20:18:15 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:14 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - b1c7ceec-0003-0023-4037-290bcb000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message3' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - ddfd8c4c-952a-11e9-8850-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:15 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueuea7c20b89/messages + response: + body: + string: "\uFEFFd9a38b4e-40f1-4cee-a6ac-24522aa680c5Sat,\ + \ 22 Jun 2019 20:18:15 GMTSat, 29 Jun 2019\ + \ 20:18:15 GMTAgAAAAMAAAAAAAAAE0fEnzcp1QE=Sat,\ + \ 22 Jun 2019 20:18:15 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:14 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - b1c7cef1-0003-0023-4437-290bcb000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message4' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - de066d62-952a-11e9-8681-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:15 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueuea7c20b89/messages + response: + body: + string: "\uFEFF2d7d87ad-dbe0-4150-a435-4a94271172eaSat,\ + \ 22 Jun 2019 20:18:15 GMTSat, 29 Jun 2019\ + \ 20:18:15 GMTAgAAAAMAAAAAAAAAgnDNnzcp1QE=Sat,\ + \ 22 Jun 2019 20:18:15 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:14 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - b1c7cef4-0003-0023-4737-290bcb000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - de0f9c5c-952a-11e9-a5dd-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:15 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueuea7c20b89/messages + response: + body: + string: "\uFEFF3284ac50-0055-45ec-b88d-65800548a26cSat,\ + \ 22 Jun 2019 20:18:15 GMTSat, 29 Jun 2019\ + \ 20:18:15 GMTAgAAAAMAAAAAAAAA8Ty4sTcp1QE=Sat,\ + \ 22 Jun 2019 20:18:45 GMT1message1" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:14 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - b1c7cef7-0003-0023-4937-290bcb000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 7526d0c6-952b-11e9-8463-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:29 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueuea7c20b89 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:28 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 477ac04a-f003-00d3-5e38-29dba5000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message1' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 7547a8e4-952b-11e9-ab00-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:29 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueuea7c20b89/messages + response: + body: + string: "\uFEFFebb99020-04cf-47f8-af38-fb5e6f0322f0Sat,\ + \ 22 Jun 2019 20:22:29 GMTSat, 29 Jun 2019\ + \ 20:22:29 GMTAgAAAAMAAAAAAAAAcUAPNzgp1QE=Sat,\ + \ 22 Jun 2019 20:22:29 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:28 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 477ac055-f003-00d3-6738-29dba5000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message2' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 7550fd0c-952b-11e9-9ca6-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:29 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueuea7c20b89/messages + response: + body: + string: "\uFEFF7e037ce9-a178-4625-9806-bef0c0a7c3bcSat,\ + \ 22 Jun 2019 20:22:29 GMTSat, 29 Jun 2019\ + \ 20:22:29 GMTAgAAAAMAAAAAAAAArBsYNzgp1QE=Sat,\ + \ 22 Jun 2019 20:22:29 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:28 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 477ac060-f003-00d3-7038-29dba5000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message3' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 7559a758-952b-11e9-9eb2-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:29 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueuea7c20b89/messages + response: + body: + string: "\uFEFFab52b354-c291-4b7d-93f1-d0904e0a3b7eSat,\ + \ 22 Jun 2019 20:22:29 GMTSat, 29 Jun 2019\ + \ 20:22:29 GMTAgAAAAMAAAAAAAAA0c8gNzgp1QE=Sat,\ + \ 22 Jun 2019 20:22:29 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:29 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 477ac06b-f003-00d3-7b38-29dba5000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message4' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 75628fc6-952b-11e9-bbca-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:29 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueuea7c20b89/messages + response: + body: + string: "\uFEFF94eff834-bbb0-4a9a-818f-96d8f1d415a2Sat,\ + \ 22 Jun 2019 20:22:29 GMTSat, 29 Jun 2019\ + \ 20:22:29 GMTAgAAAAMAAAAAAAAALdIpNzgp1QE=Sat,\ + \ 22 Jun 2019 20:22:29 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:29 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 477ac076-f003-00d3-0638-29dba5000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 756b4006-952b-11e9-8793-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:29 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueuea7c20b89/messages + response: + body: + string: "\uFEFFebb99020-04cf-47f8-af38-fb5e6f0322f0Sat,\ + \ 22 Jun 2019 20:22:29 GMTSat, 29 Jun 2019\ + \ 20:22:29 GMTAgAAAAMAAAAAAAAAclAUSTgp1QE=Sat,\ + \ 22 Jun 2019 20:22:59 GMT1message1" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:29 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 477ac07f-f003-00d3-0f38-29dba5000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - b0150be8-952d-11e9-9203-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:27 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueuea7c20b89 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:38:26 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 54de5478-f003-00be-3e3a-29718b000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message1' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - b035e57a-952d-11e9-b1ed-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:27 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueuea7c20b89/messages + response: + body: + string: "\uFEFF2081d49b-f526-422b-a908-91e5dfe618b9Sat,\ + \ 22 Jun 2019 20:38:27 GMTSat, 29 Jun 2019\ + \ 20:38:27 GMTAgAAAAMAAAAAAAAAbR7+cTop1QE=Sat,\ + \ 22 Jun 2019 20:38:27 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:26 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 54de5487-f003-00be-4a3a-29718b000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message2' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - b03f08e6-952d-11e9-813e-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:27 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueuea7c20b89/messages + response: + body: + string: "\uFEFF7a6f3677-834e-406b-a31d-daafa6805e86Sat,\ + \ 22 Jun 2019 20:38:27 GMTSat, 29 Jun 2019\ + \ 20:38:27 GMTAgAAAAMAAAAAAAAABpYHcjop1QE=Sat,\ + \ 22 Jun 2019 20:38:27 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:26 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 54de549a-f003-00be-5a3a-29718b000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message3' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - b048a464-952d-11e9-8fe2-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:27 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueuea7c20b89/messages + response: + body: + string: "\uFEFFe8fb6408-13b6-4097-a557-704ec0c4591fSat,\ + \ 22 Jun 2019 20:38:27 GMTSat, 29 Jun 2019\ + \ 20:38:27 GMTAgAAAAMAAAAAAAAAow0Rcjop1QE=Sat,\ + \ 22 Jun 2019 20:38:27 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:26 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 54de54a8-f003-00be-673a-29718b000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message4' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - b053fda8-952d-11e9-b76c-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:27 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueuea7c20b89/messages + response: + body: + string: "\uFEFF25c492fc-a0b7-4d2d-98a4-88fb737d5c13Sat,\ + \ 22 Jun 2019 20:38:27 GMTSat, 29 Jun 2019\ + \ 20:38:27 GMTAgAAAAMAAAAAAAAA4UQdcjop1QE=Sat,\ + \ 22 Jun 2019 20:38:27 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:26 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 54de54b7-f003-00be-763a-29718b000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - b0607062-952d-11e9-947b-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:27 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueuea7c20b89/messages + response: + body: + string: "\uFEFF2081d49b-f526-422b-a908-91e5dfe618b9Sat,\ + \ 22 Jun 2019 20:38:27 GMTSat, 29 Jun 2019\ + \ 20:38:27 GMTAgAAAAMAAAAAAAAAGx8LhDop1QE=Sat,\ + \ 22 Jun 2019 20:38:57 GMT1message1" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:26 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 54de54cb-f003-00be-083a-29718b000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_get_messages_with_options.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_get_messages_with_options.yaml new file mode 100644 index 000000000000..4f79ec258033 --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_get_messages_with_options.yaml @@ -0,0 +1,1122 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 1cb5f240-952a-11e9-8690-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:51 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/pythonqueue6405110f + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:12:51 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 4ce61f8f-6003-0033-1436-293d2d000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message1' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 1cdbdadc-952a-11e9-908b-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:51 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://remotestoragename.queue.core.windows.net/pythonqueue6405110f/messages + response: + body: + string: "\uFEFFc07a14fe-0248-49ac-84ef-9183eec8c1f9Sat,\ + \ 22 Jun 2019 20:12:51 GMTSat, 29 Jun 2019\ + \ 20:12:51 GMTAgAAAAMAAAAAAAAAyXih3jYp1QE=Sat,\ + \ 22 Jun 2019 20:12:51 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:12:51 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 4ce61f99-6003-0033-1b36-293d2d000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message2' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 1ce4762e-952a-11e9-9f63-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:51 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://remotestoragename.queue.core.windows.net/pythonqueue6405110f/messages + response: + body: + string: "\uFEFF8c47bcca-e16f-4b92-92b1-15e94379eb52Sat,\ + \ 22 Jun 2019 20:12:51 GMTSat, 29 Jun 2019\ + \ 20:12:51 GMTAgAAAAMAAAAAAAAAwd6p3jYp1QE=Sat,\ + \ 22 Jun 2019 20:12:51 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:12:51 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 4ce61f9a-6003-0033-1c36-293d2d000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message3' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 1cecec34-952a-11e9-a5e2-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:51 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://remotestoragename.queue.core.windows.net/pythonqueue6405110f/messages + response: + body: + string: "\uFEFFee5ab552-39a9-40a8-ad63-d94e3b486906Sat,\ + \ 22 Jun 2019 20:12:51 GMTSat, 29 Jun 2019\ + \ 20:12:51 GMTAgAAAAMAAAAAAAAAtESy3jYp1QE=Sat,\ + \ 22 Jun 2019 20:12:51 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:12:51 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 4ce61f9f-6003-0033-2136-293d2d000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message4' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 1cf568ee-952a-11e9-bb36-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:51 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://remotestoragename.queue.core.windows.net/pythonqueue6405110f/messages + response: + body: + string: "\uFEFFd1646c72-1aa6-423b-a070-0cfc5d649668Sat,\ + \ 22 Jun 2019 20:12:51 GMTSat, 29 Jun 2019\ + \ 20:12:51 GMTAgAAAAMAAAAAAAAAmYO63jYp1QE=Sat,\ + \ 22 Jun 2019 20:12:51 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:12:51 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 4ce61fab-6003-0033-2c36-293d2d000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 1cfd9dfa-952a-11e9-896e-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:51 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://remotestoragename.queue.core.windows.net/pythonqueue6405110f/messages?numofmessages=4&visibilitytimeout=20 + response: + body: + string: "\uFEFFc07a14fe-0248-49ac-84ef-9183eec8c1f9Sat,\ + \ 22 Jun 2019 20:12:51 GMTSat, 29 Jun 2019\ + \ 20:12:51 GMTAgAAAAMAAAAAAAAAkquu6jYp1QE=Sat,\ + \ 22 Jun 2019 20:13:11 GMT1message18c47bcca-e16f-4b92-92b1-15e94379eb52Sat,\ + \ 22 Jun 2019 20:12:51 GMTSat, 29 Jun 2019\ + \ 20:12:51 GMTAgAAAAMAAAAAAAAAkquu6jYp1QE=Sat,\ + \ 22 Jun 2019 20:13:11 GMT1message2ee5ab552-39a9-40a8-ad63-d94e3b486906Sat,\ + \ 22 Jun 2019 20:12:51 GMTSat, 29 Jun 2019\ + \ 20:12:51 GMTAgAAAAMAAAAAAAAAkquu6jYp1QE=Sat,\ + \ 22 Jun 2019 20:13:11 GMT1message3d1646c72-1aa6-423b-a070-0cfc5d649668Sat,\ + \ 22 Jun 2019 20:12:51 GMTSat, 29 Jun 2019\ + \ 20:12:51 GMTAgAAAAMAAAAAAAAAkquu6jYp1QE=Sat,\ + \ 22 Jun 2019 20:13:11 GMT1message4" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:12:51 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 4ce61fb4-6003-0033-3536-293d2d000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - de5c3670-952a-11e9-837b-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:16 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueue6405110f + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:15 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - e1a897ac-1003-0073-2a37-2914c3000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message1' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - de7c09d2-952a-11e9-a68c-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:16 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueue6405110f/messages + response: + body: + string: "\uFEFF4a3e7e24-0f9b-488d-a93e-8f6c52511bd4Sat,\ + \ 22 Jun 2019 20:18:16 GMTSat, 29 Jun 2019\ + \ 20:18:16 GMTAgAAAAMAAAAAAAAAG91CoDcp1QE=Sat,\ + \ 22 Jun 2019 20:18:16 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:16 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - e1a897b4-1003-0073-2e37-2914c3000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message2' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - de8504a6-952a-11e9-b42e-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:16 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueue6405110f/messages + response: + body: + string: "\uFEFF6382f360-4bb2-4635-bbb0-0a2bdb1bc21bSat,\ + \ 22 Jun 2019 20:18:16 GMTSat, 29 Jun 2019\ + \ 20:18:16 GMTAgAAAAMAAAAAAAAAhwZMoDcp1QE=Sat,\ + \ 22 Jun 2019 20:18:16 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:16 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - e1a897bc-1003-0073-3337-2914c3000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message3' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - de8e1458-952a-11e9-8ed7-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:16 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueue6405110f/messages + response: + body: + string: "\uFEFF4aa83d39-8722-46ab-a654-897fc8ff05b4Sat,\ + \ 22 Jun 2019 20:18:16 GMTSat, 29 Jun 2019\ + \ 20:18:16 GMTAgAAAAMAAAAAAAAAxOFUoDcp1QE=Sat,\ + \ 22 Jun 2019 20:18:16 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:16 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - e1a897c8-1003-0073-3a37-2914c3000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message4' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - de96f262-952a-11e9-b5f5-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:16 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueue6405110f/messages + response: + body: + string: "\uFEFF5425bc84-4683-47e1-bfe0-f38ddb517178Sat,\ + \ 22 Jun 2019 20:18:16 GMTSat, 29 Jun 2019\ + \ 20:18:16 GMTAgAAAAMAAAAAAAAA6ZVdoDcp1QE=Sat,\ + \ 22 Jun 2019 20:18:16 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:16 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - e1a897cf-1003-0073-3f37-2914c3000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - de9f9886-952a-11e9-bd95-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:16 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueue6405110f/messages?numofmessages=4&visibilitytimeout=20 + response: + body: + string: "\uFEFF4a3e7e24-0f9b-488d-a93e-8f6c52511bd4Sat,\ + \ 22 Jun 2019 20:18:16 GMTSat, 29 Jun 2019\ + \ 20:18:16 GMTAgAAAAMAAAAAAAAAVYFSrDcp1QE=Sat,\ + \ 22 Jun 2019 20:18:36 GMT1message16382f360-4bb2-4635-bbb0-0a2bdb1bc21bSat,\ + \ 22 Jun 2019 20:18:16 GMTSat, 29 Jun 2019\ + \ 20:18:16 GMTAgAAAAMAAAAAAAAAVYFSrDcp1QE=Sat,\ + \ 22 Jun 2019 20:18:36 GMT1message24aa83d39-8722-46ab-a654-897fc8ff05b4Sat,\ + \ 22 Jun 2019 20:18:16 GMTSat, 29 Jun 2019\ + \ 20:18:16 GMTAgAAAAMAAAAAAAAAVYFSrDcp1QE=Sat,\ + \ 22 Jun 2019 20:18:36 GMT1message35425bc84-4683-47e1-bfe0-f38ddb517178Sat,\ + \ 22 Jun 2019 20:18:16 GMTSat, 29 Jun 2019\ + \ 20:18:16 GMTAgAAAAMAAAAAAAAAVYFSrDcp1QE=Sat,\ + \ 22 Jun 2019 20:18:36 GMT1message4" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:16 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - e1a897d5-1003-0073-4437-2914c3000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 75ccf3fa-952b-11e9-aff5-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:30 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueue6405110f + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:29 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 7df02fa6-3003-00ec-1538-296c79000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message1' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 75ed5910-952b-11e9-be2b-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:30 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueue6405110f/messages + response: + body: + string: "\uFEFF75b37bc0-c7e6-48e8-9ce3-94d914932dabSat,\ + \ 22 Jun 2019 20:22:30 GMTSat, 29 Jun 2019\ + \ 20:22:30 GMTAgAAAAMAAAAAAAAAqu20Nzgp1QE=Sat,\ + \ 22 Jun 2019 20:22:30 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:29 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 7df02faf-3003-00ec-1b38-296c79000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message2' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 75f69162-952b-11e9-bff9-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:30 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueue6405110f/messages + response: + body: + string: "\uFEFFf4e91262-01c6-48ae-bc09-7af40ee60c6bSat,\ + \ 22 Jun 2019 20:22:30 GMTSat, 29 Jun 2019\ + \ 20:22:30 GMTAgAAAAMAAAAAAAAA58i9Nzgp1QE=Sat,\ + \ 22 Jun 2019 20:22:30 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:29 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 7df02fb3-3003-00ec-1f38-296c79000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message3' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 75ff663a-952b-11e9-adab-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:30 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueue6405110f/messages + response: + body: + string: "\uFEFF7001b035-8d54-406a-82b5-69753b3448e6Sat,\ + \ 22 Jun 2019 20:22:30 GMTSat, 29 Jun 2019\ + \ 20:22:30 GMTAgAAAAMAAAAAAAAADX3GNzgp1QE=Sat,\ + \ 22 Jun 2019 20:22:30 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:29 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 7df02fba-3003-00ec-2638-296c79000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message4' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 76087c36-952b-11e9-9eae-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:30 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueue6405110f/messages + response: + body: + string: "\uFEFF1ab76e0f-1d96-42d7-999c-3accd5230ee2Sat,\ + \ 22 Jun 2019 20:22:30 GMTSat, 29 Jun 2019\ + \ 20:22:30 GMTAgAAAAMAAAAAAAAAYX/PNzgp1QE=Sat,\ + \ 22 Jun 2019 20:22:30 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:29 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 7df02fbd-3003-00ec-2938-296c79000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 76115afe-952b-11e9-8512-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:30 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueue6405110f/messages?numofmessages=4&visibilitytimeout=20 + response: + body: + string: "\uFEFF75b37bc0-c7e6-48e8-9ce3-94d914932dabSat,\ + \ 22 Jun 2019 20:22:30 GMTSat, 29 Jun 2019\ + \ 20:22:30 GMTAgAAAAMAAAAAAAAAtUPEQzgp1QE=Sat,\ + \ 22 Jun 2019 20:22:50 GMT1message1f4e91262-01c6-48ae-bc09-7af40ee60c6bSat,\ + \ 22 Jun 2019 20:22:30 GMTSat, 29 Jun 2019\ + \ 20:22:30 GMTAgAAAAMAAAAAAAAAtUPEQzgp1QE=Sat,\ + \ 22 Jun 2019 20:22:50 GMT1message27001b035-8d54-406a-82b5-69753b3448e6Sat,\ + \ 22 Jun 2019 20:22:30 GMTSat, 29 Jun 2019\ + \ 20:22:30 GMTAgAAAAMAAAAAAAAAtUPEQzgp1QE=Sat,\ + \ 22 Jun 2019 20:22:50 GMT1message31ab76e0f-1d96-42d7-999c-3accd5230ee2Sat,\ + \ 22 Jun 2019 20:22:30 GMTSat, 29 Jun 2019\ + \ 20:22:30 GMTAgAAAAMAAAAAAAAAtUPEQzgp1QE=Sat,\ + \ 22 Jun 2019 20:22:50 GMT1message4" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:29 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 7df02fc2-3003-00ec-2e38-296c79000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - b0efd498-952d-11e9-a770-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:28 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueue6405110f + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:38:28 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - abd1b919-4003-0006-193a-299378000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message1' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - b11061ac-952d-11e9-b8b8-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:28 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueue6405110f/messages + response: + body: + string: "\uFEFFe2a1644d-981b-4c48-8b4c-fc8b539037f3Sat,\ + \ 22 Jun 2019 20:38:28 GMTSat, 29 Jun 2019\ + \ 20:38:28 GMTAgAAAAMAAAAAAAAA2cfYcjop1QE=Sat,\ + \ 22 Jun 2019 20:38:28 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:28 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - abd1b924-4003-0006-213a-299378000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message2' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - b1198976-952d-11e9-a7a0-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:28 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueue6405110f/messages + response: + body: + string: "\uFEFF26981b56-716f-4f72-af1e-301773a26c92Sat,\ + \ 22 Jun 2019 20:38:28 GMTSat, 29 Jun 2019\ + \ 20:38:28 GMTAgAAAAMAAAAAAAAAAnzhcjop1QE=Sat,\ + \ 22 Jun 2019 20:38:28 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:28 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - abd1b929-4003-0006-263a-299378000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message3' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - b1222c70-952d-11e9-ab5a-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:28 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueue6405110f/messages + response: + body: + string: "\uFEFFdebf68ee-14a5-4669-a34b-3e8092fe04a1Sat,\ + \ 22 Jun 2019 20:38:29 GMTSat, 29 Jun 2019\ + \ 20:38:29 GMTAgAAAAMAAAAAAAAAQ1fqcjop1QE=Sat,\ + \ 22 Jun 2019 20:38:29 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:28 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - abd1b932-4003-0006-2d3a-299378000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message4' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - b12b1240-952d-11e9-afa4-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:28 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueue6405110f/messages + response: + body: + string: "\uFEFF103e9ae6-f20c-4d69-aede-b0d740fba873Sat,\ + \ 22 Jun 2019 20:38:29 GMTSat, 29 Jun 2019\ + \ 20:38:29 GMTAgAAAAMAAAAAAAAA+PXzcjop1QE=Sat,\ + \ 22 Jun 2019 20:38:29 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:28 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - abd1b93b-4003-0006-343a-299378000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - b134a7ec-952d-11e9-a776-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:29 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueue6405110f/messages?numofmessages=4&visibilitytimeout=20 + response: + body: + string: "\uFEFFe2a1644d-981b-4c48-8b4c-fc8b539037f3Sat,\ + \ 22 Jun 2019 20:38:28 GMTSat, 29 Jun 2019\ + \ 20:38:28 GMTAgAAAAMAAAAAAAAAIWzofjop1QE=Sat,\ + \ 22 Jun 2019 20:38:49 GMT1message126981b56-716f-4f72-af1e-301773a26c92Sat,\ + \ 22 Jun 2019 20:38:28 GMTSat, 29 Jun 2019\ + \ 20:38:28 GMTAgAAAAMAAAAAAAAAIWzofjop1QE=Sat,\ + \ 22 Jun 2019 20:38:49 GMT1message2debf68ee-14a5-4669-a34b-3e8092fe04a1Sat,\ + \ 22 Jun 2019 20:38:29 GMTSat, 29 Jun 2019\ + \ 20:38:29 GMTAgAAAAMAAAAAAAAAIWzofjop1QE=Sat,\ + \ 22 Jun 2019 20:38:49 GMT1message3103e9ae6-f20c-4d69-aede-b0d740fba873Sat,\ + \ 22 Jun 2019 20:38:29 GMTSat, 29 Jun 2019\ + \ 20:38:29 GMTAgAAAAMAAAAAAAAAIWzofjop1QE=Sat,\ + \ 22 Jun 2019 20:38:49 GMT1message4" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:28 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - abd1b940-4003-0006-383a-299378000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_get_queue_acl.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_get_queue_acl.yaml new file mode 100644 index 000000000000..75c9d6a8010b --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_get_queue_acl.yaml @@ -0,0 +1,326 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 1d36c00a-952a-11e9-9728-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:52 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/pythonqueueb3cd0be5 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:12:52 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 645f09bd-8003-0076-7836-29e0bc000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 1d56d214-952a-11e9-989a-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:52 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://remotestoragename.queue.core.windows.net/pythonqueueb3cd0be5?comp=acl + response: + body: + string: "\uFEFF" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:12:52 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 645f09c6-8003-0076-7e36-29e0bc000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - dee2c81e-952a-11e9-9791-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:17 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueueb3cd0be5 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:16 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 7c4db884-3003-008a-5a37-29de23000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - df03bdbe-952a-11e9-85b2-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:17 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueueb3cd0be5?comp=acl + response: + body: + string: "\uFEFF" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:16 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 7c4db88c-3003-008a-5f37-29de23000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 7663be34-952b-11e9-b955-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:31 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueueb3cd0be5 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:30 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - b965cc62-f003-00d8-2538-29c3d1000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 7683f828-952b-11e9-996f-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:31 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueueb3cd0be5?comp=acl + response: + body: + string: "\uFEFF" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:30 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - b965cc77-f003-00d8-3638-29c3d1000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - b2d76ea4-952d-11e9-b3d6-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:31 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueueb3cd0be5 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:38:31 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 5de8a820-d003-0065-2f3a-29d55d000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - b2f7a8d8-952d-11e9-aa09-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:32 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueueb3cd0be5?comp=acl + response: + body: + string: "\uFEFF" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:31 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 5de8a833-d003-0065-3f3a-29d55d000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_get_queue_acl_iter.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_get_queue_acl_iter.yaml new file mode 100644 index 000000000000..b90f920c283d --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_get_queue_acl_iter.yaml @@ -0,0 +1,326 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 1d80263a-952a-11e9-bfb5-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:52 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/pythonqueuef55d0df8 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:12:52 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - d0c01d53-f003-0014-1e36-29a764000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 1da0b14a-952a-11e9-afec-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:52 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://remotestoragename.queue.core.windows.net/pythonqueuef55d0df8?comp=acl + response: + body: + string: "\uFEFF" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:12:52 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - d0c01d66-f003-0014-2c36-29a764000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - df38decc-952a-11e9-8f28-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:17 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueuef55d0df8 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:18 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 87218c19-8003-005f-2937-2996fe000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - df5b52fe-952a-11e9-b702-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:17 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueuef55d0df8?comp=acl + response: + body: + string: "\uFEFF" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:18 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 87218c20-8003-005f-2c37-2996fe000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 76b9fc90-952b-11e9-b349-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:31 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueuef55d0df8 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:31 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 80e6e194-c003-007a-5f38-290e4d000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 76d9e62c-952b-11e9-8b95-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:32 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueuef55d0df8?comp=acl + response: + body: + string: "\uFEFF" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:31 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 80e6e19c-c003-007a-6438-290e4d000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - b337c6be-952d-11e9-9c8e-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:32 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueuef55d0df8 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:38:31 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - d5fe48d9-e003-00ee-5c3a-296e83000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - b35979f8-952d-11e9-978f-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:32 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueuef55d0df8?comp=acl + response: + body: + string: "\uFEFF" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:31 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - d5fe48e7-e003-00ee-663a-296e83000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_get_queue_acl_with_non_existing_queue.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_get_queue_acl_with_non_existing_queue.yaml new file mode 100644 index 000000000000..4c94648ff1fe --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_get_queue_acl_with_non_existing_queue.yaml @@ -0,0 +1,176 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 1dc9d2b4-952a-11e9-96e7-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:53 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://remotestoragename.queue.core.windows.net/pythonqueue4ef515f8?comp=acl + response: + body: + string: "\uFEFFQueueNotFoundThe\ + \ specified queue does not exist.\nRequestId:c4a12d48-2003-0034-7a36-29cba8000000\n\ + Time:2019-06-22T20:12:53.4599960Z" + headers: + Content-Length: + - '217' + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:12:53 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Vary: + - Origin + x-ms-error-code: + - QueueNotFound + x-ms-request-id: + - c4a12d48-2003-0034-7a36-29cba8000000 + x-ms-version: + - '2018-03-28' + status: + code: 404 + message: The specified queue does not exist. +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - df89fd98-952a-11e9-9ffa-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:18 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueue4ef515f8?comp=acl + response: + body: + string: "\uFEFFQueueNotFoundThe\ + \ specified queue does not exist.\nRequestId:27cafb48-c003-0017-5037-29a463000000\n\ + Time:2019-06-22T20:18:18.5209871Z" + headers: + Content-Length: + - '217' + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:18 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-error-code: + - QueueNotFound + x-ms-request-id: + - 27cafb48-c003-0017-5037-29a463000000 + x-ms-version: + - '2018-03-28' + status: + code: 404 + message: The specified queue does not exist. +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 770d5818-952b-11e9-b0ef-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:32 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueue4ef515f8?comp=acl + response: + body: + string: "\uFEFFQueueNotFoundThe\ + \ specified queue does not exist.\nRequestId:bcf50137-6003-0055-7838-298f77000000\n\ + Time:2019-06-22T20:22:32.7276664Z" + headers: + Content-Length: + - '217' + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:32 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Vary: + - Origin + x-ms-error-code: + - QueueNotFound + x-ms-request-id: + - bcf50137-6003-0055-7838-298f77000000 + x-ms-version: + - '2018-03-28' + status: + code: 404 + message: The specified queue does not exist. +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - b3920868-952d-11e9-ac57-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:33 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueue4ef515f8?comp=acl + response: + body: + string: "\uFEFFQueueNotFoundThe\ + \ specified queue does not exist.\nRequestId:0169bc96-b003-003a-673a-2927a3000000\n\ + Time:2019-06-22T20:38:33.2564089Z" + headers: + Content-Length: + - '217' + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:32 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Vary: + - Origin + x-ms-error-code: + - QueueNotFound + x-ms-request-id: + - 0169bc96-b003-003a-673a-2927a3000000 + x-ms-version: + - '2018-03-28' + status: + code: 404 + message: The specified queue does not exist. +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_get_queue_metadata_message_count.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_get_queue_metadata_message_count.yaml new file mode 100644 index 000000000000..e13b434ef71d --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_get_queue_metadata_message_count.yaml @@ -0,0 +1,510 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 1e09f448-952a-11e9-b638-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:53 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/pythonqueuee42613c2 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:12:53 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 4562594d-6003-0077-3836-29e141000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message1' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 1e2a7e7a-952a-11e9-9396-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:53 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://remotestoragename.queue.core.windows.net/pythonqueuee42613c2/messages + response: + body: + string: "\uFEFFb058a9d0-ca4e-47fc-9b64-4448b19cbd91Sat,\ + \ 22 Jun 2019 20:12:53 GMTSat, 29 Jun 2019\ + \ 20:12:53 GMTAgAAAAMAAAAAAAAAJi/w3zYp1QE=Sat,\ + \ 22 Jun 2019 20:12:53 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:12:53 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 45625966-6003-0077-4d36-29e141000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 1e334318-952a-11e9-a975-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:53 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://remotestoragename.queue.core.windows.net/pythonqueuee42613c2?comp=metadata + response: + body: + string: '' + headers: + Cache-Control: + - no-cache + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:12:53 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Vary: + - Origin + x-ms-approximate-messages-count: + - '1' + x-ms-request-id: + - 4562597b-6003-0077-6136-29e141000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - dfd250d4-952a-11e9-96af-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:18 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueuee42613c2 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:18 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 4f91b8c9-0003-00ab-7437-29b312000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message1' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - dff358d8-952a-11e9-a97e-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:18 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueuee42613c2/messages + response: + body: + string: "\uFEFFcbb2c1d4-6a3e-48da-b92b-942afff11ea4Sat,\ + \ 22 Jun 2019 20:18:19 GMTSat, 29 Jun 2019\ + \ 20:18:19 GMTAgAAAAMAAAAAAAAAo826oTcp1QE=Sat,\ + \ 22 Jun 2019 20:18:19 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:18 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 4f91b8e8-0003-00ab-1037-29b312000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - dffd3d3a-952a-11e9-b1ed-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:19 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueuee42613c2?comp=metadata + response: + body: + string: '' + headers: + Cache-Control: + - no-cache + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:18 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Vary: + - Origin + x-ms-approximate-messages-count: + - '1' + x-ms-request-id: + - 4f91b8ff-0003-00ab-2637-29b312000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 77663f98-952b-11e9-9091-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:33 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueuee42613c2 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:32 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - c4a2cd37-2003-0034-2b38-29cba8000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message1' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 77873e62-952b-11e9-8cbb-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:33 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueuee42613c2/messages + response: + body: + string: "\uFEFF5a90b641-a749-475a-aea7-9bbc56c2c9bcSat,\ + \ 22 Jun 2019 20:22:33 GMTSat, 29 Jun 2019\ + \ 20:22:33 GMTAgAAAAMAAAAAAAAAI3ZOOTgp1QE=Sat,\ + \ 22 Jun 2019 20:22:33 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:32 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - c4a2cd41-2003-0034-3338-29cba8000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 7790a0cc-952b-11e9-b81d-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:33 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueuee42613c2?comp=metadata + response: + body: + string: '' + headers: + Cache-Control: + - no-cache + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:32 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Vary: + - Origin + x-ms-approximate-messages-count: + - '1' + x-ms-request-id: + - c4a2cd4d-2003-0034-3e38-29cba8000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - b616d91a-952d-11e9-b54d-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:37 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueuee42613c2 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:38:36 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 7df15207-3003-00ec-0e3a-296c79000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message1' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - b637e9c0-952d-11e9-8430-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:37 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueuee42613c2/messages + response: + body: + string: "\uFEFFb3af4067-2145-4930-b996-1ae4d6a17aafSat,\ + \ 22 Jun 2019 20:38:37 GMTSat, 29 Jun 2019\ + \ 20:38:37 GMTAgAAAAMAAAAAAAAAFhUAeDop1QE=Sat,\ + \ 22 Jun 2019 20:38:37 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:36 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 7df1520e-3003-00ec-113a-296c79000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - b640d170-952d-11e9-bbc3-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:37 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueuee42613c2?comp=metadata + response: + body: + string: '' + headers: + Cache-Control: + - no-cache + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:38:36 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Vary: + - Origin + x-ms-approximate-messages-count: + - '1' + x-ms-request-id: + - 7df15214-3003-00ec-153a-296c79000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_list_queues.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_list_queues.yaml new file mode 100644 index 000000000000..af38e7373329 --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_list_queues.yaml @@ -0,0 +1,178 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 1e5bf0cc-952a-11e9-9e06-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:54 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://remotestoragename.queue.core.windows.net/?comp=list + response: + body: + string: "\uFEFFencryptionqueue00f571db76014b72a6c75a1bad87b762encryptionqueue01c813482f48463e8561d125608e0e3fencryptionqueue031a126cc154435089868a104a938242encryptionqueue036fcc0f15154cfa9750ce6849c2662dencryptionqueue038581f4daff4e93819f14c78fdc0679encryptionqueue03adb51e81d74bbb89fb5ae9f51cc717encryptionqueue04731f0f012c4207b95a984687221dbcencryptionqueue04b9331765234b26959037a4208823d9encryptionqueue0621951ba8d947f7aee46cae789bd3ffencryptionqueue0691a39f29a44be49175b67df325c643encryptionqueue0a3d69847143433c8aed62df2acae50cencryptionqueue0ac3aa83274c42f6b5a72c2489b70102encryptionqueue0ac3e277ee864e3f8d4a813106a6ea80encryptionqueue0aebd0719e114b3cbe976ec7d710e9b2encryptionqueue0baad9ef7b314e258053347c71955908encryptionqueue0bdd9faba39b4b88afdf0b0013c6eb41encryptionqueue0c1b2f05d0584923b7a7c4390fead6ddencryptionqueue1127c090fd3f4a39b38280423a27f7b1encryptionqueue12831da3db2a4d7bbcf7667fe655db4aencryptionqueue13271c2d36cd454e9b493760fe3c26d7encryptionqueue13c9e021d0d04335984fca6b717279c3encryptionqueue145086b86c93495f9e5e0dff62cfafdfencryptionqueue16fb1372b0b449f6b3c01beb8f68aa2eencryptionqueue1b9615466a5d48bcb5299e0e0e51c07fencryptionqueue1d37c54f6f084a8d897d6473ebc219eeencryptionqueue1f2c142026334947b904f8a01a56a2e8encryptionqueue1f6314e191b94eac8969bd91d086ec57encryptionqueue213a5e3dc51b4265b651761de87d19ebencryptionqueue234359980b3e44ca8e306c20a1c2378bencryptionqueue24af7cd0fec44245a29cac80ef58c42aencryptionqueue250aee46b615431abd40cbff4d01ddfbencryptionqueue2532a57cb39b4a2a81a4aa2cefd544aeencryptionqueue25b893825adf4019917d537be7b9a937encryptionqueue2653bf1b818246d9aad6f868bfdf3cdfencryptionqueue28277b1556aa4fffa6168ddc01f9f5a0encryptionqueue29d9077841994ffc988da6b1473ed101encryptionqueue2ade689325144e40b4189ea3e876bdd5encryptionqueue2afe7885787242ecb14ccfce84ccac09encryptionqueue2f6f0eff5deb43439743ed8620966793encryptionqueue31496fc1df4e426baddd506c2519c9c9encryptionqueue33561ca92c434700b1f2cc085199fc2aencryptionqueue33678fe6b6cc40e4868d0fa926a9e900encryptionqueue389127d37be54e76aa5b61b736e67663encryptionqueue39941e25f3104ba1bbf6075d9eae0617encryptionqueue3a398a31d22040598d605f767b94ac87encryptionqueue3aa2cbfe7ced448aa7589c9e986ef2ddencryptionqueue3b2b6361c2b6418fa45d8e87dc122c01encryptionqueue3be846efd85c4b998c3e54371e90c579encryptionqueue3c7dcb855e7b470783133945bf480165encryptionqueue3ce384bb880d4a7184ceb3a2bfc26695encryptionqueue3db07d1f9ea548339f5294692bb1725fencryptionqueue3df5958fe58d4f38841837387264e928encryptionqueue3ff3e2e865ec4f2296616d242bf3bcbaencryptionqueue417279ce4bc84de6b05c8b8e8e1da146encryptionqueue41c5a354464a4369a95b8e5ea85cd0a7encryptionqueue438e2f480e7340c6bbd99025e6882eaeencryptionqueue4523844416f44a91aedbecd841b17825encryptionqueue457c918033154970bff4620aca946ac7encryptionqueue4736410f2e94487594fd4ef639202544encryptionqueue47c2c792ca724456a3f5d4ae88179e28encryptionqueue484ffac93b584f54b23a4badb476b139encryptionqueue4901870ac1b84836ac9bd1308e648824encryptionqueue49dcd7c29e7041989f83448427af25adencryptionqueue4bbefd5d026a401ab776bbb61089d058encryptionqueue4daf8f96d3b142e386b17b14e003b66bencryptionqueue4e3ef909abac44449eeba45717f210a6encryptionqueue4e63a2316a51442f8442925348637d1aencryptionqueue4e678c94f1b140519cc53c56af064ffcencryptionqueue4f197f93c14b436891b927c8fe1d9141encryptionqueue4f9f9bd03c784e09a0d5b7762817c638encryptionqueue4ff40d03d6314550bea982326a29401dencryptionqueue505b33b035b845f59504ccdec9ab1c11encryptionqueue5151c95ea61f4c5c99c35b541a5f0939encryptionqueue566cd19e11ae46708be465785846092fencryptionqueue59fa82aac1384cb5b9a512f376d27ff9encryptionqueue5ad78db985384556912a24f1aa62f038encryptionqueue5ae5b1f367ca448b8130030d0461fbb1encryptionqueue5b02744e4ff9493d9cd2993895f75d89encryptionqueue5e4db545d97749518cf85d888c45a010encryptionqueue5e7383a701ce4f4aa43ff9a19341a426encryptionqueue5f4c2f6b4e3e4e4d983130c49202c369encryptionqueue6040f22ebc92484486d1013be00bf426encryptionqueue606997a069d44290863aab23d1499836encryptionqueue6350668d06bc4555afe11c8c4f3cca90encryptionqueue639bd2e086524c73becb63bb0777a4dfencryptionqueue6537723b3cf945549615fbca826c83f2encryptionqueue6543218e6c804ba4a762ebcf5a0f0c26encryptionqueue65685218f4f84a468d06003a75b7cc4fencryptionqueue67344e72836840e19b56c39e79de4063encryptionqueue679cfe6fcfd34949a82e71dc97e99e12encryptionqueue67fa5c4e1dc64abeb67c769c53c85c34encryptionqueue685fb5dcee654f54bbd73aaf639f29f2encryptionqueue69d3e31fbc4b406687818eb55275e102encryptionqueue6aa04e44b574454fa920f2eddc947df1encryptionqueue6ae894712a9b43699894efc57afe4301encryptionqueue6b44cb5bf3a04d65bdc7395e19a06e93encryptionqueue6c4007b0fc2f489e9788f205f4aee9e5encryptionqueue6e7490c8837b449fae623d2dc5889b62encryptionqueue6ee9c562f1e24721aca7b97bfb5e41a4encryptionqueue6f6e422e79814d8bba6983c3f0ed5da7encryptionqueue71574f0318b04e7eaea8f845e9cefc61encryptionqueue722864b1fa254ed782659f274e0221d6encryptionqueue726b001c972e44e496751beadd9d2ee7encryptionqueue73423f52d51049eb87e6203f5d3b0684encryptionqueue78537b4db1c348e9bef011129520e33fencryptionqueue7900797cd45641a3b91c12e6ab3a9c73encryptionqueue7a825e8d572d4d2091d1786ff4a0da80encryptionqueue7d73f7ae777d4a938453cfb10bf085fcencryptionqueue7e5f64634bf9477b8cfba578ae7a53d5encryptionqueue7e7c1061742e4ef2adb5168a0b3c8995encryptionqueue80ccc65910364da89e7411164d9fd662encryptionqueue8162db3895c64edc8b1caef46ebedce2encryptionqueue8215a38133f84b5bb78c0d62efdfe85cencryptionqueue82cf17e47a214ed9a09757c96dac282eencryptionqueue830fe85241c34c228d6afcff88454b9cencryptionqueue83a95d261eb0442d9c6dfb68f35e891bencryptionqueue840011245c6f4f0d95780eb4f072201dencryptionqueue843b50932c08404ea01bc23f58125b4eencryptionqueue84de687386a749d088d50f2cbe49faf4encryptionqueue85c8269646824b79981449f806e1d034encryptionqueue88b0c4e6001542579e1e4e54f8c5149fencryptionqueue8a6340e7ce514845896351308e26f1a5encryptionqueue8aea2e0a06bc4a78bb41334e7ceeb31dencryptionqueue8bf4d6844c5e41daaa536e83d0ce20b5encryptionqueue8bf9bfa83b68423582dd8890b5a9b59cencryptionqueue8e9a77c0c08e461a9f116b149af78cf4encryptionqueue913011da3d0748c0b9755bfd03c18d5eencryptionqueue926d112d0c0b48fe906572cb43bbc55fencryptionqueue92d2a1d4735d4e20891eb8a623e92b77encryptionqueue92f0141577244a38874e11688e9a8bc1encryptionqueue94c6cf23d6434704997669945da24e4aencryptionqueue9678ac222c444f6e922c74902f49ba00encryptionqueue9719642150034e1e98cbb44aaeb41a39encryptionqueue973613a055554ee9b46ef74a53690c44encryptionqueue9801d5a190c5415b821a5c35f2f89935encryptionqueue983965dec1ca47f2b92eadd9b1fc6cacencryptionqueue9a32c263dee44048be35df59b87a6d31encryptionqueue9db63deea8bd4370950d21bd84ee4d05encryptionqueue9dd54922e9e74a80b7757aaab4190a17encryptionqueue9e7a60d5828949c3bf73fc1e9abcc58cencryptionqueuea0d3b1db06804b5f9a619bd912e293d0encryptionqueuea2faa42aa8404ebda6618f46855b45e9encryptionqueuea43ffbc1c02d4d1e9d494c42ad891754encryptionqueuea563db7602fa41cfaa8f2d50d60ee396encryptionqueuea73c18833ab34cb4b7fed6991c915b35encryptionqueueaa771e618ab94629a64f0a5af63148a7encryptionqueuead0bd6447b924dec815c956b43c917b7encryptionqueueae116bd7da934598b02886f15be095feencryptionqueueae2d93a4fdb349f4a8c6542dc1b9bebeencryptionqueueaf6ab6bd4ae1465984165c86ea0a2030encryptionqueueb00011fa0643419a83985621a68c3fe7encryptionqueueb0749b04338f4b37bed47b6e7f128c37encryptionqueueb1ee9a1d3b024b0aac527cad50b89ae4encryptionqueueb29db696f2a24b779cf1529909f1d351encryptionqueueb2b37ce25bc64867a2df774508fbca50encryptionqueueb39140fac6d6430ba3030620662e7a90encryptionqueueb9bdd20389024b8bb17d0ec977c92394encryptionqueuebb29fd6e000d4aad86866c1c10bbbb57encryptionqueuebfda000d20e94a69b620156f87c0d179encryptionqueuebff8cd42e66d4515b11718b0f46fbc49encryptionqueuec25b0bb9b85a412d9bb026b53a38b781encryptionqueuec51758c3900d4b45828711af1632efd0encryptionqueuec8308010740f4a74b1b4aa1ebe53bfefencryptionqueueca35d53e302146c3835d8e0ca208e361encryptionqueuecb565eb607794c58a9bf0c44d1f3100eencryptionqueued271533c83d74174b44a675ec991c50bencryptionqueued3d8322c30db4f829de847622bec925dencryptionqueued51d7fb9d2a74482af09164eea6df304encryptionqueued5f8ca965e0e45adb9732b5299599ae5encryptionqueued82ab32a7b6e4986919374ed59976b41encryptionqueued99a917842634d808d5de37b041d6c99encryptionqueuedb062977ecd24c52adc6fd346d564257encryptionqueuedc8ce0bda3a14ff6b58826765a67b4e7encryptionqueuedd7e0c34e33d4e3b97eb6d417f072f19encryptionqueuee164080a6d9c4b49b80c56ed2f78e42fencryptionqueuee365639c552e45ffb47767842d9f9497encryptionqueuee5abfa24c8274b2787110e2577676641encryptionqueuee7d40ae0e26f4a0ba3886ad69693d10fencryptionqueueec0516286a0240f58b44f61fd618f698encryptionqueueef87f6b005704812be731e52e275b0f7encryptionqueueefe415d8b56943e8a403974b9f9ca77bencryptionqueuef065d7b313b247359f553a24b891412dencryptionqueuef5339ec598524170932fa4d479246c84encryptionqueuef7b36961f02b4e36a02eaf6762fe069cencryptionqueuef8e08828d1814069b106fdc553ac30d8encryptionqueuef915efc37cf843b98879d7848af8242eencryptionqueuef9f2b3145eb84ed4b824d05801f1a683encryptionqueuefa0af24f1b8e40ee9eb4cea776333137encryptionqueuefa40fb846d5b4f8ab9efa1af493c10c8encryptionqueuefa9ca7ef34ad4584a9ca8d7e08f8dcd0encryptionqueuefcf3dc00dc1c488aa420d691e4baa42aencryptionqueueff822101630840e0a8d6f3dc7b525a89listqueue0listqueue1listqueue2listqueue3mytestqueue0a2ef6bba4554b628d09bb86015bc842mytestqueue1013601153984f879b98caf8b0374f76mytestqueue10330cbb35ac40beb2b39c7d29f68c3cmytestqueue12b187b97782449e9006247f7fb3613fmytestqueue134d45a65a0044389c70ae9069fdad89mytestqueue15603b4dc47540d0bf8350b521ed31c8mytestqueue1886807877314f77acf680cc02cb76c5mytestqueue193bff9d55f64ed088b34261c9ca9cdfmytestqueue1cd5d2a6a60c47eab8a8feac51f50d5fmytestqueue1d031d8258e445c9b1d8f55b1e53ad18mytestqueue1d77ed688eb243ab952759b462969176mytestqueue1e092b5c395843d49a80fe4a94fe2b63mytestqueue1f39e46303c94fb68264c2977952bec2mytestqueue2189e290d4ed4654a799b5fd3ffcbd18mytestqueue2c72a270beb44ee1bddf46c97d76390bmytestqueue2d1ba08f20c5427786de42a9e6ff3661mytestqueue2e0dcbe5f23e4546b08a157eccba71e0mytestqueue30cea1f0940742b1900ac613dc0ce03emytestqueue36c2151767a94e81b21a06a91810d9c3mytestqueue37faa5540da34814a5c3cbea0a3b4edcmytestqueue39c28496fa6d454eac4abe60e9c012d5mytestqueue4070694a94c5449f8f5ba6ae9e48e62dmytestqueue428c7ffccfe441cb99b33a4cf6be01c3mytestqueue448a292b34f84208869b522d622e8dc6mytestqueue47a96b4e6f0d4b01917950b01d00368dmytestqueue4c34eb08c80048f59341bcb2e91e1831mytestqueue5858d272959d431184dd0bb98dfe0b5cmytestqueue58f68f5e123a44d5bb69bd277533475dmytestqueue68a5eee2272345f1903f28d99b79e111mytestqueue6a13757d27a64700a35afa29daaa3127mytestqueue6d0295e46d214419877333558cee3955mytestqueue72dfe06a4d43462694d647b7cb59fa4emytestqueue75c0a956ab564f049ed29369c7c5f119mytestqueue7668a40070f54cb49f0f8372763dc4a5mytestqueue79fa950888cc4b83856540e4172fc1f8mytestqueue7cc4973995dd4d6f833a3fe222252f26mytestqueue7d06985305c2451b8dd8a84a50b7bd84mytestqueue821a5855f7644a78a895ff29fa76cf42mytestqueue83bf3acfd5634a4495d8cd58a9fc4ad9mytestqueue85b098bf961944e3b3d0629d756b1da3mytestqueue8be406d367b5490a9359641e99f8a389mytestqueue8c14c266ec6f4f19820330513df8a7e5mytestqueue8d2c2996eb0f4d95930f8798e7a3e1dbmytestqueue91b35c21478242b98eeb79c5baeaff4dmytestqueue96364f4607d34ac9a236b4c966289ab4mytestqueue9bf03576a06a4deb818c0d1c769f1652mytestqueue9c41d179c24849a6a4a7d85baa1390f7mytestqueueab021ddf4ffa4c9f9571fd4dc39f8357mytestqueueb201e786962d48649b8211845f623a6emytestqueueb2627aa0225e4099bcca4ad323b72279mytestqueuebd590552c9724821bee7189344003e8bmytestqueuec2a61a972f0146cb902286257d355d89mytestqueuec3a370a2b00e4a38b629f4fe76fa5c45mytestqueuec78f7ccbf7584b63a7dabd5c0aa14140mytestqueuece46ab782aec49929df0ee75e65f4a9bmytestqueued635903262a4446089efc43a149d070dmytestqueuedbb7a293ffc9441e9d8bb26689041622mytestqueuedd0012aba5a24b9284b1277cefc3fdcemytestqueuee59211fca871487e97f3e2ed9b0283e7mytestqueueec4681c4befa4496b1858ffca231fe2bmytestqueueedbcbcb2f61445739996178b5add242emytestqueueedd54a85f0e740d0aca55d75641eb13bmytestqueueee2289f4dc1a44fab3ea67f3e6298604mytestqueuef5b0503136b84fe6b6b35938c7a2aa58mytestqueuef5e71027838a48389e832ec984c83feemytestqueuefd5d053567114146acdcda9538906418mytestqueuefe00bb01b6b1456c96d5139f125a0fefmytestqueuefee8fd4d502e4b65846dbab96921123bpythonq" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:12:54 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 99111f53-e003-0044-6036-29b86c000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e035907a-952a-11e9-a871-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:19 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/?comp=list + response: + body: + string: "\uFEFFencryptionqueue00f571db76014b72a6c75a1bad87b762encryptionqueue01c813482f48463e8561d125608e0e3fencryptionqueue031a126cc154435089868a104a938242encryptionqueue036fcc0f15154cfa9750ce6849c2662dencryptionqueue038581f4daff4e93819f14c78fdc0679encryptionqueue03adb51e81d74bbb89fb5ae9f51cc717encryptionqueue04731f0f012c4207b95a984687221dbcencryptionqueue04b9331765234b26959037a4208823d9encryptionqueue0621951ba8d947f7aee46cae789bd3ffencryptionqueue0691a39f29a44be49175b67df325c643encryptionqueue0a3d69847143433c8aed62df2acae50cencryptionqueue0ac3aa83274c42f6b5a72c2489b70102encryptionqueue0ac3e277ee864e3f8d4a813106a6ea80encryptionqueue0aebd0719e114b3cbe976ec7d710e9b2encryptionqueue0baad9ef7b314e258053347c71955908encryptionqueue0bdd9faba39b4b88afdf0b0013c6eb41encryptionqueue0c1b2f05d0584923b7a7c4390fead6ddencryptionqueue1127c090fd3f4a39b38280423a27f7b1encryptionqueue12831da3db2a4d7bbcf7667fe655db4aencryptionqueue13271c2d36cd454e9b493760fe3c26d7encryptionqueue13c9e021d0d04335984fca6b717279c3encryptionqueue145086b86c93495f9e5e0dff62cfafdfencryptionqueue16fb1372b0b449f6b3c01beb8f68aa2eencryptionqueue1b9615466a5d48bcb5299e0e0e51c07fencryptionqueue1d37c54f6f084a8d897d6473ebc219eeencryptionqueue1f2c142026334947b904f8a01a56a2e8encryptionqueue1f6314e191b94eac8969bd91d086ec57encryptionqueue213a5e3dc51b4265b651761de87d19ebencryptionqueue234359980b3e44ca8e306c20a1c2378bencryptionqueue24af7cd0fec44245a29cac80ef58c42aencryptionqueue250aee46b615431abd40cbff4d01ddfbencryptionqueue2532a57cb39b4a2a81a4aa2cefd544aeencryptionqueue25b893825adf4019917d537be7b9a937encryptionqueue2653bf1b818246d9aad6f868bfdf3cdfencryptionqueue28277b1556aa4fffa6168ddc01f9f5a0encryptionqueue29091535encryptionqueue29d9077841994ffc988da6b1473ed101encryptionqueue29f01530encryptionqueue2ade689325144e40b4189ea3e876bdd5encryptionqueue2afe7885787242ecb14ccfce84ccac09encryptionqueue2f6f0eff5deb43439743ed8620966793encryptionqueue31496fc1df4e426baddd506c2519c9c9encryptionqueue33561ca92c434700b1f2cc085199fc2aencryptionqueue33678fe6b6cc40e4868d0fa926a9e900encryptionqueue389127d37be54e76aa5b61b736e67663encryptionqueue39941e25f3104ba1bbf6075d9eae0617encryptionqueue3a398a31d22040598d605f767b94ac87encryptionqueue3aa2cbfe7ced448aa7589c9e986ef2ddencryptionqueue3b2b6361c2b6418fa45d8e87dc122c01encryptionqueue3be846efd85c4b998c3e54371e90c579encryptionqueue3c7dcb855e7b470783133945bf480165encryptionqueue3ce384bb880d4a7184ceb3a2bfc26695encryptionqueue3db07d1f9ea548339f5294692bb1725fencryptionqueue3df5958fe58d4f38841837387264e928encryptionqueue3ff3e2e865ec4f2296616d242bf3bcbaencryptionqueue417279ce4bc84de6b05c8b8e8e1da146encryptionqueue41c5a354464a4369a95b8e5ea85cd0a7encryptionqueue438e2f480e7340c6bbd99025e6882eaeencryptionqueue446c19b4encryptionqueue4523844416f44a91aedbecd841b17825encryptionqueue457c918033154970bff4620aca946ac7encryptionqueue4736410f2e94487594fd4ef639202544encryptionqueue47c2c792ca724456a3f5d4ae88179e28encryptionqueue484ffac93b584f54b23a4badb476b139encryptionqueue4901870ac1b84836ac9bd1308e648824encryptionqueue49dcd7c29e7041989f83448427af25adencryptionqueue4bbefd5d026a401ab776bbb61089d058encryptionqueue4daf8f96d3b142e386b17b14e003b66bencryptionqueue4e3ef909abac44449eeba45717f210a6encryptionqueue4e63a2316a51442f8442925348637d1aencryptionqueue4e678c94f1b140519cc53c56af064ffcencryptionqueue4f197f93c14b436891b927c8fe1d9141encryptionqueue4f9f9bd03c784e09a0d5b7762817c638encryptionqueue4ff40d03d6314550bea982326a29401dencryptionqueue505b33b035b845f59504ccdec9ab1c11encryptionqueue5151c95ea61f4c5c99c35b541a5f0939encryptionqueue546e15faencryptionqueue566cd19e11ae46708be465785846092fencryptionqueue56cd161cencryptionqueue577f1613encryptionqueue59fa82aac1384cb5b9a512f376d27ff9encryptionqueue5ad78db985384556912a24f1aa62f038encryptionqueue5ae5b1f367ca448b8130030d0461fbb1encryptionqueue5b02744e4ff9493d9cd2993895f75d89encryptionqueue5e4db545d97749518cf85d888c45a010encryptionqueue5e7383a701ce4f4aa43ff9a19341a426encryptionqueue5f4c2f6b4e3e4e4d983130c49202c369encryptionqueue6040f22ebc92484486d1013be00bf426encryptionqueue606997a069d44290863aab23d1499836encryptionqueue6350668d06bc4555afe11c8c4f3cca90encryptionqueue639bd2e086524c73becb63bb0777a4dfencryptionqueue6537723b3cf945549615fbca826c83f2encryptionqueue6543218e6c804ba4a762ebcf5a0f0c26encryptionqueue65685218f4f84a468d06003a75b7cc4fencryptionqueue67344e72836840e19b56c39e79de4063encryptionqueue679cfe6fcfd34949a82e71dc97e99e12encryptionqueue67fa5c4e1dc64abeb67c769c53c85c34encryptionqueue685fb5dcee654f54bbd73aaf639f29f2encryptionqueue69d3e31fbc4b406687818eb55275e102encryptionqueue6a6e165fencryptionqueue6aa04e44b574454fa920f2eddc947df1encryptionqueue6ae894712a9b43699894efc57afe4301encryptionqueue6b44cb5bf3a04d65bdc7395e19a06e93encryptionqueue6c4007b0fc2f489e9788f205f4aee9e5encryptionqueue6e7490c8837b449fae623d2dc5889b62encryptionqueue6ee9c562f1e24721aca7b97bfb5e41a4encryptionqueue6f6e422e79814d8bba6983c3f0ed5da7encryptionqueue71574f0318b04e7eaea8f845e9cefc61encryptionqueue722864b1fa254ed782659f274e0221d6encryptionqueue726b001c972e44e496751beadd9d2ee7encryptionqueue73423f52d51049eb87e6203f5d3b0684encryptionqueue78537b4db1c348e9bef011129520e33fencryptionqueue7900797cd45641a3b91c12e6ab3a9c73encryptionqueue7a825e8d572d4d2091d1786ff4a0da80encryptionqueue7d73f7ae777d4a938453cfb10bf085fcencryptionqueue7e5f64634bf9477b8cfba578ae7a53d5encryptionqueue7e7c1061742e4ef2adb5168a0b3c8995encryptionqueue80ccc65910364da89e7411164d9fd662encryptionqueue8162db3895c64edc8b1caef46ebedce2encryptionqueue8215a38133f84b5bb78c0d62efdfe85cencryptionqueue82cf17e47a214ed9a09757c96dac282eencryptionqueue830fe85241c34c228d6afcff88454b9cencryptionqueue83a95d261eb0442d9c6dfb68f35e891bencryptionqueue840011245c6f4f0d95780eb4f072201dencryptionqueue843b50932c08404ea01bc23f58125b4eencryptionqueue847016ffencryptionqueue84de687386a749d088d50f2cbe49faf4encryptionqueue85c8269646824b79981449f806e1d034encryptionqueue88b0c4e6001542579e1e4e54f8c5149fencryptionqueue8a6340e7ce514845896351308e26f1a5encryptionqueue8aea2e0a06bc4a78bb41334e7ceeb31dencryptionqueue8bf4d6844c5e41daaa536e83d0ce20b5encryptionqueue8bf9bfa83b68423582dd8890b5a9b59cencryptionqueue8e9a77c0c08e461a9f116b149af78cf4encryptionqueue913011da3d0748c0b9755bfd03c18d5eencryptionqueue926d112d0c0b48fe906572cb43bbc55fencryptionqueue92d2a1d4735d4e20891eb8a623e92b77encryptionqueue92f0141577244a38874e11688e9a8bc1encryptionqueue94c6cf23d6434704997669945da24e4aencryptionqueue9678ac222c444f6e922c74902f49ba00encryptionqueue9719642150034e1e98cbb44aaeb41a39encryptionqueue973613a055554ee9b46ef74a53690c44encryptionqueue9801d5a190c5415b821a5c35f2f89935encryptionqueue983965dec1ca47f2b92eadd9b1fc6cacencryptionqueue9a32c263dee44048be35df59b87a6d31encryptionqueue9a7c1749encryptionqueue9db63deea8bd4370950d21bd84ee4d05encryptionqueue9dd54922e9e74a80b7757aaab4190a17encryptionqueue9e7a60d5828949c3bf73fc1e9abcc58cencryptionqueuea0d3b1db06804b5f9a619bd912e293d0encryptionqueuea2faa42aa8404ebda6618f46855b45e9encryptionqueuea43ffbc1c02d4d1e9d494c42ad891754encryptionqueuea563db7602fa41cfaa8f2d50d60ee396encryptionqueuea73c18833ab34cb4b7fed6991c915b35encryptionqueueaa771e618ab94629a64f0a5af63148a7encryptionqueuead0bd6447b924dec815c956b43c917b7encryptionqueueae116bd7da934598b02886f15be095feencryptionqueueae2d93a4fdb349f4a8c6542dc1b9bebeencryptionqueueaf6ab6bd4ae1465984165c86ea0a2030encryptionqueueb00011fa0643419a83985621a68c3fe7encryptionqueueb0749b04338f4b37bed47b6e7f128c37encryptionqueueb1ee9a1d3b024b0aac527cad50b89ae4encryptionqueueb29db696f2a24b779cf1529909f1d351encryptionqueueb2b37ce25bc64867a2df774508fbca50encryptionqueueb39140fac6d6430ba3030620662e7a90encryptionqueueb9bdd20389024b8bb17d0ec977c92394encryptionqueuebb29fd6e000d4aad86866c1c10bbbb57encryptionqueuebfda000d20e94a69b620156f87c0d179encryptionqueuebff8cd42e66d4515b11718b0f46fbc49encryptionqueuec25b0bb9b85a412d9bb026b53a38b781encryptionqueuec34e1330encryptionqueuec51758c3900d4b45828711af1632efd0encryptionqueuec8308010740f4a74b1b4aa1ebe53bfefencryptionqueuec9311831encryptionqueuec9ae1814encryptionqueueca35d53e302146c3835d8e0ca208e361encryptionqueuecb565eb607794c58a9bf0c44d1f3100eencryptionqueued271533c83d74174b44a675ec991c50bencryptionqueued3d8322c30db4f829de847622bec925dencryptionqueued51d7fb9d2a74482af09164eea6df304encryptionqueued5f8ca965e0e45adb9732b5299599ae5encryptionqueued7de1393encryptionqueued82ab32a7b6e4986919374ed59976b41encryptionqueued99a917842634d808d5de37b041d6c99encryptionqueued9c213acencryptionqueuedb062977ecd24c52adc6fd346d564257encryptionqueuedc8ce0bda3a14ff6b58826765a67b4e7encryptionqueuedd7e0c34e33d4e3b97eb6d417f072f19encryptionqueuee12a1896encryptionqueuee164080a6d9c4b49b80c56ed2f78e42fencryptionqueuee365639c552e45ffb47767842d9f9497encryptionqueuee5abfa24c8274b2787110e2577676641encryptionqueuee7d40ae0e26f4a0ba3886ad69693d10fencryptionqueueec0516286a0240f58b44f61fd618f698encryptionqueueef87f6b005704812be731e52e275b0f7encryptionqueueefe415d8b56943e8a403974b9f9ca77bencryptionqueuef065d7b313b247359f553a24b891412dencryptionqueuef5339ec598524170932fa4d479246c84encryptionqueuef7b36961f02b4e36a02eaf6762fe069cencryptionqueuef8e08828d1814069b106fdc553ac30d8encryptionqueuef915efc37cf843b98879d7848af8242eencryptionqueuef9f2b3145eb84ed4b824d05801f1a683encryptionqueuefa0af24f1b8e40ee9eb4cea776333137encryptionqueuefa40fb846d5b4f8ab9efa1af493c10c8encryptionqueuefa9ca7ef34ad4584a9ca8d7e08f8dcd0encryptionqueuefc3a18fdencryptionqueuefcf3dc00dc1c488aa420d691e4baa42aencryptionqueuefee61452encryptionqueueff822101630840e0a8d6f3dc7b525a89listqueue0listqueue1listqueue2listqueue3mytestqueue0a2ef6bba4554b628d09bb86015bc842mytestqueue1013601153984f879b98caf8b0374f76mytestqueue10330cbb35ac40beb2b39c7d29f68c3cmytestqueue12b187b97782449e9006247f7fb3613fmytestqueue134d45a65a0044389c70ae9069fdad89mytestqueue15603b4dc47540d0bf8350b521ed31c8mytestqueue1886807877314f77acf680cc02cb76c5mytestqueue193bff9d55f64ed088b34261c9ca9cdfmytestqueue1cd5d2a6a60c47eab8a8feac51f50d5fmytestqueue1d031d8258e445c9b1d8f55b1e53ad18mytestqueue1d77ed688eb243ab952759b462969176mytestqueue1e092b5c395843d49a80fe4a94fe2b63mytestqueue1f39e46303c94fb68264c2977952bec2mytestqueue2189e290d4ed4654a799b5fd3ffcbd18mytestqueue2c72a270beb44ee1bddf46c97d76390bmytestqueue2d1ba08f20c5427786de42a9e6ff3661mytestqueue2e0dcbe5f23e4546b08a157eccba71e0mytestqueue30cea1f0940742b1900ac613dc0ce03emytestqueue36c2151767a94e81b21a06a91810d9c3mytestqueue37faa5540da34814a5c3cbea0a3b4edcmytestqueue39c28496fa6d454eac4abe60e9c012d5mytestqueue4070694a94c5449f8f5ba6ae9e48e62dmytestqueue428c7ffccfe441cb99b33a4cf6be01c3mytestqueue448a292b34f84208869b522d622e8dc6mytestqueue453d1525mytestqueue47a96b4e6f0d4b01917950b01d00368dmytestqueue4c34eb08c80048f59341bcb2e91e1831mytestqueue509615f0mytestqueue5858d272959d431184dd0bb98dfe0b5cmytestqueue58f68f5e123a44d5bb69bd277533475dmytestqueue68a5eee2272345f1903f28d99b79e111mytestqueue6a13757d27a64700a35afa29daaa3127mytestqueue6d0295e46d214419877333558cee3955mytestqueue72dfe06a4d43462694d647b7cb59fa4emytestqueue75b91164mytestqueue75c0a956ab564f049ed29369c7c5f119mytestqueue7668a40070f54cb49f0f8372763dc4a5mytestqueue79fa950888cc4b83856540e4172fc1f8mytestqueue7cc4973995dd4d6f833a3fe222252f26mytestqueue7d06985305c2451b8dd8a84a50b7bd84mytestqueue821a5855f7644a78a895ff29fa76cf42mytestqueue83bf3acfd5634a4495d8cd58a9fc4ad9mytestqueue85b098bf961944e3b3d0629d756b1da3mytestqueue8be406d367b5490a9359641e99f8a389mytestqueue8c14c266ec6f4f19820330513df8a7e5mytestqueue8d2c2996eb0f4d95930f8798e7a3e1dbmytestqueue91b35c21478242b98eeb79c5baeaff4dmytestqueue96364f4607d34ac9a236b4c966289ab4mytestqueue9bf03576a06a4deb818c0d1c769f1652mytestqueue9c41d179c24849a6a4a7d85baa1390f7mytestqueueab021ddf4ffa4c9f9571fd4dc39f8357mytestqueueab101218mytestqueueb201e786962d48649b8211845f623a6emytestqueueb2627aa0225e4099bcca4ad323b72279mytestqueuebd590552c9724821bee7189344003e8bmytestqueuebdb1127amytestqueuec2a61a972f0146cb902286257d355d89mytestqueuec3a370a2b00e4a38b629f4fe76fa5c45mytestqueuec78f7ccbf7584b63a7dabd5c0aa14140mytestqueuece46ab782aec49929df0ee75e65f4a9bmytestqueued635903262a4446089efc43a149d070dmytestqueuedbb7a293ffc9441e9d8bb26689041622mytestqueuedd0012aba5a24b9284b1277cefc3fdcemytestqueuee59211fca871487e97f3e2ed9b0283e7mytestqueueec4681c4befa4496b1858ffca231fe2bmytestqueueedbcbcb2f61445739996178b5add242emytestqueueedd54a85f0e740d0aca55d75641eb13bmytestqueueee2289f4dc1a44fab3ea67f3e6298604mytestqueuef5b0503136b84fe6b6b35938c7a2aa58mytestqueuef5e71027838a48389e832ec984c83feemytestqueuefd5d053567114146acdcda9538906418mytestqueuefe00bb01b6b1456c96d5139f125a0fefmytestqueuefee8fd4d502e4b65846dbab96921123bpythonq" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:18 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 9911b91b-e003-0044-2337-29b86c000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 77dc7922-952b-11e9-b4a3-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:33 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/?comp=list + response: + body: + string: "\uFEFFencryptionqueue00f571db76014b72a6c75a1bad87b762encryptionqueue01c813482f48463e8561d125608e0e3fencryptionqueue031a126cc154435089868a104a938242encryptionqueue036fcc0f15154cfa9750ce6849c2662dencryptionqueue038581f4daff4e93819f14c78fdc0679encryptionqueue03adb51e81d74bbb89fb5ae9f51cc717encryptionqueue04731f0f012c4207b95a984687221dbcencryptionqueue04b9331765234b26959037a4208823d9encryptionqueue0621951ba8d947f7aee46cae789bd3ffencryptionqueue0691a39f29a44be49175b67df325c643encryptionqueue0a3d69847143433c8aed62df2acae50cencryptionqueue0ac3aa83274c42f6b5a72c2489b70102encryptionqueue0ac3e277ee864e3f8d4a813106a6ea80encryptionqueue0aebd0719e114b3cbe976ec7d710e9b2encryptionqueue0baad9ef7b314e258053347c71955908encryptionqueue0bdd9faba39b4b88afdf0b0013c6eb41encryptionqueue0c1b2f05d0584923b7a7c4390fead6ddencryptionqueue1127c090fd3f4a39b38280423a27f7b1encryptionqueue12831da3db2a4d7bbcf7667fe655db4aencryptionqueue13271c2d36cd454e9b493760fe3c26d7encryptionqueue13c9e021d0d04335984fca6b717279c3encryptionqueue145086b86c93495f9e5e0dff62cfafdfencryptionqueue16fb1372b0b449f6b3c01beb8f68aa2eencryptionqueue1b9615466a5d48bcb5299e0e0e51c07fencryptionqueue1d37c54f6f084a8d897d6473ebc219eeencryptionqueue1f2c142026334947b904f8a01a56a2e8encryptionqueue1f6314e191b94eac8969bd91d086ec57encryptionqueue213a5e3dc51b4265b651761de87d19ebencryptionqueue234359980b3e44ca8e306c20a1c2378bencryptionqueue24af7cd0fec44245a29cac80ef58c42aencryptionqueue250aee46b615431abd40cbff4d01ddfbencryptionqueue2532a57cb39b4a2a81a4aa2cefd544aeencryptionqueue25b893825adf4019917d537be7b9a937encryptionqueue2653bf1b818246d9aad6f868bfdf3cdfencryptionqueue28277b1556aa4fffa6168ddc01f9f5a0encryptionqueue29091535encryptionqueue29d9077841994ffc988da6b1473ed101encryptionqueue29f01530encryptionqueue2ade689325144e40b4189ea3e876bdd5encryptionqueue2afe7885787242ecb14ccfce84ccac09encryptionqueue2f6f0eff5deb43439743ed8620966793encryptionqueue31496fc1df4e426baddd506c2519c9c9encryptionqueue33561ca92c434700b1f2cc085199fc2aencryptionqueue33678fe6b6cc40e4868d0fa926a9e900encryptionqueue389127d37be54e76aa5b61b736e67663encryptionqueue39941e25f3104ba1bbf6075d9eae0617encryptionqueue3a398a31d22040598d605f767b94ac87encryptionqueue3aa2cbfe7ced448aa7589c9e986ef2ddencryptionqueue3b2b6361c2b6418fa45d8e87dc122c01encryptionqueue3be846efd85c4b998c3e54371e90c579encryptionqueue3c7dcb855e7b470783133945bf480165encryptionqueue3ce384bb880d4a7184ceb3a2bfc26695encryptionqueue3db07d1f9ea548339f5294692bb1725fencryptionqueue3df5958fe58d4f38841837387264e928encryptionqueue3ff3e2e865ec4f2296616d242bf3bcbaencryptionqueue417279ce4bc84de6b05c8b8e8e1da146encryptionqueue41c5a354464a4369a95b8e5ea85cd0a7encryptionqueue438e2f480e7340c6bbd99025e6882eaeencryptionqueue446c19b4encryptionqueue4523844416f44a91aedbecd841b17825encryptionqueue457c918033154970bff4620aca946ac7encryptionqueue4736410f2e94487594fd4ef639202544encryptionqueue47c2c792ca724456a3f5d4ae88179e28encryptionqueue484ffac93b584f54b23a4badb476b139encryptionqueue4901870ac1b84836ac9bd1308e648824encryptionqueue49dcd7c29e7041989f83448427af25adencryptionqueue4bbefd5d026a401ab776bbb61089d058encryptionqueue4daf8f96d3b142e386b17b14e003b66bencryptionqueue4e3ef909abac44449eeba45717f210a6encryptionqueue4e63a2316a51442f8442925348637d1aencryptionqueue4e678c94f1b140519cc53c56af064ffcencryptionqueue4f197f93c14b436891b927c8fe1d9141encryptionqueue4f9f9bd03c784e09a0d5b7762817c638encryptionqueue4ff40d03d6314550bea982326a29401dencryptionqueue505b33b035b845f59504ccdec9ab1c11encryptionqueue5151c95ea61f4c5c99c35b541a5f0939encryptionqueue546e15faencryptionqueue566cd19e11ae46708be465785846092fencryptionqueue56cd161cencryptionqueue577f1613encryptionqueue59fa82aac1384cb5b9a512f376d27ff9encryptionqueue5ad78db985384556912a24f1aa62f038encryptionqueue5ae5b1f367ca448b8130030d0461fbb1encryptionqueue5b02744e4ff9493d9cd2993895f75d89encryptionqueue5e4db545d97749518cf85d888c45a010encryptionqueue5e7383a701ce4f4aa43ff9a19341a426encryptionqueue5f4c2f6b4e3e4e4d983130c49202c369encryptionqueue6040f22ebc92484486d1013be00bf426encryptionqueue606997a069d44290863aab23d1499836encryptionqueue6350668d06bc4555afe11c8c4f3cca90encryptionqueue639bd2e086524c73becb63bb0777a4dfencryptionqueue6537723b3cf945549615fbca826c83f2encryptionqueue6543218e6c804ba4a762ebcf5a0f0c26encryptionqueue65685218f4f84a468d06003a75b7cc4fencryptionqueue67344e72836840e19b56c39e79de4063encryptionqueue679cfe6fcfd34949a82e71dc97e99e12encryptionqueue67fa5c4e1dc64abeb67c769c53c85c34encryptionqueue685fb5dcee654f54bbd73aaf639f29f2encryptionqueue69d3e31fbc4b406687818eb55275e102encryptionqueue6a6e165fencryptionqueue6aa04e44b574454fa920f2eddc947df1encryptionqueue6ae894712a9b43699894efc57afe4301encryptionqueue6b44cb5bf3a04d65bdc7395e19a06e93encryptionqueue6c4007b0fc2f489e9788f205f4aee9e5encryptionqueue6e7490c8837b449fae623d2dc5889b62encryptionqueue6ee9c562f1e24721aca7b97bfb5e41a4encryptionqueue6f6e422e79814d8bba6983c3f0ed5da7encryptionqueue71574f0318b04e7eaea8f845e9cefc61encryptionqueue722864b1fa254ed782659f274e0221d6encryptionqueue726b001c972e44e496751beadd9d2ee7encryptionqueue73423f52d51049eb87e6203f5d3b0684encryptionqueue78537b4db1c348e9bef011129520e33fencryptionqueue7900797cd45641a3b91c12e6ab3a9c73encryptionqueue7a825e8d572d4d2091d1786ff4a0da80encryptionqueue7d73f7ae777d4a938453cfb10bf085fcencryptionqueue7e5f64634bf9477b8cfba578ae7a53d5encryptionqueue7e7c1061742e4ef2adb5168a0b3c8995encryptionqueue80ccc65910364da89e7411164d9fd662encryptionqueue8162db3895c64edc8b1caef46ebedce2encryptionqueue8215a38133f84b5bb78c0d62efdfe85cencryptionqueue82cf17e47a214ed9a09757c96dac282eencryptionqueue830fe85241c34c228d6afcff88454b9cencryptionqueue83a95d261eb0442d9c6dfb68f35e891bencryptionqueue840011245c6f4f0d95780eb4f072201dencryptionqueue843b50932c08404ea01bc23f58125b4eencryptionqueue847016ffencryptionqueue84de687386a749d088d50f2cbe49faf4encryptionqueue85c8269646824b79981449f806e1d034encryptionqueue88b0c4e6001542579e1e4e54f8c5149fencryptionqueue8a6340e7ce514845896351308e26f1a5encryptionqueue8aea2e0a06bc4a78bb41334e7ceeb31dencryptionqueue8bf4d6844c5e41daaa536e83d0ce20b5encryptionqueue8bf9bfa83b68423582dd8890b5a9b59cencryptionqueue8e9a77c0c08e461a9f116b149af78cf4encryptionqueue913011da3d0748c0b9755bfd03c18d5eencryptionqueue926d112d0c0b48fe906572cb43bbc55fencryptionqueue92d2a1d4735d4e20891eb8a623e92b77encryptionqueue92f0141577244a38874e11688e9a8bc1encryptionqueue94c6cf23d6434704997669945da24e4aencryptionqueue9678ac222c444f6e922c74902f49ba00encryptionqueue9719642150034e1e98cbb44aaeb41a39encryptionqueue973613a055554ee9b46ef74a53690c44encryptionqueue9801d5a190c5415b821a5c35f2f89935encryptionqueue983965dec1ca47f2b92eadd9b1fc6cacencryptionqueue9a32c263dee44048be35df59b87a6d31encryptionqueue9a7c1749encryptionqueue9db63deea8bd4370950d21bd84ee4d05encryptionqueue9dd54922e9e74a80b7757aaab4190a17encryptionqueue9e7a60d5828949c3bf73fc1e9abcc58cencryptionqueuea0d3b1db06804b5f9a619bd912e293d0encryptionqueuea2faa42aa8404ebda6618f46855b45e9encryptionqueuea43ffbc1c02d4d1e9d494c42ad891754encryptionqueuea563db7602fa41cfaa8f2d50d60ee396encryptionqueuea73c18833ab34cb4b7fed6991c915b35encryptionqueueaa771e618ab94629a64f0a5af63148a7encryptionqueuead0bd6447b924dec815c956b43c917b7encryptionqueueae116bd7da934598b02886f15be095feencryptionqueueae2d93a4fdb349f4a8c6542dc1b9bebeencryptionqueueaf6ab6bd4ae1465984165c86ea0a2030encryptionqueueb00011fa0643419a83985621a68c3fe7encryptionqueueb0749b04338f4b37bed47b6e7f128c37encryptionqueueb1ee9a1d3b024b0aac527cad50b89ae4encryptionqueueb29db696f2a24b779cf1529909f1d351encryptionqueueb2b37ce25bc64867a2df774508fbca50encryptionqueueb39140fac6d6430ba3030620662e7a90encryptionqueueb9bdd20389024b8bb17d0ec977c92394encryptionqueuebb29fd6e000d4aad86866c1c10bbbb57encryptionqueuebfda000d20e94a69b620156f87c0d179encryptionqueuebff8cd42e66d4515b11718b0f46fbc49encryptionqueuec25b0bb9b85a412d9bb026b53a38b781encryptionqueuec34e1330encryptionqueuec51758c3900d4b45828711af1632efd0encryptionqueuec8308010740f4a74b1b4aa1ebe53bfefencryptionqueuec9311831encryptionqueuec9ae1814encryptionqueueca35d53e302146c3835d8e0ca208e361encryptionqueuecb565eb607794c58a9bf0c44d1f3100eencryptionqueued271533c83d74174b44a675ec991c50bencryptionqueued3d8322c30db4f829de847622bec925dencryptionqueued51d7fb9d2a74482af09164eea6df304encryptionqueued5f8ca965e0e45adb9732b5299599ae5encryptionqueued7de1393encryptionqueued82ab32a7b6e4986919374ed59976b41encryptionqueued99a917842634d808d5de37b041d6c99encryptionqueued9c213acencryptionqueuedb062977ecd24c52adc6fd346d564257encryptionqueuedc8ce0bda3a14ff6b58826765a67b4e7encryptionqueuedd7e0c34e33d4e3b97eb6d417f072f19encryptionqueuee12a1896encryptionqueuee164080a6d9c4b49b80c56ed2f78e42fencryptionqueuee365639c552e45ffb47767842d9f9497encryptionqueuee5abfa24c8274b2787110e2577676641encryptionqueuee7d40ae0e26f4a0ba3886ad69693d10fencryptionqueueec0516286a0240f58b44f61fd618f698encryptionqueueef87f6b005704812be731e52e275b0f7encryptionqueueefe415d8b56943e8a403974b9f9ca77bencryptionqueuef065d7b313b247359f553a24b891412dencryptionqueuef5339ec598524170932fa4d479246c84encryptionqueuef7b36961f02b4e36a02eaf6762fe069cencryptionqueuef8e08828d1814069b106fdc553ac30d8encryptionqueuef915efc37cf843b98879d7848af8242eencryptionqueuef9f2b3145eb84ed4b824d05801f1a683encryptionqueuefa0af24f1b8e40ee9eb4cea776333137encryptionqueuefa40fb846d5b4f8ab9efa1af493c10c8encryptionqueuefa9ca7ef34ad4584a9ca8d7e08f8dcd0encryptionqueuefc3a18fdencryptionqueuefcf3dc00dc1c488aa420d691e4baa42aencryptionqueuefee61452encryptionqueueff822101630840e0a8d6f3dc7b525a89listqueue0listqueue1listqueue2listqueue3mytestqueue0a2ef6bba4554b628d09bb86015bc842mytestqueue1013601153984f879b98caf8b0374f76mytestqueue10330cbb35ac40beb2b39c7d29f68c3cmytestqueue12b187b97782449e9006247f7fb3613fmytestqueue134d45a65a0044389c70ae9069fdad89mytestqueue15603b4dc47540d0bf8350b521ed31c8mytestqueue1886807877314f77acf680cc02cb76c5mytestqueue193bff9d55f64ed088b34261c9ca9cdfmytestqueue1cd5d2a6a60c47eab8a8feac51f50d5fmytestqueue1d031d8258e445c9b1d8f55b1e53ad18mytestqueue1d77ed688eb243ab952759b462969176mytestqueue1e092b5c395843d49a80fe4a94fe2b63mytestqueue1f39e46303c94fb68264c2977952bec2mytestqueue2189e290d4ed4654a799b5fd3ffcbd18mytestqueue2c72a270beb44ee1bddf46c97d76390bmytestqueue2d1ba08f20c5427786de42a9e6ff3661mytestqueue2e0dcbe5f23e4546b08a157eccba71e0mytestqueue30cea1f0940742b1900ac613dc0ce03emytestqueue36c2151767a94e81b21a06a91810d9c3mytestqueue37faa5540da34814a5c3cbea0a3b4edcmytestqueue39c28496fa6d454eac4abe60e9c012d5mytestqueue4070694a94c5449f8f5ba6ae9e48e62dmytestqueue428c7ffccfe441cb99b33a4cf6be01c3mytestqueue448a292b34f84208869b522d622e8dc6mytestqueue453d1525mytestqueue47a96b4e6f0d4b01917950b01d00368dmytestqueue4c34eb08c80048f59341bcb2e91e1831mytestqueue509615f0mytestqueue5858d272959d431184dd0bb98dfe0b5cmytestqueue58f68f5e123a44d5bb69bd277533475dmytestqueue68a5eee2272345f1903f28d99b79e111mytestqueue6a13757d27a64700a35afa29daaa3127mytestqueue6d0295e46d214419877333558cee3955mytestqueue72dfe06a4d43462694d647b7cb59fa4emytestqueue75b91164mytestqueue75c0a956ab564f049ed29369c7c5f119mytestqueue7668a40070f54cb49f0f8372763dc4a5mytestqueue79fa950888cc4b83856540e4172fc1f8mytestqueue7cc4973995dd4d6f833a3fe222252f26mytestqueue7d06985305c2451b8dd8a84a50b7bd84mytestqueue821a5855f7644a78a895ff29fa76cf42mytestqueue83bf3acfd5634a4495d8cd58a9fc4ad9mytestqueue85b098bf961944e3b3d0629d756b1da3mytestqueue8be406d367b5490a9359641e99f8a389mytestqueue8c14c266ec6f4f19820330513df8a7e5mytestqueue8d2c2996eb0f4d95930f8798e7a3e1dbmytestqueue91b35c21478242b98eeb79c5baeaff4dmytestqueue96364f4607d34ac9a236b4c966289ab4mytestqueue9bf03576a06a4deb818c0d1c769f1652mytestqueue9c41d179c24849a6a4a7d85baa1390f7mytestqueueab021ddf4ffa4c9f9571fd4dc39f8357mytestqueueab101218mytestqueueb201e786962d48649b8211845f623a6emytestqueueb2627aa0225e4099bcca4ad323b72279mytestqueuebd590552c9724821bee7189344003e8bmytestqueuebdb1127amytestqueuec2a61a972f0146cb902286257d355d89mytestqueuec3a370a2b00e4a38b629f4fe76fa5c45mytestqueuec78f7ccbf7584b63a7dabd5c0aa14140mytestqueuece46ab782aec49929df0ee75e65f4a9bmytestqueued635903262a4446089efc43a149d070dmytestqueuedbb7a293ffc9441e9d8bb26689041622mytestqueuedd0012aba5a24b9284b1277cefc3fdcemytestqueuee59211fca871487e97f3e2ed9b0283e7mytestqueueec4681c4befa4496b1858ffca231fe2bmytestqueueedbcbcb2f61445739996178b5add242emytestqueueedd54a85f0e740d0aca55d75641eb13bmytestqueueee2289f4dc1a44fab3ea67f3e6298604mytestqueuef5b0503136b84fe6b6b35938c7a2aa58mytestqueuef5e71027838a48389e832ec984c83feemytestqueuefd5d053567114146acdcda9538906418mytestqueuefe00bb01b6b1456c96d5139f125a0fefmytestqueuefee8fd4d502e4b65846dbab96921123bpythonq" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:33 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - a7dc2a7d-c003-009f-4a38-291cba000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - b6963a5c-952d-11e9-bab5-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:38 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/?comp=list + response: + body: + string: "\uFEFF" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:37 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 13aa3e1d-1003-00bf-533a-297076000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_list_queues_with_metadata.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_list_queues_with_metadata.yaml new file mode 100644 index 000000000000..b505f9487354 --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_list_queues_with_metadata.yaml @@ -0,0 +1,498 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 1ea6541e-952a-11e9-95a0-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:54 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/pythonqueue665a1100 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:12:54 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 7f79e1c9-4003-002f-2e36-29e53a000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 1ec72130-952a-11e9-afc0-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:54 GMT + x-ms-meta-val1: + - test + x-ms-meta-val2: + - blah + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/pythonqueue665a1100?comp=metadata + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:12:54 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 7f79e1d0-4003-002f-3236-29e53a000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 1ed0fa7a-952a-11e9-86b3-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:54 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://remotestoragename.queue.core.windows.net/?prefix=pythonqueue665a1100&maxresults=1&include=metadata&comp=list + response: + body: + string: "\uFEFFpythonqueue665a11001pythonqueue665a1100testblah" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:12:54 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 7f79e1d5-4003-002f-3636-29e53a000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e09f91b6-952a-11e9-8295-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:20 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueue665a1100 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:20 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - ba3719dd-3003-00a8-6e37-29b015000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e0bf4fe2-952a-11e9-a655-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:20 GMT + x-ms-meta-val1: + - test + x-ms-meta-val2: + - blah + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueue665a1100?comp=metadata + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:20 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - ba3719ec-3003-00a8-7b37-29b015000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e12bf8fe-952a-11e9-bab5-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:21 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/?prefix=pythonqueue665a1100&maxresults=1&include=metadata&comp=list + response: + body: + string: "\uFEFFpythonqueue665a11001pythonqueue665a1100testblah" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:20 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - ba371a9c-3003-00a8-1037-29b015000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 785a94f6-952b-11e9-b60a-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:34 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueue665a1100 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:34 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 16b5d6d3-6003-005e-1238-299703000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 787bed9a-952b-11e9-af88-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:34 GMT + x-ms-meta-val1: + - test + x-ms-meta-val2: + - blah + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueue665a1100?comp=metadata + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:36 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 16b5d6da-6003-005e-1638-299703000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 79993476-952b-11e9-abba-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:36 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/?prefix=pythonqueue665a1100&maxresults=1&include=metadata&comp=list + response: + body: + string: "\uFEFFpythonqueue665a11001pythonqueue665a1100testblah" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:37 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 16b5d73f-6003-005e-5e38-299703000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - b71ae3e2-952d-11e9-8fea-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:38 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueue665a1100 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:38:39 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 2d5a1ca7-4003-0042-2a3a-294f14000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - b73b1888-952d-11e9-a041-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:39 GMT + x-ms-meta-val1: + - test + x-ms-meta-val2: + - blah + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueue665a1100?comp=metadata + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:38:41 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 2d5a1cac-4003-0042-2c3a-294f14000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - b85bdb62-952d-11e9-beca-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:41 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/?prefix=pythonqueue665a1100&maxresults=1&include=metadata&comp=list + response: + body: + string: "\uFEFFpythonqueue665a11001pythonqueue665a1100testblah" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:41 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 2d5a1ccf-4003-0042-423a-294f14000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_list_queues_with_options.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_list_queues_with_options.yaml new file mode 100644 index 000000000000..59fadae5e57c --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_list_queues_with_options.yaml @@ -0,0 +1,964 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 1f7ea3d2-952a-11e9-b2f6-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:56 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/listqueue0560410cb + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:12:55 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 7fe22b0d-2003-001d-7c36-29bdea000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 1fa0435c-952a-11e9-a563-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:56 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/listqueue1560410cb + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:12:55 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 7fe22b19-2003-001d-0536-29bdea000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 1faa03e2-952a-11e9-b80f-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:56 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/listqueue2560410cb + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:12:55 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 7fe22b2f-2003-001d-1836-29bdea000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 1fb3aa34-952a-11e9-81f1-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:56 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/listqueue3560410cb + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:12:55 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 7fe22b40-2003-001d-2736-29bdea000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 1fbc6cda-952a-11e9-8b22-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:56 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://remotestoragename.queue.core.windows.net/?prefix=listqueue&maxresults=3&comp=list + response: + body: + string: "\uFEFFlistqueue3listqueue0listqueue0560410cblistqueue1/remotestoragename/listqueue1560410cb" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:12:55 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 7fe22b53-2003-001d-3636-29bdea000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 1fc57606-952a-11e9-962a-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:56 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://remotestoragename.queue.core.windows.net/?prefix=listqueue&marker=%2Fremotestoragename%2Flistqueue1560410cb&include=metadata&comp=list + response: + body: + string: "\uFEFFlistqueue/remotestoragename/listqueue1560410cblistqueue1560410cblistqueue2listqueue2560410cblistqueue3listqueue3560410cb" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:12:55 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 7fe22b5e-2003-001d-4136-29bdea000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e167dcca-952a-11e9-ac5e-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:21 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/listqueue0560410cb + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:21 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - b31c8b5f-0003-0067-1937-29d7a7000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e188d72c-952a-11e9-9c6a-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:21 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/listqueue1560410cb + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:21 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - b31c8b6a-0003-0067-2237-29d7a7000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e1931a18-952a-11e9-ae4a-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:21 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/listqueue2560410cb + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:21 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - b31c8b72-0003-0067-2937-29d7a7000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e19d81ae-952a-11e9-b360-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:21 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/listqueue3560410cb + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:21 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - b31c8b76-0003-0067-2c37-29d7a7000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e1a6c412-952a-11e9-baf7-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:21 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/?prefix=listqueue&maxresults=3&comp=list + response: + body: + string: "\uFEFFlistqueue3listqueue0listqueue0560410cblistqueue1/storagename/listqueue1560410cb" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:21 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - b31c8b79-0003-0067-2e37-29d7a7000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e1af46d2-952a-11e9-a017-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:21 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/?prefix=listqueue&marker=%2Fstoragename%2Flistqueue1560410cb&include=metadata&comp=list + response: + body: + string: "\uFEFFlistqueue/storagename/listqueue1560410cblistqueue1560410cblistqueue2listqueue2560410cblistqueue3listqueue3560410cb" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:21 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - b31c8b82-0003-0067-3637-29d7a7000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 7a7b4230-952b-11e9-9fc7-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:38 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/listqueue0560410cb + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:38 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - f77173ce-1003-005a-2738-296281000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 7aa09652-952b-11e9-9171-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:38 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/listqueue1560410cb + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:38 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - f77173d1-1003-005a-2838-296281000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 7aaadd1a-952b-11e9-9ac0-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:38 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/listqueue2560410cb + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:38 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - f77173d5-1003-005a-2a38-296281000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 7ab52680-952b-11e9-bedb-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:38 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/listqueue3560410cb + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:38 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - f77173dd-1003-005a-3038-296281000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 7abe67a4-952b-11e9-9a37-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:38 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/?prefix=listqueue&maxresults=3&comp=list + response: + body: + string: "\uFEFFlistqueue3listqueue0listqueue0560410cblistqueue1/storagename/listqueue1560410cb" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:38 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - f77173e4-1003-005a-3638-296281000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 7ac7cc2c-952b-11e9-aa4c-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:38 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/?prefix=listqueue&marker=%2Fstoragename%2Flistqueue1560410cb&include=metadata&comp=list + response: + body: + string: "\uFEFFlistqueue/storagename/listqueue1560410cblistqueue1560410cblistqueue2listqueue2560410cblistqueue3listqueue3560410cb" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:38 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - f77173e8-1003-005a-3a38-296281000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - b8b75370-952d-11e9-8a79-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:41 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/listqueue0560410cb + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:38:41 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - d0c3a746-f003-0014-6e3a-29a764000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - b8dd20fa-952d-11e9-80db-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:41 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/listqueue1560410cb + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:38:41 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - d0c3a751-f003-0014-753a-29a764000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - b8e87e9e-952d-11e9-aae6-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:41 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/listqueue2560410cb + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:38:41 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - d0c3a759-f003-0014-7a3a-29a764000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - b8f3dc98-952d-11e9-9e2b-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:42 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/listqueue3560410cb + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:38:42 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - d0c3a767-f003-0014-033a-29a764000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - b8fdb43a-952d-11e9-a6f3-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:42 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/?prefix=listqueue&maxresults=3&comp=list + response: + body: + string: "\uFEFFlistqueue3listqueue0560410cblistqueue1560410cblistqueue2560410cb/storagename/listqueue3" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:42 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - d0c3a771-f003-0014-0a3a-29a764000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - b9066d5c-952d-11e9-aa14-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:42 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/?prefix=listqueue&marker=%2Fstoragename%2Flistqueue3&include=metadata&comp=list + response: + body: + string: "\uFEFFlistqueue/storagename/listqueue3listqueue3560410cb" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:42 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - d0c3a781-f003-0014-163a-29a764000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_peek_messages.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_peek_messages.yaml new file mode 100644 index 000000000000..38378df82c8c --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_peek_messages.yaml @@ -0,0 +1,1082 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 200b9aba-952a-11e9-a10e-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:57 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/pythonqueueb3920bee + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:12:56 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - a24fbde5-9003-0062-7d36-2923d8000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message1' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 2030fc46-952a-11e9-8110-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:57 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://remotestoragename.queue.core.windows.net/pythonqueueb3920bee/messages + response: + body: + string: "\uFEFF245cfd79-1c16-4d04-ba74-8210b5cad3f9Sat,\ + \ 22 Jun 2019 20:12:57 GMTSat, 29 Jun 2019\ + \ 20:12:57 GMTAgAAAAMAAAAAAAAAQKn34TYp1QE=Sat,\ + \ 22 Jun 2019 20:12:57 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:12:56 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - a24fbdf7-9003-0062-0b36-2923d8000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message2' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 203a9558-952a-11e9-9a3f-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:57 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://remotestoragename.queue.core.windows.net/pythonqueueb3920bee/messages + response: + body: + string: "\uFEFF18b40ed3-49c7-43f7-8bae-63afc3bba53dSat,\ + \ 22 Jun 2019 20:12:57 GMTSat, 29 Jun 2019\ + \ 20:12:57 GMTAgAAAAMAAAAAAAAAal0A4jYp1QE=Sat,\ + \ 22 Jun 2019 20:12:57 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:12:56 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - a24fbdff-9003-0062-1236-2923d8000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message3' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 20437bc6-952a-11e9-9281-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:57 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://remotestoragename.queue.core.windows.net/pythonqueueb3920bee/messages + response: + body: + string: "\uFEFF07026749-7248-4961-8e0f-bb031cec062bSat,\ + \ 22 Jun 2019 20:12:57 GMTSat, 29 Jun 2019\ + \ 20:12:57 GMTAgAAAAMAAAAAAAAAlREJ4jYp1QE=Sat,\ + \ 22 Jun 2019 20:12:57 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:12:56 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - a24fbe0f-9003-0062-2136-2923d8000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message4' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 204c46e8-952a-11e9-9f71-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:57 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://remotestoragename.queue.core.windows.net/pythonqueueb3920bee/messages + response: + body: + string: "\uFEFF6dcdd7e0-9148-4a43-a778-d40ae7c148d7Sat,\ + \ 22 Jun 2019 20:12:57 GMTSat, 29 Jun 2019\ + \ 20:12:57 GMTAgAAAAMAAAAAAAAAvcUR4jYp1QE=Sat,\ + \ 22 Jun 2019 20:12:57 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:12:56 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - a24fbe17-9003-0062-2936-2923d8000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 2054d7f4-952a-11e9-972b-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:57 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://remotestoragename.queue.core.windows.net/pythonqueueb3920bee/messages?peekonly=true + response: + body: + string: "\uFEFF245cfd79-1c16-4d04-ba74-8210b5cad3f9Sat,\ + \ 22 Jun 2019 20:12:57 GMTSat, 29 Jun 2019\ + \ 20:12:57 GMT0message1" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:12:57 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - a24fbe28-9003-0062-3836-2923d8000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e2099e28-952a-11e9-8520-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:22 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueueb3920bee + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:22 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 54d95ff6-f003-00be-0137-29718b000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message1' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e22d5d62-952a-11e9-831e-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:22 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueueb3920bee/messages + response: + body: + string: "\uFEFF24e3e2a4-8261-4221-8569-195ef923c058Sat,\ + \ 22 Jun 2019 20:18:22 GMTSat, 29 Jun 2019\ + \ 20:18:22 GMTAgAAAAMAAAAAAAAABIT0ozcp1QE=Sat,\ + \ 22 Jun 2019 20:18:22 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:22 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 54d96006-f003-00be-0d37-29718b000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message2' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e236b0b8-952a-11e9-8a62-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:22 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueueb3920bee/messages + response: + body: + string: "\uFEFF2030c2e1-3e2e-48e3-a230-859627d55cb6Sat,\ + \ 22 Jun 2019 20:18:22 GMTSat, 29 Jun 2019\ + \ 20:18:22 GMTAgAAAAMAAAAAAAAARV/9ozcp1QE=Sat,\ + \ 22 Jun 2019 20:18:22 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:22 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 54d9600f-f003-00be-1337-29718b000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message3' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e23f9d0c-952a-11e9-bc6c-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:22 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueueb3920bee/messages + response: + body: + string: "\uFEFF638cfe9e-a616-46a3-bbe7-4cfc2de6f711Sat,\ + \ 22 Jun 2019 20:18:22 GMTSat, 29 Jun 2019\ + \ 20:18:22 GMTAgAAAAMAAAAAAAAAhjoGpDcp1QE=Sat,\ + \ 22 Jun 2019 20:18:22 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:22 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 54d96019-f003-00be-1d37-29718b000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message4' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e2489b8c-952a-11e9-a715-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:22 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueueb3920bee/messages + response: + body: + string: "\uFEFF367d7837-f039-4e48-b17f-f9cd39f2eaadSat,\ + \ 22 Jun 2019 20:18:22 GMTSat, 29 Jun 2019\ + \ 20:18:22 GMTAgAAAAMAAAAAAAAA9WMPpDcp1QE=Sat,\ + \ 22 Jun 2019 20:18:22 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:22 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 54d96020-f003-00be-2437-29718b000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e2519c28-952a-11e9-8969-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:22 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueueb3920bee/messages?peekonly=true + response: + body: + string: "\uFEFF24e3e2a4-8261-4221-8569-195ef923c058Sat,\ + \ 22 Jun 2019 20:18:22 GMTSat, 29 Jun 2019\ + \ 20:18:22 GMT0message1" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:22 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 54d9603c-f003-00be-3d37-29718b000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 7b3b08a4-952b-11e9-8b6e-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:39 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueueb3920bee + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:38 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 84e21c7e-7003-004a-7a38-295467000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message1' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 7b5c1062-952b-11e9-857c-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:39 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueueb3920bee/messages + response: + body: + string: "\uFEFFa6cfffdf-b378-4ab3-8365-9edbe691fc03Sat,\ + \ 22 Jun 2019 20:22:39 GMTSat, 29 Jun 2019\ + \ 20:22:39 GMTAgAAAAMAAAAAAAAA+jsjPTgp1QE=Sat,\ + \ 22 Jun 2019 20:22:39 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:38 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 84e21c8e-7003-004a-0838-295467000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message2' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 7b64ae66-952b-11e9-8807-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:39 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueueb3920bee/messages + response: + body: + string: "\uFEFF260aa482-8393-4a37-956a-670517b5782dSat,\ + \ 22 Jun 2019 20:22:39 GMTSat, 29 Jun 2019\ + \ 20:22:39 GMTAgAAAAMAAAAAAAAAJfArPTgp1QE=Sat,\ + \ 22 Jun 2019 20:22:39 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:38 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 84e21c9b-7003-004a-1538-295467000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message3' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 7b6d8054-952b-11e9-980f-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:39 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueueb3920bee/messages + response: + body: + string: "\uFEFFb8e5efb9-653b-4c47-ab81-51eb90a93cc6Sat,\ + \ 22 Jun 2019 20:22:39 GMTSat, 29 Jun 2019\ + \ 20:22:39 GMTAgAAAAMAAAAAAAAARqQ0PTgp1QE=Sat,\ + \ 22 Jun 2019 20:22:39 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:38 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 84e21ca7-7003-004a-2138-295467000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message4' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 7b766994-952b-11e9-acc9-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:39 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueueb3920bee/messages + response: + body: + string: "\uFEFF5b2fecf6-6b33-4788-aba9-f027b3881d83Sat,\ + \ 22 Jun 2019 20:22:39 GMTSat, 29 Jun 2019\ + \ 20:22:39 GMTAgAAAAMAAAAAAAAAg389PTgp1QE=Sat,\ + \ 22 Jun 2019 20:22:39 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:38 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 84e21cb4-7003-004a-2d38-295467000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 7b7eeac6-952b-11e9-8d6c-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:39 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueueb3920bee/messages?peekonly=true + response: + body: + string: "\uFEFFa6cfffdf-b378-4ab3-8365-9edbe691fc03Sat,\ + \ 22 Jun 2019 20:22:39 GMTSat, 29 Jun 2019\ + \ 20:22:39 GMT0message1" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:39 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 84e21cc4-7003-004a-3d38-295467000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - b98c49ae-952d-11e9-a98c-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:43 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueueb3920bee + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:38:44 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 93f60396-5003-0030-723a-293e2a000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message1' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - baeb53da-952d-11e9-898c-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:45 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueueb3920bee/messages + response: + body: + string: "\uFEFF2db280a8-7fa6-4967-bb1b-32bd8361d395Sat,\ + \ 22 Jun 2019 20:38:45 GMTSat, 29 Jun 2019\ + \ 20:38:45 GMTAgAAAAMAAAAAAAAA0XyzfDop1QE=Sat,\ + \ 22 Jun 2019 20:38:45 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:44 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 93f603a2-5003-0030-793a-293e2a000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message2' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - baf444d8-952d-11e9-a751-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:45 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueueb3920bee/messages + response: + body: + string: "\uFEFFca4947b5-2ffd-46aa-ad12-254a152da641Sat,\ + \ 22 Jun 2019 20:38:45 GMTSat, 29 Jun 2019\ + \ 20:38:45 GMTAgAAAAMAAAAAAAAAEVi8fDop1QE=Sat,\ + \ 22 Jun 2019 20:38:45 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:44 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 93f603a3-5003-0030-7a3a-293e2a000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message3' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - bafd5f1c-952d-11e9-9118-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:45 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueueb3920bee/messages + response: + body: + string: "\uFEFFa3923134-dad1-42d8-b823-27bb3007989bSat,\ + \ 22 Jun 2019 20:38:45 GMTSat, 29 Jun 2019\ + \ 20:38:45 GMTAgAAAAMAAAAAAAAAUjPFfDop1QE=Sat,\ + \ 22 Jun 2019 20:38:45 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:44 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 93f603a5-5003-0030-7b3a-293e2a000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message4' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - bb0eb302-952d-11e9-a060-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:45 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueueb3920bee/messages + response: + body: + string: "\uFEFF98b2c81a-0093-4dd1-8cc6-eeadd2ecc445Sat,\ + \ 22 Jun 2019 20:38:45 GMTSat, 29 Jun 2019\ + \ 20:38:45 GMTAgAAAAMAAAAAAAAAnZvWfDop1QE=Sat,\ + \ 22 Jun 2019 20:38:45 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:45 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 93f603a8-5003-0030-7d3a-293e2a000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - bb17933a-952d-11e9-b1eb-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:45 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueueb3920bee/messages?peekonly=true + response: + body: + string: "\uFEFF2db280a8-7fa6-4967-bb1b-32bd8361d395Sat,\ + \ 22 Jun 2019 20:38:45 GMTSat, 29 Jun 2019\ + \ 20:38:45 GMT0message1" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:45 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 93f603aa-5003-0030-7e3a-293e2a000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_peek_messages_with_options.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_peek_messages_with_options.yaml new file mode 100644 index 000000000000..2413ce264ae2 --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_peek_messages_with_options.yaml @@ -0,0 +1,1106 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 208a2e5e-952a-11e9-807d-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:57 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/pythonqueue74f61174 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:12:57 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 4925fb1e-c003-0058-7036-29607b000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message1' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 20ad7e36-952a-11e9-a8a5-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:58 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://remotestoragename.queue.core.windows.net/pythonqueue74f61174/messages + response: + body: + string: "\uFEFF10fd45f4-e5af-4392-8530-638ac421c201Sat,\ + \ 22 Jun 2019 20:12:58 GMTSat, 29 Jun 2019\ + \ 20:12:58 GMTAgAAAAMAAAAAAAAAWZF04jYp1QE=Sat,\ + \ 22 Jun 2019 20:12:58 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:12:57 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 4925fb26-c003-0058-7536-29607b000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message2' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 20b7af64-952a-11e9-9e84-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:58 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://remotestoragename.queue.core.windows.net/pythonqueue74f61174/messages + response: + body: + string: "\uFEFFf2ab239e-a943-40b8-8eb9-df422467b8f1Sat,\ + \ 22 Jun 2019 20:12:58 GMTSat, 29 Jun 2019\ + \ 20:12:58 GMTAgAAAAMAAAAAAAAA8wh+4jYp1QE=Sat,\ + \ 22 Jun 2019 20:12:58 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:12:57 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 4925fb2e-c003-0058-7b36-29607b000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message3' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 20c115a4-952a-11e9-a9c0-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:58 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://remotestoragename.queue.core.windows.net/pythonqueue74f61174/messages + response: + body: + string: "\uFEFF2da9f180-9e31-4ca2-82ec-d77b2093d9adSat,\ + \ 22 Jun 2019 20:12:58 GMTSat, 29 Jun 2019\ + \ 20:12:58 GMTAgAAAAMAAAAAAAAAYjKH4jYp1QE=Sat,\ + \ 22 Jun 2019 20:12:58 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:12:57 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 4925fb32-c003-0058-7f36-29607b000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message4' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 20ca14cc-952a-11e9-99e6-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:58 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://remotestoragename.queue.core.windows.net/pythonqueue74f61174/messages + response: + body: + string: "\uFEFF56b9d093-a0d3-4303-a43e-eaeb2b896f4cSat,\ + \ 22 Jun 2019 20:12:58 GMTSat, 29 Jun 2019\ + \ 20:12:58 GMTAgAAAAMAAAAAAAAAvjSQ4jYp1QE=Sat,\ + \ 22 Jun 2019 20:12:58 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:12:57 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 4925fb3e-c003-0058-0936-29607b000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 20d31dba-952a-11e9-8154-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:58 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://remotestoragename.queue.core.windows.net/pythonqueue74f61174/messages?numofmessages=4&peekonly=true + response: + body: + string: "\uFEFF10fd45f4-e5af-4392-8530-638ac421c201Sat,\ + \ 22 Jun 2019 20:12:58 GMTSat, 29 Jun 2019\ + \ 20:12:58 GMT0message1f2ab239e-a943-40b8-8eb9-df422467b8f1Sat,\ + \ 22 Jun 2019 20:12:58 GMTSat, 29 Jun 2019\ + \ 20:12:58 GMT0message22da9f180-9e31-4ca2-82ec-d77b2093d9adSat,\ + \ 22 Jun 2019 20:12:58 GMTSat, 29 Jun 2019\ + \ 20:12:58 GMT0message356b9d093-a0d3-4303-a43e-eaeb2b896f4cSat,\ + \ 22 Jun 2019 20:12:58 GMTSat, 29 Jun 2019\ + \ 20:12:58 GMT0message4" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:12:57 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 4925fb42-c003-0058-0d36-29607b000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e29beac8-952a-11e9-aefd-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:23 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueue74f61174 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:23 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 7043ff5d-0003-00a0-7437-29ab66000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message1' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e2be69cc-952a-11e9-a559-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:23 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueue74f61174/messages + response: + body: + string: "\uFEFF8eb58466-ecdc-4124-bffd-03a8202a71dfSat,\ + \ 22 Jun 2019 20:18:23 GMTSat, 29 Jun 2019\ + \ 20:18:23 GMTAgAAAAMAAAAAAAAAzEWFpDcp1QE=Sat,\ + \ 22 Jun 2019 20:18:23 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:23 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 7043ff74-0003-00a0-0537-29ab66000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message2' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e2c77618-952a-11e9-b43e-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:23 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueue74f61174/messages + response: + body: + string: "\uFEFF379d2e3d-5b48-4244-ade3-69dee81b4f1eSat,\ + \ 22 Jun 2019 20:18:23 GMTSat, 29 Jun 2019\ + \ 20:18:23 GMTAgAAAAMAAAAAAAAANm+OpDcp1QE=Sat,\ + \ 22 Jun 2019 20:18:23 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:23 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 7043ff8a-0003-00a0-1937-29ab66000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message3' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e2d07afe-952a-11e9-8f12-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:23 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueue74f61174/messages + response: + body: + string: "\uFEFFff42fa28-d927-4040-a0e7-e19d4655d9d4Sat,\ + \ 22 Jun 2019 20:18:23 GMTSat, 29 Jun 2019\ + \ 20:18:23 GMTAgAAAAMAAAAAAAAARfyWpDcp1QE=Sat,\ + \ 22 Jun 2019 20:18:23 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:23 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 7043ff9e-0003-00a0-2837-29ab66000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message4' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e2d8df28-952a-11e9-ba64-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:23 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueue74f61174/messages + response: + body: + string: "\uFEFF0d0e316b-010e-4fdc-97e6-2420190cd5f7Sat,\ + \ 22 Jun 2019 20:18:23 GMTSat, 29 Jun 2019\ + \ 20:18:23 GMTAgAAAAMAAAAAAAAAVImfpDcp1QE=Sat,\ + \ 22 Jun 2019 20:18:23 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:23 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 7043ffb0-0003-00a0-3a37-29ab66000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e2e1910c-952a-11e9-b215-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:23 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueue74f61174/messages?numofmessages=4&peekonly=true + response: + body: + string: "\uFEFF8eb58466-ecdc-4124-bffd-03a8202a71dfSat,\ + \ 22 Jun 2019 20:18:23 GMTSat, 29 Jun 2019\ + \ 20:18:23 GMT0message1379d2e3d-5b48-4244-ade3-69dee81b4f1eSat,\ + \ 22 Jun 2019 20:18:23 GMTSat, 29 Jun 2019\ + \ 20:18:23 GMT0message2ff42fa28-d927-4040-a0e7-e19d4655d9d4Sat,\ + \ 22 Jun 2019 20:18:23 GMTSat, 29 Jun 2019\ + \ 20:18:23 GMT0message30d0e316b-010e-4fdc-97e6-2420190cd5f7Sat,\ + \ 22 Jun 2019 20:18:23 GMTSat, 29 Jun 2019\ + \ 20:18:23 GMT0message4" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:23 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 7043ffbd-0003-00a0-4637-29ab66000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 7be346e8-952b-11e9-b980-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:40 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueue74f61174 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:39 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - ee21fef6-5003-0012-0138-29501c000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message1' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 7c040a4c-952b-11e9-94f6-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:40 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueue74f61174/messages + response: + body: + string: "\uFEFF1bf73a30-3868-41cd-8a4c-80fb74e695b5Sat,\ + \ 22 Jun 2019 20:22:40 GMTSat, 29 Jun 2019\ + \ 20:22:40 GMTAgAAAAMAAAAAAAAAnajLPTgp1QE=Sat,\ + \ 22 Jun 2019 20:22:40 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:39 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - ee21ff0a-5003-0012-1238-29501c000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message2' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 7c0d3a36-952b-11e9-a4f6-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:40 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueue74f61174/messages + response: + body: + string: "\uFEFFe9db3957-dd66-42bd-834f-4d026de88b93Sat,\ + \ 22 Jun 2019 20:22:40 GMTSat, 29 Jun 2019\ + \ 20:22:40 GMTAgAAAAMAAAAAAAAA1YPUPTgp1QE=Sat,\ + \ 22 Jun 2019 20:22:40 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:40 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - ee21ff1a-5003-0012-2138-29501c000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message3' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 7c161250-952b-11e9-a420-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:40 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueue74f61174/messages + response: + body: + string: "\uFEFFc8e34c60-1ad8-446a-a34a-d81414fe6f82Sat,\ + \ 22 Jun 2019 20:22:41 GMTSat, 29 Jun 2019\ + \ 20:22:41 GMTAgAAAAMAAAAAAAAAavvdPTgp1QE=Sat,\ + \ 22 Jun 2019 20:22:41 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:40 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - ee21ff26-5003-0012-2c38-29501c000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message4' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 7c233aa2-952b-11e9-8f74-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:41 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueue74f61174/messages + response: + body: + string: "\uFEFF01a70a5e-c313-429d-b88c-2ff12810b6fdSat,\ + \ 22 Jun 2019 20:22:41 GMTSat, 29 Jun 2019\ + \ 20:22:41 GMTAgAAAAMAAAAAAAAAVi33PTgp1QE=Sat,\ + \ 22 Jun 2019 20:22:41 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:40 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - ee21ff31-5003-0012-3738-29501c000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 7c393f46-952b-11e9-8fa6-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:41 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueue74f61174/messages?numofmessages=4&peekonly=true + response: + body: + string: "\uFEFF1bf73a30-3868-41cd-8a4c-80fb74e695b5Sat,\ + \ 22 Jun 2019 20:22:40 GMTSat, 29 Jun 2019\ + \ 20:22:40 GMT0message1e9db3957-dd66-42bd-834f-4d026de88b93Sat,\ + \ 22 Jun 2019 20:22:40 GMTSat, 29 Jun 2019\ + \ 20:22:40 GMT0message2c8e34c60-1ad8-446a-a34a-d81414fe6f82Sat,\ + \ 22 Jun 2019 20:22:41 GMTSat, 29 Jun 2019\ + \ 20:22:41 GMT0message301a70a5e-c313-429d-b88c-2ff12810b6fdSat,\ + \ 22 Jun 2019 20:22:41 GMTSat, 29 Jun 2019\ + \ 20:22:41 GMT0message4" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:40 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - ee21ff4c-5003-0012-4e38-29501c000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - bb946826-952d-11e9-a47b-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:46 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueue74f61174 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:38:46 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 2f01cdde-0003-004e-4e3a-29a1e5000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message1' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - bbb5f7b6-952d-11e9-a73b-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:46 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueue74f61174/messages + response: + body: + string: "\uFEFF778f909e-5dde-49d7-8396-cbaf86090322Sat,\ + \ 22 Jun 2019 20:38:46 GMTSat, 29 Jun 2019\ + \ 20:38:46 GMTAgAAAAMAAAAAAAAAhX1/fTop1QE=Sat,\ + \ 22 Jun 2019 20:38:46 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:46 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 2f01cded-0003-004e-593a-29a1e5000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message2' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - bbc0bc8c-952d-11e9-8322-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:46 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueue74f61174/messages + response: + body: + string: "\uFEFFb69c85e8-6be9-4aae-b5f4-e597a530b65bSat,\ + \ 22 Jun 2019 20:38:46 GMTSat, 29 Jun 2019\ + \ 20:38:46 GMTAgAAAAMAAAAAAAAAY2qJfTop1QE=Sat,\ + \ 22 Jun 2019 20:38:46 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:46 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 2f01cdfd-0003-004e-663a-29a1e5000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message3' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - bbca9874-952d-11e9-bf6b-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:46 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueue74f61174/messages + response: + body: + string: "\uFEFF0f51ca39-5dbb-46a9-ae1b-f0c4cecb406dSat,\ + \ 22 Jun 2019 20:38:46 GMTSat, 29 Jun 2019\ + \ 20:38:46 GMTAgAAAAMAAAAAAAAAzEGUfTop1QE=Sat,\ + \ 22 Jun 2019 20:38:46 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:46 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 2f01ce07-0003-004e-6f3a-29a1e5000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message4' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - bbd528ca-952d-11e9-a641-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:46 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueue74f61174/messages + response: + body: + string: "\uFEFF003ae5e2-fc11-4a91-8e7c-6da4732805c0Sat,\ + \ 22 Jun 2019 20:38:46 GMTSat, 29 Jun 2019\ + \ 20:38:46 GMTAgAAAAMAAAAAAAAAPGudfTop1QE=Sat,\ + \ 22 Jun 2019 20:38:46 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:46 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 2f01ce13-0003-004e-7a3a-29a1e5000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - bbde7394-952d-11e9-8db8-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:46 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueue74f61174/messages?numofmessages=4&peekonly=true + response: + body: + string: "\uFEFF778f909e-5dde-49d7-8396-cbaf86090322Sat,\ + \ 22 Jun 2019 20:38:46 GMTSat, 29 Jun 2019\ + \ 20:38:46 GMT0message1b69c85e8-6be9-4aae-b5f4-e597a530b65bSat,\ + \ 22 Jun 2019 20:38:46 GMTSat, 29 Jun 2019\ + \ 20:38:46 GMT0message20f51ca39-5dbb-46a9-ae1b-f0c4cecb406dSat,\ + \ 22 Jun 2019 20:38:46 GMTSat, 29 Jun 2019\ + \ 20:38:46 GMT0message3003ae5e2-fc11-4a91-8e7c-6da4732805c0Sat,\ + \ 22 Jun 2019 20:38:46 GMTSat, 29 Jun 2019\ + \ 20:38:46 GMT0message4" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:46 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 2f01ce1b-0003-004e-013a-29a1e5000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_put_message.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_put_message.yaml new file mode 100644 index 000000000000..2d8914087e22 --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_put_message.yaml @@ -0,0 +1,906 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 2107f28a-952a-11e9-b40d-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:58 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/pythonqueue9d3c0b2f + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:12:58 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - ee1fcf1b-5003-0012-4236-29501c000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message1' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 2129dc58-952a-11e9-a075-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:58 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://remotestoragename.queue.core.windows.net/pythonqueue9d3c0b2f/messages + response: + body: + string: "\uFEFFabaf91c5-4155-400b-b2dc-a8c03b8834c3Sat,\ + \ 22 Jun 2019 20:12:58 GMTSat, 29 Jun 2019\ + \ 20:12:58 GMTAgAAAAMAAAAAAAAAmRnw4jYp1QE=Sat,\ + \ 22 Jun 2019 20:12:58 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:12:58 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - ee1fcf38-5003-0012-5a36-29501c000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message2' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 2133abb4-952a-11e9-8ff7-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:58 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://remotestoragename.queue.core.windows.net/pythonqueue9d3c0b2f/messages + response: + body: + string: "\uFEFF7550290f-678c-42e4-9449-247dce1741a1Sat,\ + \ 22 Jun 2019 20:12:59 GMTSat, 29 Jun 2019\ + \ 20:12:59 GMTAgAAAAMAAAAAAAAA3FD84jYp1QE=Sat,\ + \ 22 Jun 2019 20:12:59 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:12:58 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - ee1fcf4e-5003-0012-6f36-29501c000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message3' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 213fadc6-952a-11e9-a7ec-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:59 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://remotestoragename.queue.core.windows.net/pythonqueue9d3c0b2f/messages + response: + body: + string: "\uFEFF7c40543d-a757-488c-8465-426cdecaf774Sat,\ + \ 22 Jun 2019 20:12:59 GMTSat, 29 Jun 2019\ + \ 20:12:59 GMTAgAAAAMAAAAAAAAAFNoG4zYp1QE=Sat,\ + \ 22 Jun 2019 20:12:59 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:12:58 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - ee1fcf66-5003-0012-0536-29501c000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message4' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 2149bc68-952a-11e9-94ec-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:59 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://remotestoragename.queue.core.windows.net/pythonqueue9d3c0b2f/messages + response: + body: + string: "\uFEFF097857d8-d587-44df-bd4d-e0e1d9dc581aSat,\ + \ 22 Jun 2019 20:12:59 GMTSat, 29 Jun 2019\ + \ 20:12:59 GMTAgAAAAMAAAAAAAAAhwMQ4zYp1QE=Sat,\ + \ 22 Jun 2019 20:12:59 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:12:59 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - ee1fcf74-5003-0012-1236-29501c000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e3289cac-952a-11e9-8409-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:24 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueue9d3c0b2f + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:23 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - ad53c034-d003-0008-1637-297f73000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message1' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e3499f42-952a-11e9-b573-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:24 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueue9d3c0b2f/messages + response: + body: + string: "\uFEFF2ded09c8-c27c-4276-b09d-eb0443ce5a2cSat,\ + \ 22 Jun 2019 20:18:24 GMTSat, 29 Jun 2019\ + \ 20:18:24 GMTAgAAAAMAAAAAAAAAEmEQpTcp1QE=Sat,\ + \ 22 Jun 2019 20:18:24 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:23 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - ad53c048-d003-0008-2737-297f73000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message2' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e3528418-952a-11e9-a702-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:24 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueue9d3c0b2f/messages + response: + body: + string: "\uFEFF01f8cf5c-f183-445c-95da-b62895f67b30Sat,\ + \ 22 Jun 2019 20:18:24 GMTSat, 29 Jun 2019\ + \ 20:18:24 GMTAgAAAAMAAAAAAAAAIe4YpTcp1QE=Sat,\ + \ 22 Jun 2019 20:18:24 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:23 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - ad53c056-d003-0008-3537-297f73000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message3' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e35b0a66-952a-11e9-946e-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:24 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueue9d3c0b2f/messages + response: + body: + string: "\uFEFF71ef796e-a33d-45ae-8ba9-331041def4dcSat,\ + \ 22 Jun 2019 20:18:24 GMTSat, 29 Jun 2019\ + \ 20:18:24 GMTAgAAAAMAAAAAAAAAK3shpTcp1QE=Sat,\ + \ 22 Jun 2019 20:18:24 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:24 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - ad53c062-d003-0008-4137-297f73000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message4' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e363aaf4-952a-11e9-8e24-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:24 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueue9d3c0b2f/messages + response: + body: + string: "\uFEFF2a0e37fb-252a-4fb0-922d-d5827f244c51Sat,\ + \ 22 Jun 2019 20:18:24 GMTSat, 29 Jun 2019\ + \ 20:18:24 GMTAgAAAAMAAAAAAAAAiH0qpTcp1QE=Sat,\ + \ 22 Jun 2019 20:18:24 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:24 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - ad53c06e-d003-0008-4c37-297f73000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 7cabc746-952b-11e9-ad54-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:41 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueue9d3c0b2f + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:41 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - f18c06bf-f003-0072-2c38-29153e000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message1' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 7ccd0406-952b-11e9-9809-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:42 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueue9d3c0b2f/messages + response: + body: + string: "\uFEFFa0e9699e-b836-4be5-b91b-118b52f53847Sat,\ + \ 22 Jun 2019 20:22:42 GMTSat, 29 Jun 2019\ + \ 20:22:42 GMTAgAAAAMAAAAAAAAADV+VPjgp1QE=Sat,\ + \ 22 Jun 2019 20:22:42 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:41 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - f18c06c8-f003-0072-3238-29153e000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message2' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 7cd762f4-952b-11e9-9172-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:42 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueue9d3c0b2f/messages + response: + body: + string: "\uFEFFa6a4a07b-80b3-4b56-afed-dc938d429ed6Sat,\ + \ 22 Jun 2019 20:22:42 GMTSat, 29 Jun 2019\ + \ 20:22:42 GMTAgAAAAMAAAAAAAAATjqePjgp1QE=Sat,\ + \ 22 Jun 2019 20:22:42 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:41 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - f18c06cc-f003-0072-3538-29153e000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message3' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 7ce0b958-952b-11e9-aa69-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:42 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueue9d3c0b2f/messages + response: + body: + string: "\uFEFFa797d31d-b7ff-45a9-8340-137235ef740cSat,\ + \ 22 Jun 2019 20:22:42 GMTSat, 29 Jun 2019\ + \ 20:22:42 GMTAgAAAAMAAAAAAAAA1IqnPjgp1QE=Sat,\ + \ 22 Jun 2019 20:22:42 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:41 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - f18c06d7-f003-0072-4038-29153e000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message4' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 7ce95886-952b-11e9-afc2-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:42 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueue9d3c0b2f/messages + response: + body: + string: "\uFEFF08dfa773-d274-4d9d-ad64-572802c31b79Sat,\ + \ 22 Jun 2019 20:22:42 GMTSat, 29 Jun 2019\ + \ 20:22:42 GMTAgAAAAMAAAAAAAAAFmawPjgp1QE=Sat,\ + \ 22 Jun 2019 20:22:42 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:41 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - f18c06e9-f003-0072-4e38-29153e000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - bc5d34cc-952d-11e9-9b64-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:47 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueue9d3c0b2f + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:38:47 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 873dfa2b-3003-00c5-0c3a-291a3b000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message1' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - bc7df734-952d-11e9-82a7-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:47 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueue9d3c0b2f/messages + response: + body: + string: "\uFEFF2e92352b-96ec-44a5-aee0-5180d75d3186Sat,\ + \ 22 Jun 2019 20:38:48 GMTSat, 29 Jun 2019\ + \ 20:38:48 GMTAgAAAAMAAAAAAAAAOU1Gfjop1QE=Sat,\ + \ 22 Jun 2019 20:38:48 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:48 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 873dfa34-3003-00c5-133a-291a3b000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message2' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - bc8757e8-952d-11e9-89ed-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:48 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueue9d3c0b2f/messages + response: + body: + string: "\uFEFF16aec904-e378-443f-b4f8-1675ab0cc931Sat,\ + \ 22 Jun 2019 20:38:48 GMTSat, 29 Jun 2019\ + \ 20:38:48 GMTAgAAAAMAAAAAAAAApHZPfjop1QE=Sat,\ + \ 22 Jun 2019 20:38:48 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:48 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 873dfa37-3003-00c5-163a-291a3b000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message3' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - bc902b8c-952d-11e9-b50a-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:48 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueue9d3c0b2f/messages + response: + body: + string: "\uFEFFf27bfde5-aac5-4773-a9c1-fd38c74fb804Sat,\ + \ 22 Jun 2019 20:38:48 GMTSat, 29 Jun 2019\ + \ 20:38:48 GMTAgAAAAMAAAAAAAAAo9xXfjop1QE=Sat,\ + \ 22 Jun 2019 20:38:48 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:48 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 873dfa3e-3003-00c5-1b3a-291a3b000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message4' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - bc98cc26-952d-11e9-a963-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:48 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueue9d3c0b2f/messages + response: + body: + string: "\uFEFFc36232f9-ee12-4e95-8e21-1e97def5d8c9Sat,\ + \ 22 Jun 2019 20:38:48 GMTSat, 29 Jun 2019\ + \ 20:38:48 GMTAgAAAAMAAAAAAAAA/N5gfjop1QE=Sat,\ + \ 22 Jun 2019 20:38:48 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:48 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 873dfa3f-3003-00c5-1c3a-291a3b000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_put_message_infinite_time_to_live.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_put_message_infinite_time_to_live.yaml new file mode 100644 index 000000000000..e634e202cd40 --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_put_message_infinite_time_to_live.yaml @@ -0,0 +1,518 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 217c161a-952a-11e9-9779-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:59 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/pythonqueuefb421443 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:12:59 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 916308f1-5003-00d5-1436-292cdd000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message1' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 219d1862-952a-11e9-8e5a-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:59 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://remotestoragename.queue.core.windows.net/pythonqueuefb421443/messages?messagettl=-1 + response: + body: + string: "\uFEFFda424edc-bc9a-475f-9198-fd8d71a56664Sat,\ + \ 22 Jun 2019 20:12:59 GMTFri, 31 Dec 9999\ + \ 23:59:59 GMTAgAAAAMAAAAAAAAAue1i4zYp1QE=Sat,\ + \ 22 Jun 2019 20:12:59 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:12:59 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 916308f9-5003-00d5-1a36-292cdd000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 21a60092-952a-11e9-a1cf-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:59 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://remotestoragename.queue.core.windows.net/pythonqueuefb421443/messages?peekonly=true + response: + body: + string: "\uFEFFda424edc-bc9a-475f-9198-fd8d71a56664Sat,\ + \ 22 Jun 2019 20:12:59 GMTFri, 31 Dec 9999\ + \ 23:59:59 GMT0message1" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:12:59 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 916308ff-5003-00d5-1f36-292cdd000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e3a4d150-952a-11e9-974f-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:25 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueuefb421443 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:25 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 7b2fef5f-a003-00cb-6037-29f630000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message1' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e3c688fe-952a-11e9-ae3d-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:25 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueuefb421443/messages?messagettl=-1 + response: + body: + string: "\uFEFFfceb56c1-298c-4f04-bf9f-21557365351fSat,\ + \ 22 Jun 2019 20:18:25 GMTFri, 31 Dec 9999\ + \ 23:59:59 GMTAgAAAAMAAAAAAAAAJJeNpTcp1QE=Sat,\ + \ 22 Jun 2019 20:18:25 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:25 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 7b2fef6d-a003-00cb-6c37-29f630000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e3cf900c-952a-11e9-abf9-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:25 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueuefb421443/messages?peekonly=true + response: + body: + string: "\uFEFFfceb56c1-298c-4f04-bf9f-21557365351fSat,\ + \ 22 Jun 2019 20:18:25 GMTFri, 31 Dec 9999\ + \ 23:59:59 GMT0message1" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:25 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 7b2fef76-a003-00cb-7537-29f630000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 7d3f232e-952b-11e9-b583-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:42 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueuefb421443 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:42 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - b2d54ff5-f003-0079-7e38-290d4a000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message1' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 7d620222-952b-11e9-9843-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:43 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueuefb421443/messages?messagettl=-1 + response: + body: + string: "\uFEFF28ae8cd0-7252-4f21-b3e2-f3240f58fd2eSat,\ + \ 22 Jun 2019 20:22:43 GMTFri, 31 Dec 9999\ + \ 23:59:59 GMTAgAAAAMAAAAAAAAA8MopPzgp1QE=Sat,\ + \ 22 Jun 2019 20:22:43 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:42 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - b2d55001-f003-0079-0638-290d4a000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 7d6c7702-952b-11e9-bf42-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:43 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueuefb421443/messages?peekonly=true + response: + body: + string: "\uFEFF28ae8cd0-7252-4f21-b3e2-f3240f58fd2eSat,\ + \ 22 Jun 2019 20:22:43 GMTFri, 31 Dec 9999\ + \ 23:59:59 GMT0message1" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:42 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - b2d55012-f003-0079-1338-290d4a000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - bd024e62-952d-11e9-9bf4-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:48 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueuefb421443 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:38:48 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 3ab132e0-7003-0068-553a-293a51000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message1' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - bd2357ba-952d-11e9-ad90-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:49 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueuefb421443/messages?messagettl=-1 + response: + body: + string: "\uFEFFc82a10bf-fd7a-4632-8b3b-3b980aba1754Sat,\ + \ 22 Jun 2019 20:38:49 GMTFri, 31 Dec 9999\ + \ 23:59:59 GMTAgAAAAMAAAAAAAAA/F3rfjop1QE=Sat,\ + \ 22 Jun 2019 20:38:49 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:48 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 3ab132e5-7003-0068-593a-293a51000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - bd2c45d2-952d-11e9-8e94-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:49 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueuefb421443/messages?peekonly=true + response: + body: + string: "\uFEFFc82a10bf-fd7a-4632-8b3b-3b980aba1754Sat,\ + \ 22 Jun 2019 20:38:49 GMTFri, 31 Dec 9999\ + \ 23:59:59 GMT0message1" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:48 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 3ab132eb-7003-0068-5d3a-293a51000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_put_message_large_time_to_live.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_put_message_large_time_to_live.yaml new file mode 100644 index 000000000000..b5a0f1371d91 --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_put_message_large_time_to_live.yaml @@ -0,0 +1,518 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 21d8b818-952a-11e9-a1f9-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:00 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/pythonqueuebef712f8 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:13:00 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 84056f12-3003-006f-3236-29ccd4000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message1' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 2201f7e4-952a-11e9-a843-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:00 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://remotestoragename.queue.core.windows.net/pythonqueuebef712f8/messages?messagettl=1073741824 + response: + body: + string: "\uFEFF69421161-19a0-451e-84b7-88e807ed25ebSat,\ + \ 22 Jun 2019 20:13:00 GMTTue, 01 Jul 2053\ + \ 09:50:04 GMTAgAAAAMAAAAAAAAAvobL4zYp1QE=Sat,\ + \ 22 Jun 2019 20:13:00 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:13:00 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 84056f1f-3003-006f-3c36-29ccd4000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 220e7afa-952a-11e9-b5ae-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:00 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://remotestoragename.queue.core.windows.net/pythonqueuebef712f8/messages?peekonly=true + response: + body: + string: "\uFEFF69421161-19a0-451e-84b7-88e807ed25ebSat,\ + \ 22 Jun 2019 20:13:00 GMTTue, 01 Jul 2053\ + \ 09:50:04 GMT0message1" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:13:00 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 84056f26-3003-006f-4236-29ccd4000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e406ed74-952a-11e9-8a60-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:25 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueuebef712f8 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:25 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 81ac87e0-b003-0057-4a37-298d8d000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message1' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e42674b4-952a-11e9-8907-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:26 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueuebef712f8/messages?messagettl=1073741824 + response: + body: + string: "\uFEFFc1abbb9d-5939-486e-945d-4edf94acfdb7Sat,\ + \ 22 Jun 2019 20:18:26 GMTTue, 01 Jul 2053\ + \ 09:55:30 GMTAgAAAAMAAAAAAAAAMsrtpTcp1QE=Sat,\ + \ 22 Jun 2019 20:18:26 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:25 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 81ac87f1-b003-0057-5737-298d8d000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e42fda86-952a-11e9-bdc4-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:26 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueuebef712f8/messages?peekonly=true + response: + body: + string: "\uFEFFc1abbb9d-5939-486e-945d-4edf94acfdb7Sat,\ + \ 22 Jun 2019 20:18:26 GMTTue, 01 Jul 2053\ + \ 09:55:30 GMT0message1" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:25 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 81ac87f4-b003-0057-5a37-298d8d000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 7db929ee-952b-11e9-84fd-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:43 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueuebef712f8 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:43 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - b4fe4b18-0003-00c6-1938-29193c000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message1' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 7ddaa75e-952b-11e9-a75d-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:43 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueuebef712f8/messages?messagettl=1073741824 + response: + body: + string: "\uFEFFcefbfb18-a8e1-4d9d-b23f-23de9d4246e7Sat,\ + \ 22 Jun 2019 20:22:43 GMTTue, 01 Jul 2053\ + \ 09:59:47 GMTAgAAAAMAAAAAAAAASUWiPzgp1QE=Sat,\ + \ 22 Jun 2019 20:22:43 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:43 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - b4fe4b21-0003-00c6-1f38-29193c000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 7de4ad1c-952b-11e9-8e36-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:43 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueuebef712f8/messages?peekonly=true + response: + body: + string: "\uFEFFcefbfb18-a8e1-4d9d-b23f-23de9d4246e7Sat,\ + \ 22 Jun 2019 20:22:43 GMTTue, 01 Jul 2053\ + \ 09:59:47 GMT0message1" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:43 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - b4fe4b28-0003-00c6-2638-29193c000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - bd7b7846-952d-11e9-9d18-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:49 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueuebef712f8 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:38:49 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 44e4ae88-a003-008f-3f3a-292a5c000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message1' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - bd9c9274-952d-11e9-bc68-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:49 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueuebef712f8/messages?messagettl=1073741824 + response: + body: + string: "\uFEFF61a6c752-2a0d-472b-bf7f-2634b4e8ca04Sat,\ + \ 22 Jun 2019 20:38:49 GMTTue, 01 Jul 2053\ + \ 10:15:53 GMTAgAAAAMAAAAAAAAAJThlfzop1QE=Sat,\ + \ 22 Jun 2019 20:38:49 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:49 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 44e4ae9c-a003-008f-4b3a-292a5c000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - bda639e6-952d-11e9-b4c9-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:49 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueuebef712f8/messages?peekonly=true + response: + body: + string: "\uFEFF61a6c752-2a0d-472b-bf7f-2634b4e8ca04Sat,\ + \ 22 Jun 2019 20:38:49 GMTTue, 01 Jul 2053\ + \ 10:15:53 GMT0message1" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:49 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 44e4aeac-a003-008f-573a-292a5c000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_queue_exists.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_queue_exists.yaml new file mode 100644 index 000000000000..b82bf07d5a37 --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_queue_exists.yaml @@ -0,0 +1,322 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 2244a3c8-952a-11e9-a9a1-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:00 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/pythonqueuea8d70bb6 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:13:00 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 7fe22ede-2003-001d-7736-29bdea000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 22658f86-952a-11e9-b3b9-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:00 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://remotestoragename.queue.core.windows.net/pythonqueuea8d70bb6?comp=metadata + response: + body: + string: '' + headers: + Cache-Control: + - no-cache + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:13:00 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Vary: + - Origin + x-ms-approximate-messages-count: + - '0' + x-ms-request-id: + - 7fe22ef2-2003-001d-0936-29bdea000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e464faac-952a-11e9-a13a-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:26 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueuea8d70bb6 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:26 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 54d963da-f003-00be-0e37-29718b000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e486cac6-952a-11e9-afb2-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:26 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueuea8d70bb6?comp=metadata + response: + body: + string: '' + headers: + Cache-Control: + - no-cache + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:26 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Vary: + - Origin + x-ms-approximate-messages-count: + - '0' + x-ms-request-id: + - 54d963e6-f003-00be-1837-29718b000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 7e2a1a00-952b-11e9-add0-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:44 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueuea8d70bb6 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:43 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - d508afcf-e003-00cc-4138-2900b5000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 7e4b14ba-952b-11e9-a9a9-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:44 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueuea8d70bb6?comp=metadata + response: + body: + string: '' + headers: + Cache-Control: + - no-cache + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:43 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Vary: + - Origin + x-ms-approximate-messages-count: + - '0' + x-ms-request-id: + - d508afdb-e003-00cc-4a38-2900b5000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - bded0b9e-952d-11e9-a7ab-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:50 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueuea8d70bb6 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:38:52 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 4b608423-8003-005f-2c3a-2996fe000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - bf57ec6c-952d-11e9-95d8-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:52 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueuea8d70bb6?comp=metadata + response: + body: + string: '' + headers: + Cache-Control: + - no-cache + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:38:52 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Vary: + - Origin + x-ms-approximate-messages-count: + - '0' + x-ms-request-id: + - 4b608491-8003-005f-063a-2996fe000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_queue_not_exists.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_queue_not_exists.yaml new file mode 100644 index 000000000000..62589e7fc5d1 --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_queue_not_exists.yaml @@ -0,0 +1,178 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 228e4708-952a-11e9-b1c8-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:01 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://remotestoragename.queue.core.windows.net/missingdb9b0d66?comp=metadata + response: + body: + string: "\uFEFFQueueNotFoundThe\ + \ specified queue does not exist.\nRequestId:b6b62cea-b003-007e-3736-29fbcf000000\n\ + Time:2019-06-22T20:13:01.4519426Z" + headers: + Content-Length: + - '217' + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:13:00 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Vary: + - Origin + x-ms-error-code: + - QueueNotFound + x-ms-request-id: + - b6b62cea-b003-007e-3736-29fbcf000000 + x-ms-version: + - '2018-03-28' + status: + code: 404 + message: The specified queue does not exist. +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e4b7c51e-952a-11e9-b37b-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:26 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/missingdb9b0d66?comp=metadata + response: + body: + string: "\uFEFFQueueNotFoundThe\ + \ specified queue does not exist.\nRequestId:a297405a-8003-0093-6b37-29f24b000000\n\ + Time:2019-06-22T20:18:27.2134583Z" + headers: + Content-Length: + - '217' + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:27 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Vary: + - Origin + x-ms-error-code: + - QueueNotFound + x-ms-request-id: + - a297405a-8003-0093-6b37-29f24b000000 + x-ms-version: + - '2018-03-28' + status: + code: 404 + message: The specified queue does not exist. +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 7e80a8b6-952b-11e9-91c5-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:45 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/missingdb9b0d66?comp=metadata + response: + body: + string: "\uFEFFQueueNotFoundThe\ + \ specified queue does not exist.\nRequestId:7fe49810-2003-001d-2838-29bdea000000\n\ + Time:2019-06-22T20:22:45.2359493Z" + headers: + Content-Length: + - '217' + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:44 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Vary: + - Origin + x-ms-error-code: + - QueueNotFound + x-ms-request-id: + - 7fe49810-2003-001d-2838-29bdea000000 + x-ms-version: + - '2018-03-28' + status: + code: 404 + message: The specified queue does not exist. +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - bfbb1774-952d-11e9-864d-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:53 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/missingdb9b0d66?comp=metadata + response: + body: + string: "\uFEFFQueueNotFoundThe\ + \ specified queue does not exist.\nRequestId:1e621b54-4003-00e8-683a-2999fb000000\n\ + Time:2019-06-22T20:38:53.6652587Z" + headers: + Content-Length: + - '217' + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:53 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Vary: + - Origin + x-ms-error-code: + - QueueNotFound + x-ms-request-id: + - 1e621b54-4003-00e8-683a-2999fb000000 + x-ms-version: + - '2018-03-28' + status: + code: 404 + message: The specified queue does not exist. +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_set_queue_acl.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_set_queue_acl.yaml new file mode 100644 index 000000000000..89c8a8a87283 --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_set_queue_acl.yaml @@ -0,0 +1,486 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 22bba3ba-952a-11e9-bc97-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:01 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/pythonqueueb4690bf1 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:13:01 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 645f0cf4-8003-0076-4436-29e0bc000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 22ddb362-952a-11e9-990f-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:01 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/pythonqueueb4690bf1?comp=acl + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:13:01 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 645f0cf8-8003-0076-4736-29e0bc000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 231f0838-952a-11e9-8c2d-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:02 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://remotestoragename.queue.core.windows.net/pythonqueueb4690bf1?comp=acl + response: + body: + string: "\uFEFF" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:13:01 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 645f0d0f-8003-0076-5b36-29e0bc000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e4f00408-952a-11e9-917f-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:27 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueueb4690bf1 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:27 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 794f8e72-5003-0091-0e37-29f0b1000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e5127042-952a-11e9-8b97-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:27 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueueb4690bf1?comp=acl + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:28 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 794f8e89-5003-0091-2037-29f0b1000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e5b8670c-952a-11e9-b0ce-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:28 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueueb4690bf1?comp=acl + response: + body: + string: "\uFEFF" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:28 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 794f8f22-5003-0091-2737-29f0b1000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 7ec2dc86-952b-11e9-929a-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:45 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueueb4690bf1 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:45 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 2bbb3d8f-e003-000b-0f38-297c74000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 7ee64a36-952b-11e9-b66f-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:45 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueueb4690bf1?comp=acl + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:45 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 2bbb3d96-e003-000b-1438-297c74000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 7ef4160c-952b-11e9-b249-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:45 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueueb4690bf1?comp=acl + response: + body: + string: "\uFEFF" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:45 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 2bbb3da0-e003-000b-1b38-297c74000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - c003dcc0-952d-11e9-88cb-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:53 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueueb4690bf1 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:38:53 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - b31de929-0003-0067-1a3a-29d7a7000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - c0246cf6-952d-11e9-a156-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:54 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueueb4690bf1?comp=acl + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:38:54 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - b31de92f-0003-0067-1d3a-29d7a7000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - c0ac85dc-952d-11e9-9424-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:55 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueueb4690bf1?comp=acl + response: + body: + string: "\uFEFF" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:54 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - b31de976-0003-0067-523a-29d7a7000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_set_queue_acl_too_many_ids.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_set_queue_acl_too_many_ids.yaml new file mode 100644 index 000000000000..fe8e435b1a7b --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_set_queue_acl_too_many_ids.yaml @@ -0,0 +1,154 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 2356f4fa-952a-11e9-a6a6-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:02 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/pythonqueue755c1155 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:13:02 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 0ac250b7-9003-0069-3836-293bac000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e5eac0d2-952a-11e9-927a-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:29 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueue755c1155 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:29 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 06a83a19-1003-00d9-5337-29c22c000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 7f9c7e5a-952b-11e9-885f-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:46 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueue755c1155 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:46 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 3c6d130a-0003-000a-6038-297d89000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - c0e8e798-952d-11e9-a339-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:55 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueue755c1155 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:38:55 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - a2988025-8003-0093-473a-29f24b000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_set_queue_acl_with_empty_signed_identifier.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_set_queue_acl_with_empty_signed_identifier.yaml new file mode 100644 index 000000000000..41681a0eddeb --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_set_queue_acl_with_empty_signed_identifier.yaml @@ -0,0 +1,490 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 23bbeb46-952a-11e9-9ca2-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:03 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/pythonqueuec3a217f5 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:13:02 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 882cb3cb-1003-0096-7e36-290634000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + empty' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '145' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 23e6e4ac-952a-11e9-890a-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:03 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/pythonqueuec3a217f5?comp=acl + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:13:03 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 882cb3d1-1003-0096-0236-290634000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 244ed94a-952a-11e9-9688-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:04 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://remotestoragename.queue.core.windows.net/pythonqueuec3a217f5?comp=acl + response: + body: + string: "\uFEFFempty" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:13:03 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 882cb3e7-1003-0096-1136-290634000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e632d21e-952a-11e9-a33e-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:29 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueuec3a217f5 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:28 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - a36ffe82-b003-00b9-1037-29870e000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + empty' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '145' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e654dc4c-952a-11e9-ab31-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:29 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueuec3a217f5?comp=acl + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:28 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - a36ffe95-b003-00b9-2037-29870e000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e662fa7a-952a-11e9-a9ce-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:29 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueuec3a217f5?comp=acl + response: + body: + string: "\uFEFFempty" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:28 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - a36ffea2-b003-00b9-2c37-29870e000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 7fed93c6-952b-11e9-8f61-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:47 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueuec3a217f5 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:47 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 147ee428-0003-00ef-0838-296f7e000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + empty' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '145' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 800ed734-952b-11e9-be5c-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:47 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueuec3a217f5?comp=acl + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:47 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 147ee43c-0003-00ef-1938-296f7e000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 801c392e-952b-11e9-887a-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:47 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueuec3a217f5?comp=acl + response: + body: + string: "\uFEFFempty" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:47 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 147ee45e-0003-00ef-3b38-296f7e000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - c13f9502-952d-11e9-8a9b-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:55 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueuec3a217f5 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:38:55 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 2f0001cf-9003-00a5-5a3a-295f19000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + empty' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '145' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - c160d0be-952d-11e9-8a9a-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:56 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueuec3a217f5?comp=acl + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:38:56 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 2f0001d4-9003-00a5-5c3a-295f19000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - c207a790-952d-11e9-9ffa-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:57 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueuec3a217f5?comp=acl + response: + body: + string: "\uFEFFempty" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:56 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 2f0001f2-9003-00a5-763a-295f19000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_set_queue_acl_with_empty_signed_identifiers.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_set_queue_acl_with_empty_signed_identifiers.yaml new file mode 100644 index 000000000000..7f2651cacd66 --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_set_queue_acl_with_empty_signed_identifiers.yaml @@ -0,0 +1,486 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 24849e2c-952a-11e9-a241-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:04 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/pythonqueuedc0a1868 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:13:03 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 33560ee0-e003-0083-2c36-29c4ad000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 24a9e286-952a-11e9-8335-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:04 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/pythonqueuedc0a1868?comp=acl + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:13:05 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 33560efe-e003-0083-4536-29c4ad000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 25787d58-952a-11e9-80a9-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:06 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://remotestoragename.queue.core.windows.net/pythonqueuedc0a1868?comp=acl + response: + body: + string: "\uFEFF" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:13:05 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 33561085-e003-0083-2a36-29c4ad000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e69fa66e-952a-11e9-897f-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:30 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueuedc0a1868 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:30 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 54d96753-f003-00be-1e37-29718b000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e6bf4168-952a-11e9-ad5c-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:30 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueuedc0a1868?comp=acl + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:30 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 54d96765-f003-00be-2e37-29718b000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e6ca1048-952a-11e9-ab4f-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:30 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueuedc0a1868?comp=acl + response: + body: + string: "\uFEFF" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:30 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 54d96772-f003-00be-3937-29718b000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 805b1b6c-952b-11e9-9082-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:48 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueuedc0a1868 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:48 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - ebcd17aa-4003-0085-7b38-2933d5000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 807be9b4-952b-11e9-bee3-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:48 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueuedc0a1868?comp=acl + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:48 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - ebcd17bf-4003-0085-0b38-2933d5000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 80880708-952b-11e9-b4b2-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:48 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueuedc0a1868?comp=acl + response: + body: + string: "\uFEFF" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:48 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - ebcd17d0-4003-0085-1938-2933d5000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - c2530d70-952d-11e9-bc14-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:57 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueuedc0a1868 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:38:57 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 9e4485f5-a003-00ad-703a-29446a000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - c273d4d8-952d-11e9-8207-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:57 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueuedc0a1868?comp=acl + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:38:57 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 9e4485fb-a003-00ad-723a-29446a000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - c27d5562-952d-11e9-a53e-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:58 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueuedc0a1868?comp=acl + response: + body: + string: "\uFEFF" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:57 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 9e448601-a003-00ad-763a-29446a000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_set_queue_acl_with_non_existing_queue.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_set_queue_acl_with_non_existing_queue.yaml new file mode 100644 index 000000000000..8e4c95e0fa34 --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_set_queue_acl_with_non_existing_queue.yaml @@ -0,0 +1,186 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 28096c6c-952a-11e9-9164-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:10 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/pythonqueue50b11604?comp=acl + response: + body: + string: "\uFEFFQueueNotFoundThe\ + \ specified queue does not exist.\nRequestId:fd4a8b74-9003-00c8-1836-29f537000000\n\ + Time:2019-06-22T20:13:10.6874395Z" + headers: + Content-Length: + - '217' + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:13:10 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-error-code: + - QueueNotFound + x-ms-request-id: + - fd4a8b74-9003-00c8-1836-29f537000000 + x-ms-version: + - '2018-03-28' + status: + code: 404 + message: The specified queue does not exist. +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e6f9a45c-952a-11e9-be22-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:30 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueue50b11604?comp=acl + response: + body: + string: "\uFEFFQueueNotFoundThe\ + \ specified queue does not exist.\nRequestId:fea5e16a-b003-00df-6e37-293554000000\n\ + Time:2019-06-22T20:18:31.0076429Z" + headers: + Content-Length: + - '217' + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:30 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-error-code: + - QueueNotFound + x-ms-request-id: + - fea5e16a-b003-00df-6e37-293554000000 + x-ms-version: + - '2018-03-28' + status: + code: 404 + message: The specified queue does not exist. +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 80c42bf4-952b-11e9-a3d7-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:48 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueue50b11604?comp=acl + response: + body: + string: "\uFEFFQueueNotFoundThe\ + \ specified queue does not exist.\nRequestId:5432fbdc-0003-0028-6638-2913bf000000\n\ + Time:2019-06-22T20:22:49.0290644Z" + headers: + Content-Length: + - '217' + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:48 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-error-code: + - QueueNotFound + x-ms-request-id: + - 5432fbdc-0003-0028-6638-2913bf000000 + x-ms-version: + - '2018-03-28' + status: + code: 404 + message: The specified queue does not exist. +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - c2bb6534-952d-11e9-a5ea-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:58 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueue50b11604?comp=acl + response: + body: + string: "\uFEFFQueueNotFoundThe\ + \ specified queue does not exist.\nRequestId:4041e616-6003-00dd-613a-2937ae000000\n\ + Time:2019-06-22T20:38:58.7220070Z" + headers: + Content-Length: + - '217' + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:57 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-error-code: + - QueueNotFound + x-ms-request-id: + - 4041e616-6003-00dd-613a-2937ae000000 + x-ms-version: + - '2018-03-28' + status: + code: 404 + message: The specified queue does not exist. +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_set_queue_acl_with_signed_identifiers.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_set_queue_acl_with_signed_identifiers.yaml new file mode 100644 index 000000000000..ce4e169b7f5d --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_set_queue_acl_with_signed_identifiers.yaml @@ -0,0 +1,490 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 2852b390-952a-11e9-9759-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:10 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/pythonqueue4ea015da + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:13:11 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - b9634b3e-f003-00d8-6036-29c3d1000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + testid2019-06-22T20:08:11Z2019-06-22T21:13:11Zr' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '257' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 28784902-952a-11e9-8fee-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:11 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/pythonqueue4ea015da?comp=acl + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:13:11 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - b9634b4d-f003-00d8-6a36-29c3d1000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 2886e930-952a-11e9-835a-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:11 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://remotestoragename.queue.core.windows.net/pythonqueue4ea015da?comp=acl + response: + body: + string: "\uFEFFtestid2019-06-22T20:08:11.0000000Z2019-06-22T21:13:11.0000000Zr" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:13:11 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - b9634b60-f003-00d8-7c36-29c3d1000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e7448b3e-952a-11e9-abcf-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:31 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueue4ea015da + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:31 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - c6bebdda-e003-006d-3537-29ce2e000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + testid2019-06-22T20:13:31Z2019-06-22T21:18:31Zr' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '257' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e76499a6-952a-11e9-8f68-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:31 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueue4ea015da?comp=acl + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:31 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - c6bebde5-e003-006d-3b37-29ce2e000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e772b5f4-952a-11e9-b20f-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:31 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueue4ea015da?comp=acl + response: + body: + string: "\uFEFFtestid2019-06-22T20:13:31.0000000Z2019-06-22T21:18:31.0000000Zr" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:31 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - c6bebdef-e003-006d-4137-29ce2e000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 81161458-952b-11e9-8409-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:49 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueue4ea015da + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:48 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 73ce985c-2003-0095-0738-290533000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + testid2019-06-22T20:17:49Z2019-06-22T21:22:49Zr' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '257' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 8139d1ae-952b-11e9-9858-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:49 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueue4ea015da?comp=acl + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:50 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 73ce986a-2003-0095-0f38-290533000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 81fb960c-952b-11e9-8c3b-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:50 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueue4ea015da?comp=acl + response: + body: + string: "\uFEFFtestid2019-06-22T20:17:49.0000000Z2019-06-22T21:22:49.0000000Zr" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:50 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 73ce98ec-2003-0095-0638-290533000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - c3198f54-952d-11e9-9a0f-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:59 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueue4ea015da + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:38:58 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - fcfe1d9c-1003-001e-283a-29beed000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + testid2019-06-22T20:33:59Z2019-06-22T21:38:59Zr' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '257' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - c33ac9d0-952d-11e9-adc3-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:59 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueue4ea015da?comp=acl + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:38:59 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - fcfe1da2-1003-001e-2b3a-29beed000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - c3a0d8cc-952d-11e9-b08f-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:59 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueue4ea015da?comp=acl + response: + body: + string: "\uFEFFtestid2019-06-22T20:33:59.0000000Z2019-06-22T21:38:59.0000000Zr" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:59 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - fcfe1de7-1003-001e-643a-29beed000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_set_queue_metadata.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_set_queue_metadata.yaml new file mode 100644 index 000000000000..88989640a2ae --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_set_queue_metadata.yaml @@ -0,0 +1,506 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 28ba59dc-952a-11e9-9eb7-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:11 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/pythonqueuef69d0e02 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:13:11 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 0632d208-6003-0092-3936-29f3b6000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 28df5fac-952a-11e9-8531-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:11 GMT + x-ms-meta-hello: + - world + x-ms-meta-number: + - '43' + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/pythonqueuef69d0e02?comp=metadata + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:13:12 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 0632d215-6003-0092-4136-29f3b6000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 29f957da-952a-11e9-9dca-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:13 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://remotestoragename.queue.core.windows.net/pythonqueuef69d0e02?comp=metadata + response: + body: + string: '' + headers: + Cache-Control: + - no-cache + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:13:12 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Vary: + - Origin + x-ms-approximate-messages-count: + - '0' + x-ms-meta-hello: + - world + x-ms-meta-number: + - '43' + x-ms-request-id: + - 0632d2d7-6003-0092-7036-29f3b6000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e7ad37b0-952a-11e9-b00d-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:31 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueuef69d0e02 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:31 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - f7bcebf7-8003-0054-0b37-298e8a000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e7cd44cc-952a-11e9-9834-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:32 GMT + x-ms-meta-hello: + - world + x-ms-meta-number: + - '43' + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueuef69d0e02?comp=metadata + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:31 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - f7bcec0d-8003-0054-1d37-298e8a000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e7d61dd8-952a-11e9-9e2d-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:32 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueuef69d0e02?comp=metadata + response: + body: + string: '' + headers: + Cache-Control: + - no-cache + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:31 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Vary: + - Origin + x-ms-approximate-messages-count: + - '0' + x-ms-meta-hello: + - world + x-ms-meta-number: + - '43' + x-ms-request-id: + - f7bcec22-8003-0054-3137-298e8a000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 82c414da-952b-11e9-ae32-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:52 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueuef69d0e02 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:52 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 0633ce95-6003-0092-1238-29f3b6000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 8313f234-952b-11e9-afda-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:52 GMT + x-ms-meta-hello: + - world + x-ms-meta-number: + - '43' + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueuef69d0e02?comp=metadata + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:52 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 0633cee0-6003-0092-5a38-29f3b6000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 831d2e3a-952b-11e9-adea-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:52 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueuef69d0e02?comp=metadata + response: + body: + string: '' + headers: + Cache-Control: + - no-cache + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:52 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Vary: + - Origin + x-ms-approximate-messages-count: + - '0' + x-ms-meta-hello: + - world + x-ms-meta-number: + - '43' + x-ms-request-id: + - 0633cee7-6003-0092-6138-29f3b6000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - c4d19d78-952d-11e9-92f0-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:01 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueuef69d0e02 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:39:01 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 3c6eb239-0003-000a-5c3a-297d89000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - c4f36228-952d-11e9-a26b-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:02 GMT + x-ms-meta-hello: + - world + x-ms-meta-number: + - '43' + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueuef69d0e02?comp=metadata + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:39:02 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 3c6eb23e-0003-000a-5f3a-297d89000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - c5b6ebc6-952d-11e9-bd26-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:03 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueuef69d0e02?comp=metadata + response: + body: + string: '' + headers: + Cache-Control: + - no-cache + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:39:02 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Vary: + - Origin + x-ms-approximate-messages-count: + - '0' + x-ms-meta-hello: + - world + x-ms-meta-number: + - '43' + x-ms-request-id: + - 3c6eb2a3-0003-000a-353a-297d89000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_unicode_create_queue_unicode_name.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_unicode_create_queue_unicode_name.yaml new file mode 100644 index 000000000000..941f1ace95cf --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_unicode_create_queue_unicode_name.yaml @@ -0,0 +1,178 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 2a39871a-952a-11e9-9523-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:14 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/%E5%95%8A%E9%BD%84%E4%B8%82%E7%8B%9B%E7%8B%9C + response: + body: + string: "\uFEFFInvalidResourceNameThe\ + \ specifed resource name contains invalid characters.\nRequestId:96754b44-b003-009b-2636-29e938000000\n\ + Time:2019-06-22T20:13:14.4920008Z" + headers: + Content-Length: + - '243' + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:13:14 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-error-code: + - InvalidResourceName + x-ms-request-id: + - 96754b44-b003-009b-2636-29e938000000 + x-ms-version: + - '2018-03-28' + status: + code: 400 + message: The specifed resource name contains invalid characters. +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e8093024-952a-11e9-b975-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:32 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/%E5%95%8A%E9%BD%84%E4%B8%82%E7%8B%9B%E7%8B%9C + response: + body: + string: "\uFEFFInvalidResourceNameThe\ + \ specifed resource name contains invalid characters.\nRequestId:c545f0c5-9003-00ae-3d37-29476d000000\n\ + Time:2019-06-22T20:18:32.8886233Z" + headers: + Content-Length: + - '243' + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:32 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-error-code: + - InvalidResourceName + x-ms-request-id: + - c545f0c5-9003-00ae-3d37-29476d000000 + x-ms-version: + - '2018-03-28' + status: + code: 400 + message: The specifed resource name contains invalid characters. +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 8359b186-952b-11e9-bf6d-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:53 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/%E5%95%8A%E9%BD%84%E4%B8%82%E7%8B%9B%E7%8B%9C + response: + body: + string: "\uFEFFInvalidResourceNameThe\ + \ specifed resource name contains invalid characters.\nRequestId:f0ca0c73-b003-00d4-2d38-292d20000000\n\ + Time:2019-06-22T20:22:53.3439399Z" + headers: + Content-Length: + - '243' + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:53 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-error-code: + - InvalidResourceName + x-ms-request-id: + - f0ca0c73-b003-00d4-2d38-292d20000000 + x-ms-version: + - '2018-03-28' + status: + code: 400 + message: The specifed resource name contains invalid characters. +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - c600e686-952d-11e9-be2a-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:03 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/%E5%95%8A%E9%BD%84%E4%B8%82%E7%8B%9B%E7%8B%9C + response: + body: + string: "\uFEFFInvalidResourceNameThe\ + \ specifed resource name contains invalid characters.\nRequestId:5204ae80-d003-006e-453a-29cd29000000\n\ + Time:2019-06-22T20:39:04.9889844Z" + headers: + Content-Length: + - '243' + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:39:04 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-error-code: + - InvalidResourceName + x-ms-request-id: + - 5204ae80-d003-006e-453a-29cd29000000 + x-ms-version: + - '2018-03-28' + status: + code: 400 + message: The specifed resource name contains invalid characters. +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_unicode_get_messages_unicode_data.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_unicode_get_messages_unicode_data.yaml new file mode 100644 index 000000000000..3e8a479d8e05 --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_unicode_get_messages_unicode_data.yaml @@ -0,0 +1,522 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 2a7b79d8-952a-11e9-99dd-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:14 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/pythonqueuef853140e + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:13:14 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 2bbaa09e-e003-000b-2636-297c74000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: "\nmessage1\u3688\ + " + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '106' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 2a9e84e4-952a-11e9-b4d7-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:14 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://remotestoragename.queue.core.windows.net/pythonqueuef853140e/messages + response: + body: + string: "\uFEFF956db5c6-f895-42bf-8d30-606350ee9015Sat,\ + \ 22 Jun 2019 20:13:14 GMTSat, 29 Jun 2019\ + \ 20:13:14 GMTAgAAAAMAAAAAAAAAH5Zu7DYp1QE=Sat,\ + \ 22 Jun 2019 20:13:14 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:13:14 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 2bbaa0a7-e003-000b-2d36-297c74000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 2ab19e62-952a-11e9-98cf-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:14 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://remotestoragename.queue.core.windows.net/pythonqueuef853140e/messages + response: + body: + string: "\uFEFF956db5c6-f895-42bf-8d30-606350ee9015Sat,\ + \ 22 Jun 2019 20:13:14 GMTSat, 29 Jun 2019\ + \ 20:13:14 GMTAgAAAAMAAAAAAAAAA3hY/jYp1QE=Sat,\ + \ 22 Jun 2019 20:13:44 GMT1message1\u3688\ + " + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:13:14 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 2bbaa0ad-e003-000b-3336-297c74000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e849c65c-952a-11e9-9679-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:32 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueuef853140e + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:32 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 47478cc5-2003-00da-2f37-29c12b000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: "\nmessage1\u3688\ + " + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '106' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e86c73d2-952a-11e9-969c-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:33 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueuef853140e/messages + response: + body: + string: "\uFEFF42cd8c38-9c3d-477e-bf38-f94812824644Sat,\ + \ 22 Jun 2019 20:18:33 GMTSat, 29 Jun 2019\ + \ 20:18:33 GMTAgAAAAMAAAAAAAAA8Zxpqjcp1QE=Sat,\ + \ 22 Jun 2019 20:18:33 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:33 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 47478cda-2003-00da-3f37-29c12b000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e8abd8ec-952a-11e9-9b7f-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:33 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueuef853140e/messages + response: + body: + string: "\uFEFF42cd8c38-9c3d-477e-bf38-f94812824644Sat,\ + \ 22 Jun 2019 20:18:33 GMTSat, 29 Jun 2019\ + \ 20:18:33 GMTAgAAAAMAAAAAAAAAEKJVvDcp1QE=Sat,\ + \ 22 Jun 2019 20:19:03 GMT1message1\u3688\ + " + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:33 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 47478d69-2003-00da-4137-29c12b000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 83903c18-952b-11e9-9037-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:53 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueuef853140e + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:53 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - e34992d3-5003-007f-4f38-29fa32000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: "\nmessage1\u3688\ + " + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '106' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 83b12a7a-952b-11e9-98e8-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:53 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueuef853140e/messages + response: + body: + string: "\uFEFF39309ea3-92b4-4ee0-8dfc-bfa68648af54Sat,\ + \ 22 Jun 2019 20:22:54 GMTSat, 29 Jun 2019\ + \ 20:22:54 GMTAgAAAAMAAAAAAAAAauyuRTgp1QE=Sat,\ + \ 22 Jun 2019 20:22:54 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:54 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - e34992db-5003-007f-5538-29fa32000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 83f0c038-952b-11e9-812c-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:54 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueuef853140e/messages + response: + body: + string: "\uFEFF39309ea3-92b4-4ee0-8dfc-bfa68648af54Sat,\ + \ 22 Jun 2019 20:22:54 GMTSat, 29 Jun 2019\ + \ 20:22:54 GMTAgAAAAMAAAAAAAAA7d+ZVzgp1QE=Sat,\ + \ 22 Jun 2019 20:23:24 GMT1message1\u3688\ + " + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:54 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - e3499307-5003-007f-7e38-29fa32000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - c6be41e8-952d-11e9-b18f-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:05 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueuef853140e + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:39:04 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 4041e8ee-6003-00dd-0c3a-2937ae000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: "\nmessage1\u3688\ + " + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '106' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - c6de6b28-952d-11e9-84dd-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:05 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueuef853140e/messages + response: + body: + string: "\uFEFF0eebaf54-9a63-4c31-bba6-efdd77552edcSat,\ + \ 22 Jun 2019 20:39:05 GMTSat, 29 Jun 2019\ + \ 20:39:05 GMTAgAAAAMAAAAAAAAAgrS5iDop1QE=Sat,\ + \ 22 Jun 2019 20:39:05 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:39:04 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 4041e8f5-6003-00dd-113a-2937ae000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - c6faf5f4-952d-11e9-9408-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:05 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueuef853140e/messages + response: + body: + string: "\uFEFF0eebaf54-9a63-4c31-bba6-efdd77552edcSat,\ + \ 22 Jun 2019 20:39:05 GMTSat, 29 Jun 2019\ + \ 20:39:05 GMTAgAAAAMAAAAAAAAAZESlmjop1QE=Sat,\ + \ 22 Jun 2019 20:39:35 GMT1message1\u3688\ + " + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:39:04 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 4041e90d-6003-00dd-233a-2937ae000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_unicode_update_message_unicode_data.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_unicode_update_message_unicode_data.yaml new file mode 100644 index 000000000000..f90927199fc3 --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_unicode_update_message_unicode_data.yaml @@ -0,0 +1,886 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 2adc397e-952a-11e9-97d9-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:15 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/pythonqueue223e14de + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:13:14 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 193b3fd2-0003-00e4-0536-29770a000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message1' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 2afbe72e-952a-11e9-89a8-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:15 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://remotestoragename.queue.core.windows.net/pythonqueue223e14de/messages + response: + body: + string: "\uFEFF6bfc1578-8e80-4df9-80dd-87675d27ed24Sat,\ + \ 22 Jun 2019 20:13:15 GMTSat, 29 Jun 2019\ + \ 20:13:15 GMTAgAAAAMAAAAAAAAAf87B7DYp1QE=Sat,\ + \ 22 Jun 2019 20:13:15 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:13:14 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 193b3fd8-0003-00e4-0836-29770a000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 2b05a8f4-952a-11e9-80a3-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:15 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://remotestoragename.queue.core.windows.net/pythonqueue223e14de/messages + response: + body: + string: "\uFEFF6bfc1578-8e80-4df9-80dd-87675d27ed24Sat,\ + \ 22 Jun 2019 20:13:15 GMTSat, 29 Jun 2019\ + \ 20:13:15 GMTAgAAAAMAAAAAAAAAAcKs/jYp1QE=Sat,\ + \ 22 Jun 2019 20:13:45 GMT1message1" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:13:14 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 193b3fe3-0003-00e4-1036-29770a000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: "\n\u554A\ + \u9F44\u4E02\u72DB\u72DC" + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '110' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 2b0e9b9e-952a-11e9-af1c-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:15 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/pythonqueue223e14de/messages/6bfc1578-8e80-4df9-80dd-87675d27ed24?popreceipt=AgAAAAMAAAAAAAAAAcKs%2FjYp1QE%3D&visibilitytimeout=0 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:13:15 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-popreceipt: + - AwAAAAMAAAAAAAAA7IkY7TYp1QEBAAAA + x-ms-request-id: + - 193b3fe8-0003-00e4-1436-29770a000000 + x-ms-time-next-visible: + - Sat, 22 Jun 2019 20:13:16 GMT + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 2b5b6f50-952a-11e9-8b42-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:16 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://remotestoragename.queue.core.windows.net/pythonqueue223e14de/messages + response: + body: + string: "\uFEFF6bfc1578-8e80-4df9-80dd-87675d27ed24Sat,\ + \ 22 Jun 2019 20:13:15 GMTSat, 29 Jun 2019\ + \ 20:13:15 GMTAgAAAAMAAAAAAAAA55IC/zYp1QE=Sat,\ + \ 22 Jun 2019 20:13:46 GMT2\u554A\ + \u9F44\u4E02\u72DB\u72DC" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:13:15 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 193b4021-0003-00e4-4436-29770a000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e8f56c5a-952a-11e9-8c6f-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:34 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueue223e14de + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:34 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - bcf4a418-6003-0055-8037-298f77000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message1' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e9182b3a-952a-11e9-8d8d-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:34 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueue223e14de/messages + response: + body: + string: "\uFEFFbadee19e-591a-4805-a686-0c8541c80fa0Sat,\ + \ 22 Jun 2019 20:18:34 GMTSat, 29 Jun 2019\ + \ 20:18:34 GMTAgAAAAMAAAAAAAAAjlffqjcp1QE=Sat,\ + \ 22 Jun 2019 20:18:34 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:34 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - bcf4a424-6003-0055-0637-298f77000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e921ba26-952a-11e9-a3d6-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:34 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueue223e14de/messages + response: + body: + string: "\uFEFFbadee19e-591a-4805-a686-0c8541c80fa0Sat,\ + \ 22 Jun 2019 20:18:34 GMTSat, 29 Jun 2019\ + \ 20:18:34 GMTAgAAAAMAAAAAAAAAig7LvDcp1QE=Sat,\ + \ 22 Jun 2019 20:19:04 GMT1message1" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:34 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - bcf4a42e-6003-0055-1037-298f77000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: "\n\u554A\ + \u9F44\u4E02\u72DB\u72DC" + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '110' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e92bea0a-952a-11e9-9976-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:34 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueue223e14de/messages/badee19e-591a-4805-a686-0c8541c80fa0?popreceipt=AgAAAAMAAAAAAAAAig7LvDcp1QE%3D&visibilitytimeout=0 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:34 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-popreceipt: + - AwAAAAMAAAAAAAAA0bowqzcp1QEBAAAA + x-ms-request-id: + - bcf4a439-6003-0055-1b37-298f77000000 + x-ms-time-next-visible: + - Sat, 22 Jun 2019 20:18:34 GMT + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e972f5ba-952a-11e9-afd3-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:34 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueue223e14de/messages + response: + body: + string: "\uFEFFbadee19e-591a-4805-a686-0c8541c80fa0Sat,\ + \ 22 Jun 2019 20:18:34 GMTSat, 29 Jun 2019\ + \ 20:18:34 GMTAgAAAAMAAAAAAAAAV64bvTcp1QE=Sat,\ + \ 22 Jun 2019 20:19:04 GMT2\u554A\ + \u9F44\u4E02\u72DB\u72DC" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:34 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - bcf4a491-6003-0055-6037-298f77000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 844c0df8-952b-11e9-8356-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:54 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueue223e14de + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:54 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 7bd999d0-3003-00ce-2138-29024f000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message1' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 846e3766-952b-11e9-ab29-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:54 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueue223e14de/messages + response: + body: + string: "\uFEFFcd70bb73-c121-484c-b75a-83f489b1e638Sat,\ + \ 22 Jun 2019 20:22:55 GMTSat, 29 Jun 2019\ + \ 20:22:55 GMTAgAAAAMAAAAAAAAAiDY2Rjgp1QE=Sat,\ + \ 22 Jun 2019 20:22:55 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:54 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 7bd999d5-3003-00ce-2438-29024f000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 8477ec86-952b-11e9-9cc5-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:55 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueue223e14de/messages + response: + body: + string: "\uFEFFcd70bb73-c121-484c-b75a-83f489b1e638Sat,\ + \ 22 Jun 2019 20:22:55 GMTSat, 29 Jun 2019\ + \ 20:22:55 GMTAgAAAAMAAAAAAAAA3NsgWDgp1QE=Sat,\ + \ 22 Jun 2019 20:23:25 GMT1message1" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:54 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 7bd999dc-3003-00ce-2938-29024f000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: "\n\u554A\ + \u9F44\u4E02\u72DB\u72DC" + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '110' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 84814374-952b-11e9-b4f2-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:55 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueue223e14de/messages/cd70bb73-c121-484c-b75a-83f489b1e638?popreceipt=AgAAAAMAAAAAAAAA3NsgWDgp1QE%3D&visibilitytimeout=0 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:54 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-popreceipt: + - AwAAAAMAAAAAAAAArcdvRjgp1QEBAAAA + x-ms-request-id: + - 7bd999df-3003-00ce-2c38-29024f000000 + x-ms-time-next-visible: + - Sat, 22 Jun 2019 20:22:55 GMT + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 84b195b0-952b-11e9-912b-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:55 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueue223e14de/messages + response: + body: + string: "\uFEFFcd70bb73-c121-484c-b75a-83f489b1e638Sat,\ + \ 22 Jun 2019 20:22:55 GMTSat, 29 Jun 2019\ + \ 20:22:55 GMTAgAAAAMAAAAAAAAA8kVaWDgp1QE=Sat,\ + \ 22 Jun 2019 20:23:25 GMT2\u554A\ + \u9F44\u4E02\u72DB\u72DC" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:54 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 7bd999fe-3003-00ce-4438-29024f000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - c75a7380-952d-11e9-9bc7-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:06 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueue223e14de + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:39:05 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - e9f352be-3003-0002-033a-2966fa000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message1' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - c77c8434-952d-11e9-a18f-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:06 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueue223e14de/messages + response: + body: + string: "\uFEFF72ffe2a7-12da-4d1d-b8f2-8f40d2b955b8Sat,\ + \ 22 Jun 2019 20:39:06 GMTSat, 29 Jun 2019\ + \ 20:39:06 GMTAgAAAAMAAAAAAAAAA9BEiTop1QE=Sat,\ + \ 22 Jun 2019 20:39:06 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:39:05 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - e9f352c4-3003-0002-073a-2966fa000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - c785bd62-952d-11e9-a0da-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:06 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueue223e14de/messages + response: + body: + string: "\uFEFF72ffe2a7-12da-4d1d-b8f2-8f40d2b955b8Sat,\ + \ 22 Jun 2019 20:39:06 GMTSat, 29 Jun 2019\ + \ 20:39:06 GMTAgAAAAMAAAAAAAAAWnUvmzop1QE=Sat,\ + \ 22 Jun 2019 20:39:36 GMT1message1" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:39:06 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - e9f352ca-3003-0002-0d3a-2966fa000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: "\n\u554A\ + \u9F44\u4E02\u72DB\u72DC" + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '110' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - c78ecdf6-952d-11e9-8016-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:06 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueue223e14de/messages/72ffe2a7-12da-4d1d-b8f2-8f40d2b955b8?popreceipt=AgAAAAMAAAAAAAAAWnUvmzop1QE%3D&visibilitytimeout=0 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:39:08 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-popreceipt: + - AwAAAAMAAAAAAAAAJ1ypijop1QEBAAAA + x-ms-request-id: + - e9f352d0-3003-0002-123a-2966fa000000 + x-ms-time-next-visible: + - Sat, 22 Jun 2019 20:39:08 GMT + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - c8ea7b82-952d-11e9-98de-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:08 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueue223e14de/messages + response: + body: + string: "\uFEFF72ffe2a7-12da-4d1d-b8f2-8f40d2b955b8Sat,\ + \ 22 Jun 2019 20:39:06 GMTSat, 29 Jun 2019\ + \ 20:39:06 GMTAgAAAAMAAAAAAAAAliiUnDop1QE=Sat,\ + \ 22 Jun 2019 20:39:38 GMT2\u554A\ + \u9F44\u4E02\u72DB\u72DC" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:39:08 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - e9f353a7-3003-0002-3d3a-2966fa000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_update_message.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_update_message.yaml new file mode 100644 index 000000000000..eff132cfa07a --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_update_message.yaml @@ -0,0 +1,878 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 2b8a3706-952a-11e9-95ac-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:16 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/pythonqueuec0820c59 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:13:16 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 44ddeb3a-a003-008f-6b36-292a5c000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message1' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 2baa45ee-952a-11e9-b59f-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:16 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://remotestoragename.queue.core.windows.net/pythonqueuec0820c59/messages + response: + body: + string: "\uFEFF83095281-1ec9-4175-9dea-586954608941Sat,\ + \ 22 Jun 2019 20:13:16 GMTSat, 29 Jun 2019\ + \ 20:13:16 GMTAgAAAAMAAAAAAAAA0Qhw7TYp1QE=Sat,\ + \ 22 Jun 2019 20:13:16 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:13:16 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 44ddeb47-a003-008f-7636-292a5c000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 2bb2d7e8-952a-11e9-85b3-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:16 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://remotestoragename.queue.core.windows.net/pythonqueuec0820c59/messages + response: + body: + string: "\uFEFF83095281-1ec9-4175-9dea-586954608941Sat,\ + \ 22 Jun 2019 20:13:16 GMTSat, 29 Jun 2019\ + \ 20:13:16 GMTAgAAAAMAAAAAAAAAnsNZ/zYp1QE=Sat,\ + \ 22 Jun 2019 20:13:46 GMT1message1" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:13:16 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 44ddeb53-a003-008f-8036-292a5c000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 2bbb7a4c-952a-11e9-b70c-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:16 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/pythonqueuec0820c59/messages/83095281-1ec9-4175-9dea-586954608941?popreceipt=AgAAAAMAAAAAAAAAnsNZ%2FzYp1QE%3D&visibilitytimeout=0 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:13:16 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-popreceipt: + - AwAAAAMAAAAAAAAAJHGB7TYp1QEBAAAA + x-ms-request-id: + - 44ddeb5a-a003-008f-0536-292a5c000000 + x-ms-time-next-visible: + - Sat, 22 Jun 2019 20:13:16 GMT + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 2bc4737e-952a-11e9-ac85-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:16 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://remotestoragename.queue.core.windows.net/pythonqueuec0820c59/messages + response: + body: + string: "\uFEFF83095281-1ec9-4175-9dea-586954608941Sat,\ + \ 22 Jun 2019 20:13:16 GMTSat, 29 Jun 2019\ + \ 20:13:16 GMTAgAAAAMAAAAAAAAANqFr/zYp1QE=Sat,\ + \ 22 Jun 2019 20:13:46 GMT2message1" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:13:16 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 44ddeb69-a003-008f-1036-292a5c000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e9be19a2-952a-11e9-bbce-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:35 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueuec0820c59 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:35 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - b6b69a26-b003-007e-1c37-29fbcf000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message1' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e9e114fa-952a-11e9-ab1d-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:35 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueuec0820c59/messages + response: + body: + string: "\uFEFFe14c8959-6eb7-4504-9d4d-27fa682ba738Sat,\ + \ 22 Jun 2019 20:18:35 GMTSat, 29 Jun 2019\ + \ 20:18:35 GMTAgAAAAMAAAAAAAAA1Uaqqzcp1QE=Sat,\ + \ 22 Jun 2019 20:18:35 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:35 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - b6b69a30-b003-007e-2237-29fbcf000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e9ec2b08-952a-11e9-962c-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:35 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueuec0820c59/messages + response: + body: + string: "\uFEFFe14c8959-6eb7-4504-9d4d-27fa682ba738Sat,\ + \ 22 Jun 2019 20:18:35 GMTSat, 29 Jun 2019\ + \ 20:18:35 GMTAgAAAAMAAAAAAAAALeyUvTcp1QE=Sat,\ + \ 22 Jun 2019 20:19:05 GMT1message1" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:35 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - b6b69a31-b003-007e-2337-29fbcf000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e9f56bb4-952a-11e9-9ca4-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:35 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueuec0820c59/messages/e14c8959-6eb7-4504-9d4d-27fa682ba738?popreceipt=AgAAAAMAAAAAAAAALeyUvTcp1QE%3D&visibilitytimeout=0 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:35 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-popreceipt: + - AwAAAAMAAAAAAAAAmHK8qzcp1QEBAAAA + x-ms-request-id: + - b6b69a36-b003-007e-2737-29fbcf000000 + x-ms-time-next-visible: + - Sat, 22 Jun 2019 20:18:35 GMT + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e9fe3988-952a-11e9-8897-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:35 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueuec0820c59/messages + response: + body: + string: "\uFEFFe14c8959-6eb7-4504-9d4d-27fa682ba738Sat,\ + \ 22 Jun 2019 20:18:35 GMTSat, 29 Jun 2019\ + \ 20:18:35 GMTAgAAAAMAAAAAAAAAusmmvTcp1QE=Sat,\ + \ 22 Jun 2019 20:19:05 GMT2message1" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:35 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - b6b69a3d-b003-007e-2d37-29fbcf000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 85152d64-952b-11e9-b241-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:56 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueuec0820c59 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:56 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - b0cdb40e-f003-0050-3e38-297b08000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message1' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 8537880a-952b-11e9-994d-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:56 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueuec0820c59/messages + response: + body: + string: "\uFEFFf446f6b5-e9f9-4abf-a32b-3ed9358b4851Sat,\ + \ 22 Jun 2019 20:22:56 GMTSat, 29 Jun 2019\ + \ 20:22:56 GMTAgAAAAMAAAAAAAAAz57/Rjgp1QE=Sat,\ + \ 22 Jun 2019 20:22:56 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:56 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - b0cdb423-f003-0050-5138-297b08000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 85413eb8-952b-11e9-917d-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:56 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueuec0820c59/messages + response: + body: + string: "\uFEFFf446f6b5-e9f9-4abf-a32b-3ed9358b4851Sat,\ + \ 22 Jun 2019 20:22:56 GMTSat, 29 Jun 2019\ + \ 20:22:56 GMTAgAAAAMAAAAAAAAAUZLqWDgp1QE=Sat,\ + \ 22 Jun 2019 20:23:26 GMT1message1" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:56 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - b0cdb430-f003-0050-5d38-297b08000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 854b088a-952b-11e9-8989-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:56 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueuec0820c59/messages/f446f6b5-e9f9-4abf-a32b-3ed9358b4851?popreceipt=AgAAAAMAAAAAAAAAUZLqWDgp1QE%3D&visibilitytimeout=0 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:56 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-popreceipt: + - AwAAAAMAAAAAAAAA/o0SRzgp1QEBAAAA + x-ms-request-id: + - b0cdb43a-f003-0050-6738-297b08000000 + x-ms-time-next-visible: + - Sat, 22 Jun 2019 20:22:56 GMT + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 85542d7a-952b-11e9-ac53-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:56 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueuec0820c59/messages + response: + body: + string: "\uFEFFf446f6b5-e9f9-4abf-a32b-3ed9358b4851Sat,\ + \ 22 Jun 2019 20:22:56 GMTSat, 29 Jun 2019\ + \ 20:22:56 GMTAgAAAAMAAAAAAAAAnKj9WDgp1QE=Sat,\ + \ 22 Jun 2019 20:23:26 GMT2message1" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:56 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - b0cdb445-f003-0050-7138-297b08000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - c95fdcb0-952d-11e9-b4c3-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:09 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueuec0820c59 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:39:09 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - e1088934-7003-002c-743a-29e63d000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message1' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - c986134c-952d-11e9-9ef5-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:09 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueuec0820c59/messages + response: + body: + string: "\uFEFF0b1b2830-4f09-42fb-a348-490c551b040bSat,\ + \ 22 Jun 2019 20:39:09 GMTSat, 29 Jun 2019\ + \ 20:39:09 GMTAgAAAAMAAAAAAAAAQDBPizop1QE=Sat,\ + \ 22 Jun 2019 20:39:09 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:39:09 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - e108893f-7003-002c-7c3a-29e63d000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - c9907bcc-952d-11e9-a76e-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:09 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueuec0820c59/messages + response: + body: + string: "\uFEFF0b1b2830-4f09-42fb-a348-490c551b040bSat,\ + \ 22 Jun 2019 20:39:09 GMTSat, 29 Jun 2019\ + \ 20:39:09 GMTAgAAAAMAAAAAAAAAHW48nTop1QE=Sat,\ + \ 22 Jun 2019 20:39:40 GMT1message1" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:39:09 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - e1088949-7003-002c-053a-29e63d000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - c99cbae8-952d-11e9-8605-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:10 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueuec0820c59/messages/0b1b2830-4f09-42fb-a348-490c551b040b?popreceipt=AgAAAAMAAAAAAAAAHW48nTop1QE%3D&visibilitytimeout=0 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:39:09 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-popreceipt: + - AwAAAAMAAAAAAAAAnsllizop1QEBAAAA + x-ms-request-id: + - e108895a-7003-002c-133a-29e63d000000 + x-ms-time-next-visible: + - Sat, 22 Jun 2019 20:39:10 GMT + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - c9a6b9e6-952d-11e9-ad29-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:10 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueuec0820c59/messages + response: + body: + string: "\uFEFF0b1b2830-4f09-42fb-a348-490c551b040bSat,\ + \ 22 Jun 2019 20:39:09 GMTSat, 29 Jun 2019\ + \ 20:39:09 GMTAgAAAAMAAAAAAAAAvyBQnTop1QE=Sat,\ + \ 22 Jun 2019 20:39:40 GMT2message1" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:39:09 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - e1088960-7003-002c-193a-29e63d000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_update_message_content.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_update_message_content.yaml new file mode 100644 index 000000000000..9333fb6d5a4d --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_queue.test_update_message_content.yaml @@ -0,0 +1,890 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 2bf19836-952a-11e9-8d4e-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:16 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/pythonqueue32150fb3 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:13:16 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 7109b759-d003-002a-6036-291145000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message1' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 2c122c9a-952a-11e9-b48d-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:17 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://remotestoragename.queue.core.windows.net/pythonqueue32150fb3/messages + response: + body: + string: "\uFEFFb06ccc5e-672c-45c9-a6ba-c04789bd31d7Sat,\ + \ 22 Jun 2019 20:13:17 GMTSat, 29 Jun 2019\ + \ 20:13:17 GMTAgAAAAMAAAAAAAAAULfX7TYp1QE=Sat,\ + \ 22 Jun 2019 20:13:17 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:13:16 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 7109b769-d003-002a-6936-291145000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 2c1ad5de-952a-11e9-8dbd-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:17 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://remotestoragename.queue.core.windows.net/pythonqueue32150fb3/messages + response: + body: + string: "\uFEFFb06ccc5e-672c-45c9-a6ba-c04789bd31d7Sat,\ + \ 22 Jun 2019 20:13:17 GMTSat, 29 Jun 2019\ + \ 20:13:17 GMTAgAAAAMAAAAAAAAAXefB/zYp1QE=Sat,\ + \ 22 Jun 2019 20:13:47 GMT1message1" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:13:16 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 7109b775-d003-002a-7236-291145000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: ' + + new text' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 2c2381de-952a-11e9-a35a-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:17 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/pythonqueue32150fb3/messages/b06ccc5e-672c-45c9-a6ba-c04789bd31d7?popreceipt=AgAAAAMAAAAAAAAAXefB%2FzYp1QE%3D&visibilitytimeout=0 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:13:16 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-popreceipt: + - AwAAAAMAAAAAAAAAoh/p7TYp1QEBAAAA + x-ms-request-id: + - 7109b77b-d003-002a-7636-291145000000 + x-ms-time-next-visible: + - Sat, 22 Jun 2019 20:13:17 GMT + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 2c2c2136-952a-11e9-90bf-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:17 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://remotestoragename.queue.core.windows.net/pythonqueue32150fb3/messages + response: + body: + string: "\uFEFFb06ccc5e-672c-45c9-a6ba-c04789bd31d7Sat,\ + \ 22 Jun 2019 20:13:17 GMTSat, 29 Jun 2019\ + \ 20:13:17 GMTAgAAAAMAAAAAAAAAnSjT/zYp1QE=Sat,\ + \ 22 Jun 2019 20:13:47 GMT2new\ + \ text" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:13:16 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 7109b781-d003-002a-7a36-291145000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - ea4fa7f0-952a-11e9-be8e-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:36 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueue32150fb3 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:35 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - e4d0f39f-3003-0081-4d37-29c657000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message1' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - ea8828be-952a-11e9-81a2-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:36 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueue32150fb3/messages + response: + body: + string: "\uFEFFadbb41c2-2b5a-4aac-87d4-4ba81c935d10Sat,\ + \ 22 Jun 2019 20:18:36 GMTSat, 29 Jun 2019\ + \ 20:18:36 GMTAgAAAAMAAAAAAAAARz5SrDcp1QE=Sat,\ + \ 22 Jun 2019 20:18:36 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:35 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - e4d0f3a8-3003-0081-5137-29c657000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - ea944d2e-952a-11e9-bbc2-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:36 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueue32150fb3/messages + response: + body: + string: "\uFEFFadbb41c2-2b5a-4aac-87d4-4ba81c935d10Sat,\ + \ 22 Jun 2019 20:18:36 GMTSat, 29 Jun 2019\ + \ 20:18:36 GMTAgAAAAMAAAAAAAAAWW48vjcp1QE=Sat,\ + \ 22 Jun 2019 20:19:06 GMT1message1" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:35 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - e4d0f3ac-3003-0081-5437-29c657000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: ' + + new text' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - ea9d9958-952a-11e9-8acc-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:36 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueue32150fb3/messages/adbb41c2-2b5a-4aac-87d4-4ba81c935d10?popreceipt=AgAAAAMAAAAAAAAAWW48vjcp1QE%3D&visibilitytimeout=0 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:36 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-popreceipt: + - AwAAAAMAAAAAAAAADRhmrDcp1QEBAAAA + x-ms-request-id: + - e4d0f3af-3003-0081-5637-29c657000000 + x-ms-time-next-visible: + - Sat, 22 Jun 2019 20:18:36 GMT + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - eaa83640-952a-11e9-b1f6-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:36 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueue32150fb3/messages + response: + body: + string: "\uFEFFadbb41c2-2b5a-4aac-87d4-4ba81c935d10Sat,\ + \ 22 Jun 2019 20:18:36 GMTSat, 29 Jun 2019\ + \ 20:18:36 GMTAgAAAAMAAAAAAAAAZb1Qvjcp1QE=Sat,\ + \ 22 Jun 2019 20:19:07 GMT2new\ + \ text" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:36 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - e4d0f3b7-3003-0081-5d37-29c657000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 85b21be2-952b-11e9-a530-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:57 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueue32150fb3 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:56 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 645fc07f-8003-0076-2738-29e0bc000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message1' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 85d39d76-952b-11e9-8152-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:57 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueue32150fb3/messages + response: + body: + string: "\uFEFFf064e1f0-b5b9-4264-90e5-4dd0d61d3cd7Sat,\ + \ 22 Jun 2019 20:22:57 GMTSat, 29 Jun 2019\ + \ 20:22:57 GMTAgAAAAMAAAAAAAAAwBCbRzgp1QE=Sat,\ + \ 22 Jun 2019 20:22:57 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:56 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 645fc085-8003-0076-2b38-29e0bc000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 85dd4100-952b-11e9-bbd9-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:57 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueue32150fb3/messages + response: + body: + string: "\uFEFFf064e1f0-b5b9-4264-90e5-4dd0d61d3cd7Sat,\ + \ 22 Jun 2019 20:22:57 GMTSat, 29 Jun 2019\ + \ 20:22:57 GMTAgAAAAMAAAAAAAAAcFKGWTgp1QE=Sat,\ + \ 22 Jun 2019 20:23:27 GMT1message1" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:57 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 645fc08c-8003-0076-3138-29e0bc000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: ' + + new text' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 85e6bf46-952b-11e9-9286-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:57 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueue32150fb3/messages/f064e1f0-b5b9-4264-90e5-4dd0d61d3cd7?popreceipt=AgAAAAMAAAAAAAAAcFKGWTgp1QE%3D&visibilitytimeout=0 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:57 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-popreceipt: + - AwAAAAMAAAAAAAAAT5yuRzgp1QEBAAAA + x-ms-request-id: + - 645fc097-8003-0076-3b38-29e0bc000000 + x-ms-time-next-visible: + - Sat, 22 Jun 2019 20:22:57 GMT + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 85f260b4-952b-11e9-ae44-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:57 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueue32150fb3/messages + response: + body: + string: "\uFEFFf064e1f0-b5b9-4264-90e5-4dd0d61d3cd7Sat,\ + \ 22 Jun 2019 20:22:57 GMTSat, 29 Jun 2019\ + \ 20:22:57 GMTAgAAAAMAAAAAAAAAuRabWTgp1QE=Sat,\ + \ 22 Jun 2019 20:23:27 GMT2new\ + \ text" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:57 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 645fc0a8-8003-0076-4a38-29e0bc000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - cacc2de2-952d-11e9-a208-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:11 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueue32150fb3 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:39:11 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 1323d8aa-e003-0029-3a3a-291242000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message1' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - caedb2a8-952d-11e9-80f3-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:12 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/pythonqueue32150fb3/messages + response: + body: + string: "\uFEFF039e3e8b-5dbe-461f-ad6c-244c448d0691Sat,\ + \ 22 Jun 2019 20:39:12 GMTSat, 29 Jun 2019\ + \ 20:39:12 GMTAgAAAAMAAAAAAAAAvQa2jDop1QE=Sat,\ + \ 22 Jun 2019 20:39:12 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:39:12 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 1323d8bb-e003-0029-483a-291242000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - caf8c7ee-952d-11e9-a41e-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:12 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueue32150fb3/messages + response: + body: + string: "\uFEFF039e3e8b-5dbe-461f-ad6c-244c448d0691Sat,\ + \ 22 Jun 2019 20:39:12 GMTSat, 29 Jun 2019\ + \ 20:39:12 GMTAgAAAAMAAAAAAAAA+TKinjop1QE=Sat,\ + \ 22 Jun 2019 20:39:42 GMT1message1" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:39:12 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 1323d8c5-e003-0029-513a-291242000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: ' + + new text' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '103' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - cb01dc30-952d-11e9-bf4a-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:12 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/pythonqueue32150fb3/messages/039e3e8b-5dbe-461f-ad6c-244c448d0691?popreceipt=AgAAAAMAAAAAAAAA%2BTKinjop1QE%3D&visibilitytimeout=0 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:39:12 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-popreceipt: + - AwAAAAMAAAAAAAAAe+DJjDop1QEBAAAA + x-ms-request-id: + - 1323d8d0-e003-0029-5b3a-291242000000 + x-ms-time-next-visible: + - Sat, 22 Jun 2019 20:39:12 GMT + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - cb0ac886-952d-11e9-813c-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:12 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/pythonqueue32150fb3/messages + response: + body: + string: "\uFEFF039e3e8b-5dbe-461f-ad6c-244c448d0691Sat,\ + \ 22 Jun 2019 20:39:12 GMTSat, 29 Jun 2019\ + \ 20:39:12 GMTAgAAAAMAAAAAAAAAihC0njop1QE=Sat,\ + \ 22 Jun 2019 20:39:42 GMT2new\ + \ text" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:39:12 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 1323d8db-e003-0029-663a-291242000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_queue_encodings.test_message_base64_decode_fails.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_queue_encodings.test_message_base64_decode_fails.yaml new file mode 100644 index 000000000000..35060896aa1f --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_queue_encodings.test_message_base64_decode_fails.yaml @@ -0,0 +1,336 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 2c636510-952a-11e9-9187-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:17 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/mytestqueue453d1525 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:13:17 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - d08b9d97-8003-00b1-1536-299c7d000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + xyz' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '98' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 2c851746-952a-11e9-b889-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:17 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://remotestoragename.queue.core.windows.net/mytestqueue453d1525/messages + response: + body: + string: "\uFEFF94a01e91-df10-45dc-9f98-f11cca4e89dfSat,\ + \ 22 Jun 2019 20:13:18 GMTSat, 29 Jun 2019\ + \ 20:13:18 GMTAgAAAAMAAAAAAAAAmNlK7jYp1QE=Sat,\ + \ 22 Jun 2019 20:13:18 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:13:17 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - d08b9d9e-8003-00b1-1a36-299c7d000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 2cbaa4b0-952a-11e9-a792-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:18 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://remotestoragename.queue.core.windows.net/mytestqueue453d1525/messages?peekonly=true + response: + body: + string: "\uFEFF94a01e91-df10-45dc-9f98-f11cca4e89dfSat,\ + \ 22 Jun 2019 20:13:18 GMTSat, 29 Jun 2019\ + \ 20:13:18 GMT0xyz" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:13:17 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - d08b9db7-8003-00b1-3236-299c7d000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - eae90134-952a-11e9-8170-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:37 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/mytestqueue453d1525 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:36 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - ccea4f98-f003-009c-5737-291fbd000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 863b39a4-952b-11e9-958a-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:57 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/mytestqueue453d1525 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:57 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 96786836-b003-009b-0e38-29e938000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - cb698880-952d-11e9-ad1b-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:13 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/mytestqueue453d1525 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:39:13 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - d08d5f82-8003-00b1-243a-299c7d000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + xyz' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '98' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - cba71c5e-952d-11e9-8335-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:13 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/mytestqueue453d1525/messages + response: + body: + string: "\uFEFFcb3c953d-67cc-4fe5-9cdd-4f5aa8d00f11Sat,\ + \ 22 Jun 2019 20:39:13 GMTSat, 29 Jun 2019\ + \ 20:39:13 GMTAgAAAAMAAAAAAAAAiD9vjTop1QE=Sat,\ + \ 22 Jun 2019 20:39:13 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:39:13 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - d08d5fa0-8003-00b1-3e3a-299c7d000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - cbb08136-952d-11e9-aff3-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:13 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/mytestqueue453d1525/messages?peekonly=true + response: + body: + string: "\uFEFFcb3c953d-67cc-4fe5-9cdd-4f5aa8d00f11Sat,\ + \ 22 Jun 2019 20:39:13 GMTSat, 29 Jun 2019\ + \ 20:39:13 GMT0xyz" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:39:13 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - d08d5faa-8003-00b1-453a-299c7d000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_queue_encodings.test_message_bytes_base64.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_queue_encodings.test_message_bytes_base64.yaml new file mode 100644 index 000000000000..41bb08e5efc8 --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_queue_encodings.test_message_bytes_base64.yaml @@ -0,0 +1,338 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 2ccdb122-952a-11e9-b264-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:18 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/mytestqueuebdb1127a + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:13:18 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - cce89a6a-f003-009c-3236-291fbd000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + eHl6' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '99' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 2cee46ee-952a-11e9-8407-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:18 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://remotestoragename.queue.core.windows.net/mytestqueuebdb1127a/messages + response: + body: + string: "\uFEFF930ab462-e7fd-4c8b-8d33-509158ff5fbaSat,\ + \ 22 Jun 2019 20:13:18 GMTSat, 29 Jun 2019\ + \ 20:13:18 GMTAgAAAAMAAAAAAAAALl207jYp1QE=Sat,\ + \ 22 Jun 2019 20:13:18 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:13:18 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - cce89a7c-f003-009c-3f36-291fbd000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 2cf75018-952a-11e9-8abe-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:18 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://remotestoragename.queue.core.windows.net/mytestqueuebdb1127a/messages + response: + body: + string: "\uFEFF930ab462-e7fd-4c8b-8d33-509158ff5fbaSat,\ + \ 22 Jun 2019 20:13:18 GMTSat, 29 Jun 2019\ + \ 20:13:18 GMTAgAAAAMAAAAAAAAA4p6fADcp1QE=Sat,\ + \ 22 Jun 2019 20:13:48 GMT1eHl6" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:13:18 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - cce89a89-f003-009c-4a36-291fbd000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - eb4ed798-952a-11e9-97de-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:38 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/mytestqueuebdb1127a + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:37 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - bbde3a58-9003-002d-5f37-29e7c0000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 86929b2c-952b-11e9-8a70-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:58 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/mytestqueuebdb1127a + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:57 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 8ef2c0c2-b003-005c-5f38-2995f9000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - cbd48bd0-952d-11e9-9f34-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:13 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/mytestqueuebdb1127a + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:39:13 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - d5155af0-8003-00ba-6f3a-298409000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + eHl6' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '99' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - cbf8d6ac-952d-11e9-8663-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:13 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/mytestqueuebdb1127a/messages + response: + body: + string: "\uFEFFdf2964d9-edbb-48c3-9416-cc0ed5a12d69Sat,\ + \ 22 Jun 2019 20:39:14 GMTSat, 29 Jun 2019\ + \ 20:39:14 GMTAgAAAAMAAAAAAAAA8xfBjTop1QE=Sat,\ + \ 22 Jun 2019 20:39:14 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:39:13 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - d5155aff-8003-00ba-7a3a-298409000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - cc01dedc-952d-11e9-ab67-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:14 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/mytestqueuebdb1127a/messages + response: + body: + string: "\uFEFFdf2964d9-edbb-48c3-9416-cc0ed5a12d69Sat,\ + \ 22 Jun 2019 20:39:14 GMTSat, 29 Jun 2019\ + \ 20:39:14 GMTAgAAAAMAAAAAAAAAGW+rnzop1QE=Sat,\ + \ 22 Jun 2019 20:39:44 GMT1eHl6" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:39:14 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - d5155b07-8003-00ba-013a-298409000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_queue_encodings.test_message_text_base64.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_queue_encodings.test_message_text_base64.yaml new file mode 100644 index 000000000000..96a537a5841c --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_queue_encodings.test_message_text_base64.yaml @@ -0,0 +1,338 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 2d133a8a-952a-11e9-b792-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:18 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/mytestqueueab101218 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:13:19 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 431ab50a-2003-007b-0d36-290fb0000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + AQ==' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '99' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 2d352f78-952a-11e9-86f3-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:19 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://remotestoragename.queue.core.windows.net/mytestqueueab101218/messages + response: + body: + string: "\uFEFF5b3ae901-d4e1-4fb8-b619-10953e8f473fSat,\ + \ 22 Jun 2019 20:13:19 GMTSat, 29 Jun 2019\ + \ 20:13:19 GMTAgAAAAMAAAAAAAAAMzf77jYp1QE=Sat,\ + \ 22 Jun 2019 20:13:19 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:13:19 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 431ab511-2003-007b-1236-290fb0000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 2d3e1f7a-952a-11e9-b25d-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:19 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://remotestoragename.queue.core.windows.net/mytestqueueab101218/messages + response: + body: + string: "\uFEFF5b3ae901-d4e1-4fb8-b619-10953e8f473fSat,\ + \ 22 Jun 2019 20:13:19 GMTSat, 29 Jun 2019\ + \ 20:13:19 GMTAgAAAAMAAAAAAAAALkDlADcp1QE=Sat,\ + \ 22 Jun 2019 20:13:49 GMT1AQ==" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:13:19 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 431ab519-2003-007b-1936-290fb0000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - eb923a62-952a-11e9-a853-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:38 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/mytestqueueab101218 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:38 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 2c9d842f-e003-0022-3837-290a36000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 86dc5c08-952b-11e9-bd0a-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:59 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/mytestqueueab101218 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:58 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 4b3c6eb8-3003-0009-5c38-297e8e000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - cc450ce8-952d-11e9-9ece-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:14 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/mytestqueueab101218 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:39:14 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 3d13f9fa-e003-00c7-753a-2918c1000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + AQ==' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '99' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - cc66509c-952d-11e9-947b-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:14 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/mytestqueueab101218/messages + response: + body: + string: "\uFEFFe3f866dc-6126-406a-bd52-814c4958bf89Sat,\ + \ 22 Jun 2019 20:39:14 GMTSat, 29 Jun 2019\ + \ 20:39:14 GMTAgAAAAMAAAAAAAAAeB4ujjop1QE=Sat,\ + \ 22 Jun 2019 20:39:14 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:39:14 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 3d13fa00-e003-00c7-783a-2918c1000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - cc6f5908-952d-11e9-a7f4-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:14 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/mytestqueueab101218/messages + response: + body: + string: "\uFEFFe3f866dc-6126-406a-bd52-814c4958bf89Sat,\ + \ 22 Jun 2019 20:39:14 GMTSat, 29 Jun 2019\ + \ 20:39:14 GMTAgAAAAMAAAAAAAAActUZoDop1QE=Sat,\ + \ 22 Jun 2019 20:39:44 GMT1AQ==" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:39:14 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 3d13fa06-e003-00c7-7d3a-2918c1000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_queue_encodings.test_message_text_xml.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_queue_encodings.test_message_text_xml.yaml new file mode 100644 index 000000000000..1e46e40689dc --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_queue_encodings.test_message_text_xml.yaml @@ -0,0 +1,338 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 2d58b0ec-952a-11e9-a4d9-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:19 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/mytestqueue75b91164 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:13:19 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 9e429531-a003-00ad-3136-29446a000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + &lt;message1&gt;' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '119' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 2d794398-952a-11e9-ad11-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:19 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://remotestoragename.queue.core.windows.net/mytestqueue75b91164/messages + response: + body: + string: "\uFEFFd6fa5603-dba3-4831-9af7-065ae4704b0eSat,\ + \ 22 Jun 2019 20:13:19 GMTSat, 29 Jun 2019\ + \ 20:13:19 GMTAgAAAAMAAAAAAAAA4cY/7zYp1QE=Sat,\ + \ 22 Jun 2019 20:13:19 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:13:19 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 9e429540-a003-00ad-3b36-29446a000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 2d82ee98-952a-11e9-82ca-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:19 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://remotestoragename.queue.core.windows.net/mytestqueue75b91164/messages + response: + body: + string: "\uFEFFd6fa5603-dba3-4831-9af7-065ae4704b0eSat,\ + \ 22 Jun 2019 20:13:19 GMTSat, 29 Jun 2019\ + \ 20:13:19 GMTAgAAAAMAAAAAAAAAHUUqATcp1QE=Sat,\ + \ 22 Jun 2019 20:13:49 GMT1&lt;message1&gt;" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:13:19 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 9e429542-a003-00ad-3d36-29446a000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - ebe5e35e-952a-11e9-97ee-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:39 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/mytestqueue75b91164 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:39 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 06a84066-1003-00d9-5837-29c22c000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 87291bb0-952b-11e9-aa66-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:59 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/mytestqueue75b91164 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:59 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - a1c27077-e003-00aa-0c38-29b2ef000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - cc986a98-952d-11e9-a3c8-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:15 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/mytestqueue75b91164 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:39:14 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - ab00caf3-5003-00b8-2a3a-2986f3000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + &lt;message1&gt;' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '119' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - ccb90898-952d-11e9-8333-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:15 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/mytestqueue75b91164/messages + response: + body: + string: "\uFEFF570ec0b7-c050-4fb9-b52a-656744127c30Sat,\ + \ 22 Jun 2019 20:39:15 GMTSat, 29 Jun 2019\ + \ 20:39:15 GMTAgAAAAMAAAAAAAAAGcyBjjop1QE=Sat,\ + \ 22 Jun 2019 20:39:15 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:39:14 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - ab00cafa-5003-00b8-2f3a-2986f3000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - ccc2bc92-952d-11e9-9898-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:15 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/mytestqueue75b91164/messages + response: + body: + string: "\uFEFF570ec0b7-c050-4fb9-b52a-656744127c30Sat,\ + \ 22 Jun 2019 20:39:15 GMTSat, 29 Jun 2019\ + \ 20:39:15 GMTAgAAAAMAAAAAAAAAWkpsoDop1QE=Sat,\ + \ 22 Jun 2019 20:39:45 GMT1&lt;message1&gt;" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:39:14 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - ab00cb0b-5003-00b8-3c3a-2986f3000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_queue_encodings.test_message_text_xml_invalid_chars.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_queue_encodings.test_message_text_xml_invalid_chars.yaml new file mode 100644 index 000000000000..4c16538da031 --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_queue_encodings.test_message_text_xml_invalid_chars.yaml @@ -0,0 +1,194 @@ +interactions: +- request: + body: "\n\x01\ + " + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '96' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 2d965b2c-952a-11e9-86f9-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:19 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://remotestoragename.queue.core.windows.net/mytestqueue93de171a/messages + response: + body: + string: "\uFEFFInvalidXmlDocumentXML\ + \ specified is not syntactically valid.\nRequestId:76204e57-a003-0025-0936-29fcb3000000\n\ + Time:2019-06-22T20:13:24.5657796Z228Error\ + \ parsing Xml content" + headers: + Content-Length: + - '327' + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:13:23 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-error-code: + - InvalidXmlDocument + x-ms-request-id: + - 76204e57-a003-0025-0936-29fcb3000000 + x-ms-version: + - '2018-03-28' + status: + code: 400 + message: XML specified is not syntactically valid. +- request: + body: "\n\x01\ + " + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '96' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - ec1c41ba-952a-11e9-8f8b-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:39 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/mytestqueue93de171a/messages + response: + body: + string: "\uFEFFInvalidXmlDocumentXML\ + \ specified is not syntactically valid.\nRequestId:ad53ca4f-d003-0008-1f37-297f73000000\n\ + Time:2019-06-22T20:18:41.0960581Z228Error\ + \ parsing Xml content" + headers: + Content-Length: + - '327' + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:40 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-error-code: + - InvalidXmlDocument + x-ms-request-id: + - ad53ca4f-d003-0008-1f37-297f73000000 + x-ms-version: + - '2018-03-28' + status: + code: 400 + message: XML specified is not syntactically valid. +- request: + body: "\n\x01\ + " + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '96' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 8768049c-952b-11e9-9704-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:59 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/mytestqueue93de171a/messages + response: + body: + string: "\uFEFFInvalidXmlDocumentXML\ + \ specified is not syntactically valid.\nRequestId:b1c82729-0003-0023-6138-290bcb000000\n\ + Time:2019-06-22T20:23:01.2841285Z228Error\ + \ parsing Xml content" + headers: + Content-Length: + - '327' + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:23:00 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-error-code: + - InvalidXmlDocument + x-ms-request-id: + - b1c82729-0003-0023-6138-290bcb000000 + x-ms-version: + - '2018-03-28' + status: + code: 400 + message: XML specified is not syntactically valid. +- request: + body: "\n\x01\ + " + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '96' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - cce5b814-952d-11e9-bed8-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:15 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/mytestqueue93de171a/messages + response: + body: + string: "\uFEFFInvalidXmlDocumentXML\ + \ specified is not syntactically valid.\nRequestId:e4d223e5-3003-0081-163a-29c657000000\n\ + Time:2019-06-22T20:39:16.7647126Z228Error\ + \ parsing Xml content" + headers: + Content-Length: + - '327' + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:39:16 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-error-code: + - InvalidXmlDocument + x-ms-request-id: + - e4d223e5-3003-0081-163a-29c657000000 + x-ms-version: + - '2018-03-28' + status: + code: 400 + message: XML specified is not syntactically valid. +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_queue_encodings.test_message_text_xml_whitespace.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_queue_encodings.test_message_text_xml_whitespace.yaml new file mode 100644 index 000000000000..750106cc275a --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_queue_encodings.test_message_text_xml_whitespace.yaml @@ -0,0 +1,338 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 307c45d8-952a-11e9-9d17-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:24 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/mytestqueue509615f0 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:13:23 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 9e23a4ac-c003-00bd-4736-29728c000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: "\n mess\t\ + \ age1\n" + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '108' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 309c176c-952a-11e9-bbbe-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:24 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://remotestoragename.queue.core.windows.net/mytestqueue509615f0/messages + response: + body: + string: "\uFEFFc5a57313-d2dc-4229-ab5a-83eb20a3b4eaSat,\ + \ 22 Jun 2019 20:13:24 GMTSat, 29 Jun 2019\ + \ 20:13:24 GMTAgAAAAMAAAAAAAAAmeVh8jYp1QE=Sat,\ + \ 22 Jun 2019 20:13:24 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:13:24 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 9e23a4c7-c003-00bd-5e36-29728c000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 30a4b62e-952a-11e9-8691-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:24 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://remotestoragename.queue.core.windows.net/mytestqueue509615f0/messages + response: + body: + string: "\uFEFFc5a57313-d2dc-4229-ab5a-83eb20a3b4eaSat,\ + \ 22 Jun 2019 20:13:24 GMTSat, 29 Jun 2019\ + \ 20:13:24 GMTAgAAAAMAAAAAAAAAfcdLBDcp1QE=Sat,\ + \ 22 Jun 2019 20:13:54 GMT1\ + \ mess\t age1\n" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:13:24 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 9e23a4dd-c003-00bd-7236-29728c000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - ed3ba7d4-952a-11e9-9448-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:41 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/mytestqueue509615f0 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:41 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 2d59992d-4003-0042-1837-294f14000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 8847281e-952b-11e9-83bb-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:23:01 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/mytestqueue509615f0 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:23:01 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 1ffb13ae-7003-00e0-5938-298288000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - cdd58448-952d-11e9-9193-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:17 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/mytestqueue509615f0 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:39:17 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - b1c917a2-0003-0023-513a-290bcb000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: "\n mess\t\ + \ age1\n" + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '108' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - cdffd87e-952d-11e9-97a6-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:17 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/mytestqueue509615f0/messages + response: + body: + string: "\uFEFFce3d42b9-500a-4f77-91a2-f9a0960d7df4Sat,\ + \ 22 Jun 2019 20:39:17 GMTSat, 29 Jun 2019\ + \ 20:39:17 GMTAgAAAAMAAAAAAAAA6KbHjzop1QE=Sat,\ + \ 22 Jun 2019 20:39:17 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:39:17 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - b1c917a6-0003-0023-533a-290bcb000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - ce087f58-952d-11e9-b536-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:17 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/mytestqueue509615f0/messages + response: + body: + string: "\uFEFFce3d42b9-500a-4f77-91a2-f9a0960d7df4Sat,\ + \ 22 Jun 2019 20:39:17 GMTSat, 29 Jun 2019\ + \ 20:39:17 GMTAgAAAAMAAAAAAAAACv6xoTop1QE=Sat,\ + \ 22 Jun 2019 20:39:47 GMT1\ + \ mess\t age1\n" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:39:17 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - b1c917a9-0003-0023-553a-290bcb000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_queue_encryption.test_encryption_add_encrypted_64k_message.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_queue_encryption.test_encryption_add_encrypted_64k_message.yaml new file mode 100644 index 000000000000..23d07c9ba9b8 --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_queue_encryption.test_encryption_add_encrypted_64k_message.yaml @@ -0,0 +1,451 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 30b7b834-952a-11e9-ae52-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:25 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/encryptionqueue446c19b4 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:13:24 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - eabc17ef-7003-0027-1f36-29fe49000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '65631' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 30d87ee6-952a-11e9-a038-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:25 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://remotestoragename.queue.core.windows.net/encryptionqueue446c19b4/messages + response: + body: + string: "\uFEFF088e0fd0-aff6-4667-b31e-f3ee33c69840Sat,\ + \ 22 Jun 2019 20:13:25 GMTSat, 29 Jun 2019\ + \ 20:13:25 GMTAgAAAAMAAAAAAAAAh/6w8jYp1QE=Sat,\ + \ 22 Jun 2019 20:13:25 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:13:24 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - eabc17fe-7003-0027-2a36-29fe49000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + {"EncryptedMessageContents": "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", + "EncryptionData": {"WrappedContentKey": {"KeyId": "key1", "EncryptedKey": "OUKnEXpq/evqBXiWRK7f4sCqX7H/8id5JYJOaOz3GSyRylpx0VdYgA==", + "Algorithm": "A256KW"}, "EncryptionAgent": {"Protocol": "1.0", "EncryptionAlgorithm": + "AES_CBC_256"}, "ContentEncryptionIV": "JPVgma/uYc2KiR+PuqI2AQ==", "KeyWrappingMetadata": + {"EncryptionLibrary": "Python 1.0.0"}}}' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '87881' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 30facb0c-952a-11e9-a000-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:25 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://remotestoragename.queue.core.windows.net/encryptionqueue446c19b4/messages + response: + body: + string: "\uFEFFRequestBodyTooLargeThe\ + \ request body is too large and exceeds the maximum permissible limit.\nRequestId:eabc1829-7003-0027-5036-29fe49000000\n\ + Time:2019-06-22T20:13:25.5609374Z65536" + headers: + Content-Length: + - '286' + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:13:24 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-error-code: + - RequestBodyTooLarge + x-ms-request-id: + - eabc1829-7003-0027-5036-29fe49000000 + x-ms-version: + - '2018-03-28' + status: + code: 413 + message: The request body is too large and exceeds the maximum permissible limit. +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - edd21c9e-952a-11e9-a1a3-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:42 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/encryptionqueue446c19b4 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:42 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 27cb1041-c003-0017-4e37-29a463000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 88d09846-952b-11e9-8a6f-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:23:02 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/encryptionqueue446c19b4 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:23:01 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 477ad936-f003-00d3-5838-29dba5000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: ' + + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '65631' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 88f0feae-952b-11e9-b9c1-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:23:02 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/encryptionqueue446c19b4/messages + response: + body: + string: "\uFEFFdf795621-a38a-445b-af2c-be364abd3f6cSat,\ + \ 22 Jun 2019 20:23:02 GMTSat, 29 Jun 2019\ + \ 20:23:02 GMTAgAAAAMAAAAAAAAA3qjPSjgp1QE=Sat,\ + \ 22 Jun 2019 20:23:02 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:23:02 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 477ad944-f003-00d3-6338-29dba5000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + {"EncryptedMessageContents": "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", + "EncryptionData": {"WrappedContentKey": {"KeyId": "key1", "EncryptedKey": "QmISo1mkQBXdfa4HBs8nUKR6uu4C3dTzH46+PEJDQ4iHsG7WMDBYmA==", + "Algorithm": "A256KW"}, "EncryptionAgent": {"Protocol": "1.0", "EncryptionAlgorithm": + "AES_CBC_256"}, "ContentEncryptionIV": "Y9IWLuY0dOpwFdGtQj1BnA==", "KeyWrappingMetadata": + {"EncryptionLibrary": "Python 1.0.0"}}}' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '87881' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 89294318-952b-11e9-a1d7-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:23:02 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/encryptionqueue446c19b4/messages + response: + body: + string: "\uFEFFRequestBodyTooLargeThe\ + \ request body is too large and exceeds the maximum permissible limit.\nRequestId:477ad98b-f003-00d3-2538-29dba5000000\n\ + Time:2019-06-22T20:23:03.4451464Z65536" + headers: + Content-Length: + - '286' + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:23:02 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-error-code: + - RequestBodyTooLarge + x-ms-request-id: + - 477ad98b-f003-00d3-2538-29dba5000000 + x-ms-version: + - '2018-03-28' + status: + code: 413 + message: The request body is too large and exceeds the maximum permissible limit. +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - ceac91c2-952d-11e9-8187-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:18 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/encryptionqueue446c19b4 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:39:17 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - ba9a7c50-c003-0094-143a-2904ce000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '65631' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - ced3c85a-952d-11e9-9768-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:18 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/encryptionqueue446c19b4/messages + response: + body: + string: "\uFEFFca0aab08-0630-4edb-9ae7-c1c83d14ba0fSat,\ + \ 22 Jun 2019 20:39:18 GMTSat, 29 Jun 2019\ + \ 20:39:18 GMTAgAAAAMAAAAAAAAA6IOwkDop1QE=Sat,\ + \ 22 Jun 2019 20:39:18 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:39:18 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - ba9a7c63-c003-0094-213a-2904ce000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + {"EncryptedMessageContents": "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", + "EncryptionData": {"WrappedContentKey": {"KeyId": "key1", "EncryptedKey": "LCN2b/JiV3Z69vnuZgKseulmA5jk0Lnd7dyCDOmQ3SNuRpPPOv11LA==", + "Algorithm": "A256KW"}, "EncryptionAgent": {"Protocol": "1.0", "EncryptionAlgorithm": + "AES_CBC_256"}, "ContentEncryptionIV": "snB/dQMeE56zIkpGb5xYWQ==", "KeyWrappingMetadata": + {"EncryptionLibrary": "Python 1.0.0"}}}' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '87881' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - cef23698-952d-11e9-a663-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:18 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/encryptionqueue446c19b4/messages + response: + body: + string: "\uFEFFRequestBodyTooLargeThe\ + \ request body is too large and exceeds the maximum permissible limit.\nRequestId:ba9a7c87-c003-0094-3c3a-2904ce000000\n\ + Time:2019-06-22T20:39:19.9180789Z65536" + headers: + Content-Length: + - '286' + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:39:18 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-error-code: + - RequestBodyTooLarge + x-ms-request-id: + - ba9a7c87-c003-0094-3c3a-2904ce000000 + x-ms-version: + - '2018-03-28' + status: + code: 413 + message: The request body is too large and exceeds the maximum permissible limit. +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_queue_encryption.test_encryption_nonmatching_kid.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_queue_encryption.test_encryption_nonmatching_kid.yaml new file mode 100644 index 000000000000..e933ff039ba8 --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_queue_encryption.test_encryption_nonmatching_kid.yaml @@ -0,0 +1,457 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 31ab8ed0-952a-11e9-a42e-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:26 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/encryptionqueue577f1613 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:13:26 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 261ad55c-0003-0001-0936-2965fd000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + {"EncryptedMessageContents": "Fu7ZmVc8HsoOUz3pQB9RVQ==", + "EncryptionData": {"WrappedContentKey": {"KeyId": "key1", "EncryptedKey": "cs7deR9JFCX58fNADMaSTCtb/bu3dZjLbkpxhs9pD2Oia3UZ8TVsNA==", + "Algorithm": "A256KW"}, "EncryptionAgent": {"Protocol": "1.0", "EncryptionAlgorithm": + "AES_CBC_256"}, "ContentEncryptionIV": "eQAi+nOAQQIwhc1aiKopPw==", "KeyWrappingMetadata": + {"EncryptionLibrary": "Python 1.0.0"}}}' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '501' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 31d325c6-952a-11e9-b06f-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:26 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://remotestoragename.queue.core.windows.net/encryptionqueue577f1613/messages + response: + body: + string: "\uFEFF6828a1a4-46cd-4e0f-b66b-59bab08df569Sat,\ + \ 22 Jun 2019 20:13:26 GMTSat, 29 Jun 2019\ + \ 20:13:26 GMTAgAAAAMAAAAAAAAAFfGY8zYp1QE=Sat,\ + \ 22 Jun 2019 20:13:26 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:13:26 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 261ad57b-0003-0001-2336-2965fd000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 31dbe30a-952a-11e9-9a6b-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:26 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://remotestoragename.queue.core.windows.net/encryptionqueue577f1613/messages + response: + body: + string: "\uFEFF6828a1a4-46cd-4e0f-b66b-59bab08df569Sat,\ + \ 22 Jun 2019 20:13:26 GMTSat, 29 Jun 2019\ + \ 20:13:26 GMTAgAAAAMAAAAAAAAAJyGDBTcp1QE=Sat,\ + \ 22 Jun 2019 20:13:56 GMT1{\"\ + EncryptedMessageContents\": \"Fu7ZmVc8HsoOUz3pQB9RVQ==\", \"EncryptionData\"\ + : {\"WrappedContentKey\": {\"KeyId\": \"key1\", \"EncryptedKey\": \"cs7deR9JFCX58fNADMaSTCtb/bu3dZjLbkpxhs9pD2Oia3UZ8TVsNA==\"\ + , \"Algorithm\": \"A256KW\"}, \"EncryptionAgent\": {\"Protocol\": \"1.0\"\ + , \"EncryptionAlgorithm\": \"AES_CBC_256\"}, \"ContentEncryptionIV\": \"eQAi+nOAQQIwhc1aiKopPw==\"\ + , \"KeyWrappingMetadata\": {\"EncryptionLibrary\": \"Python 1.0.0\"}}}" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:13:26 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 261ad59a-0003-0001-4036-2965fd000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - eeb364e4-952a-11e9-a12e-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:43 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/encryptionqueue577f1613 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:43 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - b1637720-7003-00af-1c37-294690000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 8add34ba-952b-11e9-81ce-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:23:05 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/encryptionqueue577f1613 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:23:04 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 84071cce-3003-006f-6038-29ccd4000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: ' + + {"EncryptedMessageContents": "5lEs6kDOI/DMso/HE9gKJw==", + "EncryptionData": {"WrappedContentKey": {"KeyId": "key1", "EncryptedKey": "t8K9jbdAsvgacRZP928sfaY22YxlGRogDL1shDITALUrdPtC5rBAEA==", + "Algorithm": "A256KW"}, "EncryptionAgent": {"Protocol": "1.0", "EncryptionAlgorithm": + "AES_CBC_256"}, "ContentEncryptionIV": "6oKbQ+zTzjvfWcerDHwlYQ==", "KeyWrappingMetadata": + {"EncryptionLibrary": "Python 1.0.0"}}}' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '501' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 8afd178c-952b-11e9-bab2-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:23:05 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/encryptionqueue577f1613/messages + response: + body: + string: "\uFEFFe5dbd78c-3f6f-4f63-be14-db169b9a2329Sat,\ + \ 22 Jun 2019 20:23:06 GMTSat, 29 Jun 2019\ + \ 20:23:06 GMTAgAAAAMAAAAAAAAAg8/ETDgp1QE=Sat,\ + \ 22 Jun 2019 20:23:06 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:23:05 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 84071cd8-3003-006f-6838-29ccd4000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 8b067528-952b-11e9-90f6-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:23:06 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/encryptionqueue577f1613/messages + response: + body: + string: "\uFEFF6828a1a4-46cd-4e0f-b66b-59bab08df569Sat,\ + \ 22 Jun 2019 20:13:26 GMTSat, 29 Jun 2019\ + \ 20:13:26 GMTAgAAAAMAAAAAAAAA03SvXjgp1QE=Sat,\ + \ 22 Jun 2019 20:23:36 GMT2{\"\ + EncryptedMessageContents\": \"Fu7ZmVc8HsoOUz3pQB9RVQ==\", \"EncryptionData\"\ + : {\"WrappedContentKey\": {\"KeyId\": \"key1\", \"EncryptedKey\": \"cs7deR9JFCX58fNADMaSTCtb/bu3dZjLbkpxhs9pD2Oia3UZ8TVsNA==\"\ + , \"Algorithm\": \"A256KW\"}, \"EncryptionAgent\": {\"Protocol\": \"1.0\"\ + , \"EncryptionAlgorithm\": \"AES_CBC_256\"}, \"ContentEncryptionIV\": \"eQAi+nOAQQIwhc1aiKopPw==\"\ + , \"KeyWrappingMetadata\": {\"EncryptionLibrary\": \"Python 1.0.0\"}}}" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:23:05 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 84071cdf-3003-006f-6f38-29ccd4000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - d1769dee-952d-11e9-83dd-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:23 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/encryptionqueue577f1613 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:39:22 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 4f9aa440-0003-00ab-2a3a-29b312000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + {"EncryptedMessageContents": "3PSOHon02940Hfsbuk5nYQ==", + "EncryptionData": {"WrappedContentKey": {"KeyId": "key1", "EncryptedKey": "nbeKbTHqmB+/H05JZSqUXkC/UNxRNt4KN79ppPtdEwKmE8BWHIvpHg==", + "Algorithm": "A256KW"}, "EncryptionAgent": {"Protocol": "1.0", "EncryptionAlgorithm": + "AES_CBC_256"}, "ContentEncryptionIV": "u10o6ZIj4v9K9NVCyfD6fQ==", "KeyWrappingMetadata": + {"EncryptionLibrary": "Python 1.0.0"}}}' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '501' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - d19e1c3e-952d-11e9-8d31-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:23 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/encryptionqueue577f1613/messages + response: + body: + string: "\uFEFF7c911649-3e44-4289-909e-ddc5aaba009fSat,\ + \ 22 Jun 2019 20:39:23 GMTSat, 29 Jun 2019\ + \ 20:39:23 GMTAgAAAAMAAAAAAAAA2+Fpkzop1QE=Sat,\ + \ 22 Jun 2019 20:39:23 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:39:22 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 4f9aa464-0003-00ab-4c3a-29b312000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - d1aafbd4-952d-11e9-b58c-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:23 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/encryptionqueue577f1613/messages + response: + body: + string: "\uFEFF7c911649-3e44-4289-909e-ddc5aaba009fSat,\ + \ 22 Jun 2019 20:39:23 GMTSat, 29 Jun 2019\ + \ 20:39:23 GMTAgAAAAMAAAAAAAAAWjFYpTop1QE=Sat,\ + \ 22 Jun 2019 20:39:53 GMT1{\"\ + EncryptedMessageContents\": \"3PSOHon02940Hfsbuk5nYQ==\", \"EncryptionData\"\ + : {\"WrappedContentKey\": {\"KeyId\": \"key1\", \"EncryptedKey\": \"nbeKbTHqmB+/H05JZSqUXkC/UNxRNt4KN79ppPtdEwKmE8BWHIvpHg==\"\ + , \"Algorithm\": \"A256KW\"}, \"EncryptionAgent\": {\"Protocol\": \"1.0\"\ + , \"EncryptionAlgorithm\": \"AES_CBC_256\"}, \"ContentEncryptionIV\": \"u10o6ZIj4v9K9NVCyfD6fQ==\"\ + , \"KeyWrappingMetadata\": {\"EncryptionLibrary\": \"Python 1.0.0\"}}}" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:39:22 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 4f9aa486-0003-00ab-6e3a-29b312000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_queue_encryption.test_get_messages_encrypted_kek.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_queue_encryption.test_get_messages_encrypted_kek.yaml new file mode 100644 index 000000000000..0909af7e6731 --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_queue_encryption.test_get_messages_encrypted_kek.yaml @@ -0,0 +1,880 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 31efdc86-952a-11e9-a2f3-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:27 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/encryptionqueue546e15fa + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:13:27 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - cafe0220-6003-00d6-3736-292fda000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + {"EncryptedMessageContents": "hGK/0avnjZFdmbos+rHERo3r/37242hP1n5NVK05eMY=", + "EncryptionData": {"WrappedContentKey": {"KeyId": "key1", "EncryptedKey": "zfmkUHnFc8QdrolOlAZgux3NFckaLx6wz7zhelA89cce9vlA0LJ4SQ==", + "Algorithm": "A256KW"}, "EncryptionAgent": {"Protocol": "1.0", "EncryptionAlgorithm": + "AES_CBC_256"}, "ContentEncryptionIV": "DmbSlrCUd363R1BFBvv6mg==", "KeyWrappingMetadata": + {"EncryptionLibrary": "Python 1.0.0"}}}' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '521' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 32124238-952a-11e9-8bec-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:27 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://remotestoragename.queue.core.windows.net/encryptionqueue546e15fa/messages + response: + body: + string: "\uFEFFf5a3dffc-e1a6-439f-8f7f-be69c4f8cd1dSat,\ + \ 22 Jun 2019 20:13:27 GMTSat, 29 Jun 2019\ + \ 20:13:27 GMTAgAAAAMAAAAAAAAAkyjY8zYp1QE=Sat,\ + \ 22 Jun 2019 20:13:27 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:13:27 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - cafe0229-6003-00d6-3d36-292fda000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 321b2a24-952a-11e9-a175-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:27 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://remotestoragename.queue.core.windows.net/encryptionqueue546e15fa/messages + response: + body: + string: "\uFEFFf5a3dffc-e1a6-439f-8f7f-be69c4f8cd1dSat,\ + \ 22 Jun 2019 20:13:27 GMTSat, 29 Jun 2019\ + \ 20:13:27 GMTAgAAAAMAAAAAAAAApVjCBTcp1QE=Sat,\ + \ 22 Jun 2019 20:13:57 GMT1{\"\ + EncryptedMessageContents\": \"hGK/0avnjZFdmbos+rHERo3r/37242hP1n5NVK05eMY=\"\ + , \"EncryptionData\": {\"WrappedContentKey\": {\"KeyId\": \"key1\", \"EncryptedKey\"\ + : \"zfmkUHnFc8QdrolOlAZgux3NFckaLx6wz7zhelA89cce9vlA0LJ4SQ==\", \"Algorithm\"\ + : \"A256KW\"}, \"EncryptionAgent\": {\"Protocol\": \"1.0\", \"EncryptionAlgorithm\"\ + : \"AES_CBC_256\"}, \"ContentEncryptionIV\": \"DmbSlrCUd363R1BFBvv6mg==\"\ + , \"KeyWrappingMetadata\": {\"EncryptionLibrary\": \"Python 1.0.0\"}}}" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:13:27 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - cafe0233-6003-00d6-4736-292fda000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - eefd2518-952a-11e9-8432-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:44 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/encryptionqueue546e15fa + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:43 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 10d1de33-2003-0016-3e37-29a59e000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 8b2c25f4-952b-11e9-84ba-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:23:06 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/encryptionqueue546e15fa + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:23:06 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - c31d1485-7003-0063-5538-292225000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: ' + + {"EncryptedMessageContents": "c+KZdXoEYjXqCd+XZo4mbrhIqr84NmGikFVvp29ITHY=", + "EncryptionData": {"WrappedContentKey": {"KeyId": "key1", "EncryptedKey": "zN+StyfNPWdKyIkLwusmcg/+Rco0MIGDo8SFX814ecNkZiXk3qomTw==", + "Algorithm": "A256KW"}, "EncryptionAgent": {"Protocol": "1.0", "EncryptionAlgorithm": + "AES_CBC_256"}, "ContentEncryptionIV": "b9MYgN2asjO8Oy1NCboPmw==", "KeyWrappingMetadata": + {"EncryptionLibrary": "Python 1.0.0"}}}' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '521' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 8b4ca090-952b-11e9-8664-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:23:06 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/encryptionqueue546e15fa/messages + response: + body: + string: "\uFEFF2b08d7de-5f0b-4545-8868-ab15efcd8577Sat,\ + \ 22 Jun 2019 20:23:06 GMTSat, 29 Jun 2019\ + \ 20:23:06 GMTAgAAAAMAAAAAAAAANMETTTgp1QE=Sat,\ + \ 22 Jun 2019 20:23:06 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:23:06 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - c31d148e-7003-0063-5b38-292225000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 8b5da0ac-952b-11e9-a4a6-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:23:06 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/encryptionqueue546e15fa/messages + response: + body: + string: "\uFEFFf5a3dffc-e1a6-439f-8f7f-be69c4f8cd1dSat,\ + \ 22 Jun 2019 20:13:27 GMTSat, 29 Jun 2019\ + \ 20:13:27 GMTAgAAAAMAAAAAAAAAgcwGXzgp1QE=Sat,\ + \ 22 Jun 2019 20:23:36 GMT2{\"\ + EncryptedMessageContents\": \"hGK/0avnjZFdmbos+rHERo3r/37242hP1n5NVK05eMY=\"\ + , \"EncryptionData\": {\"WrappedContentKey\": {\"KeyId\": \"key1\", \"EncryptedKey\"\ + : \"zfmkUHnFc8QdrolOlAZgux3NFckaLx6wz7zhelA89cce9vlA0LJ4SQ==\", \"Algorithm\"\ + : \"A256KW\"}, \"EncryptionAgent\": {\"Protocol\": \"1.0\", \"EncryptionAlgorithm\"\ + : \"AES_CBC_256\"}, \"ContentEncryptionIV\": \"DmbSlrCUd363R1BFBvv6mg==\"\ + , \"KeyWrappingMetadata\": {\"EncryptionLibrary\": \"Python 1.0.0\"}}}" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:23:06 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - c31d1496-7003-0063-6238-292225000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 027a3ee8-952c-11e9-99b7-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:26:26 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/encryptionqueue546e15fa + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:26:26 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - f350e9de-f003-005b-1138-29637c000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: ' + + {"EncryptedMessageContents": "lpGVt4CHnQSpZbK2+V7iljZSe3jJI85fVinruRl1wPc=", + "EncryptionData": {"WrappedContentKey": {"KeyId": "key1", "EncryptedKey": "26y4KrkrJJGIQZID+ot1IV56Zb+ZsnctUn+kAGImPPztY97bN6+Sbg==", + "Algorithm": "A256KW"}, "EncryptionAgent": {"Protocol": "1.0", "EncryptionAlgorithm": + "AES_CBC_256"}, "ContentEncryptionIV": "9YbJyb594aH2dwYENH0vcQ==", "KeyWrappingMetadata": + {"EncryptionLibrary": "Python 1.0.0"}}}' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '521' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 02a88a82-952c-11e9-8d46-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:26:26 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/encryptionqueue546e15fa/messages + response: + body: + string: "\uFEFFc877c463-7281-435f-b395-fe9db87c34a6Sat,\ + \ 22 Jun 2019 20:26:26 GMTSat, 29 Jun 2019\ + \ 20:26:26 GMTAgAAAAMAAAAAAAAA4hhwxDgp1QE=Sat,\ + \ 22 Jun 2019 20:26:26 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:26:26 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - f350e9e6-f003-005b-1638-29637c000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 02b9a0e2-952c-11e9-a4be-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:26:26 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/encryptionqueue546e15fa/messages + response: + body: + string: "\uFEFF2b08d7de-5f0b-4545-8868-ab15efcd8577Sat,\ + \ 22 Jun 2019 20:23:06 GMTSat, 29 Jun 2019\ + \ 20:23:06 GMTAgAAAAMAAAAAAAAA1Ydi1jgp1QE=Sat,\ + \ 22 Jun 2019 20:26:56 GMT1{\"\ + EncryptedMessageContents\": \"c+KZdXoEYjXqCd+XZo4mbrhIqr84NmGikFVvp29ITHY=\"\ + , \"EncryptionData\": {\"WrappedContentKey\": {\"KeyId\": \"key1\", \"EncryptedKey\"\ + : \"zN+StyfNPWdKyIkLwusmcg/+Rco0MIGDo8SFX814ecNkZiXk3qomTw==\", \"Algorithm\"\ + : \"A256KW\"}, \"EncryptionAgent\": {\"Protocol\": \"1.0\", \"EncryptionAlgorithm\"\ + : \"AES_CBC_256\"}, \"ContentEncryptionIV\": \"b9MYgN2asjO8Oy1NCboPmw==\"\ + , \"KeyWrappingMetadata\": {\"EncryptionLibrary\": \"Python 1.0.0\"}}}" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:26:26 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - f350e9ed-f003-005b-1c38-29637c000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - bb8b69ca-952c-11e9-8d75-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:31:36 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/encryptionqueue546e15fa + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:31:36 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 209f3b80-a003-00e9-4a39-299806000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: ' + + {"EncryptedMessageContents": "Dfg2RIBEnUrdqZIgKDZAO5xomPG5mJtW3dLG9hmPIGo=", + "EncryptionData": {"WrappedContentKey": {"KeyId": "key1", "EncryptedKey": "In5oCKhIfwvXT+fbgXfa+7/ZbggKLAXo3P6rsU7LmjxijlH7CIFfVQ==", + "Algorithm": "A256KW"}, "EncryptionAgent": {"Protocol": "1.0", "EncryptionAlgorithm": + "AES_CBC_256"}, "ContentEncryptionIV": "StvUB3i3OtbTKTneyV8GVg==", "KeyWrappingMetadata": + {"EncryptionLibrary": "Python 1.0.0"}}}' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '521' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - bbc94fba-952c-11e9-b05e-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:31:37 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/encryptionqueue546e15fa/messages + response: + body: + string: "\uFEFF465d8cfc-006d-4e08-b964-df2f7adeb395Sat,\ + \ 22 Jun 2019 20:31:37 GMTSat, 29 Jun 2019\ + \ 20:31:37 GMTAgAAAAMAAAAAAAAAcISRfTkp1QE=Sat,\ + \ 22 Jun 2019 20:31:37 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:31:36 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 209f3b89-a003-00e9-5039-299806000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - bbd69d34-952c-11e9-bb75-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:31:37 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/encryptionqueue546e15fa/messages + response: + body: + string: "\uFEFFf5a3dffc-e1a6-439f-8f7f-be69c4f8cd1dSat,\ + \ 22 Jun 2019 20:13:27 GMTSat, 29 Jun 2019\ + \ 20:13:27 GMTAgAAAAMAAAAAAAAAOkmAjzkp1QE=Sat,\ + \ 22 Jun 2019 20:32:07 GMT3{\"\ + EncryptedMessageContents\": \"hGK/0avnjZFdmbos+rHERo3r/37242hP1n5NVK05eMY=\"\ + , \"EncryptionData\": {\"WrappedContentKey\": {\"KeyId\": \"key1\", \"EncryptedKey\"\ + : \"zfmkUHnFc8QdrolOlAZgux3NFckaLx6wz7zhelA89cce9vlA0LJ4SQ==\", \"Algorithm\"\ + : \"A256KW\"}, \"EncryptionAgent\": {\"Protocol\": \"1.0\", \"EncryptionAlgorithm\"\ + : \"AES_CBC_256\"}, \"ContentEncryptionIV\": \"DmbSlrCUd363R1BFBvv6mg==\"\ + , \"KeyWrappingMetadata\": {\"EncryptionLibrary\": \"Python 1.0.0\"}}}" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:31:36 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 209f3b97-a003-00e9-5a39-299806000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - d722478a-952c-11e9-b95a-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:32:23 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/encryptionqueue546e15fa + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:32:23 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 40413335-6003-00dd-0339-2937ae000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: ' + + {"EncryptedMessageContents": "lnNi6Cge9iixerXUNXQit2DwUWzP+fzojrHcICGclsY=", + "EncryptionData": {"WrappedContentKey": {"KeyId": "key1", "EncryptedKey": "dSs+S8mnmDoSBoXsrhNuQSnPuis2cTCv78m/LurSehQ8tlERAUK2cA==", + "Algorithm": "A256KW"}, "EncryptionAgent": {"Protocol": "1.0", "EncryptionAlgorithm": + "AES_CBC_256"}, "ContentEncryptionIV": "dr/uvpes/jzLkjo+E7NGAA==", "KeyWrappingMetadata": + {"EncryptionLibrary": "Python 1.0.0"}}}' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '521' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - d7492a30-952c-11e9-8427-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:32:23 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/encryptionqueue546e15fa/messages + response: + body: + string: "\uFEFFe56d81e7-83b4-4a9f-bcf1-66a39d8c373bSat,\ + \ 22 Jun 2019 20:32:23 GMTSat, 29 Jun 2019\ + \ 20:32:23 GMTAgAAAAMAAAAAAAAAqi0RmTkp1QE=Sat,\ + \ 22 Jun 2019 20:32:23 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:32:23 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 40413341-6003-00dd-0a39-2937ae000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - d751aff4-952c-11e9-8640-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:32:23 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/encryptionqueue546e15fa/messages + response: + body: + string: "\uFEFFc877c463-7281-435f-b395-fe9db87c34a6Sat,\ + \ 22 Jun 2019 20:26:26 GMTSat, 29 Jun 2019\ + \ 20:26:26 GMTAgAAAAMAAAAAAAAAjg/7qjkp1QE=Sat,\ + \ 22 Jun 2019 20:32:53 GMT1{\"\ + EncryptedMessageContents\": \"lpGVt4CHnQSpZbK2+V7iljZSe3jJI85fVinruRl1wPc=\"\ + , \"EncryptionData\": {\"WrappedContentKey\": {\"KeyId\": \"key1\", \"EncryptedKey\"\ + : \"26y4KrkrJJGIQZID+ot1IV56Zb+ZsnctUn+kAGImPPztY97bN6+Sbg==\", \"Algorithm\"\ + : \"A256KW\"}, \"EncryptionAgent\": {\"Protocol\": \"1.0\", \"EncryptionAlgorithm\"\ + : \"AES_CBC_256\"}, \"ContentEncryptionIV\": \"9YbJyb594aH2dwYENH0vcQ==\"\ + , \"KeyWrappingMetadata\": {\"EncryptionLibrary\": \"Python 1.0.0\"}}}" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:32:23 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 40413345-6003-00dd-0d39-2937ae000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - d23aa342-952d-11e9-a9ec-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:24 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/encryptionqueue546e15fa + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:39:24 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 2f000919-9003-00a5-7c3a-295f19000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + {"EncryptedMessageContents": "d5v8QK2Hia8IVxotrcyyHGa6qRvYkSEoC/OirEP/vZQ=", + "EncryptionData": {"WrappedContentKey": {"KeyId": "key1", "EncryptedKey": "P+UNIBYXwFzygN7okh8pn/3i621Ubrh1lKtN+4LnXDa5B4gw+tTCmA==", + "Algorithm": "A256KW"}, "EncryptionAgent": {"Protocol": "1.0", "EncryptionAlgorithm": + "AES_CBC_256"}, "ContentEncryptionIV": "yZoVuTfcM2GXVQPyjFI5xQ==", "KeyWrappingMetadata": + {"EncryptionLibrary": "Python 1.0.0"}}}' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '521' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - d25f4c42-952d-11e9-a88f-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:24 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/encryptionqueue546e15fa/messages + response: + body: + string: "\uFEFFbb536da4-52a1-4e90-be11-dbe341b9584cSat,\ + \ 22 Jun 2019 20:39:24 GMTSat, 29 Jun 2019\ + \ 20:39:24 GMTAgAAAAMAAAAAAAAA+GAnlDop1QE=Sat,\ + \ 22 Jun 2019 20:39:24 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:39:24 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 2f000926-9003-00a5-063a-295f19000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - d268469e-952d-11e9-9bed-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:24 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/encryptionqueue546e15fa/messages + response: + body: + string: "\uFEFFbb536da4-52a1-4e90-be11-dbe341b9584cSat,\ + \ 22 Jun 2019 20:39:24 GMTSat, 29 Jun 2019\ + \ 20:39:24 GMTAgAAAAMAAAAAAAAAZy0Spjop1QE=Sat,\ + \ 22 Jun 2019 20:39:54 GMT1{\"\ + EncryptedMessageContents\": \"d5v8QK2Hia8IVxotrcyyHGa6qRvYkSEoC/OirEP/vZQ=\"\ + , \"EncryptionData\": {\"WrappedContentKey\": {\"KeyId\": \"key1\", \"EncryptedKey\"\ + : \"P+UNIBYXwFzygN7okh8pn/3i621Ubrh1lKtN+4LnXDa5B4gw+tTCmA==\", \"Algorithm\"\ + : \"A256KW\"}, \"EncryptionAgent\": {\"Protocol\": \"1.0\", \"EncryptionAlgorithm\"\ + : \"AES_CBC_256\"}, \"ContentEncryptionIV\": \"yZoVuTfcM2GXVQPyjFI5xQ==\"\ + , \"KeyWrappingMetadata\": {\"EncryptionLibrary\": \"Python 1.0.0\"}}}" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:39:24 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 2f000931-9003-00a5-0f3a-295f19000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_queue_encryption.test_get_messages_encrypted_resolver.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_queue_encryption.test_get_messages_encrypted_resolver.yaml new file mode 100644 index 000000000000..bef8e60a9b43 --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_queue_encryption.test_get_messages_encrypted_resolver.yaml @@ -0,0 +1,460 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 322ead10-952a-11e9-93df-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:27 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/encryptionqueuec9311831 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:13:27 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - d3526754-d003-0047-0c36-29bb6b000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + {"EncryptedMessageContents": "4yy325v0qAy7xznTeBPiv06jde5O0wZy1zWOyLDk6kU=", + "EncryptionData": {"WrappedContentKey": {"KeyId": "key1", "EncryptedKey": "HUhg0lR1ICmBUahj7gMPDyGXvbhOsGSEbRTHd9A+SKkP9I+/pmvfpA==", + "Algorithm": "A256KW"}, "EncryptionAgent": {"Protocol": "1.0", "EncryptionAlgorithm": + "AES_CBC_256"}, "ContentEncryptionIV": "sSbVxNO1NyXqtsw5tcoZUw==", "KeyWrappingMetadata": + {"EncryptionLibrary": "Python 1.0.0"}}}' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '521' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 324ed158-952a-11e9-b390-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:27 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://remotestoragename.queue.core.windows.net/encryptionqueuec9311831/messages + response: + body: + string: "\uFEFF3e5344fa-4095-4c57-9f4e-900101047ffbSat,\ + \ 22 Jun 2019 20:13:27 GMTSat, 29 Jun 2019\ + \ 20:13:27 GMTAgAAAAMAAAAAAAAAWXkU9DYp1QE=Sat,\ + \ 22 Jun 2019 20:13:27 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:13:27 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - d3526770-d003-0047-2536-29bb6b000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 325c12c8-952a-11e9-a479-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:27 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://remotestoragename.queue.core.windows.net/encryptionqueuec9311831/messages + response: + body: + string: "\uFEFF3e5344fa-4095-4c57-9f4e-900101047ffbSat,\ + \ 22 Jun 2019 20:13:27 GMTSat, 29 Jun 2019\ + \ 20:13:27 GMTAgAAAAMAAAAAAAAAIz4DBjcp1QE=Sat,\ + \ 22 Jun 2019 20:13:57 GMT1{\"\ + EncryptedMessageContents\": \"4yy325v0qAy7xznTeBPiv06jde5O0wZy1zWOyLDk6kU=\"\ + , \"EncryptionData\": {\"WrappedContentKey\": {\"KeyId\": \"key1\", \"EncryptedKey\"\ + : \"HUhg0lR1ICmBUahj7gMPDyGXvbhOsGSEbRTHd9A+SKkP9I+/pmvfpA==\", \"Algorithm\"\ + : \"A256KW\"}, \"EncryptionAgent\": {\"Protocol\": \"1.0\", \"EncryptionAlgorithm\"\ + : \"AES_CBC_256\"}, \"ContentEncryptionIV\": \"sSbVxNO1NyXqtsw5tcoZUw==\"\ + , \"KeyWrappingMetadata\": {\"EncryptionLibrary\": \"Python 1.0.0\"}}}" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:13:27 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - d3526799-d003-0047-4c36-29bb6b000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - ef3f67dc-952a-11e9-990a-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:44 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/encryptionqueuec9311831 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:44 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 54d9758a-f003-00be-0d37-29718b000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 8b832ed0-952b-11e9-bdd9-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:23:06 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/encryptionqueuec9311831 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:23:06 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 9911f38a-e003-0044-6538-29b86c000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: ' + + {"EncryptedMessageContents": "imo7JjqY8K9aZ0evMg5dPx1EHjdMqk18QjrIHIoZdI0=", + "EncryptionData": {"WrappedContentKey": {"KeyId": "key1", "EncryptedKey": "4stkMePQUT30VwBQUA8RNMkT9kgMUyWbzK7f+iH48nAJDVwlgylXog==", + "Algorithm": "A256KW"}, "EncryptionAgent": {"Protocol": "1.0", "EncryptionAlgorithm": + "AES_CBC_256"}, "ContentEncryptionIV": "VnT20d1CRa9DjxPTRklRAA==", "KeyWrappingMetadata": + {"EncryptionLibrary": "Python 1.0.0"}}}' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '521' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 8ba40cc2-952b-11e9-bb19-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:23:07 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/encryptionqueuec9311831/messages + response: + body: + string: "\uFEFF26a4ceaf-5c00-48d7-8624-9ee187ada845Sat,\ + \ 22 Jun 2019 20:23:07 GMTSat, 29 Jun 2019\ + \ 20:23:07 GMTAgAAAAMAAAAAAAAARo5rTTgp1QE=Sat,\ + \ 22 Jun 2019 20:23:07 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:23:06 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 9911f391-e003-0044-6a38-29b86c000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 8bad6998-952b-11e9-9651-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:23:07 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/encryptionqueuec9311831/messages + response: + body: + string: "\uFEFF3e5344fa-4095-4c57-9f4e-900101047ffbSat,\ + \ 22 Jun 2019 20:13:27 GMTSat, 29 Jun 2019\ + \ 20:13:27 GMTAgAAAAMAAAAAAAAAnTNWXzgp1QE=Sat,\ + \ 22 Jun 2019 20:23:37 GMT2{\"\ + EncryptedMessageContents\": \"4yy325v0qAy7xznTeBPiv06jde5O0wZy1zWOyLDk6kU=\"\ + , \"EncryptionData\": {\"WrappedContentKey\": {\"KeyId\": \"key1\", \"EncryptedKey\"\ + : \"HUhg0lR1ICmBUahj7gMPDyGXvbhOsGSEbRTHd9A+SKkP9I+/pmvfpA==\", \"Algorithm\"\ + : \"A256KW\"}, \"EncryptionAgent\": {\"Protocol\": \"1.0\", \"EncryptionAlgorithm\"\ + : \"AES_CBC_256\"}, \"ContentEncryptionIV\": \"sSbVxNO1NyXqtsw5tcoZUw==\"\ + , \"KeyWrappingMetadata\": {\"EncryptionLibrary\": \"Python 1.0.0\"}}}" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:23:06 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 9911f393-e003-0044-6c38-29b86c000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - d2de10a4-952d-11e9-8cb3-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:25 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/encryptionqueuec9311831 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:39:25 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - e7a7414a-d003-00cf-563a-2903b2000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + {"EncryptedMessageContents": "mGrHnyAmB9R008rsg7W/nol1JIZzfHt1dDu88cXhA00=", + "EncryptionData": {"WrappedContentKey": {"KeyId": "key1", "EncryptedKey": "1ti9m7p2oiMmndWQQdTd3bCJl/pj0ebsWErLsgA2q33c9tLJkKPCbA==", + "Algorithm": "A256KW"}, "EncryptionAgent": {"Protocol": "1.0", "EncryptionAlgorithm": + "AES_CBC_256"}, "ContentEncryptionIV": "r8PEFFq1BhvFn/6dykh1uw==", "KeyWrappingMetadata": + {"EncryptionLibrary": "Python 1.0.0"}}}' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '521' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - d304d89c-952d-11e9-bace-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:25 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/encryptionqueuec9311831/messages + response: + body: + string: "\uFEFFdbf35a1f-9293-433c-8226-c0bec223bf43Sat,\ + \ 22 Jun 2019 20:39:25 GMTSat, 29 Jun 2019\ + \ 20:39:25 GMTAgAAAAMAAAAAAAAA/W3OlDop1QE=Sat,\ + \ 22 Jun 2019 20:39:25 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:39:25 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - e7a74164-d003-00cf-6e3a-2903b2000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - d3129702-952d-11e9-9f52-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:25 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/encryptionqueuec9311831/messages + response: + body: + string: "\uFEFFdbf35a1f-9293-433c-8226-c0bec223bf43Sat,\ + \ 22 Jun 2019 20:39:25 GMTSat, 29 Jun 2019\ + \ 20:39:25 GMTAgAAAAMAAAAAAAAAwjK9pjop1QE=Sat,\ + \ 22 Jun 2019 20:39:55 GMT1{\"\ + EncryptedMessageContents\": \"mGrHnyAmB9R008rsg7W/nol1JIZzfHt1dDu88cXhA00=\"\ + , \"EncryptionData\": {\"WrappedContentKey\": {\"KeyId\": \"key1\", \"EncryptedKey\"\ + : \"1ti9m7p2oiMmndWQQdTd3bCJl/pj0ebsWErLsgA2q33c9tLJkKPCbA==\", \"Algorithm\"\ + : \"A256KW\"}, \"EncryptionAgent\": {\"Protocol\": \"1.0\", \"EncryptionAlgorithm\"\ + : \"AES_CBC_256\"}, \"ContentEncryptionIV\": \"r8PEFFq1BhvFn/6dykh1uw==\"\ + , \"KeyWrappingMetadata\": {\"EncryptionLibrary\": \"Python 1.0.0\"}}}" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:39:25 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - e7a74184-d003-00cf-0c3a-2903b2000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_queue_encryption.test_get_with_strict_mode.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_queue_encryption.test_get_with_strict_mode.yaml new file mode 100644 index 000000000000..fb19c7685083 --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_queue_encryption.test_get_with_strict_mode.yaml @@ -0,0 +1,430 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 32701ffa-952a-11e9-82c0-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:27 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/encryptionqueued7de1393 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:13:27 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - a7d12c23-7003-0005-6236-29907f000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '102' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 32913d06-952a-11e9-97b4-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:28 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://remotestoragename.queue.core.windows.net/encryptionqueued7de1393/messages + response: + body: + string: "\uFEFFf2d21db6-31b8-47a7-8786-319979908e03Sat,\ + \ 22 Jun 2019 20:13:28 GMTSat, 29 Jun 2019\ + \ 20:13:28 GMTAgAAAAMAAAAAAAAA1QxX9DYp1QE=Sat,\ + \ 22 Jun 2019 20:13:28 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:13:27 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - a7d12c2c-7003-0005-6836-29907f000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 329a48d8-952a-11e9-877d-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:28 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://remotestoragename.queue.core.windows.net/encryptionqueued7de1393/messages + response: + body: + string: "\uFEFFf2d21db6-31b8-47a7-8786-319979908e03Sat,\ + \ 22 Jun 2019 20:13:28 GMTSat, 29 Jun 2019\ + \ 20:13:28 GMTAgAAAAMAAAAAAAAA/2NBBjcp1QE=Sat,\ + \ 22 Jun 2019 20:13:58 GMT1message" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:13:28 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - a7d12c2d-7003-0005-6936-29907f000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - ef81acdc-952a-11e9-a31e-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:45 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/encryptionqueued7de1393 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:45 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 9dea9a5c-4003-0049-2837-295760000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 8bd35a9a-952b-11e9-a72b-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:23:07 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/encryptionqueued7de1393 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:23:07 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 261e21fc-0003-0001-5f38-2965fd000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: ' + + message' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '102' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 8bf4970a-952b-11e9-8080-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:23:07 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/encryptionqueued7de1393/messages + response: + body: + string: "\uFEFF8172b458-e77c-4b26-b589-7efe580c5d8eSat,\ + \ 22 Jun 2019 20:23:07 GMTSat, 29 Jun 2019\ + \ 20:23:07 GMTAgAAAAMAAAAAAAAA5N+7TTgp1QE=Sat,\ + \ 22 Jun 2019 20:23:07 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:23:07 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 261e2225-0003-0001-0338-2965fd000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 8bfd7ff0-952b-11e9-a7c6-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:23:07 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/encryptionqueued7de1393/messages + response: + body: + string: "\uFEFFf2d21db6-31b8-47a7-8786-319979908e03Sat,\ + \ 22 Jun 2019 20:13:28 GMTSat, 29 Jun 2019\ + \ 20:13:28 GMTAgAAAAMAAAAAAAAACjemXzgp1QE=Sat,\ + \ 22 Jun 2019 20:23:37 GMT2message" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:23:07 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 261e2237-0003-0001-1538-2965fd000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - d361dc18-952d-11e9-af8d-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:26 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/encryptionqueued7de1393 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:39:25 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 228cb02f-c003-00db-093a-29c0d6000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + message' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '102' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - d385957a-952d-11e9-a32e-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:26 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/encryptionqueued7de1393/messages + response: + body: + string: "\uFEFF40a29134-d895-49d5-961b-8ddee46ba737Sat,\ + \ 22 Jun 2019 20:39:26 GMTSat, 29 Jun 2019\ + \ 20:39:26 GMTAgAAAAMAAAAAAAAAJCdPlTop1QE=Sat,\ + \ 22 Jun 2019 20:39:26 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:39:26 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 228cb03c-c003-00db-113a-29c0d6000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - d3905494-952d-11e9-b8c7-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:26 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/encryptionqueued7de1393/messages + response: + body: + string: "\uFEFF40a29134-d895-49d5-961b-8ddee46ba737Sat,\ + \ 22 Jun 2019 20:39:26 GMTSat, 29 Jun 2019\ + \ 20:39:26 GMTAgAAAAMAAAAAAAAATSw7pzop1QE=Sat,\ + \ 22 Jun 2019 20:39:56 GMT1message" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:39:26 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 228cb03e-c003-00db-133a-29c0d6000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_queue_encryption.test_invalid_value_kek_unwrap.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_queue_encryption.test_invalid_value_kek_unwrap.yaml new file mode 100644 index 000000000000..42c72caad083 --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_queue_encryption.test_invalid_value_kek_unwrap.yaml @@ -0,0 +1,601 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 32ad7f9e-952a-11e9-8f0b-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:28 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/encryptionqueue29091535 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:13:27 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - a7dae6db-c003-009f-6136-291cba000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + {"EncryptedMessageContents": "QIu8K//FhoO1Un9Rhw+p0A==", + "EncryptionData": {"WrappedContentKey": {"KeyId": "key1", "EncryptedKey": "qAHXixeQZeUVh7hjnKNQxHOv88/mypVsb3uPeIawSLDdiQXcUaovzw==", + "Algorithm": "A256KW"}, "EncryptionAgent": {"Protocol": "1.0", "EncryptionAlgorithm": + "AES_CBC_256"}, "ContentEncryptionIV": "aukQ/2aQFS7lFynt9ABQmA==", "KeyWrappingMetadata": + {"EncryptionLibrary": "Python 1.0.0"}}}' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '501' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 32d0dacc-952a-11e9-b029-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:28 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://remotestoragename.queue.core.windows.net/encryptionqueue29091535/messages + response: + body: + string: "\uFEFF3fdb6dbd-cc0a-44b5-8830-47a32fe27eddSat,\ + \ 22 Jun 2019 20:13:28 GMTSat, 29 Jun 2019\ + \ 20:13:28 GMTAgAAAAMAAAAAAAAArOCW9DYp1QE=Sat,\ + \ 22 Jun 2019 20:13:28 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:13:27 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - a7dae6e5-c003-009f-6636-291cba000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 32d9ce5c-952a-11e9-aa7d-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:28 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://remotestoragename.queue.core.windows.net/encryptionqueue29091535/messages?peekonly=true + response: + body: + string: "\uFEFF3fdb6dbd-cc0a-44b5-8830-47a32fe27eddSat,\ + \ 22 Jun 2019 20:13:28 GMTSat, 29 Jun 2019\ + \ 20:13:28 GMT0{\"\ + EncryptedMessageContents\": \"QIu8K//FhoO1Un9Rhw+p0A==\", \"EncryptionData\"\ + : {\"WrappedContentKey\": {\"KeyId\": \"key1\", \"EncryptedKey\": \"qAHXixeQZeUVh7hjnKNQxHOv88/mypVsb3uPeIawSLDdiQXcUaovzw==\"\ + , \"Algorithm\": \"A256KW\"}, \"EncryptionAgent\": {\"Protocol\": \"1.0\"\ + , \"EncryptionAlgorithm\": \"AES_CBC_256\"}, \"ContentEncryptionIV\": \"aukQ/2aQFS7lFynt9ABQmA==\"\ + , \"KeyWrappingMetadata\": {\"EncryptionLibrary\": \"Python 1.0.0\"}}}" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:13:27 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - a7dae6e7-c003-009f-6736-291cba000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 32e2c168-952a-11e9-9f66-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:28 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://remotestoragename.queue.core.windows.net/encryptionqueue29091535/messages?peekonly=true + response: + body: + string: "\uFEFF3fdb6dbd-cc0a-44b5-8830-47a32fe27eddSat,\ + \ 22 Jun 2019 20:13:28 GMTSat, 29 Jun 2019\ + \ 20:13:28 GMT0{\"\ + EncryptedMessageContents\": \"QIu8K//FhoO1Un9Rhw+p0A==\", \"EncryptionData\"\ + : {\"WrappedContentKey\": {\"KeyId\": \"key1\", \"EncryptedKey\": \"qAHXixeQZeUVh7hjnKNQxHOv88/mypVsb3uPeIawSLDdiQXcUaovzw==\"\ + , \"Algorithm\": \"A256KW\"}, \"EncryptionAgent\": {\"Protocol\": \"1.0\"\ + , \"EncryptionAlgorithm\": \"AES_CBC_256\"}, \"ContentEncryptionIV\": \"aukQ/2aQFS7lFynt9ABQmA==\"\ + , \"KeyWrappingMetadata\": {\"EncryptionLibrary\": \"Python 1.0.0\"}}}" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:13:27 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - a7dae6ed-c003-009f-6b36-291cba000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - efc20cd2-952a-11e9-81c5-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:45 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/encryptionqueue29091535 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:45 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - a7d19055-7003-0005-2837-29907f000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 8c23bba2-952b-11e9-94c0-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:23:07 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/encryptionqueue29091535 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:23:08 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 49277c4f-c003-0058-1f38-29607b000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: ' + + {"EncryptedMessageContents": "HUP/KdFXOIVjdt3oXlGn7w==", + "EncryptionData": {"WrappedContentKey": {"KeyId": "key1", "EncryptedKey": "HUwPw4ysU1j07dT1mssWuw7tJj75/QrFyinLtnw7dnw4mP/AnLZpVA==", + "Algorithm": "A256KW"}, "EncryptionAgent": {"Protocol": "1.0", "EncryptionAlgorithm": + "AES_CBC_256"}, "ContentEncryptionIV": "tYlV2JKFK6xehQi91DP1Iw==", "KeyWrappingMetadata": + {"EncryptionLibrary": "Python 1.0.0"}}}' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '501' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 8c48af86-952b-11e9-9b7a-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:23:08 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/encryptionqueue29091535/messages + response: + body: + string: "\uFEFF0f86b0f7-5a71-430e-bc09-30b8e3d31e04Sat,\ + \ 22 Jun 2019 20:23:08 GMTSat, 29 Jun 2019\ + \ 20:23:08 GMTAgAAAAMAAAAAAAAABJ8QTjgp1QE=Sat,\ + \ 22 Jun 2019 20:23:08 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:23:08 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 49277c61-c003-0058-2f38-29607b000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 8c56ee78-952b-11e9-9673-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:23:08 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/encryptionqueue29091535/messages?peekonly=true + response: + body: + string: "\uFEFF3fdb6dbd-cc0a-44b5-8830-47a32fe27eddSat,\ + \ 22 Jun 2019 20:13:28 GMTSat, 29 Jun 2019\ + \ 20:13:28 GMT0{\"\ + EncryptedMessageContents\": \"QIu8K//FhoO1Un9Rhw+p0A==\", \"EncryptionData\"\ + : {\"WrappedContentKey\": {\"KeyId\": \"key1\", \"EncryptedKey\": \"qAHXixeQZeUVh7hjnKNQxHOv88/mypVsb3uPeIawSLDdiQXcUaovzw==\"\ + , \"Algorithm\": \"A256KW\"}, \"EncryptionAgent\": {\"Protocol\": \"1.0\"\ + , \"EncryptionAlgorithm\": \"AES_CBC_256\"}, \"ContentEncryptionIV\": \"aukQ/2aQFS7lFynt9ABQmA==\"\ + , \"KeyWrappingMetadata\": {\"EncryptionLibrary\": \"Python 1.0.0\"}}}" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:23:08 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 49277c7a-c003-0058-4638-29607b000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 8c5fd7fe-952b-11e9-98b8-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:23:08 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/encryptionqueue29091535/messages?peekonly=true + response: + body: + string: "\uFEFF3fdb6dbd-cc0a-44b5-8830-47a32fe27eddSat,\ + \ 22 Jun 2019 20:13:28 GMTSat, 29 Jun 2019\ + \ 20:13:28 GMT0{\"\ + EncryptedMessageContents\": \"QIu8K//FhoO1Un9Rhw+p0A==\", \"EncryptionData\"\ + : {\"WrappedContentKey\": {\"KeyId\": \"key1\", \"EncryptedKey\": \"qAHXixeQZeUVh7hjnKNQxHOv88/mypVsb3uPeIawSLDdiQXcUaovzw==\"\ + , \"Algorithm\": \"A256KW\"}, \"EncryptionAgent\": {\"Protocol\": \"1.0\"\ + , \"EncryptionAlgorithm\": \"AES_CBC_256\"}, \"ContentEncryptionIV\": \"aukQ/2aQFS7lFynt9ABQmA==\"\ + , \"KeyWrappingMetadata\": {\"EncryptionLibrary\": \"Python 1.0.0\"}}}" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:23:08 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 49277c90-c003-0058-5938-29607b000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - d3ebaa9c-952d-11e9-810d-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:27 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/encryptionqueue29091535 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:39:26 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - a1c572d4-e003-00aa-2b3a-29b2ef000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + {"EncryptedMessageContents": "xKDBJnVr+OpKJrXwn72e/w==", + "EncryptionData": {"WrappedContentKey": {"KeyId": "key1", "EncryptedKey": "8t2f1vsTc2wQMC4hptUyBCsJvPyzZqTDEceeASDs+Vb8XSb8az6X/Q==", + "Algorithm": "A256KW"}, "EncryptionAgent": {"Protocol": "1.0", "EncryptionAlgorithm": + "AES_CBC_256"}, "ContentEncryptionIV": "OH5+mPLLGIkaQKWr776bKg==", "KeyWrappingMetadata": + {"EncryptionLibrary": "Python 1.0.0"}}}' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '501' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - d40c4f36-952d-11e9-b1f5-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:27 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/encryptionqueue29091535/messages + response: + body: + string: "\uFEFF1c8481f8-7d6c-4e06-a525-5bac9a2a776eSat,\ + \ 22 Jun 2019 20:39:27 GMTSat, 29 Jun 2019\ + \ 20:39:27 GMTAgAAAAMAAAAAAAAATJzUlTop1QE=Sat,\ + \ 22 Jun 2019 20:39:27 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:39:26 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - a1c572e2-e003-00aa-363a-29b2ef000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - d4158fe2-952d-11e9-b79a-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:27 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/encryptionqueue29091535/messages?peekonly=true + response: + body: + string: "\uFEFF1c8481f8-7d6c-4e06-a525-5bac9a2a776eSat,\ + \ 22 Jun 2019 20:39:27 GMTSat, 29 Jun 2019\ + \ 20:39:27 GMT0{\"\ + EncryptedMessageContents\": \"xKDBJnVr+OpKJrXwn72e/w==\", \"EncryptionData\"\ + : {\"WrappedContentKey\": {\"KeyId\": \"key1\", \"EncryptedKey\": \"8t2f1vsTc2wQMC4hptUyBCsJvPyzZqTDEceeASDs+Vb8XSb8az6X/Q==\"\ + , \"Algorithm\": \"A256KW\"}, \"EncryptionAgent\": {\"Protocol\": \"1.0\"\ + , \"EncryptionAlgorithm\": \"AES_CBC_256\"}, \"ContentEncryptionIV\": \"OH5+mPLLGIkaQKWr776bKg==\"\ + , \"KeyWrappingMetadata\": {\"EncryptionLibrary\": \"Python 1.0.0\"}}}" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:39:27 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - a1c572ef-e003-00aa-433a-29b2ef000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - d41eed26-952d-11e9-8c32-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:27 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/encryptionqueue29091535/messages?peekonly=true + response: + body: + string: "\uFEFF1c8481f8-7d6c-4e06-a525-5bac9a2a776eSat,\ + \ 22 Jun 2019 20:39:27 GMTSat, 29 Jun 2019\ + \ 20:39:27 GMT0{\"\ + EncryptedMessageContents\": \"xKDBJnVr+OpKJrXwn72e/w==\", \"EncryptionData\"\ + : {\"WrappedContentKey\": {\"KeyId\": \"key1\", \"EncryptedKey\": \"8t2f1vsTc2wQMC4hptUyBCsJvPyzZqTDEceeASDs+Vb8XSb8az6X/Q==\"\ + , \"Algorithm\": \"A256KW\"}, \"EncryptionAgent\": {\"Protocol\": \"1.0\"\ + , \"EncryptionAlgorithm\": \"AES_CBC_256\"}, \"ContentEncryptionIV\": \"OH5+mPLLGIkaQKWr776bKg==\"\ + , \"KeyWrappingMetadata\": {\"EncryptionLibrary\": \"Python 1.0.0\"}}}" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:39:27 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - a1c572fa-e003-00aa-4c3a-29b2ef000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_queue_encryption.test_invalid_value_kek_wrap.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_queue_encryption.test_invalid_value_kek_wrap.yaml new file mode 100644 index 000000000000..773eae71c32f --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_queue_encryption.test_invalid_value_kek_wrap.yaml @@ -0,0 +1,154 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 32f85336-952a-11e9-9f32-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:28 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/encryptionqueuefee61452 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:13:28 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 498fa121-d003-0003-0536-296707000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - f000038c-952a-11e9-968f-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:45 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/encryptionqueuefee61452 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:45 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 6ed8b631-b003-0090-1137-29f14c000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 8c862ce2-952b-11e9-9fe4-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:23:08 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/encryptionqueuefee61452 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:23:08 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - bbde8fa6-9003-002d-5c38-29e7c0000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - d46aa7d4-952d-11e9-9602-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:28 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/encryptionqueuefee61452 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:39:28 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 4bf657e7-b003-0013-4d3a-2951e1000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_queue_encryption.test_missing_attribute_kek_unrwap.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_queue_encryption.test_missing_attribute_kek_unrwap.yaml new file mode 100644 index 000000000000..9f787830df40 --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_queue_encryption.test_missing_attribute_kek_unrwap.yaml @@ -0,0 +1,601 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 331f7682-952a-11e9-a484-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:29 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/encryptionqueue847016ff + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:13:28 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 9e23adff-c003-00bd-4b36-29728c000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + {"EncryptedMessageContents": "xITZKlfcChO/kDAWLJQxkg==", + "EncryptionData": {"WrappedContentKey": {"KeyId": "key1", "EncryptedKey": "AMIWR8IcamDoq1aRY2peAAXHmUBCQ+ED8xvnxUEJukCSJXNK+KoN1g==", + "Algorithm": "A256KW"}, "EncryptionAgent": {"Protocol": "1.0", "EncryptionAlgorithm": + "AES_CBC_256"}, "ContentEncryptionIV": "rptbBw1EoSa//sCOhPjpNA==", "KeyWrappingMetadata": + {"EncryptionLibrary": "Python 1.0.0"}}}' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '501' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 33404b8c-952a-11e9-a5b0-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:29 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://remotestoragename.queue.core.windows.net/encryptionqueue847016ff/messages + response: + body: + string: "\uFEFFfc91b88f-4ff5-45b7-81ef-566af61ba2dcSat,\ + \ 22 Jun 2019 20:13:29 GMTSat, 29 Jun 2019\ + \ 20:13:29 GMTAgAAAAMAAAAAAAAAowoG9TYp1QE=Sat,\ + \ 22 Jun 2019 20:13:29 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:13:28 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 9e23ae19-c003-00bd-6236-29728c000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 33499e9e-952a-11e9-8b78-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:29 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://remotestoragename.queue.core.windows.net/encryptionqueue847016ff/messages?peekonly=true + response: + body: + string: "\uFEFFfc91b88f-4ff5-45b7-81ef-566af61ba2dcSat,\ + \ 22 Jun 2019 20:13:29 GMTSat, 29 Jun 2019\ + \ 20:13:29 GMT0{\"\ + EncryptedMessageContents\": \"xITZKlfcChO/kDAWLJQxkg==\", \"EncryptionData\"\ + : {\"WrappedContentKey\": {\"KeyId\": \"key1\", \"EncryptedKey\": \"AMIWR8IcamDoq1aRY2peAAXHmUBCQ+ED8xvnxUEJukCSJXNK+KoN1g==\"\ + , \"Algorithm\": \"A256KW\"}, \"EncryptionAgent\": {\"Protocol\": \"1.0\"\ + , \"EncryptionAlgorithm\": \"AES_CBC_256\"}, \"ContentEncryptionIV\": \"rptbBw1EoSa//sCOhPjpNA==\"\ + , \"KeyWrappingMetadata\": {\"EncryptionLibrary\": \"Python 1.0.0\"}}}" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:13:28 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 9e23ae3a-c003-00bd-7f36-29728c000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 3351c1b4-952a-11e9-a5a0-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:29 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://remotestoragename.queue.core.windows.net/encryptionqueue847016ff/messages?peekonly=true + response: + body: + string: "\uFEFFfc91b88f-4ff5-45b7-81ef-566af61ba2dcSat,\ + \ 22 Jun 2019 20:13:29 GMTSat, 29 Jun 2019\ + \ 20:13:29 GMT0{\"\ + EncryptedMessageContents\": \"xITZKlfcChO/kDAWLJQxkg==\", \"EncryptionData\"\ + : {\"WrappedContentKey\": {\"KeyId\": \"key1\", \"EncryptedKey\": \"AMIWR8IcamDoq1aRY2peAAXHmUBCQ+ED8xvnxUEJukCSJXNK+KoN1g==\"\ + , \"Algorithm\": \"A256KW\"}, \"EncryptionAgent\": {\"Protocol\": \"1.0\"\ + , \"EncryptionAlgorithm\": \"AES_CBC_256\"}, \"ContentEncryptionIV\": \"rptbBw1EoSa//sCOhPjpNA==\"\ + , \"KeyWrappingMetadata\": {\"EncryptionLibrary\": \"Python 1.0.0\"}}}" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:13:28 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 9e23ae56-c003-00bd-1936-29728c000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - f0432268-952a-11e9-a153-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:46 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/encryptionqueue847016ff + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:45 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - fea5e38f-b003-00df-7f37-293554000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 8cbd940c-952b-11e9-8cbe-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:23:08 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/encryptionqueue847016ff + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:23:08 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - b6b6fb9f-b003-007e-5638-29fbcf000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: ' + + {"EncryptedMessageContents": "OR6Lg0hw0MxMLgBhhrUbzA==", + "EncryptionData": {"WrappedContentKey": {"KeyId": "key1", "EncryptedKey": "pP9cGuesLaBH8V8Ir3ka0ZRzROHlamBD+tZA+OqriHE+NfVH0e9MAQ==", + "Algorithm": "A256KW"}, "EncryptionAgent": {"Protocol": "1.0", "EncryptionAlgorithm": + "AES_CBC_256"}, "ContentEncryptionIV": "+Bkftq995w9Yf5VkEuHLKg==", "KeyWrappingMetadata": + {"EncryptionLibrary": "Python 1.0.0"}}}' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '501' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 8cde79ec-952b-11e9-8a49-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:23:09 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/encryptionqueue847016ff/messages + response: + body: + string: "\uFEFF4de281d7-7bd9-4e63-98d1-6dcfebdd0149Sat,\ + \ 22 Jun 2019 20:23:09 GMTSat, 29 Jun 2019\ + \ 20:23:09 GMTAgAAAAMAAAAAAAAAYM6lTjgp1QE=Sat,\ + \ 22 Jun 2019 20:23:09 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:23:08 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - b6b6fba9-b003-007e-5b38-29fbcf000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 8ce79d88-952b-11e9-b6a0-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:23:09 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/encryptionqueue847016ff/messages?peekonly=true + response: + body: + string: "\uFEFFfc91b88f-4ff5-45b7-81ef-566af61ba2dcSat,\ + \ 22 Jun 2019 20:13:29 GMTSat, 29 Jun 2019\ + \ 20:13:29 GMT0{\"\ + EncryptedMessageContents\": \"xITZKlfcChO/kDAWLJQxkg==\", \"EncryptionData\"\ + : {\"WrappedContentKey\": {\"KeyId\": \"key1\", \"EncryptedKey\": \"AMIWR8IcamDoq1aRY2peAAXHmUBCQ+ED8xvnxUEJukCSJXNK+KoN1g==\"\ + , \"Algorithm\": \"A256KW\"}, \"EncryptionAgent\": {\"Protocol\": \"1.0\"\ + , \"EncryptionAlgorithm\": \"AES_CBC_256\"}, \"ContentEncryptionIV\": \"rptbBw1EoSa//sCOhPjpNA==\"\ + , \"KeyWrappingMetadata\": {\"EncryptionLibrary\": \"Python 1.0.0\"}}}" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:23:08 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - b6b6fbaf-b003-007e-6038-29fbcf000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 8cf05fa4-952b-11e9-8883-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:23:09 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/encryptionqueue847016ff/messages?peekonly=true + response: + body: + string: "\uFEFFfc91b88f-4ff5-45b7-81ef-566af61ba2dcSat,\ + \ 22 Jun 2019 20:13:29 GMTSat, 29 Jun 2019\ + \ 20:13:29 GMT0{\"\ + EncryptedMessageContents\": \"xITZKlfcChO/kDAWLJQxkg==\", \"EncryptionData\"\ + : {\"WrappedContentKey\": {\"KeyId\": \"key1\", \"EncryptedKey\": \"AMIWR8IcamDoq1aRY2peAAXHmUBCQ+ED8xvnxUEJukCSJXNK+KoN1g==\"\ + , \"Algorithm\": \"A256KW\"}, \"EncryptionAgent\": {\"Protocol\": \"1.0\"\ + , \"EncryptionAlgorithm\": \"AES_CBC_256\"}, \"ContentEncryptionIV\": \"rptbBw1EoSa//sCOhPjpNA==\"\ + , \"KeyWrappingMetadata\": {\"EncryptionLibrary\": \"Python 1.0.0\"}}}" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:23:08 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - b6b6fbb4-b003-007e-6438-29fbcf000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - d4faef92-952d-11e9-83fb-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:29 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/encryptionqueue847016ff + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:39:32 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - ac2451f1-a003-00a6-2e3a-295c1e000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + {"EncryptedMessageContents": "7007ike+4yZv9ifbl4bL8A==", + "EncryptionData": {"WrappedContentKey": {"KeyId": "key1", "EncryptedKey": "PJrNGMkztsMYiaWM1Ew6xPN6mH6fuLDpkj1+W5LjIIdMWUZ5EbHEcQ==", + "Algorithm": "A256KW"}, "EncryptionAgent": {"Protocol": "1.0", "EncryptionAlgorithm": + "AES_CBC_256"}, "ContentEncryptionIV": "a9gO3hv/2f7uvHz/853zxg==", "KeyWrappingMetadata": + {"EncryptionLibrary": "Python 1.0.0"}}}' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '501' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - d7973814-952d-11e9-bd72-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:33 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/encryptionqueue847016ff/messages + response: + body: + string: "\uFEFFddaf575b-4551-40f8-8b89-2604d77284b9Sat,\ + \ 22 Jun 2019 20:39:33 GMTSat, 29 Jun 2019\ + \ 20:39:33 GMTAgAAAAMAAAAAAAAA091emTop1QE=Sat,\ + \ 22 Jun 2019 20:39:33 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:39:32 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - ac245243-a003-00a6-5b3a-295c1e000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - d79fcd8a-952d-11e9-a25a-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:33 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/encryptionqueue847016ff/messages?peekonly=true + response: + body: + string: "\uFEFFddaf575b-4551-40f8-8b89-2604d77284b9Sat,\ + \ 22 Jun 2019 20:39:33 GMTSat, 29 Jun 2019\ + \ 20:39:33 GMT0{\"\ + EncryptedMessageContents\": \"7007ike+4yZv9ifbl4bL8A==\", \"EncryptionData\"\ + : {\"WrappedContentKey\": {\"KeyId\": \"key1\", \"EncryptedKey\": \"PJrNGMkztsMYiaWM1Ew6xPN6mH6fuLDpkj1+W5LjIIdMWUZ5EbHEcQ==\"\ + , \"Algorithm\": \"A256KW\"}, \"EncryptionAgent\": {\"Protocol\": \"1.0\"\ + , \"EncryptionAlgorithm\": \"AES_CBC_256\"}, \"ContentEncryptionIV\": \"a9gO3hv/2f7uvHz/853zxg==\"\ + , \"KeyWrappingMetadata\": {\"EncryptionLibrary\": \"Python 1.0.0\"}}}" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:39:32 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - ac245244-a003-00a6-5c3a-295c1e000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - d7a82ec6-952d-11e9-b41b-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:33 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/encryptionqueue847016ff/messages?peekonly=true + response: + body: + string: "\uFEFFddaf575b-4551-40f8-8b89-2604d77284b9Sat,\ + \ 22 Jun 2019 20:39:33 GMTSat, 29 Jun 2019\ + \ 20:39:33 GMT0{\"\ + EncryptedMessageContents\": \"7007ike+4yZv9ifbl4bL8A==\", \"EncryptionData\"\ + : {\"WrappedContentKey\": {\"KeyId\": \"key1\", \"EncryptedKey\": \"PJrNGMkztsMYiaWM1Ew6xPN6mH6fuLDpkj1+W5LjIIdMWUZ5EbHEcQ==\"\ + , \"Algorithm\": \"A256KW\"}, \"EncryptionAgent\": {\"Protocol\": \"1.0\"\ + , \"EncryptionAlgorithm\": \"AES_CBC_256\"}, \"ContentEncryptionIV\": \"a9gO3hv/2f7uvHz/853zxg==\"\ + , \"KeyWrappingMetadata\": {\"EncryptionLibrary\": \"Python 1.0.0\"}}}" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:39:33 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - ac245245-a003-00a6-5d3a-295c1e000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_queue_encryption.test_missing_attribute_kek_wrap.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_queue_encryption.test_missing_attribute_kek_wrap.yaml new file mode 100644 index 000000000000..2c7b11326c5c --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_queue_encryption.test_missing_attribute_kek_wrap.yaml @@ -0,0 +1,154 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 33680d86-952a-11e9-9e5d-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:29 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/encryptionqueue56cd161c + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:13:29 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - d64ee3ff-2003-00d1-6736-29d95f000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - f084b336-952a-11e9-a945-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:46 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/encryptionqueue56cd161c + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:46 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - c31c990f-7003-0063-3337-292225000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 8d2b5c4c-952b-11e9-b476-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:23:09 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/encryptionqueue56cd161c + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:23:09 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 2c9e0d1a-e003-0022-5f38-290a36000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - d7f019ca-952d-11e9-a7ab-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:34 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/encryptionqueue56cd161c + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:39:34 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - e60599c7-9003-0026-493a-29ffb4000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_queue_encryption.test_peek_messages_encrypted_kek.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_queue_encryption.test_peek_messages_encrypted_kek.yaml new file mode 100644 index 000000000000..d1f249b34dce --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_queue_encryption.test_peek_messages_encrypted_kek.yaml @@ -0,0 +1,457 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 3390cd0a-952a-11e9-9980-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:29 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/encryptionqueue6a6e165f + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:13:29 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - c31bff3d-7003-0063-4b36-292225000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + {"EncryptedMessageContents": "2ZYsyOnVCjohYaGQvNtetNRMPxHZ+931t1m02hNTyLs=", + "EncryptionData": {"WrappedContentKey": {"KeyId": "key1", "EncryptedKey": "CNnCoRdJpyTfPbp8rKvKVyjqhVoyNwiCDXv/8l51q9Vm3CHKl2dOAw==", + "Algorithm": "A256KW"}, "EncryptionAgent": {"Protocol": "1.0", "EncryptionAlgorithm": + "AES_CBC_256"}, "ContentEncryptionIV": "Zj465sQEp0GaX2TlT5jVVg==", "KeyWrappingMetadata": + {"EncryptionLibrary": "Python 1.0.0"}}}' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '521' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 33b821d4-952a-11e9-9f13-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:30 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://remotestoragename.queue.core.windows.net/encryptionqueue6a6e165f/messages + response: + body: + string: "\uFEFF4b56787a-56af-40e0-95a9-dd2d2969695aSat,\ + \ 22 Jun 2019 20:13:30 GMTSat, 29 Jun 2019\ + \ 20:13:30 GMTAgAAAAMAAAAAAAAAzg9+9TYp1QE=Sat,\ + \ 22 Jun 2019 20:13:30 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:13:29 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - c31bff57-7003-0063-6336-292225000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 33c29a68-952a-11e9-8e1f-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:30 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://remotestoragename.queue.core.windows.net/encryptionqueue6a6e165f/messages?peekonly=true + response: + body: + string: "\uFEFF4b56787a-56af-40e0-95a9-dd2d2969695aSat,\ + \ 22 Jun 2019 20:13:30 GMTSat, 29 Jun 2019\ + \ 20:13:30 GMT0{\"\ + EncryptedMessageContents\": \"2ZYsyOnVCjohYaGQvNtetNRMPxHZ+931t1m02hNTyLs=\"\ + , \"EncryptionData\": {\"WrappedContentKey\": {\"KeyId\": \"key1\", \"EncryptedKey\"\ + : \"CNnCoRdJpyTfPbp8rKvKVyjqhVoyNwiCDXv/8l51q9Vm3CHKl2dOAw==\", \"Algorithm\"\ + : \"A256KW\"}, \"EncryptionAgent\": {\"Protocol\": \"1.0\", \"EncryptionAlgorithm\"\ + : \"AES_CBC_256\"}, \"ContentEncryptionIV\": \"Zj465sQEp0GaX2TlT5jVVg==\"\ + , \"KeyWrappingMetadata\": {\"EncryptionLibrary\": \"Python 1.0.0\"}}}" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:13:29 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - c31bff78-7003-0063-0236-292225000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - f0c0b71e-952a-11e9-88a6-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:47 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/encryptionqueue6a6e165f + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:47 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 73ce5d6b-2003-0095-5337-290533000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 8d634488-952b-11e9-b7f5-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:23:09 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/encryptionqueue6a6e165f + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:23:10 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - ace44acd-c003-00b6-3a38-296af8000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: ' + + {"EncryptedMessageContents": "gtXiNLhAmoCyUPT7P5vc679447BW1boFSKnXi50hkHo=", + "EncryptionData": {"WrappedContentKey": {"KeyId": "key1", "EncryptedKey": "1X/hnLB6FUbj6Pw6jdyXUvhEPwtvGpErq63T//3nHx2K3U7KF6wARw==", + "Algorithm": "A256KW"}, "EncryptionAgent": {"Protocol": "1.0", "EncryptionAlgorithm": + "AES_CBC_256"}, "ContentEncryptionIV": "Sqvyb9wAM6MLKuFjuSlrww==", "KeyWrappingMetadata": + {"EncryptionLibrary": "Python 1.0.0"}}}' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '521' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 8d8588cc-952b-11e9-9545-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:23:10 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/encryptionqueue6a6e165f/messages + response: + body: + string: "\uFEFF81ebbcd0-52d0-43c5-b5b3-e20273e8296eSat,\ + \ 22 Jun 2019 20:23:10 GMTSat, 29 Jun 2019\ + \ 20:23:10 GMTAgAAAAMAAAAAAAAAZgJNTzgp1QE=Sat,\ + \ 22 Jun 2019 20:23:10 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:23:10 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - ace44ae7-c003-00b6-4f38-296af8000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 8d95b95e-952b-11e9-8fd8-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:23:10 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/encryptionqueue6a6e165f/messages?peekonly=true + response: + body: + string: "\uFEFF4b56787a-56af-40e0-95a9-dd2d2969695aSat,\ + \ 22 Jun 2019 20:13:30 GMTSat, 29 Jun 2019\ + \ 20:13:30 GMT0{\"\ + EncryptedMessageContents\": \"2ZYsyOnVCjohYaGQvNtetNRMPxHZ+931t1m02hNTyLs=\"\ + , \"EncryptionData\": {\"WrappedContentKey\": {\"KeyId\": \"key1\", \"EncryptedKey\"\ + : \"CNnCoRdJpyTfPbp8rKvKVyjqhVoyNwiCDXv/8l51q9Vm3CHKl2dOAw==\", \"Algorithm\"\ + : \"A256KW\"}, \"EncryptionAgent\": {\"Protocol\": \"1.0\", \"EncryptionAlgorithm\"\ + : \"AES_CBC_256\"}, \"ContentEncryptionIV\": \"Zj465sQEp0GaX2TlT5jVVg==\"\ + , \"KeyWrappingMetadata\": {\"EncryptionLibrary\": \"Python 1.0.0\"}}}" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:23:10 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - ace44b07-c003-00b6-6d38-296af8000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - d8430d24-952d-11e9-a4be-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:34 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/encryptionqueue6a6e165f + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:39:34 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 61b13014-0003-006c-753a-29cfd3000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + {"EncryptedMessageContents": "8Sou7XKmSZOEdubeMRic0Bb+cjHuwA52mF6vgVzVS+4=", + "EncryptionData": {"WrappedContentKey": {"KeyId": "key1", "EncryptedKey": "eaJ2R5ZNEgfVeaEwSslsa1DV1/qYshAYfJ68chiQ5QqEJUJCHYbzBQ==", + "Algorithm": "A256KW"}, "EncryptionAgent": {"Protocol": "1.0", "EncryptionAlgorithm": + "AES_CBC_256"}, "ContentEncryptionIV": "FFlln3thBE0MkdlgN6OBXA==", "KeyWrappingMetadata": + {"EncryptionLibrary": "Python 1.0.0"}}}' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '521' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - d8631100-952d-11e9-9490-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:34 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/encryptionqueue6a6e165f/messages + response: + body: + string: "\uFEFFd0473797-7057-465d-92b3-35fa9e215240Sat,\ + \ 22 Jun 2019 20:39:34 GMTSat, 29 Jun 2019\ + \ 20:39:34 GMTAgAAAAMAAAAAAAAAuN4qmjop1QE=Sat,\ + \ 22 Jun 2019 20:39:34 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:39:34 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 61b13027-0003-006c-033a-29cfd3000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - d86c1480-952d-11e9-bcca-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:34 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/encryptionqueue6a6e165f/messages?peekonly=true + response: + body: + string: "\uFEFFd0473797-7057-465d-92b3-35fa9e215240Sat,\ + \ 22 Jun 2019 20:39:34 GMTSat, 29 Jun 2019\ + \ 20:39:34 GMT0{\"\ + EncryptedMessageContents\": \"8Sou7XKmSZOEdubeMRic0Bb+cjHuwA52mF6vgVzVS+4=\"\ + , \"EncryptionData\": {\"WrappedContentKey\": {\"KeyId\": \"key1\", \"EncryptedKey\"\ + : \"eaJ2R5ZNEgfVeaEwSslsa1DV1/qYshAYfJ68chiQ5QqEJUJCHYbzBQ==\", \"Algorithm\"\ + : \"A256KW\"}, \"EncryptionAgent\": {\"Protocol\": \"1.0\", \"EncryptionAlgorithm\"\ + : \"AES_CBC_256\"}, \"ContentEncryptionIV\": \"FFlln3thBE0MkdlgN6OBXA==\"\ + , \"KeyWrappingMetadata\": {\"EncryptionLibrary\": \"Python 1.0.0\"}}}" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:39:34 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 61b13038-0003-006c-113a-29cfd3000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_queue_encryption.test_peek_messages_encrypted_resolver.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_queue_encryption.test_peek_messages_encrypted_resolver.yaml new file mode 100644 index 000000000000..5dfe39f4288e --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_queue_encryption.test_peek_messages_encrypted_resolver.yaml @@ -0,0 +1,457 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 33d7384c-952a-11e9-affc-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:30 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/encryptionqueuee12a1896 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:13:30 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 59eec5c5-d003-00e6-3f36-2975f0000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + {"EncryptedMessageContents": "hK6PF2bGXpcBu4hpdvCZPPv3iTBsMIvRSOc4OGiDrV0=", + "EncryptionData": {"WrappedContentKey": {"KeyId": "key1", "EncryptedKey": "dy0w/zF/yZqBZc1yvI6ZjqwNi6fke2W1KhCcybuvQgwvfqQpkoOhYg==", + "Algorithm": "A256KW"}, "EncryptionAgent": {"Protocol": "1.0", "EncryptionAlgorithm": + "AES_CBC_256"}, "ContentEncryptionIV": "iJhlhYtfBFCuSHuf8785PA==", "KeyWrappingMetadata": + {"EncryptionLibrary": "Python 1.0.0"}}}' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '521' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 33f7b024-952a-11e9-80a0-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:30 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://remotestoragename.queue.core.windows.net/encryptionqueuee12a1896/messages + response: + body: + string: "\uFEFF0d7655d5-508b-4d96-b956-0df9aa83fbefSat,\ + \ 22 Jun 2019 20:13:30 GMTSat, 29 Jun 2019\ + \ 20:13:30 GMTAgAAAAMAAAAAAAAAe5W99TYp1QE=Sat,\ + \ 22 Jun 2019 20:13:30 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:13:30 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 59eec5d0-d003-00e6-4836-2975f0000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 3400a8fa-952a-11e9-883f-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:30 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://remotestoragename.queue.core.windows.net/encryptionqueuee12a1896/messages?peekonly=true + response: + body: + string: "\uFEFF0d7655d5-508b-4d96-b956-0df9aa83fbefSat,\ + \ 22 Jun 2019 20:13:30 GMTSat, 29 Jun 2019\ + \ 20:13:30 GMT0{\"\ + EncryptedMessageContents\": \"hK6PF2bGXpcBu4hpdvCZPPv3iTBsMIvRSOc4OGiDrV0=\"\ + , \"EncryptionData\": {\"WrappedContentKey\": {\"KeyId\": \"key1\", \"EncryptedKey\"\ + : \"dy0w/zF/yZqBZc1yvI6ZjqwNi6fke2W1KhCcybuvQgwvfqQpkoOhYg==\", \"Algorithm\"\ + : \"A256KW\"}, \"EncryptionAgent\": {\"Protocol\": \"1.0\", \"EncryptionAlgorithm\"\ + : \"AES_CBC_256\"}, \"ContentEncryptionIV\": \"iJhlhYtfBFCuSHuf8785PA==\"\ + , \"KeyWrappingMetadata\": {\"EncryptionLibrary\": \"Python 1.0.0\"}}}" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:13:30 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 59eec5d7-d003-00e6-4f36-2975f0000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - f104b90a-952a-11e9-9ded-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:47 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/encryptionqueuee12a1896 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:47 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 9defca6b-e003-0066-3737-29d65a000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 8dbde3c0-952b-11e9-9050-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:23:10 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/encryptionqueuee12a1896 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:23:09 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 3d12afa5-e003-00c7-0438-2918c1000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: ' + + {"EncryptedMessageContents": "OJPrYZtbOVSrS7izsyo1ryYIT3e8g6A0aoI+ioLxlGo=", + "EncryptionData": {"WrappedContentKey": {"KeyId": "key1", "EncryptedKey": "N757TctIvG5ri330dQrs+nUjjZwJEtwoFpfd/g7XVcgKfiNjjI4MZg==", + "Algorithm": "A256KW"}, "EncryptionAgent": {"Protocol": "1.0", "EncryptionAlgorithm": + "AES_CBC_256"}, "ContentEncryptionIV": "eqM68amerKgpl1JbHxNS/A==", "KeyWrappingMetadata": + {"EncryptionLibrary": "Python 1.0.0"}}}' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '521' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 8ddea986-952b-11e9-bfac-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:23:10 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/encryptionqueuee12a1896/messages + response: + body: + string: "\uFEFFc99d8a90-887f-43a3-81cc-0eb853af3068Sat,\ + \ 22 Jun 2019 20:23:10 GMTSat, 29 Jun 2019\ + \ 20:23:10 GMTAgAAAAMAAAAAAAAADQimTzgp1QE=Sat,\ + \ 22 Jun 2019 20:23:10 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:23:09 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 3d12afaa-e003-00c7-0738-2918c1000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 8de794f4-952b-11e9-8cdd-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:23:10 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/encryptionqueuee12a1896/messages?peekonly=true + response: + body: + string: "\uFEFF0d7655d5-508b-4d96-b956-0df9aa83fbefSat,\ + \ 22 Jun 2019 20:13:30 GMTSat, 29 Jun 2019\ + \ 20:13:30 GMT0{\"\ + EncryptedMessageContents\": \"hK6PF2bGXpcBu4hpdvCZPPv3iTBsMIvRSOc4OGiDrV0=\"\ + , \"EncryptionData\": {\"WrappedContentKey\": {\"KeyId\": \"key1\", \"EncryptedKey\"\ + : \"dy0w/zF/yZqBZc1yvI6ZjqwNi6fke2W1KhCcybuvQgwvfqQpkoOhYg==\", \"Algorithm\"\ + : \"A256KW\"}, \"EncryptionAgent\": {\"Protocol\": \"1.0\", \"EncryptionAlgorithm\"\ + : \"AES_CBC_256\"}, \"ContentEncryptionIV\": \"iJhlhYtfBFCuSHuf8785PA==\"\ + , \"KeyWrappingMetadata\": {\"EncryptionLibrary\": \"Python 1.0.0\"}}}" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:23:09 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 3d12afb3-e003-00c7-0e38-2918c1000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - d8c19b94-952d-11e9-a27c-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:35 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/encryptionqueuee12a1896 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:39:35 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - b53dab7c-4003-0060-743a-292122000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + {"EncryptedMessageContents": "YQ3VAbEfoG/ImNpQoapdkH8MqIZ6A3p9cpsQSw43Mzc=", + "EncryptionData": {"WrappedContentKey": {"KeyId": "key1", "EncryptedKey": "xTfGl2P4RztDZZ/NUaIgPqiAJUtTWzyBVvwaIdaT5BM+GJKrb/4IAQ==", + "Algorithm": "A256KW"}, "EncryptionAgent": {"Protocol": "1.0", "EncryptionAlgorithm": + "AES_CBC_256"}, "ContentEncryptionIV": "7vpPaevGMrDtksyvpnod6Q==", "KeyWrappingMetadata": + {"EncryptionLibrary": "Python 1.0.0"}}}' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '521' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - d8e8991a-952d-11e9-88a1-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:35 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/encryptionqueuee12a1896/messages + response: + body: + string: "\uFEFF505e8379-5305-4beb-a5b5-85494f25d7a9Sat,\ + \ 22 Jun 2019 20:39:35 GMTSat, 29 Jun 2019\ + \ 20:39:35 GMTAgAAAAMAAAAAAAAAajqzmjop1QE=Sat,\ + \ 22 Jun 2019 20:39:35 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:39:35 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - b53daba6-4003-0060-1c3a-292122000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - d8f46bfa-952d-11e9-9e92-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:35 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/encryptionqueuee12a1896/messages?peekonly=true + response: + body: + string: "\uFEFF505e8379-5305-4beb-a5b5-85494f25d7a9Sat,\ + \ 22 Jun 2019 20:39:35 GMTSat, 29 Jun 2019\ + \ 20:39:35 GMT0{\"\ + EncryptedMessageContents\": \"YQ3VAbEfoG/ImNpQoapdkH8MqIZ6A3p9cpsQSw43Mzc=\"\ + , \"EncryptionData\": {\"WrappedContentKey\": {\"KeyId\": \"key1\", \"EncryptedKey\"\ + : \"xTfGl2P4RztDZZ/NUaIgPqiAJUtTWzyBVvwaIdaT5BM+GJKrb/4IAQ==\", \"Algorithm\"\ + : \"A256KW\"}, \"EncryptionAgent\": {\"Protocol\": \"1.0\", \"EncryptionAlgorithm\"\ + : \"AES_CBC_256\"}, \"ContentEncryptionIV\": \"7vpPaevGMrDtksyvpnod6Q==\"\ + , \"KeyWrappingMetadata\": {\"EncryptionLibrary\": \"Python 1.0.0\"}}}" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:39:35 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - b53dabc8-4003-0060-3b3a-292122000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_queue_encryption.test_put_with_strict_mode.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_queue_encryption.test_put_with_strict_mode.yaml new file mode 100644 index 000000000000..54bbe3dbab9b --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_queue_encryption.test_put_with_strict_mode.yaml @@ -0,0 +1,307 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 3414f080-952a-11e9-9536-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:30 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/encryptionqueued9c213ac + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:13:30 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 49260c59-c003-0058-2d36-29607b000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + {"EncryptedMessageContents": "k+pdQqJv2/oFol+BwKHqnA==", + "EncryptionData": {"WrappedContentKey": {"KeyId": "key1", "EncryptedKey": "G+8O1kwr+1voAZ4h8MJZwHzkh78Vfa/9w3AX52XSyOLiOGJiaRACRA==", + "Algorithm": "A256KW"}, "EncryptionAgent": {"Protocol": "1.0", "EncryptionAlgorithm": + "AES_CBC_256"}, "ContentEncryptionIV": "PLk3vnPI+8cge4jLh28Z+w==", "KeyWrappingMetadata": + {"EncryptionLibrary": "Python 1.0.0"}}}' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '501' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 34350ce4-952a-11e9-93c0-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:30 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://remotestoragename.queue.core.windows.net/encryptionqueued9c213ac/messages + response: + body: + string: "\uFEFFbf9167df-0c07-433b-bf30-51797b0fef92Sat,\ + \ 22 Jun 2019 20:13:30 GMTSat, 29 Jun 2019\ + \ 20:13:30 GMTAgAAAAMAAAAAAAAA4/f69TYp1QE=Sat,\ + \ 22 Jun 2019 20:13:30 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:13:30 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 49260c5c-c003-0058-2e36-29607b000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - f142367a-952a-11e9-9659-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:48 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/encryptionqueued9c213ac + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:47 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 7fe36c27-2003-001d-6c37-29bdea000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 8e0c2936-952b-11e9-89db-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:23:11 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/encryptionqueued9c213ac + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:23:10 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 73ce9d68-2003-0095-0c38-290533000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: ' + + {"EncryptedMessageContents": "vIO6/UuQwrc45al1lxmt5w==", + "EncryptionData": {"WrappedContentKey": {"KeyId": "key1", "EncryptedKey": "R5YmjrySV/3AuIiHx1GXQzyf7MwkSXYopnUQEQihqbCHxpe1nBBF+Q==", + "Algorithm": "A256KW"}, "EncryptionAgent": {"Protocol": "1.0", "EncryptionAlgorithm": + "AES_CBC_256"}, "ContentEncryptionIV": "XijvE+gdZ7diXNmIqEKGgA==", "KeyWrappingMetadata": + {"EncryptionLibrary": "Python 1.0.0"}}}' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '501' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 8e2c43ec-952b-11e9-96d7-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:23:11 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/encryptionqueued9c213ac/messages + response: + body: + string: "\uFEFFf019bc9b-54e3-4f24-a984-515b0f328a03Sat,\ + \ 22 Jun 2019 20:23:11 GMTSat, 29 Jun 2019\ + \ 20:23:11 GMTAgAAAAMAAAAAAAAA13LzTzgp1QE=Sat,\ + \ 22 Jun 2019 20:23:11 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:23:10 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 73ce9d6f-2003-0095-1038-290533000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - d9d2f462-952d-11e9-bdf3-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:37 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/encryptionqueued9c213ac + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:39:37 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 26244d73-0003-0001-303a-2965fd000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + {"EncryptedMessageContents": "5qfI+NgHnUb8g3keO1YL7g==", + "EncryptionData": {"WrappedContentKey": {"KeyId": "key1", "EncryptedKey": "CvFsR6aEDyvXuMswoSU5x7oWc1A6cSBv9S4nsjxd1QYAdtGR82Lclw==", + "Algorithm": "A256KW"}, "EncryptionAgent": {"Protocol": "1.0", "EncryptionAlgorithm": + "AES_CBC_256"}, "ContentEncryptionIV": "bXczsOu2Sy7unQssYZr2Ng==", "KeyWrappingMetadata": + {"EncryptionLibrary": "Python 1.0.0"}}}' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '501' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - d9f27740-952d-11e9-94ad-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:37 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/encryptionqueued9c213ac/messages + response: + body: + string: "\uFEFF3407cfc2-ea34-4140-8309-960cc0f9c78cSat,\ + \ 22 Jun 2019 20:39:37 GMTSat, 29 Jun 2019\ + \ 20:39:37 GMTAgAAAAMAAAAAAAAAnO+6mzop1QE=Sat,\ + \ 22 Jun 2019 20:39:37 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:39:37 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 26244d9b-0003-0001-543a-2965fd000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_queue_encryption.test_update_encrypted_binary_message.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_queue_encryption.test_update_encrypted_binary_message.yaml new file mode 100644 index 000000000000..f268325bbcf0 --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_queue_encryption.test_update_encrypted_binary_message.yaml @@ -0,0 +1,763 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 34469646-952a-11e9-a720-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:30 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/encryptionqueuec9ae1814 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:13:30 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 138cbbc9-8003-00d7-0436-292e27000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + {"EncryptedMessageContents": "R3WBzfLjLDZzywaIMJoF98CHzchP0NVJ2JoEsRV76BxkBJ+/ubrzQCj2hsLKbgl/KK3tobBM/gVPlcVzAex4SxQanhILUi21OS4NG/wIhPuSozbVRG8sUlzRABQVaaxbwyRRWFdWJ1QibjYfmMn8oPbeY21zXbN+dfaywzJRr/0VLznXr0RRzmruS9hHcGPJ", + "EncryptionData": {"WrappedContentKey": {"KeyId": "key1", "EncryptedKey": "fFcK5dN0IQpOu+EnET8Byiz0lMjOQDx8IVWtfMM0F52awRuCKunqkg==", + "Algorithm": "A256KW"}, "EncryptionAgent": {"Protocol": "1.0", "EncryptionAlgorithm": + "AES_CBC_256"}, "ContentEncryptionIV": "8y5O6Yy7YBFtSVFjhryrUQ==", "KeyWrappingMetadata": + {"EncryptionLibrary": "Python 1.0.0"}}}' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '669' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 34673728-952a-11e9-909e-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:31 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://remotestoragename.queue.core.windows.net/encryptionqueuec9ae1814/messages + response: + body: + string: "\uFEFF611f67bf-6991-4d37-8595-d1167b6407d7Sat,\ + \ 22 Jun 2019 20:13:31 GMTSat, 29 Jun 2019\ + \ 20:13:31 GMTAgAAAAMAAAAAAAAAguYs9jYp1QE=Sat,\ + \ 22 Jun 2019 20:13:31 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:13:30 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 138cbbe3-8003-00d7-1b36-292e27000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 34700134-952a-11e9-b58d-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:31 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://remotestoragename.queue.core.windows.net/encryptionqueuec9ae1814/messages + response: + body: + string: "\uFEFF611f67bf-6991-4d37-8595-d1167b6407d7Sat,\ + \ 22 Jun 2019 20:13:31 GMTSat, 29 Jun 2019\ + \ 20:13:31 GMTAgAAAAMAAAAAAAAAkxYXCDcp1QE=Sat,\ + \ 22 Jun 2019 20:14:01 GMT1{\"\ + EncryptedMessageContents\": \"R3WBzfLjLDZzywaIMJoF98CHzchP0NVJ2JoEsRV76BxkBJ+/ubrzQCj2hsLKbgl/KK3tobBM/gVPlcVzAex4SxQanhILUi21OS4NG/wIhPuSozbVRG8sUlzRABQVaaxbwyRRWFdWJ1QibjYfmMn8oPbeY21zXbN+dfaywzJRr/0VLznXr0RRzmruS9hHcGPJ\"\ + , \"EncryptionData\": {\"WrappedContentKey\": {\"KeyId\": \"key1\", \"EncryptedKey\"\ + : \"fFcK5dN0IQpOu+EnET8Byiz0lMjOQDx8IVWtfMM0F52awRuCKunqkg==\", \"Algorithm\"\ + : \"A256KW\"}, \"EncryptionAgent\": {\"Protocol\": \"1.0\", \"EncryptionAlgorithm\"\ + : \"AES_CBC_256\"}, \"ContentEncryptionIV\": \"8y5O6Yy7YBFtSVFjhryrUQ==\"\ + , \"KeyWrappingMetadata\": {\"EncryptionLibrary\": \"Python 1.0.0\"}}}" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:13:30 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 138cbbfb-8003-00d7-2f36-292e27000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: ' + + {"EncryptedMessageContents": "kCUTCeQlYXq/RGyz7I82uM/8u/FHZcxbf1cSA7pBNRvbg11NSFySkGFCvjT7a9zw4Tao6f2zkZysqxYQDv1HHST4oDNTiIlz9PvOLHwsgA91Ap5XrwraXDFR0V0xXOzlxF9WMC+tcY/7SeO1DUMRBVhohd3VNsWV2lEn++9iHWl6ZQwyapqjBeqbv3gyI3cb", + "EncryptionData": {"WrappedContentKey": {"KeyId": "key1", "EncryptedKey": "3XD9seDSmsGE7ApEnOvThczSmpZpFO9wuU1xVjgXazgdy+5D1jVGrA==", + "Algorithm": "A256KW"}, "EncryptionAgent": {"Protocol": "1.0", "EncryptionAlgorithm": + "AES_CBC_256"}, "ContentEncryptionIV": "0xbNzruWENA7DbqIKY45Dg==", "KeyWrappingMetadata": + {"EncryptionLibrary": "Python 1.0.0"}}}' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '669' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 34790bb0-952a-11e9-b0b5-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:31 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/encryptionqueuec9ae1814/messages/611f67bf-6991-4d37-8595-d1167b6407d7?popreceipt=AgAAAAMAAAAAAAAAkxYXCDcp1QE%3D&visibilitytimeout=0 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:13:30 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-popreceipt: + - AwAAAAMAAAAAAAAAGcQ+9jYp1QEBAAAA + x-ms-request-id: + - 138cbc18-8003-00d7-4a36-292e27000000 + x-ms-time-next-visible: + - Sat, 22 Jun 2019 20:13:31 GMT + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 3481c214-952a-11e9-8e63-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:31 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://remotestoragename.queue.core.windows.net/encryptionqueuec9ae1814/messages + response: + body: + string: "\uFEFF611f67bf-6991-4d37-8595-d1167b6407d7Sat,\ + \ 22 Jun 2019 20:13:31 GMTSat, 29 Jun 2019\ + \ 20:13:31 GMTAgAAAAMAAAAAAAAAcWkpCDcp1QE=Sat,\ + \ 22 Jun 2019 20:14:01 GMT2{\"\ + EncryptedMessageContents\": \"kCUTCeQlYXq/RGyz7I82uM/8u/FHZcxbf1cSA7pBNRvbg11NSFySkGFCvjT7a9zw4Tao6f2zkZysqxYQDv1HHST4oDNTiIlz9PvOLHwsgA91Ap5XrwraXDFR0V0xXOzlxF9WMC+tcY/7SeO1DUMRBVhohd3VNsWV2lEn++9iHWl6ZQwyapqjBeqbv3gyI3cb\"\ + , \"EncryptionData\": {\"WrappedContentKey\": {\"KeyId\": \"key1\", \"EncryptedKey\"\ + : \"3XD9seDSmsGE7ApEnOvThczSmpZpFO9wuU1xVjgXazgdy+5D1jVGrA==\", \"Algorithm\"\ + : \"A256KW\"}, \"EncryptionAgent\": {\"Protocol\": \"1.0\", \"EncryptionAlgorithm\"\ + : \"AES_CBC_256\"}, \"ContentEncryptionIV\": \"0xbNzruWENA7DbqIKY45Dg==\"\ + , \"KeyWrappingMetadata\": {\"EncryptionLibrary\": \"Python 1.0.0\"}}}" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:13:30 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 138cbc2b-8003-00d7-5c36-292e27000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - f186060c-952a-11e9-b839-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:48 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/encryptionqueuec9ae1814 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:48 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - d64fe27c-2003-00d1-1e37-29d95f000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 8e5238ae-952b-11e9-827c-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:23:11 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/encryptionqueuec9ae1814 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:23:11 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 59a794f4-2003-0052-1d38-2979f2000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: ' + + {"EncryptedMessageContents": "j1TYHpzwYT4+6RB4F+BUXbdT9U5DqZBte5UQ/QD+rL0HaKQo9Q/ueVPQZMo4xCeH4YMfUkI75paIsx3XBJQomuuLm/zoSqbjjhs/vi9iKmKfwvHWXYzNrWXNA1sihDXsa8rRwcu6nQgcfufPyOOu+8Jtxjq2EyDTTG/aVJFUncZuqkNQg13HFdmWZ5eOzT6z", + "EncryptionData": {"WrappedContentKey": {"KeyId": "key1", "EncryptedKey": "agXJC0bB62npiv+p2/HvTE3j77pu9FJKC9jbztPtYqPSwjX0HQP7Tw==", + "Algorithm": "A256KW"}, "EncryptionAgent": {"Protocol": "1.0", "EncryptionAlgorithm": + "AES_CBC_256"}, "ContentEncryptionIV": "Ynl9amPfj8pS0+rH/A/LRA==", "KeyWrappingMetadata": + {"EncryptionLibrary": "Python 1.0.0"}}}' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '669' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 8e720d8c-952b-11e9-9f68-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:23:11 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/encryptionqueuec9ae1814/messages + response: + body: + string: "\uFEFF0ca25108-ee22-4fa4-aeda-c3773645596aSat,\ + \ 22 Jun 2019 20:23:11 GMTSat, 29 Jun 2019\ + \ 20:23:11 GMTAgAAAAMAAAAAAAAAarA5UDgp1QE=Sat,\ + \ 22 Jun 2019 20:23:11 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:23:11 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 59a7950a-2003-0052-3138-2979f2000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 8e7b3fa6-952b-11e9-b98e-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:23:11 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/encryptionqueuec9ae1814/messages + response: + body: + string: "\uFEFF611f67bf-6991-4d37-8595-d1167b6407d7Sat,\ + \ 22 Jun 2019 20:13:31 GMTSat, 29 Jun 2019\ + \ 20:13:31 GMTAgAAAAMAAAAAAAAAgOAjYjgp1QE=Sat,\ + \ 22 Jun 2019 20:23:41 GMT3{\"\ + EncryptedMessageContents\": \"kCUTCeQlYXq/RGyz7I82uM/8u/FHZcxbf1cSA7pBNRvbg11NSFySkGFCvjT7a9zw4Tao6f2zkZysqxYQDv1HHST4oDNTiIlz9PvOLHwsgA91Ap5XrwraXDFR0V0xXOzlxF9WMC+tcY/7SeO1DUMRBVhohd3VNsWV2lEn++9iHWl6ZQwyapqjBeqbv3gyI3cb\"\ + , \"EncryptionData\": {\"WrappedContentKey\": {\"KeyId\": \"key1\", \"EncryptedKey\"\ + : \"3XD9seDSmsGE7ApEnOvThczSmpZpFO9wuU1xVjgXazgdy+5D1jVGrA==\", \"Algorithm\"\ + : \"A256KW\"}, \"EncryptionAgent\": {\"Protocol\": \"1.0\", \"EncryptionAlgorithm\"\ + : \"AES_CBC_256\"}, \"ContentEncryptionIV\": \"0xbNzruWENA7DbqIKY45Dg==\"\ + , \"KeyWrappingMetadata\": {\"EncryptionLibrary\": \"Python 1.0.0\"}}}" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:23:11 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 59a79514-2003-0052-3838-2979f2000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: ' + + {"EncryptedMessageContents": "TFWjGlxSYU9YXgo2UtbhjyMN4nQvgokG4KqhUCiWIug3ktPtbwYVA23S0TmKFLaugDxnQ/ijPApX9j8Ow6w/penaSDeIa4Tmcl6KoXvNl5JPuO9YR9JxJkZ1V5B05raHjPK0zmRSEjw/hWSK9YugQlLas4kL7znTh2vn3sYBHFtA79Ti7z+x0ljAlYEfFNUf", + "EncryptionData": {"WrappedContentKey": {"KeyId": "key1", "EncryptedKey": "AkMs1O4675th/UCOTi/8tvUhWgXCk/5xX/F0pNM1vpvOgTf085UHPQ==", + "Algorithm": "A256KW"}, "EncryptionAgent": {"Protocol": "1.0", "EncryptionAlgorithm": + "AES_CBC_256"}, "ContentEncryptionIV": "SZ7UiqsdFTrj5UeLORXJSQ==", "KeyWrappingMetadata": + {"EncryptionLibrary": "Python 1.0.0"}}}' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '669' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 8e8496a8-952b-11e9-b5b4-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:23:11 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/encryptionqueuec9ae1814/messages/611f67bf-6991-4d37-8595-d1167b6407d7?popreceipt=AgAAAAMAAAAAAAAAgOAjYjgp1QE%3D&visibilitytimeout=0 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:23:11 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-popreceipt: + - AwAAAAMAAAAAAAAAf1FMUDgp1QEDAAAA + x-ms-request-id: + - 59a7951c-2003-0052-3e38-2979f2000000 + x-ms-time-next-visible: + - Sat, 22 Jun 2019 20:23:11 GMT + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 8e8dd65c-952b-11e9-99ed-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:23:11 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/encryptionqueuec9ae1814/messages + response: + body: + string: "\uFEFF0ca25108-ee22-4fa4-aeda-c3773645596aSat,\ + \ 22 Jun 2019 20:23:11 GMTSat, 29 Jun 2019\ + \ 20:23:11 GMTAgAAAAMAAAAAAAAA3/Y2Yjgp1QE=Sat,\ + \ 22 Jun 2019 20:23:41 GMT1{\"\ + EncryptedMessageContents\": \"j1TYHpzwYT4+6RB4F+BUXbdT9U5DqZBte5UQ/QD+rL0HaKQo9Q/ueVPQZMo4xCeH4YMfUkI75paIsx3XBJQomuuLm/zoSqbjjhs/vi9iKmKfwvHWXYzNrWXNA1sihDXsa8rRwcu6nQgcfufPyOOu+8Jtxjq2EyDTTG/aVJFUncZuqkNQg13HFdmWZ5eOzT6z\"\ + , \"EncryptionData\": {\"WrappedContentKey\": {\"KeyId\": \"key1\", \"EncryptedKey\"\ + : \"agXJC0bB62npiv+p2/HvTE3j77pu9FJKC9jbztPtYqPSwjX0HQP7Tw==\", \"Algorithm\"\ + : \"A256KW\"}, \"EncryptionAgent\": {\"Protocol\": \"1.0\", \"EncryptionAlgorithm\"\ + : \"AES_CBC_256\"}, \"ContentEncryptionIV\": \"Ynl9amPfj8pS0+rH/A/LRA==\"\ + , \"KeyWrappingMetadata\": {\"EncryptionLibrary\": \"Python 1.0.0\"}}}" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:23:11 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 59a79524-2003-0052-4438-2979f2000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - da422bdc-952d-11e9-a081-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:37 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/encryptionqueuec9ae1814 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:39:38 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - a1808553-f003-0097-023a-2907c9000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + {"EncryptedMessageContents": "Q5v2ThnIYfmXPmCw9s11/thNIShP92UA5qVeELPI8rLgJ8xPTc/mLP3JdkI5xF+ibYjmzsBEvvJdidyqwbxXUpHbkpMjMKOKsROA9WPwkC6l9A+/P2Sh18JRX74+GY9QfdUUYy4/dILsE9O3R4XQ5P5GoLPxazYIiFwCatj9em4WurnMdZzCt8H7RectlkVZ", + "EncryptionData": {"WrappedContentKey": {"KeyId": "key1", "EncryptedKey": "kLHuvbxsjFpRYvKMVR8xd/jx7QmFGrGUbT3p+7agx1MZK+52XfB7uQ==", + "Algorithm": "A256KW"}, "EncryptionAgent": {"Protocol": "1.0", "EncryptionAlgorithm": + "AES_CBC_256"}, "ContentEncryptionIV": "GNy9WED0IKToJZeZGDsCdg==", "KeyWrappingMetadata": + {"EncryptionLibrary": "Python 1.0.0"}}}' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '669' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - da627b12-952d-11e9-a6cd-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:38 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/encryptionqueuec9ae1814/messages + response: + body: + string: "\uFEFF998d8b9c-fa74-4cd8-8d83-34fe3b5f48b7Sat,\ + \ 22 Jun 2019 20:39:38 GMTSat, 29 Jun 2019\ + \ 20:39:38 GMTAgAAAAMAAAAAAAAAQ6ArnDop1QE=Sat,\ + \ 22 Jun 2019 20:39:38 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:39:38 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - a1808556-f003-0097-033a-2907c9000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - da6c782e-952d-11e9-a3d5-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:38 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/encryptionqueuec9ae1814/messages + response: + body: + string: "\uFEFF998d8b9c-fa74-4cd8-8d83-34fe3b5f48b7Sat,\ + \ 22 Jun 2019 20:39:38 GMTSat, 29 Jun 2019\ + \ 20:39:38 GMTAgAAAAMAAAAAAAAAN6kVrjop1QE=Sat,\ + \ 22 Jun 2019 20:40:08 GMT1{\"\ + EncryptedMessageContents\": \"Q5v2ThnIYfmXPmCw9s11/thNIShP92UA5qVeELPI8rLgJ8xPTc/mLP3JdkI5xF+ibYjmzsBEvvJdidyqwbxXUpHbkpMjMKOKsROA9WPwkC6l9A+/P2Sh18JRX74+GY9QfdUUYy4/dILsE9O3R4XQ5P5GoLPxazYIiFwCatj9em4WurnMdZzCt8H7RectlkVZ\"\ + , \"EncryptionData\": {\"WrappedContentKey\": {\"KeyId\": \"key1\", \"EncryptedKey\"\ + : \"kLHuvbxsjFpRYvKMVR8xd/jx7QmFGrGUbT3p+7agx1MZK+52XfB7uQ==\", \"Algorithm\"\ + : \"A256KW\"}, \"EncryptionAgent\": {\"Protocol\": \"1.0\", \"EncryptionAlgorithm\"\ + : \"AES_CBC_256\"}, \"ContentEncryptionIV\": \"GNy9WED0IKToJZeZGDsCdg==\"\ + , \"KeyWrappingMetadata\": {\"EncryptionLibrary\": \"Python 1.0.0\"}}}" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:39:38 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - a180855a-f003-0097-063a-2907c9000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: ' + + {"EncryptedMessageContents": "GbvvrzhJKgnvDhkXLWx7I8O5WnimNh4qUg0Ykea5Xuuz73Ai1YLhU0xx/9eUstc/263egUCeiUg7CMoQv8nlQ5Qd0nw5dLTsUpTghj383DLr7T0XdIbdknRxVeCa6Gg5zLu3reKDEwRywxO5Rs5RPqjGujiopjsu8/dKAZA4WkeO29MBxUhCioISfeacZDhI", + "EncryptionData": {"WrappedContentKey": {"KeyId": "key1", "EncryptedKey": "s0TSfEo4z2cPPLWjUHz5403ZGg3BkG+ZI25F/duro5YQE373RWdVSA==", + "Algorithm": "A256KW"}, "EncryptionAgent": {"Protocol": "1.0", "EncryptionAlgorithm": + "AES_CBC_256"}, "ContentEncryptionIV": "RvgEI7SPDNP1IgI0AEunzg==", "KeyWrappingMetadata": + {"EncryptionLibrary": "Python 1.0.0"}}}' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '669' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - da755a86-952d-11e9-a5d3-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:38 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/encryptionqueuec9ae1814/messages/998d8b9c-fa74-4cd8-8d83-34fe3b5f48b7?popreceipt=AgAAAAMAAAAAAAAAN6kVrjop1QE%3D&visibilitytimeout=0 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:39:38 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-popreceipt: + - AwAAAAMAAAAAAAAApi89nDop1QEBAAAA + x-ms-request-id: + - a180855c-f003-0097-083a-2907c9000000 + x-ms-time-next-visible: + - Sat, 22 Jun 2019 20:39:38 GMT + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - da7e18fe-952d-11e9-9f7a-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:38 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/encryptionqueuec9ae1814/messages + response: + body: + string: "\uFEFF998d8b9c-fa74-4cd8-8d83-34fe3b5f48b7Sat,\ + \ 22 Jun 2019 20:39:38 GMTSat, 29 Jun 2019\ + \ 20:39:38 GMTAgAAAAMAAAAAAAAA460nrjop1QE=Sat,\ + \ 22 Jun 2019 20:40:08 GMT2{\"\ + EncryptedMessageContents\": \"GbvvrzhJKgnvDhkXLWx7I8O5WnimNh4qUg0Ykea5Xuuz73Ai1YLhU0xx/9eUstc/263egUCeiUg7CMoQv8nlQ5Qd0nw5dLTsUpTghj383DLr7T0XdIbdknRxVeCa6Gg5zLu3reKDEwRywxO5Rs5RPqjGujiopjsu8/dKAZA4WkeO29MBxUhCioISfeacZDhI\"\ + , \"EncryptionData\": {\"WrappedContentKey\": {\"KeyId\": \"key1\", \"EncryptedKey\"\ + : \"s0TSfEo4z2cPPLWjUHz5403ZGg3BkG+ZI25F/duro5YQE373RWdVSA==\", \"Algorithm\"\ + : \"A256KW\"}, \"EncryptionAgent\": {\"Protocol\": \"1.0\", \"EncryptionAlgorithm\"\ + : \"AES_CBC_256\"}, \"ContentEncryptionIV\": \"RvgEI7SPDNP1IgI0AEunzg==\"\ + , \"KeyWrappingMetadata\": {\"EncryptionLibrary\": \"Python 1.0.0\"}}}" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:39:38 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - a180855f-f003-0097-0b3a-2907c9000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_queue_encryption.test_validate_encryption.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_queue_encryption.test_validate_encryption.yaml new file mode 100644 index 000000000000..2d73d5491e05 --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_queue_encryption.test_validate_encryption.yaml @@ -0,0 +1,454 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 35947836-952a-11e9-a6f7-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:33 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/encryptionqueuec34e1330 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:13:32 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 54d83e91-f003-00be-3436-29718b000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + {"EncryptedMessageContents": "0VLwicw0YsCaMTHrXnE7Lg==", + "EncryptionData": {"WrappedContentKey": {"KeyId": "key1", "EncryptedKey": "5ukRwz3LjHgkGKZ4cNhPjbldnV363hrKewSrCZxCIezL6gE9WfqpTg==", + "Algorithm": "A256KW"}, "EncryptionAgent": {"Protocol": "1.0", "EncryptionAlgorithm": + "AES_CBC_256"}, "ContentEncryptionIV": "qLZ4YoW9K1mpscYuIo6+5Q==", "KeyWrappingMetadata": + {"EncryptionLibrary": "Python 1.0.0"}}}' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '501' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 35b3d6ae-952a-11e9-a30c-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:33 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://remotestoragename.queue.core.windows.net/encryptionqueuec34e1330/messages + response: + body: + string: "\uFEFFd06213fe-d72c-4b01-a8ca-397e88d53942Sat,\ + \ 22 Jun 2019 20:13:33 GMTSat, 29 Jun 2019\ + \ 20:13:33 GMTAgAAAAMAAAAAAAAA2KB59zYp1QE=Sat,\ + \ 22 Jun 2019 20:13:33 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:13:32 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 54d83e9d-f003-00be-3b36-29718b000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 35bca5e2-952a-11e9-8c2f-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:13:33 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://remotestoragename.queue.core.windows.net/encryptionqueuec34e1330/messages?peekonly=true + response: + body: + string: "\uFEFFd06213fe-d72c-4b01-a8ca-397e88d53942Sat,\ + \ 22 Jun 2019 20:13:33 GMTSat, 29 Jun 2019\ + \ 20:13:33 GMT0{\"\ + EncryptedMessageContents\": \"0VLwicw0YsCaMTHrXnE7Lg==\", \"EncryptionData\"\ + : {\"WrappedContentKey\": {\"KeyId\": \"key1\", \"EncryptedKey\": \"5ukRwz3LjHgkGKZ4cNhPjbldnV363hrKewSrCZxCIezL6gE9WfqpTg==\"\ + , \"Algorithm\": \"A256KW\"}, \"EncryptionAgent\": {\"Protocol\": \"1.0\"\ + , \"EncryptionAlgorithm\": \"AES_CBC_256\"}, \"ContentEncryptionIV\": \"qLZ4YoW9K1mpscYuIo6+5Q==\"\ + , \"KeyWrappingMetadata\": {\"EncryptionLibrary\": \"Python 1.0.0\"}}}" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:13:32 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 54d83ea9-f003-00be-4436-29718b000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - f2bf8892-952a-11e9-9111-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:50 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/encryptionqueuec34e1330 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:50 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - d0c0d60a-f003-0014-7337-29a764000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 9042a478-952b-11e9-bda5-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:23:14 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/encryptionqueuec34e1330 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:23:14 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 33593d5d-e003-0083-2e38-29c4ad000000 + x-ms-version: + - '2018-03-28' + status: + code: 204 + message: No Content +- request: + body: ' + + {"EncryptedMessageContents": "GD8fS4ZwxdFSpSTotW+Dlg==", + "EncryptionData": {"WrappedContentKey": {"KeyId": "key1", "EncryptedKey": "ixY88l4PQQ8+/C6reMbnvWmEDdLuRlP1qBbH2KxQiL9wsE4EsfBx1Q==", + "Algorithm": "A256KW"}, "EncryptionAgent": {"Protocol": "1.0", "EncryptionAlgorithm": + "AES_CBC_256"}, "ContentEncryptionIV": "3oViV9b7wKRVh9tdqjf8pA==", "KeyWrappingMetadata": + {"EncryptionLibrary": "Python 1.0.0"}}}' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '501' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 9063bf98-952b-11e9-be53-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:23:15 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/encryptionqueuec34e1330/messages + response: + body: + string: "\uFEFF2b67846d-5008-4019-a138-01aa440ec099Sat,\ + \ 22 Jun 2019 20:23:15 GMTSat, 29 Jun 2019\ + \ 20:23:15 GMTAgAAAAMAAAAAAAAAHS0rUjgp1QE=Sat,\ + \ 22 Jun 2019 20:23:15 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:23:14 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 33593d73-e003-0083-4038-29c4ad000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 906ce47a-952b-11e9-95ac-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:23:15 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/encryptionqueuec34e1330/messages?peekonly=true + response: + body: + string: "\uFEFFd06213fe-d72c-4b01-a8ca-397e88d53942Sat,\ + \ 22 Jun 2019 20:13:33 GMTSat, 29 Jun 2019\ + \ 20:13:33 GMT0{\"\ + EncryptedMessageContents\": \"0VLwicw0YsCaMTHrXnE7Lg==\", \"EncryptionData\"\ + : {\"WrappedContentKey\": {\"KeyId\": \"key1\", \"EncryptedKey\": \"5ukRwz3LjHgkGKZ4cNhPjbldnV363hrKewSrCZxCIezL6gE9WfqpTg==\"\ + , \"Algorithm\": \"A256KW\"}, \"EncryptionAgent\": {\"Protocol\": \"1.0\"\ + , \"EncryptionAlgorithm\": \"AES_CBC_256\"}, \"ContentEncryptionIV\": \"qLZ4YoW9K1mpscYuIo6+5Q==\"\ + , \"KeyWrappingMetadata\": {\"EncryptionLibrary\": \"Python 1.0.0\"}}}" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:23:14 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 33593d8f-e003-0083-5b38-29c4ad000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e53f7828-952d-11e9-8647-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:56 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/encryptionqueuec34e1330 + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:39:56 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - ebd04479-4003-0085-233a-2933d5000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: ' + + {"EncryptedMessageContents": "635uqmig2IcoUyOen/OudQ==", + "EncryptionData": {"WrappedContentKey": {"KeyId": "key1", "EncryptedKey": "rwCpDWxwHJjkecsK6PzZVwG0qfOzinywCQCkPWAl+Y+X3Vv2dyFhuA==", + "Algorithm": "A256KW"}, "EncryptionAgent": {"Protocol": "1.0", "EncryptionAlgorithm": + "AES_CBC_256"}, "ContentEncryptionIV": "tNMIBKJnCTSwSrN9Y1r52A==", "KeyWrappingMetadata": + {"EncryptionLibrary": "Python 1.0.0"}}}' + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '501' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e564431a-952d-11e9-9407-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:56 GMT + x-ms-version: + - '2018-03-28' + method: POST + uri: https://storagename.queue.core.windows.net/encryptionqueuec34e1330/messages + response: + body: + string: "\uFEFF4f94f6f3-beb1-4f6f-88b0-5ffdacc6e81fSat,\ + \ 22 Jun 2019 20:39:56 GMTSat, 29 Jun 2019\ + \ 20:39:56 GMTAgAAAAMAAAAAAAAAB6Ytpzop1QE=Sat,\ + \ 22 Jun 2019 20:39:56 GMT" + headers: + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:39:56 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - ebd04486-4003-0085-2d3a-2933d5000000 + x-ms-version: + - '2018-03-28' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - e56e6b06-952d-11e9-a916-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:39:56 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/encryptionqueuec34e1330/messages?peekonly=true + response: + body: + string: "\uFEFF4f94f6f3-beb1-4f6f-88b0-5ffdacc6e81fSat,\ + \ 22 Jun 2019 20:39:56 GMTSat, 29 Jun 2019\ + \ 20:39:56 GMT0{\"\ + EncryptedMessageContents\": \"635uqmig2IcoUyOen/OudQ==\", \"EncryptionData\"\ + : {\"WrappedContentKey\": {\"KeyId\": \"key1\", \"EncryptedKey\": \"rwCpDWxwHJjkecsK6PzZVwG0qfOzinywCQCkPWAl+Y+X3Vv2dyFhuA==\"\ + , \"Algorithm\": \"A256KW\"}, \"EncryptionAgent\": {\"Protocol\": \"1.0\"\ + , \"EncryptionAlgorithm\": \"AES_CBC_256\"}, \"ContentEncryptionIV\": \"tNMIBKJnCTSwSrN9Y1r52A==\"\ + , \"KeyWrappingMetadata\": {\"EncryptionLibrary\": \"Python 1.0.0\"}}}" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:39:56 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - ebd0448e-4003-0085-353a-2933d5000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_service_properties.test_queue_service_properties.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_service_properties.test_queue_service_properties.yaml new file mode 100644 index 000000000000..06304e2b2457 --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_service_properties.test_queue_service_properties.yaml @@ -0,0 +1,338 @@ +interactions: +- request: + body: ' + + 1.0falsefalsefalsefalse1.0falsefalse1.0falsefalse' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '528' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 0df38024-952a-11e9-a594-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:26 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/?restype=service&comp=properties + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:12:28 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 6a8baff9-a003-0061-3036-2920df000000 + x-ms-version: + - '2018-03-28' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 0f7d611c-952a-11e9-a678-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:29 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://remotestoragename.queue.core.windows.net/?restype=service&comp=properties + response: + body: + string: "\uFEFF1.0falsefalsefalsefalse1.0falsefalse1.0falsefalse" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:12:28 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 6a8bb190-a003-0061-0f36-2920df000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: ' + + 1.0falsefalsefalsefalse1.0falsefalse1.0falsefalse' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '528' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - d04c624c-952a-11e9-b18b-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:17:52 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/?restype=service&comp=properties + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:17:53 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - a1c1b14a-e003-00aa-0e37-29b2ef000000 + x-ms-version: + - '2018-03-28' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - d17b733a-952a-11e9-8777-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:17:54 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/?restype=service&comp=properties + response: + body: + string: "\uFEFF1.0falsefalsefalsefalse1.0falsefalse1.0falsefalse" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:17:53 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - a1c1b270-e003-00aa-0937-29b2ef000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: ' + + 1.0falsefalsefalsefalse1.0falsefalse1.0falsefalse' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '528' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 647f6dda-952b-11e9-927e-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:01 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/?restype=service&comp=properties + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:03 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 2124355d-9003-0087-6138-29312f000000 + x-ms-version: + - '2018-03-28' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 66194da8-952b-11e9-9a0e-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:04 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/?restype=service&comp=properties + response: + body: + string: "\uFEFF1.0falsefalsefalsefalse1.0falsefalse1.0falsefalse" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:03 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 2124370b-9003-0087-4f38-29312f000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: ' + + 1.0falsefalsefalsefalse1.0falsefalse1.0falsefalse' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '528' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - a1d86c1e-952d-11e9-bbc5-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:03 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/?restype=service&comp=properties + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:38:02 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 21269aa6-9003-0087-0e3a-29312f000000 + x-ms-version: + - '2018-03-28' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - a1fa3f58-952d-11e9-b4e4-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:03 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/?restype=service&comp=properties + response: + body: + string: "\uFEFF1.0falsefalsefalsefalse1.0falsefalse1.0falsefalse" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:02 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 21269ab4-9003-0087-153a-29312f000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_service_properties.test_retention_too_long.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_service_properties.test_retention_too_long.yaml new file mode 100644 index 000000000000..a81d5074f0de --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_service_properties.test_retention_too_long.yaml @@ -0,0 +1,198 @@ +interactions: +- request: + body: ' + + 1.0truetruetrue366' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '273' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 0f9351b6-952a-11e9-9e6a-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:29 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/?restype=service&comp=properties + response: + body: + string: "\uFEFFInvalidXmlDocumentXML\ + \ specified is not syntactically valid.\nRequestId:8853e50d-d003-00a2-0c36-29a99c000000\n\ + Time:2019-06-22T20:12:31.1824569Z2176Retention\ + \ days must be greater than 0 and less than or equal to 365 days." + headers: + Content-Length: + - '376' + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:12:30 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-error-code: + - InvalidXmlDocument + x-ms-request-id: + - 8853e50d-d003-00a2-0c36-29a99c000000 + x-ms-version: + - '2018-03-28' + status: + code: 400 + message: XML specified is not syntactically valid. +- request: + body: ' + + 1.0truetruetrue366' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '273' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - d197c51c-952a-11e9-9f29-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:17:54 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/?restype=service&comp=properties + response: + body: + string: "\uFEFFInvalidXmlDocumentXML\ + \ specified is not syntactically valid.\nRequestId:27caead9-c003-0017-1d37-29a463000000\n\ + Time:2019-06-22T20:17:55.5796408Z2176Retention\ + \ days must be greater than 0 and less than or equal to 365 days." + headers: + Content-Length: + - '376' + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:17:55 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-error-code: + - InvalidXmlDocument + x-ms-request-id: + - 27caead9-c003-0017-1d37-29a463000000 + x-ms-version: + - '2018-03-28' + status: + code: 400 + message: XML specified is not syntactically valid. +- request: + body: ' + + 1.0truetruetrue366' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '273' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 663d619a-952b-11e9-9b4b-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:04 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/?restype=service&comp=properties + response: + body: + string: "\uFEFFInvalidXmlDocumentXML\ + \ specified is not syntactically valid.\nRequestId:dc702338-5003-003b-0c38-29265e000000\n\ + Time:2019-06-22T20:22:04.8948219Z2176Retention\ + \ days must be greater than 0 and less than or equal to 365 days." + headers: + Content-Length: + - '376' + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:04 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-error-code: + - InvalidXmlDocument + x-ms-request-id: + - dc702338-5003-003b-0c38-29265e000000 + x-ms-version: + - '2018-03-28' + status: + code: 400 + message: XML specified is not syntactically valid. +- request: + body: ' + + 1.0truetruetrue366' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '273' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - a22462e2-952d-11e9-8b43-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:03 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/?restype=service&comp=properties + response: + body: + string: "\uFEFFInvalidXmlDocumentXML\ + \ specified is not syntactically valid.\nRequestId:bcf6c940-6003-0055-013a-298f77000000\n\ + Time:2019-06-22T20:38:04.1467573Z2176Retention\ + \ days must be greater than 0 and less than or equal to 365 days." + headers: + Content-Length: + - '376' + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:03 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-error-code: + - InvalidXmlDocument + x-ms-request-id: + - bcf6c940-6003-0055-013a-298f77000000 + x-ms-version: + - '2018-03-28' + status: + code: 400 + message: XML specified is not syntactically valid. +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_service_properties.test_set_cors.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_service_properties.test_set_cors.yaml new file mode 100644 index 000000000000..d0f4a9813599 --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_service_properties.test_set_cors.yaml @@ -0,0 +1,346 @@ +interactions: +- request: + body: ' + + www.xyz.comGET0www.xyz.com,www.ab.com,www.bc.comGET,PUTx-ms-meta-data*,x-ms-meta-target*,x-ms-meta-xyz,x-ms-meta-foox-ms-meta-data*,x-ms-meta-source*,x-ms-meta-abc,x-ms-meta-bcd500' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '631' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 10a97d9e-952a-11e9-bc4c-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:31 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/?restype=service&comp=properties + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:12:35 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 9e233694-c003-00bd-7336-29728c000000 + x-ms-version: + - '2018-03-28' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 13662070-952a-11e9-96b4-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:35 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://remotestoragename.queue.core.windows.net/?restype=service&comp=properties + response: + body: + string: "\uFEFF1.0falsefalsefalsefalse1.0falsefalse1.0falsefalseGETwww.xyz.com0GET,PUTwww.xyz.com,www.ab.com,www.bc.comx-ms-meta-xyz,x-ms-meta-foo,x-ms-meta-data*,x-ms-meta-target*x-ms-meta-abc,x-ms-meta-bcd,x-ms-meta-data*,x-ms-meta-source*500" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:12:35 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 9e233f03-c003-00bd-1936-29728c000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: ' + + www.xyz.comGET0www.xyz.com,www.ab.com,www.bc.comGET,PUTx-ms-meta-data*,x-ms-meta-target*,x-ms-meta-xyz,x-ms-meta-foox-ms-meta-data*,x-ms-meta-source*,x-ms-meta-abc,x-ms-meta-bcd500' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '631' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - d20b5934-952a-11e9-ad59-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:17:55 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/?restype=service&comp=properties + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:17:55 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - d5f88ff5-e003-00ee-3337-296e83000000 + x-ms-version: + - '2018-03-28' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - d27d35ac-952a-11e9-adab-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:17:56 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/?restype=service&comp=properties + response: + body: + string: "\uFEFF1.0falsefalsefalsefalse1.0falsefalse1.0falsefalseGETwww.xyz.com0GET,PUTwww.xyz.com,www.ab.com,www.bc.comx-ms-meta-xyz,x-ms-meta-foo,x-ms-meta-data*,x-ms-meta-target*x-ms-meta-abc,x-ms-meta-bcd,x-ms-meta-data*,x-ms-meta-source*500" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:17:55 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - d5f890d9-e003-00ee-7237-296e83000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: ' + + www.xyz.comGET0www.xyz.com,www.ab.com,www.bc.comGET,PUTx-ms-meta-data*,x-ms-meta-target*,x-ms-meta-xyz,x-ms-meta-foox-ms-meta-data*,x-ms-meta-source*,x-ms-meta-abc,x-ms-meta-bcd500' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '631' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 66ac6388-952b-11e9-a5d5-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:05 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/?restype=service&comp=properties + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:07 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 9deff021-e003-0066-5b38-29d65a000000 + x-ms-version: + - '2018-03-28' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 68700210-952b-11e9-81f7-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:07 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/?restype=service&comp=properties + response: + body: + string: "\uFEFF1.0falsefalsefalsefalse1.0falsefalse1.0falsefalseGETwww.xyz.com0GET,PUTwww.xyz.com,www.ab.com,www.bc.comx-ms-meta-xyz,x-ms-meta-foo,x-ms-meta-data*,x-ms-meta-target*x-ms-meta-abc,x-ms-meta-bcd,x-ms-meta-data*,x-ms-meta-source*500" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:07 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 9deff0bc-e003-0066-3938-29d65a000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: ' + + www.xyz.comGET0www.xyz.com,www.ab.com,www.bc.comGET,PUTx-ms-meta-data*,x-ms-meta-target*,x-ms-meta-xyz,x-ms-meta-foox-ms-meta-data*,x-ms-meta-source*,x-ms-meta-abc,x-ms-meta-bcd500' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '631' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - a2759c34-952d-11e9-bacf-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:04 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/?restype=service&comp=properties + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:38:06 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 6dac268d-7003-008d-3a3a-2928a6000000 + x-ms-version: + - '2018-03-28' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - a3fa7e46-952d-11e9-8e4c-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:06 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/?restype=service&comp=properties + response: + body: + string: "\uFEFF1.0falsefalsefalsefalse1.0falsefalse1.0falsefalseGETwww.xyz.com0GET,PUTwww.xyz.com,www.ab.com,www.bc.comx-ms-meta-xyz,x-ms-meta-foo,x-ms-meta-data*,x-ms-meta-target*x-ms-meta-abc,x-ms-meta-bcd,x-ms-meta-data*,x-ms-meta-source*500" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:06 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 6dac270d-7003-008d-073a-2928a6000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_service_properties.test_set_hour_metrics.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_service_properties.test_set_hour_metrics.yaml new file mode 100644 index 000000000000..a0c0e4b92aee --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_service_properties.test_set_hour_metrics.yaml @@ -0,0 +1,342 @@ +interactions: +- request: + body: ' + + 1.0truetruetrue5' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '267' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 13791e9e-952a-11e9-8e53-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:35 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/?restype=service&comp=properties + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:12:37 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - b31c32e8-0003-0067-0536-29d7a7000000 + x-ms-version: + - '2018-03-28' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 14e270c0-952a-11e9-9d6f-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:38 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://remotestoragename.queue.core.windows.net/?restype=service&comp=properties + response: + body: + string: "\uFEFF1.0falsefalsefalsefalse1.0truetruetrue51.0falsefalseGETwww.xyz.com0GET,PUTwww.xyz.com,www.ab.com,www.bc.comx-ms-meta-xyz,x-ms-meta-foo,x-ms-meta-data*,x-ms-meta-target*x-ms-meta-abc,x-ms-meta-bcd,x-ms-meta-data*,x-ms-meta-source*500" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:12:37 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - b31c338d-0003-0067-7636-29d7a7000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: ' + + 1.0truetruetrue5' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '267' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - d299c09e-952a-11e9-a5f4-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:17:56 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/?restype=service&comp=properties + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:17:58 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 114900ca-8003-001b-4237-294a92000000 + x-ms-version: + - '2018-03-28' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - d4864e9c-952a-11e9-a789-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:17:59 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/?restype=service&comp=properties + response: + body: + string: "\uFEFF1.0falsefalsefalsefalse1.0truetruetrue51.0falsefalseGETwww.xyz.com0GET,PUTwww.xyz.com,www.ab.com,www.bc.comx-ms-meta-xyz,x-ms-meta-foo,x-ms-meta-data*,x-ms-meta-target*x-ms-meta-abc,x-ms-meta-bcd,x-ms-meta-data*,x-ms-meta-source*500" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:17:58 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 11490242-8003-001b-0b37-294a92000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: ' + + 1.0truetruetrue5' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '267' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 68947386-952b-11e9-a440-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:08 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/?restype=service&comp=properties + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:10 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - eda41591-3003-002b-2538-2910b8000000 + x-ms-version: + - '2018-03-28' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 6a445b90-952b-11e9-bf59-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:11 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/?restype=service&comp=properties + response: + body: + string: "\uFEFF1.0falsefalsefalsefalse1.0truetruetrue51.0falsefalseGETwww.xyz.com0GET,PUTwww.xyz.com,www.ab.com,www.bc.comx-ms-meta-xyz,x-ms-meta-foo,x-ms-meta-data*,x-ms-meta-target*x-ms-meta-abc,x-ms-meta-bcd,x-ms-meta-data*,x-ms-meta-source*500" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:10 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - eda41670-3003-002b-5038-2910b8000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: ' + + 1.0truetruetrue5' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '267' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - a4281458-952d-11e9-a640-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:07 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/?restype=service&comp=properties + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:38:08 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 5bcda80d-0003-0045-6d3a-29b991000000 + x-ms-version: + - '2018-03-28' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - a54630fe-952d-11e9-8314-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:09 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/?restype=service&comp=properties + response: + body: + string: "\uFEFF1.0falsefalsefalsefalse1.0truetruetrue51.0falsefalseGETwww.xyz.com0GET,PUTwww.xyz.com,www.ab.com,www.bc.comx-ms-meta-xyz,x-ms-meta-foo,x-ms-meta-data*,x-ms-meta-target*x-ms-meta-abc,x-ms-meta-bcd,x-ms-meta-data*,x-ms-meta-source*500" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:08 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 5bcda85a-0003-0045-1a3a-29b991000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_service_properties.test_set_logging.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_service_properties.test_set_logging.yaml new file mode 100644 index 000000000000..4a32a0a62db6 --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_service_properties.test_set_logging.yaml @@ -0,0 +1,342 @@ +interactions: +- request: + body: ' + + 1.0truetruetruetrue5' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '262' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 14f4c63a-952a-11e9-b56c-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:38 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/?restype=service&comp=properties + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:12:42 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 78334208-7003-0086-7436-2930d2000000 + x-ms-version: + - '2018-03-28' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 1777651e-952a-11e9-9a2d-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:42 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://remotestoragename.queue.core.windows.net/?restype=service&comp=properties + response: + body: + string: "\uFEFF1.0truetruetruetrue51.0truetruetrue51.0falsefalseGETwww.xyz.com0GET,PUTwww.xyz.com,www.ab.com,www.bc.comx-ms-meta-xyz,x-ms-meta-foo,x-ms-meta-data*,x-ms-meta-target*x-ms-meta-abc,x-ms-meta-bcd,x-ms-meta-data*,x-ms-meta-source*500" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:12:42 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 78334684-7003-0086-0736-2930d2000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: ' + + 1.0truetruetruetrue5' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '262' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - d4a65a48-952a-11e9-824e-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:00 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/?restype=service&comp=properties + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:01 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 2c9d7881-e003-0022-4837-290a36000000 + x-ms-version: + - '2018-03-28' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - d5fdb11e-952a-11e9-ba1b-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:02 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/?restype=service&comp=properties + response: + body: + string: "\uFEFF1.0truetruetruetrue51.0truetruetrue51.0falsefalseGETwww.xyz.com0GET,PUTwww.xyz.com,www.ab.com,www.bc.comx-ms-meta-xyz,x-ms-meta-foo,x-ms-meta-data*,x-ms-meta-target*x-ms-meta-abc,x-ms-meta-bcd,x-ms-meta-data*,x-ms-meta-source*500" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:01 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 2c9d7907-e003-0022-3737-290a36000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: ' + + 1.0truetruetruetrue5' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '262' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 6a6b07c2-952b-11e9-94a7-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:11 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/?restype=service&comp=properties + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:13 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - a370a59e-b003-00b9-2238-29870e000000 + x-ms-version: + - '2018-03-28' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 6c2d52b8-952b-11e9-99bf-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:14 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/?restype=service&comp=properties + response: + body: + string: "\uFEFF1.0truetruetruetrue51.0truetruetrue51.0falsefalseGETwww.xyz.com0GET,PUTwww.xyz.com,www.ab.com,www.bc.comx-ms-meta-xyz,x-ms-meta-foo,x-ms-meta-data*,x-ms-meta-target*x-ms-meta-abc,x-ms-meta-bcd,x-ms-meta-data*,x-ms-meta-source*500" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:14 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - a370a783-b003-00b9-5938-29870e000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: ' + + 1.0truetruetruetrue5' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '262' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - a572de1a-952d-11e9-a5ba-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:09 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/?restype=service&comp=properties + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:38:11 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - a1806a87-f003-0097-6d3a-2907c9000000 + x-ms-version: + - '2018-03-28' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - a6fb54e2-952d-11e9-ab63-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:11 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/?restype=service&comp=properties + response: + body: + string: "\uFEFF1.0truetruetruetrue51.0truetruetrue51.0falsefalseGETwww.xyz.com0GET,PUTwww.xyz.com,www.ab.com,www.bc.comx-ms-meta-xyz,x-ms-meta-foo,x-ms-meta-data*,x-ms-meta-target*x-ms-meta-abc,x-ms-meta-bcd,x-ms-meta-data*,x-ms-meta-source*500" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:11 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - a1806b70-f003-0097-2e3a-2907c9000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_service_properties.test_set_minute_metrics.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_service_properties.test_set_minute_metrics.yaml new file mode 100644 index 000000000000..80ab9bc4fd2c --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_service_properties.test_set_minute_metrics.yaml @@ -0,0 +1,342 @@ +interactions: +- request: + body: ' + + 1.0truetruetrue5' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '271' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 1789b78c-952a-11e9-a4de-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:42 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/?restype=service&comp=properties + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:12:44 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 79aca164-7003-00c9-0736-29f4ca000000 + x-ms-version: + - '2018-03-28' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 18afb29e-952a-11e9-9478-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:44 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://remotestoragename.queue.core.windows.net/?restype=service&comp=properties + response: + body: + string: "\uFEFF1.0truetruetruetrue51.0truetruetrue51.0truetruetrue5GETwww.xyz.com0GET,PUTwww.xyz.com,www.ab.com,www.bc.comx-ms-meta-xyz,x-ms-meta-foo,x-ms-meta-data*,x-ms-meta-target*x-ms-meta-abc,x-ms-meta-bcd,x-ms-meta-data*,x-ms-meta-source*500" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:12:44 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 79aca389-7003-00c9-7636-29f4ca000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: ' + + 1.0truetruetrue5' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '271' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - d61a490c-952a-11e9-8085-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:02 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/?restype=service&comp=properties + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:18:05 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 06334647-6003-0092-1437-29f3b6000000 + x-ms-version: + - '2018-03-28' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - d7c592b6-952a-11e9-84ca-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:05 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/?restype=service&comp=properties + response: + body: + string: "\uFEFF1.0truetruetruetrue51.0truetruetrue51.0truetruetrue5GETwww.xyz.com0GET,PUTwww.xyz.com,www.ab.com,www.bc.comx-ms-meta-xyz,x-ms-meta-foo,x-ms-meta-data*,x-ms-meta-target*x-ms-meta-abc,x-ms-meta-bcd,x-ms-meta-data*,x-ms-meta-source*500" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:05 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 063347c0-6003-0092-4f37-29f3b6000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: ' + + 1.0truetruetrue5' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '271' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 6c524a5a-952b-11e9-8470-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:14 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/?restype=service&comp=properties + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:22:15 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - 8ef2b398-b003-005c-5a38-2995f9000000 + x-ms-version: + - '2018-03-28' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 6d484162-952b-11e9-aad1-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:16 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/?restype=service&comp=properties + response: + body: + string: "\uFEFF1.0truetruetruetrue51.0truetruetrue51.0truetruetrue5GETwww.xyz.com0GET,PUTwww.xyz.com,www.ab.com,www.bc.comx-ms-meta-xyz,x-ms-meta-foo,x-ms-meta-data*,x-ms-meta-target*x-ms-meta-abc,x-ms-meta-bcd,x-ms-meta-data*,x-ms-meta-source*500" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:15 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 8ef2b3e6-b003-005c-1538-2995f9000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: ' + + 1.0truetruetrue5' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '271' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - a727d0da-952d-11e9-9c33-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:12 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/?restype=service&comp=properties + response: + body: + string: '' + headers: + Content-Length: + - '0' + Date: + - Sat, 22 Jun 2019 20:38:17 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-request-id: + - eb1632d5-b003-0031-733a-293fd7000000 + x-ms-version: + - '2018-03-28' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - aa83d85a-952d-11e9-a50a-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:17 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename.queue.core.windows.net/?restype=service&comp=properties + response: + body: + string: "\uFEFF1.0truetruetruetrue51.0truetruetrue51.0truetruetrue5GETwww.xyz.com0GET,PUTwww.xyz.com,www.ab.com,www.bc.comx-ms-meta-xyz,x-ms-meta-foo,x-ms-meta-data*,x-ms-meta-target*x-ms-meta-abc,x-ms-meta-bcd,x-ms-meta-data*,x-ms-meta-source*500" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:17 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - eb1633f6-b003-0031-353a-293fd7000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_service_properties.test_too_many_cors_rules.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_service_properties.test_too_many_cors_rules.yaml new file mode 100644 index 000000000000..40dfc0906aef --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_service_properties.test_too_many_cors_rules.yaml @@ -0,0 +1,222 @@ +interactions: +- request: + body: ' + + www.xyz.comGET0www.xyz.comGET0www.xyz.comGET0www.xyz.comGET0www.xyz.comGET0www.xyz.comGET0' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '1143' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 18c1b6ec-952a-11e9-aec4-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:44 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://remotestoragename.queue.core.windows.net/?restype=service&comp=properties + response: + body: + string: "\uFEFFInvalidXmlDocumentXML\ + \ specified is not syntactically valid.\nRequestId:1bcd0bb5-1003-00b4-4e36-296802000000\n\ + Time:2019-06-22T20:12:45.0444942Z00" + headers: + Content-Length: + - '294' + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:12:44 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-error-code: + - InvalidXmlDocument + x-ms-request-id: + - 1bcd0bb5-1003-00b4-4e36-296802000000 + x-ms-version: + - '2018-03-28' + status: + code: 400 + message: XML specified is not syntactically valid. +- request: + body: ' + + www.xyz.comGET0www.xyz.comGET0www.xyz.comGET0www.xyz.comGET0www.xyz.comGET0www.xyz.comGET0' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '1143' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - d7df5f1e-952a-11e9-b75e-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:05 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/?restype=service&comp=properties + response: + body: + string: "\uFEFFInvalidXmlDocumentXML\ + \ specified is not syntactically valid.\nRequestId:86b7f4ef-c003-003e-2737-29d221000000\n\ + Time:2019-06-22T20:18:06.1635415Z00" + headers: + Content-Length: + - '294' + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:05 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-error-code: + - InvalidXmlDocument + x-ms-request-id: + - 86b7f4ef-c003-003e-2737-29d221000000 + x-ms-version: + - '2018-03-28' + status: + code: 400 + message: XML specified is not syntactically valid. +- request: + body: ' + + www.xyz.comGET0www.xyz.comGET0www.xyz.comGET0www.xyz.comGET0www.xyz.comGET0www.xyz.comGET0' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '1143' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 6d6d29dc-952b-11e9-b6e7-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:16 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/?restype=service&comp=properties + response: + body: + string: "\uFEFFInvalidXmlDocumentXML\ + \ specified is not syntactically valid.\nRequestId:7fe46e15-2003-001d-6038-29bdea000000\n\ + Time:2019-06-22T20:22:17.0263672Z00" + headers: + Content-Length: + - '294' + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:16 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-error-code: + - InvalidXmlDocument + x-ms-request-id: + - 7fe46e15-2003-001d-6038-29bdea000000 + x-ms-version: + - '2018-03-28' + status: + code: 400 + message: XML specified is not syntactically valid. +- request: + body: ' + + www.xyz.comGET0www.xyz.comGET0www.xyz.comGET0www.xyz.comGET0www.xyz.comGET0www.xyz.comGET0' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '1143' + Content-Type: + - application/xml; charset=utf-8 + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - aaab7d10-952d-11e9-832a-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:18 GMT + x-ms-version: + - '2018-03-28' + method: PUT + uri: https://storagename.queue.core.windows.net/?restype=service&comp=properties + response: + body: + string: "\uFEFFInvalidXmlDocumentXML\ + \ specified is not syntactically valid.\nRequestId:ee259904-5003-0012-393a-29501c000000\n\ + Time:2019-06-22T20:38:18.6077046Z00" + headers: + Content-Length: + - '294' + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:18 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + x-ms-error-code: + - InvalidXmlDocument + x-ms-request-id: + - ee259904-5003-0012-393a-29501c000000 + x-ms-version: + - '2018-03-28' + status: + code: 400 + message: XML specified is not syntactically valid. +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_service_stats.test_queue_service_stats_f.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_service_stats.test_queue_service_stats_f.yaml new file mode 100644 index 000000000000..f0a4e6422835 --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_service_stats.test_queue_service_stats_f.yaml @@ -0,0 +1,170 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 18edcb62-952a-11e9-8390-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:45 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://remotestoragename-secondary.queue.core.windows.net/?restype=service&comp=stats + response: + body: + string: "\uFEFFliveSat,\ + \ 22 Jun 2019 20:09:48 GMT" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:12:44 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - 28e9434d-5003-00dd-7036-29174c000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - d8594bb4-952a-11e9-bc62-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:06 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename-secondary.queue.core.windows.net/?restype=service&comp=stats + response: + body: + string: "\uFEFFliveSat,\ + \ 22 Jun 2019 20:15:38 GMT" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:08 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - f428ff43-f003-00d4-6037-29529f000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 6de4d95a-952b-11e9-b000-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:17 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename-secondary.queue.core.windows.net/?restype=service&comp=stats + response: + body: + string: "\uFEFFliveSat,\ + \ 22 Jun 2019 20:19:58 GMT" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:16 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - ff444167-1003-0017-2c38-294bc5000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - ab0ffe34-952d-11e9-8400-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:18 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename-secondary.queue.core.windows.net/?restype=service&comp=stats + response: + body: + string: "\uFEFFliveSat,\ + \ 22 Jun 2019 20:35:38 GMT" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:18 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - b718b670-8003-0067-153a-29f232000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/recordings/test_service_stats.test_queue_service_stats_when_unavailable.yaml b/sdk/storage/azure-storage-queue/tests/recordings/test_service_stats.test_queue_service_stats_when_unavailable.yaml new file mode 100644 index 000000000000..37f8ef9b372e --- /dev/null +++ b/sdk/storage/azure-storage-queue/tests/recordings/test_service_stats.test_queue_service_stats_when_unavailable.yaml @@ -0,0 +1,170 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 191230cc-952a-11e9-ac6f-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:12:45 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://remotestoragename-secondary.queue.core.windows.net/?restype=service&comp=stats + response: + body: + string: "\uFEFFliveSat,\ + \ 22 Jun 2019 20:09:48 GMT" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:12:44 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - e3423a90-e003-00ba-0336-2907b0000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - d9d10590-952a-11e9-a0bb-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:18:08 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename-secondary.queue.core.windows.net/?restype=service&comp=stats + response: + body: + string: "\uFEFFliveSat,\ + \ 22 Jun 2019 20:15:38 GMT" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:18:07 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - 21039835-d003-0018-6637-293da9000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - 6e10f008-952b-11e9-b3fd-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:22:17 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename-secondary.queue.core.windows.net/?restype=service&comp=stats + response: + body: + string: "\uFEFFliveSat,\ + \ 22 Jun 2019 20:19:58 GMT" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:22:17 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + x-ms-request-id: + - d3ac566f-c003-00df-2138-29a9f4000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/xml + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - python/3.6.5 (Darwin-16.7.0-x86_64-i386-64bit) azure-core/0.0.1 + x-ms-client-request-id: + - ab437d86-952d-11e9-af28-f45c89a7d159 + x-ms-date: + - Sat, 22 Jun 2019 20:38:19 GMT + x-ms-version: + - '2018-03-28' + method: GET + uri: https://storagename-secondary.queue.core.windows.net/?restype=service&comp=stats + response: + body: + string: "\uFEFFliveSat,\ + \ 22 Jun 2019 20:35:38 GMT" + headers: + Cache-Control: + - no-cache + Content-Type: + - application/xml + Date: + - Sat, 22 Jun 2019 20:38:19 GMT + Server: + - Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0 + Transfer-Encoding: + - chunked + Vary: + - Origin + x-ms-request-id: + - e8f3ccd5-9003-0036-703a-296fbe000000 + x-ms-version: + - '2018-03-28' + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/storage/azure-storage-queue/tests/settings_fake.py b/sdk/storage/azure-storage-queue/tests/settings_fake.py index 64cdee22a1a7..c4fe5917a862 100644 --- a/sdk/storage/azure-storage-queue/tests/settings_fake.py +++ b/sdk/storage/azure-storage-queue/tests/settings_fake.py @@ -12,8 +12,8 @@ STORAGE_ACCOUNT_KEY = "NzhL3hKZbJBuJ2484dPTR+xF30kYaWSSCbs2BzLgVVI1woqeST/1IgqaLm6QAOTxtGvxctSNbIR/1hW8yH+bJg==" BLOB_STORAGE_ACCOUNT_NAME = "blobstoragename" BLOB_STORAGE_ACCOUNT_KEY = "NzhL3hKZbJBuJ2484dPTR+xF30kYaWSSCbs2BzLgVVI1woqeST/1IgqaLm6QAOTxtGvxctSNbIR/1hW8yH+bJg==" -REMOTE_STORAGE_ACCOUNT_NAME = "remotestoragename" -REMOTE_STORAGE_ACCOUNT_KEY = "3pJwX7wjxoQEW2nKAhJZARpQWpKvPOUN9JwoV/HhlMmJlS1pORhzzHpPfQqgFcwGsriu6dwYqnugWOjGShC5VQ==" +REMOTE_STORAGE_ACCOUNT_NAME = "storagename" +REMOTE_STORAGE_ACCOUNT_KEY = "NzhL3hKZbJBuJ2484dPTR+xF30kYaWSSCbs2BzLgVVI1woqeST/1IgqaLm6QAOTxtGvxctSNbIR/1hW8yH+bJg==" PREMIUM_STORAGE_ACCOUNT_NAME = "premiumstoragename" PREMIUM_STORAGE_ACCOUNT_KEY = "NzhL3hKZbJBuJ2484dPTR+xF30kYaWSSCbs2BzLgVVI1woqeST/1IgqaLm6QAOTxtGvxctSNbIR/1hW8yH+bJg==" OAUTH_STORAGE_ACCOUNT_NAME = "oauthstoragename" diff --git a/sdk/storage/azure-storage-queue/tests/testcase.py b/sdk/storage/azure-storage-queue/tests/testcase.py index b76a5cc3d6ae..60a3ec21434a 100644 --- a/sdk/storage/azure-storage-queue/tests/testcase.py +++ b/sdk/storage/azure-storage-queue/tests/testcase.py @@ -57,6 +57,17 @@ def need_real_credentials(mode): return mode == TestMode.run_live_no_record or mode == TestMode.record +class FakeTokenCredential(object): + """Protocol for classes able to provide OAuth tokens. + :param str scopes: Lets you specify the type of access needed. + """ + def __init__(self, token): + self.token = token + + def get_token(self, *args): + return self.token + + class StorageTestCase(unittest.TestCase): def setUp(self): @@ -158,14 +169,23 @@ def _set_test_proxy(service, settings): settings.PROXY_PASSWORD, ) - def _get_shared_key_credentials(self): - return self.settings.STORAGE_ACCOUNT_NAME, self.settings.STORAGE_ACCOUNT_KEY + def _get_shared_key_credential(self): + return { + "account_name": self.settings.STORAGE_ACCOUNT_NAME, + "account_key": self.settings.STORAGE_ACCOUNT_KEY + } - def _get_premium_shared_key_credentials(self): - return self.settings.PREMIUM_STORAGE_ACCOUNT_NAME, self.settings.PREMIUM_STORAGE_ACCOUNT_KEY, + def _get_premium_shared_key_credential(self): + return { + "account_name": self.settings.PREMIUM_STORAGE_ACCOUNT_NAME, + "account_key": self.settings.PREMIUM_STORAGE_ACCOUNT_KEY + } - def _get_remote_shared_key_credentials(self): - return self.settings.REMOTE_STORAGE_ACCOUNT_NAME, self.settings.REMOTE_STORAGE_ACCOUNT_KEY, + def _get_remote_shared_key_credential(self): + return { + "account_name": self.settings.REMOTE_STORAGE_ACCOUNT_NAME, + "account_key": self.settings.REMOTE_STORAGE_ACCOUNT_KEY + } def _get_account_url(self): return "{}://{}.blob.core.windows.net".format( @@ -390,16 +410,16 @@ def is_file_encryption_enabled(self): return self.settings.IS_SERVER_SIDE_FILE_ENCRYPTION_ENABLED def generate_oauth_token(self): - context = adal.AuthenticationContext( - str.format("https://login.microsoftonline.com/{}", self.settings.ACTIVE_DIRECTORY_TENANT_ID), - api_version=None, validate_authority=True) + try: + from azure.identity import ClientSecretCredential - token = context.acquire_token_with_client_credentials( - "https://storage.azure.com", - self.settings.ACTIVE_DIRECTORY_APPLICATION_ID, - self.settings.ACTIVE_DIRECTORY_APPLICATION_SECRET) - - return token["accessToken"] + return ClientSecretCredential( + self.settings.ACTIVE_DIRECTORY_APPLICATION_ID, + self.settings.ACTIVE_DIRECTORY_APPLICATION_SECRET, + self.settings.ACTIVE_DIRECTORY_TENANT_ID + ) + except ImportError: + return FakeTokenCredential('initial token') def record(test): def recording_test(self):