diff --git a/sdk/communication/azure-communication-identity/tests/_shared/__init__.py b/sdk/communication/azure-communication-identity/tests/_shared/__init__.py new file mode 100644 index 000000000000..841b812e10ba --- /dev/null +++ b/sdk/communication/azure-communication-identity/tests/_shared/__init__.py @@ -0,0 +1,6 @@ +# 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. +# -------------------------------------------------------------------------- \ No newline at end of file diff --git a/sdk/communication/azure-communication-identity/tests/_shared/asynctestcase.py b/sdk/communication/azure-communication-identity/tests/_shared/asynctestcase.py new file mode 100644 index 000000000000..197c48e0079b --- /dev/null +++ b/sdk/communication/azure-communication-identity/tests/_shared/asynctestcase.py @@ -0,0 +1,27 @@ + +# 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 functools +import asyncio +from azure_devtools.scenario_tests.utilities import trim_kwargs_from_test_function +from .testcase import CommunicationTestCase + +class AsyncCommunicationTestCase(CommunicationTestCase): + + @staticmethod + def await_prepared_test(test_fn): + """Synchronous wrapper for async test methods. Used to avoid making changes + upstream to AbstractPreparer (which doesn't await the functions it wraps) + """ + + @functools.wraps(test_fn) + def run(test_class_instance, *args, **kwargs): + trim_kwargs_from_test_function(test_fn, kwargs) + loop = asyncio.get_event_loop() + return loop.run_until_complete(test_fn(test_class_instance, **kwargs)) + + return run diff --git a/sdk/communication/azure-communication-identity/tests/_shared/communication_service_preparer.py b/sdk/communication/azure-communication-identity/tests/_shared/communication_service_preparer.py new file mode 100644 index 000000000000..e3907ff011e0 --- /dev/null +++ b/sdk/communication/azure-communication-identity/tests/_shared/communication_service_preparer.py @@ -0,0 +1,89 @@ +# ------------------------------------ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. +# ------------------------------------ + +import datetime + +from azure.mgmt.communication import CommunicationServiceManagementClient +from azure.mgmt.communication.models import CommunicationServiceResource +from devtools_testutils import( + AzureMgmtPreparer, + ResourceGroupPreparer, + FakeResource +) +from devtools_testutils.resource_testcase import RESOURCE_GROUP_PARAM +from azure_devtools.scenario_tests.exceptions import AzureTestError + +class CommunicationServicePreparer(AzureMgmtPreparer): + """Communication Service Preparer. + Creating and destroying test resources on demand + """ + def __init__( + self, + name_prefix="communication", + resource_group_parameter_name=RESOURCE_GROUP_PARAM, + disable_recording=True, + use_cache=False, + playback_fake_resource=None, + client_kwargs=None, + ): + super(CommunicationServicePreparer, self).__init__( + name_prefix, + random_name_length=24, + disable_recording=disable_recording, + playback_fake_resource=playback_fake_resource, + client_kwargs=client_kwargs, + ) + self.resource_group_parameter_name = resource_group_parameter_name + self.random_name_enabled = True + self.service_name = "TEST-SERVICE-NAME" + self.mgmt_client = None + self.set_cache(use_cache) + self.scrubbed_resource_name = "communicationegrcrs" + + def _get_resource_group(self, **kwargs): + try: + return kwargs[self.resource_group_parameter_name] + except KeyError: + template = ( + "To create a communication service a resource group is required. Please add " + "decorator @{} in front of this preparer." + ) + raise AzureTestError(template.format(ResourceGroupPreparer.__name__)) + + def create_resource(self, name, **kwargs): + if not self.is_live: + self.resource = FakeResource(name=self.scrubbed_resource_name, id=name) + + return { + "connection_string": "endpoint=https://{}.communication.azure.com/;accesskey=fake===".format(self.resource.name), + } + + self.test_class_instance.scrubber.register_name_pair(name, self.scrubbed_resource_name) + group_name = self._get_resource_group(**kwargs).name + + self.client = self.create_mgmt_client(CommunicationServiceManagementClient, polling_interval=30) + + self.resource = self.client.communication_service.begin_create_or_update( + group_name, + name, + CommunicationServiceResource(location="global", data_location="UnitedStates") + ).result() + + self.service_name = self.resource.name + + primary_connection_string = self.client.communication_service.list_keys( + group_name, + self.resource.name).primary_connection_string + + return { + "connection_string": primary_connection_string, + } + + def remove_resource(self, name, **kwargs): + if not self.is_live: + return + + group_name = self._get_resource_group(**kwargs).name + self.client.communication_service.begin_delete(group_name, self.service_name).wait() diff --git a/sdk/communication/azure-communication-identity/tests/_shared/helper.py b/sdk/communication/azure-communication-identity/tests/_shared/helper.py new file mode 100644 index 000000000000..7338f10940a0 --- /dev/null +++ b/sdk/communication/azure-communication-identity/tests/_shared/helper.py @@ -0,0 +1,19 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +from azure_devtools.scenario_tests import RecordingProcessor + +class URIIdentityReplacer(RecordingProcessor): + """Replace the identity in request uri""" + def process_request(self, request): + import re + request.uri = re.sub('/identities/([^/?]+)', '/identities/sanitized', request.uri) + return request + + def process_response(self, response): + import re + if 'url' in response: + response['url'] = re.sub('/identities/([^/?]+)', '/identities/sanitized', response['url']) + return response \ No newline at end of file diff --git a/sdk/communication/azure-communication-identity/tests/_shared/testcase.py b/sdk/communication/azure-communication-identity/tests/_shared/testcase.py new file mode 100644 index 000000000000..f56f17e56a46 --- /dev/null +++ b/sdk/communication/azure-communication-identity/tests/_shared/testcase.py @@ -0,0 +1,69 @@ + +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +import re +from devtools_testutils import AzureTestCase +from azure_devtools.scenario_tests import RecordingProcessor, ReplayableTest +from azure_devtools.scenario_tests.utilities import is_text_payload + +class ResponseReplacerProcessor(RecordingProcessor): + def __init__(self, keys=None, replacement="sanitized"): + self._keys = keys if keys else [] + self._replacement = replacement + + def process_response(self, response): + def sanitize_dict(dictionary): + for key in dictionary: + value = dictionary[key] + if isinstance(value, str): + dictionary[key] = re.sub( + r"("+'|'.join(self._keys)+r")", + self._replacement, + dictionary[key]) + elif isinstance(value, dict): + sanitize_dict(value) + + sanitize_dict(response) + + return response + +class BodyReplacerProcessor(RecordingProcessor): + """Sanitize the sensitive info inside request or response bodies""" + + def __init__(self, keys=None, replacement="sanitized"): + self._replacement = replacement + self._keys = keys if keys else [] + + def process_request(self, request): + if is_text_payload(request) and request.body: + request.body = self._replace_keys(request.body.decode()).encode() + + return request + + def process_response(self, response): + if is_text_payload(response) and response['body']['string']: + response['body']['string'] = self._replace_keys(response['body']['string']) + + return response + + def _replace_keys(self, body): + import json + try: + body = json.loads(body) + for key in self._keys: + if key in body: + body[key] = self._replacement + + except (KeyError, ValueError): + return body + + return json.dumps(body) + +class CommunicationTestCase(AzureTestCase): + FILTER_HEADERS = ReplayableTest.FILTER_HEADERS + ['x-azure-ref', 'x-ms-content-sha256', 'location'] + + def __init__(self, method_name, *args, **kwargs): + super(CommunicationTestCase, self).__init__(method_name, *args, **kwargs) \ No newline at end of file diff --git a/sdk/communication/azure-communication-identity/tests/conftest.py b/sdk/communication/azure-communication-identity/tests/conftest.py new file mode 100644 index 000000000000..9f69fcac8bdc --- /dev/null +++ b/sdk/communication/azure-communication-identity/tests/conftest.py @@ -0,0 +1,11 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +import sys + +# Ignore collection of async tests for Python 2 +collect_ignore_glob = [] +if sys.version_info < (3, 5): + collect_ignore_glob.append("*_async.py") diff --git a/sdk/communication/azure-communication-identity/tests/recordings/test_communication_identity_client.test_create_user.yaml b/sdk/communication/azure-communication-identity/tests/recordings/test_communication_identity_client.test_create_user.yaml new file mode 100644 index 000000000000..c2bc1d2d7dc8 --- /dev/null +++ b/sdk/communication/azure-communication-identity/tests/recordings/test_communication_identity_client.test_create_user.yaml @@ -0,0 +1,42 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + Date: + - Tue, 22 Dec 2020 18:26:56 GMT + User-Agent: + - azsdk-python-communication-administration/1.0.0b4 Python/3.8.5 (Windows-10-10.0.19041-SP0) + x-ms-return-client-request-id: + - 'true' + method: POST + uri: https://communicationegrcrs.communication.azure.com/identities?api-version=2020-07-20-preview2 + response: + body: + string: '{"id": "sanitized"}' + headers: + api-supported-versions: + - 2020-01-15-preview3, 2020-07-20-preview1, 2020-07-20-preview2 + content-type: + - application/json; charset=utf-8 + date: + - Tue, 22 Dec 2020 18:26:55 GMT + ms-cv: + - 4whAoum970WIzePHLz1Ujg.0 + strict-transport-security: + - max-age=2592000 + transfer-encoding: + - chunked + x-processing-time: + - 18ms + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/communication/azure-communication-identity/tests/recordings/test_communication_identity_client.test_create_user_from_managed_identity.yaml b/sdk/communication/azure-communication-identity/tests/recordings/test_communication_identity_client.test_create_user_from_managed_identity.yaml new file mode 100644 index 000000000000..f159cc5d3c7c --- /dev/null +++ b/sdk/communication/azure-communication-identity/tests/recordings/test_communication_identity_client.test_create_user_from_managed_identity.yaml @@ -0,0 +1,38 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - azsdk-python-communication-administration/1.0.0b4 Python/3.8.5 (Windows-10-10.0.19041-SP0) + method: POST + uri: https://communicationegrcrs.communication.azure.com/identities?api-version=2020-07-20-preview2 + response: + body: + string: '{"id": "sanitized"}' + headers: + api-supported-versions: + - 2020-01-15-preview3, 2020-07-20-preview1, 2020-07-20-preview2 + content-type: + - application/json; charset=utf-8 + date: + - Tue, 22 Dec 2020 18:28:04 GMT + ms-cv: + - /4JsXqUuEkmQ1v304iaBTw.0 + strict-transport-security: + - max-age=2592000 + transfer-encoding: + - chunked + x-processing-time: + - 635ms + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/communication/azure-communication-identity/tests/recordings/test_communication_identity_client.test_delete_user.yaml b/sdk/communication/azure-communication-identity/tests/recordings/test_communication_identity_client.test_delete_user.yaml new file mode 100644 index 000000000000..392431b12f89 --- /dev/null +++ b/sdk/communication/azure-communication-identity/tests/recordings/test_communication_identity_client.test_delete_user.yaml @@ -0,0 +1,78 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + Date: + - Tue, 22 Dec 2020 18:29:13 GMT + User-Agent: + - azsdk-python-communication-administration/1.0.0b4 Python/3.8.5 (Windows-10-10.0.19041-SP0) + x-ms-return-client-request-id: + - 'true' + method: POST + uri: https://communicationegrcrs.communication.azure.com/identities?api-version=2020-07-20-preview2 + response: + body: + string: '{"id": "sanitized"}' + headers: + api-supported-versions: + - 2020-01-15-preview3, 2020-07-20-preview1, 2020-07-20-preview2 + content-type: + - application/json; charset=utf-8 + date: + - Tue, 22 Dec 2020 18:29:12 GMT + ms-cv: + - UzbbWyNM6Ee4hx1Ym7MwSA.0 + strict-transport-security: + - max-age=2592000 + transfer-encoding: + - chunked + x-processing-time: + - 19ms + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + Date: + - Tue, 22 Dec 2020 18:29:14 GMT + User-Agent: + - azsdk-python-communication-administration/1.0.0b4 Python/3.8.5 (Windows-10-10.0.19041-SP0) + x-ms-return-client-request-id: + - 'true' + method: DELETE + uri: https://communicationegrcrs.communication.azure.com/identities/sanitized?api-version=2020-07-20-preview2 + response: + body: + string: '' + headers: + api-supported-versions: + - 2020-01-15-preview3, 2020-07-20-preview1, 2020-07-20-preview2 + date: + - Tue, 22 Dec 2020 18:29:13 GMT + ms-cv: + - bD8oBIuNQEWXEaluFwupbA.0 + strict-transport-security: + - max-age=2592000 + x-processing-time: + - 764ms + status: + code: 204 + message: No Content +version: 1 diff --git a/sdk/communication/azure-communication-identity/tests/recordings/test_communication_identity_client.test_delete_user_from_managed_identity.yaml b/sdk/communication/azure-communication-identity/tests/recordings/test_communication_identity_client.test_delete_user_from_managed_identity.yaml new file mode 100644 index 000000000000..e1b92837214b --- /dev/null +++ b/sdk/communication/azure-communication-identity/tests/recordings/test_communication_identity_client.test_delete_user_from_managed_identity.yaml @@ -0,0 +1,70 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - azsdk-python-communication-administration/1.0.0b4 Python/3.8.5 (Windows-10-10.0.19041-SP0) + method: POST + uri: https://communicationegrcrs.communication.azure.com/identities?api-version=2020-07-20-preview2 + response: + body: + string: '{"id": "sanitized"}' + headers: + api-supported-versions: + - 2020-01-15-preview3, 2020-07-20-preview1, 2020-07-20-preview2 + content-type: + - application/json; charset=utf-8 + date: + - Tue, 22 Dec 2020 18:30:23 GMT + ms-cv: + - eSMH8ZATxUWO5OamG49Wdg.0 + strict-transport-security: + - max-age=2592000 + transfer-encoding: + - chunked + x-processing-time: + - 811ms + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - azsdk-python-communication-administration/1.0.0b4 Python/3.8.5 (Windows-10-10.0.19041-SP0) + method: DELETE + uri: https://communicationegrcrs.communication.azure.com/identities/sanitized?api-version=2020-07-20-preview2 + response: + body: + string: '' + headers: + api-supported-versions: + - 2020-01-15-preview3, 2020-07-20-preview1, 2020-07-20-preview2 + date: + - Tue, 22 Dec 2020 18:30:24 GMT + ms-cv: + - 91lJNqPMP0+hZnY0ay0tXA.0 + strict-transport-security: + - max-age=2592000 + x-processing-time: + - 741ms + status: + code: 204 + message: No Content +version: 1 diff --git a/sdk/communication/azure-communication-identity/tests/recordings/test_communication_identity_client.test_issue_token.yaml b/sdk/communication/azure-communication-identity/tests/recordings/test_communication_identity_client.test_issue_token.yaml new file mode 100644 index 000000000000..76d30c8ff3e6 --- /dev/null +++ b/sdk/communication/azure-communication-identity/tests/recordings/test_communication_identity_client.test_issue_token.yaml @@ -0,0 +1,84 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + Date: + - Tue, 22 Dec 2020 18:31:34 GMT + User-Agent: + - azsdk-python-communication-administration/1.0.0b4 Python/3.8.5 (Windows-10-10.0.19041-SP0) + x-ms-return-client-request-id: + - 'true' + method: POST + uri: https://communicationegrcrs.communication.azure.com/identities?api-version=2020-07-20-preview2 + response: + body: + string: '{"id": "sanitized"}' + headers: + api-supported-versions: + - 2020-01-15-preview3, 2020-07-20-preview1, 2020-07-20-preview2 + content-type: + - application/json; charset=utf-8 + date: + - Tue, 22 Dec 2020 18:31:32 GMT + ms-cv: + - OXm+S4D9ak+t0Y4jKA3bFA.0 + strict-transport-security: + - max-age=2592000 + transfer-encoding: + - chunked + x-processing-time: + - 24ms + status: + code: 200 + message: OK +- request: + body: '{"scopes": ["chat"]}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '20' + Content-Type: + - application/json + Date: + - Tue, 22 Dec 2020 18:31:34 GMT + User-Agent: + - azsdk-python-communication-administration/1.0.0b4 Python/3.8.5 (Windows-10-10.0.19041-SP0) + x-ms-return-client-request-id: + - 'true' + method: POST + uri: https://communicationegrcrs.communication.azure.com/identities/sanitized/token?api-version=2020-07-20-preview2 + response: + body: + string: '{"id": "sanitized", "token": "sanitized", "expiresOn": "2020-12-23T18:31:32.3009076+00:00"}' + headers: + api-supported-versions: + - 2020-01-15-preview3, 2020-07-20-preview1, 2020-07-20-preview2 + content-type: + - application/json; charset=utf-8 + date: + - Tue, 22 Dec 2020 18:31:32 GMT + ms-cv: + - EArcgkwtPkCU38ZbLjwJEQ.0 + strict-transport-security: + - max-age=2592000 + transfer-encoding: + - chunked + x-processing-time: + - 24ms + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/communication/azure-communication-identity/tests/recordings/test_communication_identity_client.test_issue_token_from_managed_identity.yaml b/sdk/communication/azure-communication-identity/tests/recordings/test_communication_identity_client.test_issue_token_from_managed_identity.yaml new file mode 100644 index 000000000000..879ddee12d3c --- /dev/null +++ b/sdk/communication/azure-communication-identity/tests/recordings/test_communication_identity_client.test_issue_token_from_managed_identity.yaml @@ -0,0 +1,76 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - azsdk-python-communication-administration/1.0.0b4 Python/3.8.5 (Windows-10-10.0.19041-SP0) + method: POST + uri: https://communicationegrcrs.communication.azure.com/identities?api-version=2020-07-20-preview2 + response: + body: + string: '{"id": "sanitized"}' + headers: + api-supported-versions: + - 2020-01-15-preview3, 2020-07-20-preview1, 2020-07-20-preview2 + content-type: + - application/json; charset=utf-8 + date: + - Tue, 22 Dec 2020 18:32:41 GMT + ms-cv: + - NcQPodkL5UOzC+AtKJcXvw.0 + strict-transport-security: + - max-age=2592000 + transfer-encoding: + - chunked + x-processing-time: + - 501ms + status: + code: 200 + message: OK +- request: + body: '{"scopes": ["chat"]}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '20' + Content-Type: + - application/json + User-Agent: + - azsdk-python-communication-administration/1.0.0b4 Python/3.8.5 (Windows-10-10.0.19041-SP0) + method: POST + uri: https://communicationegrcrs.communication.azure.com/identities/sanitized/token?api-version=2020-07-20-preview2 + response: + body: + string: '{"id": "sanitized", "token": "sanitized", "expiresOn": "2020-12-23T18:32:41.3736569+00:00"}' + headers: + api-supported-versions: + - 2020-01-15-preview3, 2020-07-20-preview1, 2020-07-20-preview2 + content-type: + - application/json; charset=utf-8 + date: + - Tue, 22 Dec 2020 18:32:41 GMT + ms-cv: + - W4rjQkxkvUSQqyJk5dUwCA.0 + strict-transport-security: + - max-age=2592000 + transfer-encoding: + - chunked + x-processing-time: + - 27ms + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/communication/azure-communication-identity/tests/recordings/test_communication_identity_client.test_revoke_tokens.yaml b/sdk/communication/azure-communication-identity/tests/recordings/test_communication_identity_client.test_revoke_tokens.yaml new file mode 100644 index 000000000000..5e79664fa87f --- /dev/null +++ b/sdk/communication/azure-communication-identity/tests/recordings/test_communication_identity_client.test_revoke_tokens.yaml @@ -0,0 +1,122 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + Date: + - Tue, 22 Dec 2020 18:34:17 GMT + User-Agent: + - azsdk-python-communication-administration/1.0.0b4 Python/3.8.5 (Windows-10-10.0.19041-SP0) + x-ms-return-client-request-id: + - 'true' + method: POST + uri: https://communicationegrcrs.communication.azure.com/identities?api-version=2020-07-20-preview2 + response: + body: + string: '{"id": "sanitized"}' + headers: + api-supported-versions: + - 2020-01-15-preview3, 2020-07-20-preview1, 2020-07-20-preview2 + content-type: + - application/json; charset=utf-8 + date: + - Tue, 22 Dec 2020 18:34:16 GMT + ms-cv: + - ZDSP6Prb6UGYOTBLvb6AdQ.0 + strict-transport-security: + - max-age=2592000 + transfer-encoding: + - chunked + x-processing-time: + - 23ms + status: + code: 200 + message: OK +- request: + body: '{"scopes": ["chat"]}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '20' + Content-Type: + - application/json + Date: + - Tue, 22 Dec 2020 18:34:18 GMT + User-Agent: + - azsdk-python-communication-administration/1.0.0b4 Python/3.8.5 (Windows-10-10.0.19041-SP0) + x-ms-return-client-request-id: + - 'true' + method: POST + uri: https://communicationegrcrs.communication.azure.com/identities/sanitized/token?api-version=2020-07-20-preview2 + response: + body: + string: '{"id": "sanitized", "token": "sanitized", "expiresOn": "2020-12-23T18:34:15.7537392+00:00"}' + headers: + api-supported-versions: + - 2020-01-15-preview3, 2020-07-20-preview1, 2020-07-20-preview2 + content-type: + - application/json; charset=utf-8 + date: + - Tue, 22 Dec 2020 18:34:16 GMT + ms-cv: + - Hmv1R+jifUSsezIU2yJU8Q.0 + strict-transport-security: + - max-age=2592000 + transfer-encoding: + - chunked + x-processing-time: + - 31ms + status: + code: 200 + message: OK +- request: + body: '{}' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '2' + Content-Type: + - application/merge-patch+json + Date: + - Tue, 22 Dec 2020 18:34:18 GMT + User-Agent: + - azsdk-python-communication-administration/1.0.0b4 Python/3.8.5 (Windows-10-10.0.19041-SP0) + x-ms-return-client-request-id: + - 'true' + method: PATCH + uri: https://communicationegrcrs.communication.azure.com/identities/sanitized?api-version=2020-07-20-preview2 + response: + body: + string: '' + headers: + api-supported-versions: + - 2020-01-15-preview3, 2020-07-20-preview1, 2020-07-20-preview2 + date: + - Tue, 22 Dec 2020 18:34:16 GMT + ms-cv: + - vwznKj2MY0qO9HTJ9YWIRw.0 + strict-transport-security: + - max-age=2592000 + x-processing-time: + - 11ms + status: + code: 204 + message: No Content +version: 1 diff --git a/sdk/communication/azure-communication-identity/tests/recordings/test_communication_identity_client.test_revoke_tokens_from_managed_identity.yaml b/sdk/communication/azure-communication-identity/tests/recordings/test_communication_identity_client.test_revoke_tokens_from_managed_identity.yaml new file mode 100644 index 000000000000..853de6129c9d --- /dev/null +++ b/sdk/communication/azure-communication-identity/tests/recordings/test_communication_identity_client.test_revoke_tokens_from_managed_identity.yaml @@ -0,0 +1,110 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '0' + User-Agent: + - azsdk-python-communication-administration/1.0.0b4 Python/3.8.5 (Windows-10-10.0.19041-SP0) + method: POST + uri: https://communicationegrcrs.communication.azure.com/identities?api-version=2020-07-20-preview2 + response: + body: + string: '{"id": "sanitized"}' + headers: + api-supported-versions: + - 2020-01-15-preview3, 2020-07-20-preview1, 2020-07-20-preview2 + content-type: + - application/json; charset=utf-8 + date: + - Tue, 22 Dec 2020 18:35:27 GMT + ms-cv: + - QmngflWD+EOVXH7i/FS+iw.0 + strict-transport-security: + - max-age=2592000 + transfer-encoding: + - chunked + x-processing-time: + - 792ms + status: + code: 200 + message: OK +- request: + body: '{"scopes": ["chat"]}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '20' + Content-Type: + - application/json + User-Agent: + - azsdk-python-communication-administration/1.0.0b4 Python/3.8.5 (Windows-10-10.0.19041-SP0) + method: POST + uri: https://communicationegrcrs.communication.azure.com/identities/sanitized/token?api-version=2020-07-20-preview2 + response: + body: + string: '{"id": "sanitized", "token": "sanitized", "expiresOn": "2020-12-23T18:35:27.28321+00:00"}' + headers: + api-supported-versions: + - 2020-01-15-preview3, 2020-07-20-preview1, 2020-07-20-preview2 + content-type: + - application/json; charset=utf-8 + date: + - Tue, 22 Dec 2020 18:35:27 GMT + ms-cv: + - PRIzOxRVQkycMUEl6WNjHw.0 + strict-transport-security: + - max-age=2592000 + transfer-encoding: + - chunked + x-processing-time: + - 30ms + status: + code: 200 + message: OK +- request: + body: '{}' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '2' + Content-Type: + - application/merge-patch+json + User-Agent: + - azsdk-python-communication-administration/1.0.0b4 Python/3.8.5 (Windows-10-10.0.19041-SP0) + method: PATCH + uri: https://communicationegrcrs.communication.azure.com/identities/sanitized?api-version=2020-07-20-preview2 + response: + body: + string: '' + headers: + api-supported-versions: + - 2020-01-15-preview3, 2020-07-20-preview1, 2020-07-20-preview2 + date: + - Tue, 22 Dec 2020 18:35:27 GMT + ms-cv: + - mUk2cNSJI0e/Nz7J7yCGYg.0 + strict-transport-security: + - max-age=2592000 + x-processing-time: + - 11ms + status: + code: 204 + message: No Content +version: 1 diff --git a/sdk/communication/azure-communication-identity/tests/recordings/test_communication_identity_client_async.test_create_user.yaml b/sdk/communication/azure-communication-identity/tests/recordings/test_communication_identity_client_async.test_create_user.yaml new file mode 100644 index 000000000000..744fbd017292 --- /dev/null +++ b/sdk/communication/azure-communication-identity/tests/recordings/test_communication_identity_client_async.test_create_user.yaml @@ -0,0 +1,30 @@ +interactions: +- request: + body: '' + headers: + Accept: + - application/json + Date: + - Tue, 22 Dec 2020 18:48:56 GMT + User-Agent: + - azsdk-python-communication-administration/1.0.0b4 Python/3.8.5 (Windows-10-10.0.19041-SP0) + x-ms-return-client-request-id: + - 'true' + method: POST + uri: https://communicationegrcrs.communication.azure.com/identities?api-version=2020-07-20-preview2 + response: + body: + string: '{"id": "sanitized"}' + headers: + api-supported-versions: 2020-01-15-preview3, 2020-07-20-preview1, 2020-07-20-preview2 + content-type: application/json; charset=utf-8 + date: Tue, 22 Dec 2020 18:48:54 GMT + ms-cv: vfIkgQk+J0OWSV4P3J1i0w.0 + strict-transport-security: max-age=2592000 + transfer-encoding: chunked + x-processing-time: 22ms + status: + code: 200 + message: OK + url: https://communicationtrnhzmurqrr.communication.azure.com/identities?api-version=2020-07-20-preview2 +version: 1 diff --git a/sdk/communication/azure-communication-identity/tests/recordings/test_communication_identity_client_async.test_create_user_from_managed_identity.yaml b/sdk/communication/azure-communication-identity/tests/recordings/test_communication_identity_client_async.test_create_user_from_managed_identity.yaml new file mode 100644 index 000000000000..883eb09da417 --- /dev/null +++ b/sdk/communication/azure-communication-identity/tests/recordings/test_communication_identity_client_async.test_create_user_from_managed_identity.yaml @@ -0,0 +1,26 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + User-Agent: + - azsdk-python-communication-administration/1.0.0b4 Python/3.8.5 (Windows-10-10.0.19041-SP0) + method: POST + uri: https://communicationegrcrs.communication.azure.com/identities?api-version=2020-07-20-preview2 + response: + body: + string: '{"id": "sanitized"}' + headers: + api-supported-versions: 2020-01-15-preview3, 2020-07-20-preview1, 2020-07-20-preview2 + content-type: application/json; charset=utf-8 + date: Tue, 22 Dec 2020 18:50:04 GMT + ms-cv: fj3guox5CUSvTCDG5gI0YA.0 + strict-transport-security: max-age=2592000 + transfer-encoding: chunked + x-processing-time: 534ms + status: + code: 200 + message: OK + url: https://communicationr7rdwwqs74n.communication.azure.com/identities?api-version=2020-07-20-preview2 +version: 1 diff --git a/sdk/communication/azure-communication-identity/tests/recordings/test_communication_identity_client_async.test_delete_user.yaml b/sdk/communication/azure-communication-identity/tests/recordings/test_communication_identity_client_async.test_delete_user.yaml new file mode 100644 index 000000000000..46f6bc7da32e --- /dev/null +++ b/sdk/communication/azure-communication-identity/tests/recordings/test_communication_identity_client_async.test_delete_user.yaml @@ -0,0 +1,54 @@ +interactions: +- request: + body: '' + headers: + Accept: + - application/json + Date: + - Tue, 22 Dec 2020 18:51:13 GMT + User-Agent: + - azsdk-python-communication-administration/1.0.0b4 Python/3.8.5 (Windows-10-10.0.19041-SP0) + x-ms-return-client-request-id: + - 'true' + method: POST + uri: https://communicationegrcrs.communication.azure.com/identities?api-version=2020-07-20-preview2 + response: + body: + string: '{"id": "sanitized"}' + headers: + api-supported-versions: 2020-01-15-preview3, 2020-07-20-preview1, 2020-07-20-preview2 + content-type: application/json; charset=utf-8 + date: Tue, 22 Dec 2020 18:51:12 GMT + ms-cv: dHk7/E5BhUSf+g3Bkg94YQ.0 + strict-transport-security: max-age=2592000 + transfer-encoding: chunked + x-processing-time: 22ms + status: + code: 200 + message: OK + url: https://communication42hz4pfbosr.communication.azure.com/identities?api-version=2020-07-20-preview2 +- request: + body: '' + headers: + Date: + - Tue, 22 Dec 2020 18:51:14 GMT + User-Agent: + - azsdk-python-communication-administration/1.0.0b4 Python/3.8.5 (Windows-10-10.0.19041-SP0) + x-ms-return-client-request-id: + - 'true' + method: DELETE + uri: https://communicationegrcrs.communication.azure.com/identities/sanitized?api-version=2020-07-20-preview2 + response: + body: + string: '' + headers: + api-supported-versions: 2020-01-15-preview3, 2020-07-20-preview1, 2020-07-20-preview2 + date: Tue, 22 Dec 2020 18:51:12 GMT + ms-cv: 3DnY9x3jNUGrGnsi3LP0SA.0 + strict-transport-security: max-age=2592000 + x-processing-time: 440ms + status: + code: 204 + message: No Content + url: https://communication42hz4pfbosr.communication.azure.com/identities/sanitized?api-version=2020-07-20-preview2 +version: 1 diff --git a/sdk/communication/azure-communication-identity/tests/recordings/test_communication_identity_client_async.test_delete_user_from_managed_identity.yaml b/sdk/communication/azure-communication-identity/tests/recordings/test_communication_identity_client_async.test_delete_user_from_managed_identity.yaml new file mode 100644 index 000000000000..3d5253742e18 --- /dev/null +++ b/sdk/communication/azure-communication-identity/tests/recordings/test_communication_identity_client_async.test_delete_user_from_managed_identity.yaml @@ -0,0 +1,46 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + User-Agent: + - azsdk-python-communication-administration/1.0.0b4 Python/3.8.5 (Windows-10-10.0.19041-SP0) + method: POST + uri: https://communicationegrcrs.communication.azure.com/identities?api-version=2020-07-20-preview2 + response: + body: + string: '{"id": "sanitized"}' + headers: + api-supported-versions: 2020-01-15-preview3, 2020-07-20-preview1, 2020-07-20-preview2 + content-type: application/json; charset=utf-8 + date: Tue, 22 Dec 2020 18:52:27 GMT + ms-cv: ww9tz7CpG0SXqqYPyV70Cw.0 + strict-transport-security: max-age=2592000 + transfer-encoding: chunked + x-processing-time: 192ms + status: + code: 200 + message: OK + url: https://communicationrscjfarclwr.communication.azure.com/identities?api-version=2020-07-20-preview2 +- request: + body: null + headers: + User-Agent: + - azsdk-python-communication-administration/1.0.0b4 Python/3.8.5 (Windows-10-10.0.19041-SP0) + method: DELETE + uri: https://communicationegrcrs.communication.azure.com/identities/sanitized?api-version=2020-07-20-preview2 + response: + body: + string: '' + headers: + api-supported-versions: 2020-01-15-preview3, 2020-07-20-preview1, 2020-07-20-preview2 + date: Tue, 22 Dec 2020 18:52:28 GMT + ms-cv: baDrTbu3H0qpWj2TJSno0A.0 + strict-transport-security: max-age=2592000 + x-processing-time: 864ms + status: + code: 204 + message: No Content + url: https://communicationrscjfarclwr.communication.azure.com/identities/sanitized?api-version=2020-07-20-preview2 +version: 1 diff --git a/sdk/communication/azure-communication-identity/tests/recordings/test_communication_identity_client_async.test_issue_token.yaml b/sdk/communication/azure-communication-identity/tests/recordings/test_communication_identity_client_async.test_issue_token.yaml new file mode 100644 index 000000000000..fce3ec17e7e1 --- /dev/null +++ b/sdk/communication/azure-communication-identity/tests/recordings/test_communication_identity_client_async.test_issue_token.yaml @@ -0,0 +1,62 @@ +interactions: +- request: + body: '' + headers: + Accept: + - application/json + Date: + - Tue, 22 Dec 2020 18:53:37 GMT + User-Agent: + - azsdk-python-communication-administration/1.0.0b4 Python/3.8.5 (Windows-10-10.0.19041-SP0) + x-ms-return-client-request-id: + - 'true' + method: POST + uri: https://communicationegrcrs.communication.azure.com/identities?api-version=2020-07-20-preview2 + response: + body: + string: '{"id": "sanitized"}' + headers: + api-supported-versions: 2020-01-15-preview3, 2020-07-20-preview1, 2020-07-20-preview2 + content-type: application/json; charset=utf-8 + date: Tue, 22 Dec 2020 18:53:36 GMT + ms-cv: Agl32miSq0CTEladXG7lbw.0 + strict-transport-security: max-age=2592000 + transfer-encoding: chunked + x-processing-time: 20ms + status: + code: 200 + message: OK + url: https://communicatione77tfh7y2ht.communication.azure.com/identities?api-version=2020-07-20-preview2 +- request: + body: '{"scopes": ["chat"]}' + headers: + Accept: + - application/json + Content-Length: + - '20' + Content-Type: + - application/json + Date: + - Tue, 22 Dec 2020 18:53:38 GMT + User-Agent: + - azsdk-python-communication-administration/1.0.0b4 Python/3.8.5 (Windows-10-10.0.19041-SP0) + x-ms-return-client-request-id: + - 'true' + method: POST + uri: https://communicationegrcrs.communication.azure.com/identities/sanitized/token?api-version=2020-07-20-preview2 + response: + body: + string: '{"id": "sanitized", "token": "sanitized", "expiresOn": "2020-12-23T18:53:35.7585148+00:00"}' + headers: + api-supported-versions: 2020-01-15-preview3, 2020-07-20-preview1, 2020-07-20-preview2 + content-type: application/json; charset=utf-8 + date: Tue, 22 Dec 2020 18:53:36 GMT + ms-cv: P3rSrWhwykmJcOW+Yb8Q2w.0 + strict-transport-security: max-age=2592000 + transfer-encoding: chunked + x-processing-time: 26ms + status: + code: 200 + message: OK + url: https://communicatione77tfh7y2ht.communication.azure.com/identities/sanitized/token?api-version=2020-07-20-preview2 +version: 1 diff --git a/sdk/communication/azure-communication-identity/tests/recordings/test_communication_identity_client_async.test_issue_token_from_managed_identity.yaml b/sdk/communication/azure-communication-identity/tests/recordings/test_communication_identity_client_async.test_issue_token_from_managed_identity.yaml new file mode 100644 index 000000000000..44a889e13df3 --- /dev/null +++ b/sdk/communication/azure-communication-identity/tests/recordings/test_communication_identity_client_async.test_issue_token_from_managed_identity.yaml @@ -0,0 +1,54 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + User-Agent: + - azsdk-python-communication-administration/1.0.0b4 Python/3.8.5 (Windows-10-10.0.19041-SP0) + method: POST + uri: https://communicationegrcrs.communication.azure.com/identities?api-version=2020-07-20-preview2 + response: + body: + string: '{"id": "sanitized"}' + headers: + api-supported-versions: 2020-01-15-preview3, 2020-07-20-preview1, 2020-07-20-preview2 + content-type: application/json; charset=utf-8 + date: Tue, 22 Dec 2020 18:54:45 GMT + ms-cv: UywF8dbxrkyYXGTozRnuIw.0 + strict-transport-security: max-age=2592000 + transfer-encoding: chunked + x-processing-time: 773ms + status: + code: 200 + message: OK + url: https://communicationztg2acjbipc.communication.azure.com/identities?api-version=2020-07-20-preview2 +- request: + body: '{"scopes": ["chat"]}' + headers: + Accept: + - application/json + Content-Length: + - '20' + Content-Type: + - application/json + User-Agent: + - azsdk-python-communication-administration/1.0.0b4 Python/3.8.5 (Windows-10-10.0.19041-SP0) + method: POST + uri: https://communicationegrcrs.communication.azure.com/identities/sanitized/token?api-version=2020-07-20-preview2 + response: + body: + string: '{"id": "sanitized", "token": "sanitized", "expiresOn": "2020-12-23T18:54:45.1115885+00:00"}' + headers: + api-supported-versions: 2020-01-15-preview3, 2020-07-20-preview1, 2020-07-20-preview2 + content-type: application/json; charset=utf-8 + date: Tue, 22 Dec 2020 18:54:45 GMT + ms-cv: ywaIOOtf9EiQs6pibQmCwg.0 + strict-transport-security: max-age=2592000 + transfer-encoding: chunked + x-processing-time: 25ms + status: + code: 200 + message: OK + url: https://communicationztg2acjbipc.communication.azure.com/identities/sanitized/token?api-version=2020-07-20-preview2 +version: 1 diff --git a/sdk/communication/azure-communication-identity/tests/recordings/test_communication_identity_client_async.test_revoke_tokens.yaml b/sdk/communication/azure-communication-identity/tests/recordings/test_communication_identity_client_async.test_revoke_tokens.yaml new file mode 100644 index 000000000000..cefb985a000f --- /dev/null +++ b/sdk/communication/azure-communication-identity/tests/recordings/test_communication_identity_client_async.test_revoke_tokens.yaml @@ -0,0 +1,90 @@ +interactions: +- request: + body: '' + headers: + Accept: + - application/json + Date: + - Tue, 22 Dec 2020 18:55:56 GMT + User-Agent: + - azsdk-python-communication-administration/1.0.0b4 Python/3.8.5 (Windows-10-10.0.19041-SP0) + x-ms-return-client-request-id: + - 'true' + method: POST + uri: https://communicationegrcrs.communication.azure.com/identities?api-version=2020-07-20-preview2 + response: + body: + string: '{"id": "sanitized"}' + headers: + api-supported-versions: 2020-01-15-preview3, 2020-07-20-preview1, 2020-07-20-preview2 + content-type: application/json; charset=utf-8 + date: Tue, 22 Dec 2020 18:55:55 GMT + ms-cv: M9b8kGAz8UGwsoZe2mFLCA.0 + strict-transport-security: max-age=2592000 + transfer-encoding: chunked + x-processing-time: 29ms + status: + code: 200 + message: OK + url: https://communicationngn6p2kywhg.communication.azure.com/identities?api-version=2020-07-20-preview2 +- request: + body: '{"scopes": ["chat"]}' + headers: + Accept: + - application/json + Content-Length: + - '20' + Content-Type: + - application/json + Date: + - Tue, 22 Dec 2020 18:55:57 GMT + User-Agent: + - azsdk-python-communication-administration/1.0.0b4 Python/3.8.5 (Windows-10-10.0.19041-SP0) + x-ms-return-client-request-id: + - 'true' + method: POST + uri: https://communicationegrcrs.communication.azure.com/identities/sanitized/token?api-version=2020-07-20-preview2 + response: + body: + string: '{"id": "sanitized", "token": "sanitized", "expiresOn": "2020-12-23T18:55:54.788117+00:00"}' + headers: + api-supported-versions: 2020-01-15-preview3, 2020-07-20-preview1, 2020-07-20-preview2 + content-type: application/json; charset=utf-8 + date: Tue, 22 Dec 2020 18:55:55 GMT + ms-cv: MBCUlMoRBECvCLmV00eWXw.0 + strict-transport-security: max-age=2592000 + transfer-encoding: chunked + x-processing-time: 27ms + status: + code: 200 + message: OK + url: https://communicationngn6p2kywhg.communication.azure.com/identities/sanitized/token?api-version=2020-07-20-preview2 +- request: + body: '{}' + headers: + Content-Length: + - '2' + Content-Type: + - application/merge-patch+json + Date: + - Tue, 22 Dec 2020 18:55:57 GMT + User-Agent: + - azsdk-python-communication-administration/1.0.0b4 Python/3.8.5 (Windows-10-10.0.19041-SP0) + x-ms-return-client-request-id: + - 'true' + method: PATCH + uri: https://communicationegrcrs.communication.azure.com/identities/sanitized?api-version=2020-07-20-preview2 + response: + body: + string: '' + headers: + api-supported-versions: 2020-01-15-preview3, 2020-07-20-preview1, 2020-07-20-preview2 + date: Tue, 22 Dec 2020 18:55:55 GMT + ms-cv: MVgoSrOVSkiU0c+teqMDZQ.0 + strict-transport-security: max-age=2592000 + x-processing-time: 10ms + status: + code: 204 + message: No Content + url: https://communicationngn6p2kywhg.communication.azure.com/identities/sanitized?api-version=2020-07-20-preview2 +version: 1 diff --git a/sdk/communication/azure-communication-identity/tests/recordings/test_communication_identity_client_async.test_revoke_tokens_from_managed_identity.yaml b/sdk/communication/azure-communication-identity/tests/recordings/test_communication_identity_client_async.test_revoke_tokens_from_managed_identity.yaml new file mode 100644 index 000000000000..23b4c57c9632 --- /dev/null +++ b/sdk/communication/azure-communication-identity/tests/recordings/test_communication_identity_client_async.test_revoke_tokens_from_managed_identity.yaml @@ -0,0 +1,78 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + User-Agent: + - azsdk-python-communication-administration/1.0.0b4 Python/3.8.5 (Windows-10-10.0.19041-SP0) + method: POST + uri: https://communicationegrcrs.communication.azure.com/identities?api-version=2020-07-20-preview2 + response: + body: + string: '{"id": "sanitized"}' + headers: + api-supported-versions: 2020-01-15-preview3, 2020-07-20-preview1, 2020-07-20-preview2 + content-type: application/json; charset=utf-8 + date: Tue, 22 Dec 2020 18:57:03 GMT + ms-cv: a9v8/cRgN0uyuQQUguwkGA.0 + strict-transport-security: max-age=2592000 + transfer-encoding: chunked + x-processing-time: 195ms + status: + code: 200 + message: OK + url: https://communicationxheui257vce.communication.azure.com/identities?api-version=2020-07-20-preview2 +- request: + body: '{"scopes": ["chat"]}' + headers: + Accept: + - application/json + Content-Length: + - '20' + Content-Type: + - application/json + User-Agent: + - azsdk-python-communication-administration/1.0.0b4 Python/3.8.5 (Windows-10-10.0.19041-SP0) + method: POST + uri: https://communicationegrcrs.communication.azure.com/identities/sanitized/token?api-version=2020-07-20-preview2 + response: + body: + string: '{"id": "sanitized", "token": "sanitized", "expiresOn": "2020-12-23T18:57:03.4428768+00:00"}' + headers: + api-supported-versions: 2020-01-15-preview3, 2020-07-20-preview1, 2020-07-20-preview2 + content-type: application/json; charset=utf-8 + date: Tue, 22 Dec 2020 18:57:03 GMT + ms-cv: Oc9n/N0oA0mLVBlk8UaTpw.0 + strict-transport-security: max-age=2592000 + transfer-encoding: chunked + x-processing-time: 24ms + status: + code: 200 + message: OK + url: https://communicationxheui257vce.communication.azure.com/identities/sanitized/token?api-version=2020-07-20-preview2 +- request: + body: '{}' + headers: + Content-Length: + - '2' + Content-Type: + - application/merge-patch+json + User-Agent: + - azsdk-python-communication-administration/1.0.0b4 Python/3.8.5 (Windows-10-10.0.19041-SP0) + method: PATCH + uri: https://communicationegrcrs.communication.azure.com/identities/sanitized?api-version=2020-07-20-preview2 + response: + body: + string: '' + headers: + api-supported-versions: 2020-01-15-preview3, 2020-07-20-preview1, 2020-07-20-preview2 + date: Tue, 22 Dec 2020 18:57:03 GMT + ms-cv: lBOoIDU5lUe2vbpjz5+Gkg.0 + strict-transport-security: max-age=2592000 + x-processing-time: 11ms + status: + code: 204 + message: No Content + url: https://communicationxheui257vce.communication.azure.com/identities/sanitized?api-version=2020-07-20-preview2 +version: 1 diff --git a/sdk/communication/azure-communication-identity/tests/test_communication_identity_client.py b/sdk/communication/azure-communication-identity/tests/test_communication_identity_client.py new file mode 100644 index 000000000000..9fc58152be3c --- /dev/null +++ b/sdk/communication/azure-communication-identity/tests/test_communication_identity_client.py @@ -0,0 +1,141 @@ +# 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 pytest +from azure.communication.identity import CommunicationIdentityClient +from azure.core.credentials import AccessToken +from _shared.helper import URIIdentityReplacer +from _shared.testcase import ( + CommunicationTestCase, + BodyReplacerProcessor +) +from devtools_testutils import ResourceGroupPreparer +from _shared.communication_service_preparer import CommunicationServicePreparer +from azure.identity import DefaultAzureCredential +from azure.communication.identity._shared.utils import parse_connection_str + +class FakeTokenCredential(object): + def __init__(self): + self.token = AccessToken("Fake Token", 0) + + def get_token(self, *args): + return self.token +class CommunicationIdentityClientTest(CommunicationTestCase): + def setUp(self): + super(CommunicationIdentityClientTest, self).setUp() + self.recording_processors.extend([ + BodyReplacerProcessor(keys=["id", "token"]), + URIIdentityReplacer()]) + + @ResourceGroupPreparer(random_name_enabled=True) + @CommunicationServicePreparer() + def test_create_user_from_managed_identity(self, connection_string): + endpoint, access_key = parse_connection_str(connection_string) + from devtools_testutils import is_live + if not is_live(): + credential = FakeTokenCredential() + else: + credential = DefaultAzureCredential() + identity_client = CommunicationIdentityClient(endpoint, credential) + user = identity_client.create_user() + + assert user.identifier is not None + + @ResourceGroupPreparer(random_name_enabled=True) + @CommunicationServicePreparer() + def test_create_user(self, connection_string): + identity_client = CommunicationIdentityClient.from_connection_string( + connection_string) + user = identity_client.create_user() + + assert user.identifier is not None + + @ResourceGroupPreparer(random_name_enabled=True) + @CommunicationServicePreparer() + def test_issue_token_from_managed_identity(self, connection_string): + endpoint, access_key = parse_connection_str(connection_string) + from devtools_testutils import is_live + if not is_live(): + credential = FakeTokenCredential() + else: + credential = DefaultAzureCredential() + identity_client = CommunicationIdentityClient(endpoint, credential) + user = identity_client.create_user() + + token_response = identity_client.issue_token(user, scopes=["chat"]) + + assert user.identifier is not None + assert token_response.token is not None + + @ResourceGroupPreparer(random_name_enabled=True) + @CommunicationServicePreparer() + def test_issue_token(self, connection_string): + identity_client = CommunicationIdentityClient.from_connection_string( + connection_string) + user = identity_client.create_user() + + token_response = identity_client.issue_token(user, scopes=["chat"]) + + assert user.identifier is not None + assert token_response.token is not None + + @ResourceGroupPreparer(random_name_enabled=True) + @CommunicationServicePreparer() + def test_revoke_tokens_from_managed_identity(self, connection_string): + endpoint, access_key = parse_connection_str(connection_string) + from devtools_testutils import is_live + if not is_live(): + credential = FakeTokenCredential() + else: + credential = DefaultAzureCredential() + identity_client = CommunicationIdentityClient(endpoint, credential) + user = identity_client.create_user() + + token_response = identity_client.issue_token(user, scopes=["chat"]) + identity_client.revoke_tokens(user) + + assert user.identifier is not None + assert token_response.token is not None + + @ResourceGroupPreparer(random_name_enabled=True) + @CommunicationServicePreparer() + def test_revoke_tokens(self, connection_string): + identity_client = CommunicationIdentityClient.from_connection_string( + connection_string) + user = identity_client.create_user() + + token_response = identity_client.issue_token(user, scopes=["chat"]) + identity_client.revoke_tokens(user) + + assert user.identifier is not None + assert token_response.token is not None + + @ResourceGroupPreparer(random_name_enabled=True) + @CommunicationServicePreparer() + def test_delete_user_from_managed_identity(self, connection_string): + endpoint, access_key = parse_connection_str(connection_string) + from devtools_testutils import is_live + if not is_live(): + credential = FakeTokenCredential() + else: + credential = DefaultAzureCredential() + identity_client = CommunicationIdentityClient(endpoint, credential) + user = identity_client.create_user() + + identity_client.delete_user(user) + + assert user.identifier is not None + + @ResourceGroupPreparer(random_name_enabled=True) + @CommunicationServicePreparer() + def test_delete_user(self, connection_string): + identity_client = CommunicationIdentityClient.from_connection_string( + connection_string) + user = identity_client.create_user() + + identity_client.delete_user(user) + + assert user.identifier is not None diff --git a/sdk/communication/azure-communication-identity/tests/test_communication_identity_client_async.py b/sdk/communication/azure-communication-identity/tests/test_communication_identity_client_async.py new file mode 100644 index 000000000000..0dafc2b5b76c --- /dev/null +++ b/sdk/communication/azure-communication-identity/tests/test_communication_identity_client_async.py @@ -0,0 +1,138 @@ +# 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 pytest +from azure.core.credentials import AccessToken +from azure.communication.identity.aio import CommunicationIdentityClient +from azure.communication.identity._shared.utils import parse_connection_str +from azure_devtools.scenario_tests import RecordingProcessor +from devtools_testutils import ResourceGroupPreparer +from _shared.helper import URIIdentityReplacer +from _shared.asynctestcase import AsyncCommunicationTestCase +from _shared.testcase import BodyReplacerProcessor +from _shared.communication_service_preparer import CommunicationServicePreparer +from azure.identity import DefaultAzureCredential + +class FakeTokenCredential(object): + def __init__(self): + self.token = AccessToken("Fake Token", 0) + + def get_token(self, *args): + return self.token +class CommunicationIdentityClientTestAsync(AsyncCommunicationTestCase): + def setUp(self): + super(CommunicationIdentityClientTestAsync, self).setUp() + self.recording_processors.extend([ + BodyReplacerProcessor(keys=["id", "token"]), + URIIdentityReplacer()]) + + @ResourceGroupPreparer(random_name_enabled=True) + @CommunicationServicePreparer() + async def test_create_user_from_managed_identity(self, connection_string): + endpoint, access_key = parse_connection_str(connection_string) + from devtools_testutils import is_live + if not is_live(): + credential = FakeTokenCredential() + else: + credential = DefaultAzureCredential() + identity_client = CommunicationIdentityClient(endpoint, credential) + async with identity_client: + user = await identity_client.create_user() + + assert user.identifier is not None + + @ResourceGroupPreparer(random_name_enabled=True) + @CommunicationServicePreparer() + async def test_create_user(self, connection_string): + identity_client = CommunicationIdentityClient.from_connection_string(connection_string) + async with identity_client: + user = await identity_client.create_user() + + assert user.identifier is not None + + @ResourceGroupPreparer(random_name_enabled=True) + @CommunicationServicePreparer() + async def test_issue_token_from_managed_identity(self, connection_string): + endpoint, access_key = parse_connection_str(connection_string) + from devtools_testutils import is_live + if not is_live(): + credential = FakeTokenCredential() + else: + credential = DefaultAzureCredential() + identity_client = CommunicationIdentityClient(endpoint, credential) + async with identity_client: + user = await identity_client.create_user() + token_response = await identity_client.issue_token(user, scopes=["chat"]) + + assert user.identifier is not None + assert token_response.token is not None + + @ResourceGroupPreparer(random_name_enabled=True) + @CommunicationServicePreparer() + async def test_issue_token(self, connection_string): + identity_client = CommunicationIdentityClient.from_connection_string(connection_string) + async with identity_client: + user = await identity_client.create_user() + token_response = await identity_client.issue_token(user, scopes=["chat"]) + + assert user.identifier is not None + assert token_response.token is not None + + @ResourceGroupPreparer(random_name_enabled=True) + @CommunicationServicePreparer() + async def test_revoke_tokens_from_managed_identity(self, connection_string): + endpoint, access_key = parse_connection_str(connection_string) + from devtools_testutils import is_live + if not is_live(): + credential = FakeTokenCredential() + else: + credential = DefaultAzureCredential() + identity_client = CommunicationIdentityClient(endpoint, credential) + async with identity_client: + user = await identity_client.create_user() + token_response = await identity_client.issue_token(user, scopes=["chat"]) + await identity_client.revoke_tokens(user) + + assert user.identifier is not None + assert token_response.token is not None + + @ResourceGroupPreparer(random_name_enabled=True) + @CommunicationServicePreparer() + async def test_revoke_tokens(self, connection_string): + identity_client = CommunicationIdentityClient.from_connection_string(connection_string) + async with identity_client: + user = await identity_client.create_user() + token_response = await identity_client.issue_token(user, scopes=["chat"]) + await identity_client.revoke_tokens(user) + + assert user.identifier is not None + assert token_response.token is not None + + @ResourceGroupPreparer(random_name_enabled=True) + @CommunicationServicePreparer() + async def test_delete_user_from_managed_identity(self, connection_string): + endpoint, access_key = parse_connection_str(connection_string) + from devtools_testutils import is_live + if not is_live(): + credential = FakeTokenCredential() + else: + credential = DefaultAzureCredential() + identity_client = CommunicationIdentityClient(endpoint, credential) + async with identity_client: + user = await identity_client.create_user() + await identity_client.delete_user(user) + + assert user.identifier is not None + + @ResourceGroupPreparer(random_name_enabled=True) + @CommunicationServicePreparer() + async def test_delete_user(self, connection_string): + identity_client = CommunicationIdentityClient.from_connection_string(connection_string) + async with identity_client: + user = await identity_client.create_user() + await identity_client.delete_user(user) + + assert user.identifier is not None diff --git a/sdk/communication/azure-communication-identity/tests/user_credential_tests.py b/sdk/communication/azure-communication-identity/tests/user_credential_tests.py new file mode 100644 index 000000000000..dddacc8784af --- /dev/null +++ b/sdk/communication/azure-communication-identity/tests/user_credential_tests.py @@ -0,0 +1,61 @@ +# ------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +from unittest import TestCase +from unittest.mock import MagicMock +from azure.communication.identity._shared.user_credential import CommunicationTokenCredential +from azure.communication.identity._shared.user_token_refresh_options import CommunicationTokenRefreshOptions +from azure.communication.identity._shared.utils import create_access_token + + +class TestCommunicationTokenCredential(TestCase): + sample_token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9."+\ + "eyJleHAiOjMyNTAzNjgwMDAwfQ.9i7FNNHHJT8cOzo-yrAUJyBSfJ-tPPk2emcHavOEpWc" + sample_token_expiry = 32503680000 + expired_token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9."+\ + "eyJleHAiOjEwMH0.1h_scYkNp-G98-O4cW6KvfJZwiz54uJMyeDACE4nypg" + + + def test_communicationtokencredential_decodes_token(self): + refresh_options = CommunicationTokenRefreshOptions(self.sample_token) + credential = CommunicationTokenCredential(refresh_options) + access_token = credential.get_token() + + self.assertEqual(access_token.token, self.sample_token) + + def test_communicationtokencredential_throws_if_invalid_token(self): + refresh_options = CommunicationTokenRefreshOptions("foo.bar.tar") + self.assertRaises(ValueError, lambda: CommunicationTokenCredential(refresh_options)) + + def test_communicationtokencredential_throws_if_nonstring_token(self): + refresh_options = CommunicationTokenRefreshOptions(454): + self.assertRaises(TypeError, lambda: CommunicationTokenCredential(refresh_options) + + def test_communicationtokencredential_static_token_returns_expired_token(self): + refresh_options = CommunicationTokenRefreshOptions(self.expired_token) + credential = CommunicationTokenCredential(refresh_options) + + self.assertEqual(credential.get_token().token, self.expired_token) + + def test_communicationtokencredential_token_expired_refresh_called(self): + refresher = MagicMock(return_value=self.sample_token) + refresh_options = CommunicationTokenRefreshOptions(self.sample_token, refresher) + access_token = CommunicationTokenCredential( + self.expired_token, + token_refresher=refresher).get_token() + refresher.assert_called_once() + self.assertEqual(access_token, self.sample_token) + + + def test_communicationtokencredential_token_expired_refresh_called_asnecessary(self): + refresher = MagicMock(return_value=create_access_token(self.expired_token)) + refresh_options = CommunicationTokenRefreshOptions(self.expired_token, refresher) + credential = CommunicationTokenCredential(refresh_options) + + credential.get_token() + access_token = credential.get_token() + + self.assertEqual(refresher.call_count, 2) + self.assertEqual(access_token.token, self.expired_token)