Skip to content

Commit 71ec767

Browse files
authored
[Key Vault] Target multiple API versions with tests (secrets) (Azure#18183)
1 parent 3db207d commit 71ec767

File tree

102 files changed

+135066
-20531
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

102 files changed

+135066
-20531
lines changed

sdk/keyvault/azure-keyvault-secrets/dev_requirements.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,5 @@
44
-e ../azure-mgmt-keyvault
55
-e ../../../tools/azure-sdk-tools
66
../azure-keyvault-nspkg
7-
aiohttp>=3.0; python_version >= '3.5'
7+
aiohttp>=3.0; python_version >= '3.5'
8+
parameterized>=0.7.3
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
# ------------------------------------
2+
# Copyright (c) Microsoft Corporation.
3+
# Licensed under the MIT License.
4+
# ------------------------------------
5+
import functools
6+
7+
from azure.keyvault.secrets import ApiVersion
8+
from azure.keyvault.secrets._shared import HttpChallengeCache
9+
from azure.keyvault.secrets._shared.client_base import DEFAULT_VERSION
10+
from devtools_testutils import AzureTestCase, PowerShellPreparer
11+
from parameterized import parameterized, param
12+
import pytest
13+
14+
15+
def client_setup(testcase_func):
16+
"""decorator that creates a client to be passed in to a test method"""
17+
@PowerShellPreparer("keyvault", azure_keyvault_url="https://vaultname.vault.azure.net")
18+
@functools.wraps(testcase_func)
19+
def wrapper(test_class_instance, azure_keyvault_url, api_version, **kwargs):
20+
test_class_instance._skip_if_not_configured(api_version)
21+
client = test_class_instance.create_client(azure_keyvault_url, api_version=api_version, **kwargs)
22+
23+
if kwargs.get("is_async"):
24+
import asyncio
25+
26+
coroutine = testcase_func(test_class_instance, client)
27+
loop = asyncio.get_event_loop()
28+
loop.run_until_complete(coroutine)
29+
else:
30+
testcase_func(test_class_instance, client)
31+
return wrapper
32+
33+
34+
def get_decorator(**kwargs):
35+
"""returns a test decorator for test parameterization"""
36+
params = [param(api_version=api_version, **kwargs) for api_version in ApiVersion]
37+
return functools.partial(parameterized.expand, params, name_func=suffixed_test_name)
38+
39+
40+
def suffixed_test_name(testcase_func, param_num, param):
41+
return "{}_{}".format(testcase_func.__name__, parameterized.to_safe_name(param.kwargs.get("api_version")))
42+
43+
44+
class SecretsTestCase(AzureTestCase):
45+
def tearDown(self):
46+
HttpChallengeCache.clear()
47+
assert len(HttpChallengeCache._cache) == 0
48+
super(SecretsTestCase, self).tearDown()
49+
50+
def create_client(self, vault_uri, **kwargs):
51+
if kwargs.pop("is_async", False):
52+
from azure.keyvault.secrets.aio import SecretClient
53+
credential = self.get_credential(SecretClient, is_async=True)
54+
else:
55+
from azure.keyvault.secrets import SecretClient
56+
credential = self.get_credential(SecretClient)
57+
return self.create_client_from_credential(
58+
SecretClient, credential=credential, vault_url=vault_uri, **kwargs
59+
)
60+
61+
def _skip_if_not_configured(self, api_version, **kwargs):
62+
if self.is_live and api_version != DEFAULT_VERSION:
63+
pytest.skip("This test only uses the default API version for live tests")

0 commit comments

Comments
 (0)