Skip to content

Commit e0de5e5

Browse files
authored
[Key Vault] Target multiple API versions with tests (keys) (Azure#18149)
1 parent 3d4527b commit e0de5e5

File tree

332 files changed

+194107
-26388
lines changed

Some content is hidden

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

332 files changed

+194107
-26388
lines changed

sdk/keyvault/azure-keyvault-keys/tests/_test_case.py

Lines changed: 47 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,60 @@
22
# Copyright (c) Microsoft Corporation.
33
# Licensed under the MIT License.
44
# ------------------------------------
5+
import functools
56
import os
67

78
from azure.keyvault.keys._shared import HttpChallengeCache
9+
from azure.keyvault.keys._shared.client_base import ApiVersion, DEFAULT_VERSION
810
from devtools_testutils import AzureTestCase
9-
from parameterized import parameterized
11+
from parameterized import parameterized, param
1012
import pytest
1113
from six.moves.urllib_parse import urlparse
1214

1315

16+
def client_setup(testcase_func):
17+
"""decorator that creates a client to be passed in to a test method"""
18+
@functools.wraps(testcase_func)
19+
def wrapper(test_class_instance, api_version, is_hsm=False, **kwargs):
20+
test_class_instance._skip_if_not_configured(api_version, is_hsm)
21+
endpoint_url = test_class_instance.managed_hsm_url if is_hsm else test_class_instance.vault_url
22+
client = test_class_instance.create_key_client(endpoint_url, api_version=api_version, **kwargs)
23+
24+
if kwargs.get("is_async"):
25+
import asyncio
26+
27+
coroutine = testcase_func(test_class_instance, client, is_hsm=is_hsm)
28+
loop = asyncio.get_event_loop()
29+
loop.run_until_complete(coroutine)
30+
else:
31+
testcase_func(test_class_instance, client, is_hsm=is_hsm)
32+
return wrapper
33+
34+
35+
def get_decorator(hsm_only=False, vault_only=False, **kwargs):
36+
"""returns a test decorator for test parameterization"""
37+
params = [param(api_version=p[0], is_hsm=p[1], **kwargs) for p in get_test_parameters(hsm_only, vault_only)]
38+
return functools.partial(parameterized.expand, params, name_func=suffixed_test_name)
39+
40+
41+
def get_test_parameters(hsm_only=False, vault_only=False):
42+
"""generates a list of parameter pairs for test case parameterization, where [x, y] = [api_version, is_hsm]"""
43+
combinations = []
44+
hsm_supported_versions = {ApiVersion.V7_2_preview}
45+
for api_version in ApiVersion:
46+
if not vault_only and api_version in hsm_supported_versions:
47+
combinations.append([api_version, True])
48+
if not hsm_only:
49+
combinations.append([api_version, False])
50+
return combinations
51+
52+
1453
def suffixed_test_name(testcase_func, param_num, param):
54+
api_version = param.kwargs.get("api_version")
1555
suffix = "mhsm" if param.kwargs.get("is_hsm") else "vault"
16-
return "{}_{}".format(testcase_func.__name__, parameterized.to_safe_name(suffix))
56+
return "{}_{}_{}".format(
57+
testcase_func.__name__, parameterized.to_safe_name(api_version), parameterized.to_safe_name(suffix)
58+
)
1759

1860

1961
class KeysTestCase(AzureTestCase):
@@ -69,6 +111,8 @@ def _set_mgmt_settings_real_values(self):
69111
os.environ["AZURE_CLIENT_ID"] = os.environ["KEYVAULT_CLIENT_ID"]
70112
os.environ["AZURE_CLIENT_SECRET"] = os.environ["KEYVAULT_CLIENT_SECRET"]
71113

72-
def _skip_if_not_configured(self, is_hsm):
114+
def _skip_if_not_configured(self, api_version, is_hsm):
115+
if self.is_live and api_version != DEFAULT_VERSION:
116+
pytest.skip("This test only uses the default API version for live tests")
73117
if self.is_live and is_hsm and self.managed_hsm_url is None:
74118
pytest.skip("No HSM endpoint for live testing")
Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
interactions:
2+
- request:
3+
body: null
4+
headers:
5+
Accept:
6+
- application/json
7+
Accept-Encoding:
8+
- gzip, deflate
9+
Connection:
10+
- keep-alive
11+
Content-Length:
12+
- '0'
13+
Content-Type:
14+
- application/json
15+
User-Agent:
16+
- azsdk-python-keyvault-keys/4.4.0b5 Python/3.5.3 (Windows-10-10.0.19041-SP0)
17+
method: POST
18+
uri: https://vaultname.vault.azure.net/keys/livekvtesteckeyf85d12bb/create?api-version=2016-10-01
19+
response:
20+
body:
21+
string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
22+
or PoP token."}}'
23+
headers:
24+
cache-control:
25+
- no-cache
26+
content-length:
27+
- '87'
28+
content-type:
29+
- application/json; charset=utf-8
30+
date:
31+
- Mon, 19 Apr 2021 20:49:33 GMT
32+
expires:
33+
- '-1'
34+
pragma:
35+
- no-cache
36+
strict-transport-security:
37+
- max-age=31536000;includeSubDomains
38+
www-authenticate:
39+
- Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
40+
resource="https://vault.azure.net"
41+
x-content-type-options:
42+
- nosniff
43+
x-ms-keyvault-network-info:
44+
- conn_type=Ipv4;addr=172.92.159.124;act_addr_fam=InterNetwork;
45+
x-ms-keyvault-region:
46+
- eastus2
47+
x-ms-keyvault-service-version:
48+
- 1.2.236.0
49+
x-powered-by:
50+
- ASP.NET
51+
status:
52+
code: 401
53+
message: Unauthorized
54+
- request:
55+
body: '{"kty": "EC"}'
56+
headers:
57+
Accept:
58+
- application/json
59+
Accept-Encoding:
60+
- gzip, deflate
61+
Connection:
62+
- keep-alive
63+
Content-Length:
64+
- '13'
65+
Content-Type:
66+
- application/json
67+
User-Agent:
68+
- azsdk-python-keyvault-keys/4.4.0b5 Python/3.5.3 (Windows-10-10.0.19041-SP0)
69+
method: POST
70+
uri: https://vaultname.vault.azure.net/keys/livekvtesteckeyf85d12bb/create?api-version=2016-10-01
71+
response:
72+
body:
73+
string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/livekvtesteckeyf85d12bb/bea3d5415a7c4e3591410cebfb0dfaaf","kty":"EC","key_ops":["sign","verify"],"crv":"P-256","x":"b0O3jO6GL6l38y_K2_QCFqeRJ4SDkyva0COo42w_Ayo","y":"7BYDFEutE1q9IkShnut7vqBoPtQQ6WTneKsIDmkQM-4"},"attributes":{"enabled":true,"created":1618865374,"updated":1618865374,"recoveryLevel":"Recoverable+Purgeable"}}'
74+
headers:
75+
cache-control:
76+
- no-cache
77+
content-length:
78+
- '381'
79+
content-type:
80+
- application/json; charset=utf-8
81+
date:
82+
- Mon, 19 Apr 2021 20:49:34 GMT
83+
expires:
84+
- '-1'
85+
pragma:
86+
- no-cache
87+
strict-transport-security:
88+
- max-age=31536000;includeSubDomains
89+
x-content-type-options:
90+
- nosniff
91+
x-ms-keyvault-network-info:
92+
- conn_type=Ipv4;addr=172.92.159.124;act_addr_fam=InterNetwork;
93+
x-ms-keyvault-region:
94+
- eastus2
95+
x-ms-keyvault-service-version:
96+
- 1.2.236.0
97+
x-powered-by:
98+
- ASP.NET
99+
status:
100+
code: 200
101+
message: OK
102+
- request:
103+
body: null
104+
headers:
105+
Accept:
106+
- application/json
107+
Accept-Encoding:
108+
- gzip, deflate
109+
Connection:
110+
- keep-alive
111+
User-Agent:
112+
- azsdk-python-keyvault-keys/4.4.0b5 Python/3.5.3 (Windows-10-10.0.19041-SP0)
113+
method: GET
114+
uri: https://vaultname.vault.azure.net/keys/livekvtesteckeyf85d12bb/bea3d5415a7c4e3591410cebfb0dfaaf?api-version=7.2-preview
115+
response:
116+
body:
117+
string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/livekvtesteckeyf85d12bb/bea3d5415a7c4e3591410cebfb0dfaaf","kty":"EC","key_ops":["sign","verify"],"crv":"P-256","x":"b0O3jO6GL6l38y_K2_QCFqeRJ4SDkyva0COo42w_Ayo","y":"7BYDFEutE1q9IkShnut7vqBoPtQQ6WTneKsIDmkQM-4"},"attributes":{"enabled":true,"created":1618865374,"updated":1618865374,"recoveryLevel":"Recoverable+Purgeable","recoverableDays":90}}'
118+
headers:
119+
cache-control:
120+
- no-cache
121+
content-length:
122+
- '402'
123+
content-type:
124+
- application/json; charset=utf-8
125+
date:
126+
- Mon, 19 Apr 2021 20:49:35 GMT
127+
expires:
128+
- '-1'
129+
pragma:
130+
- no-cache
131+
strict-transport-security:
132+
- max-age=31536000;includeSubDomains
133+
x-content-type-options:
134+
- nosniff
135+
x-ms-keyvault-network-info:
136+
- conn_type=Ipv4;addr=172.92.159.124;act_addr_fam=InterNetwork;
137+
x-ms-keyvault-region:
138+
- eastus2
139+
x-ms-keyvault-service-version:
140+
- 1.2.236.0
141+
x-powered-by:
142+
- ASP.NET
143+
status:
144+
code: 200
145+
message: OK
146+
version: 1
Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
interactions:
2+
- request:
3+
body: null
4+
headers:
5+
Accept:
6+
- application/json
7+
Accept-Encoding:
8+
- gzip, deflate
9+
Connection:
10+
- keep-alive
11+
Content-Length:
12+
- '0'
13+
Content-Type:
14+
- application/json
15+
User-Agent:
16+
- azsdk-python-keyvault-keys/4.4.0b5 Python/3.5.3 (Windows-10-10.0.19041-SP0)
17+
method: POST
18+
uri: https://vaultname.vault.azure.net/keys/livekvtesteckey834a1138/create?api-version=7.0
19+
response:
20+
body:
21+
string: '{"error":{"code":"Unauthorized","message":"Request is missing a Bearer
22+
or PoP token."}}'
23+
headers:
24+
cache-control:
25+
- no-cache
26+
content-length:
27+
- '87'
28+
content-type:
29+
- application/json; charset=utf-8
30+
date:
31+
- Mon, 19 Apr 2021 20:49:33 GMT
32+
expires:
33+
- '-1'
34+
pragma:
35+
- no-cache
36+
strict-transport-security:
37+
- max-age=31536000;includeSubDomains
38+
www-authenticate:
39+
- Bearer authorization="https://login.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47",
40+
resource="https://vault.azure.net"
41+
x-content-type-options:
42+
- nosniff
43+
x-ms-keyvault-network-info:
44+
- conn_type=Ipv4;addr=172.92.159.124;act_addr_fam=InterNetwork;
45+
x-ms-keyvault-region:
46+
- eastus2
47+
x-ms-keyvault-service-version:
48+
- 1.2.236.0
49+
x-powered-by:
50+
- ASP.NET
51+
status:
52+
code: 401
53+
message: Unauthorized
54+
- request:
55+
body: '{"kty": "EC"}'
56+
headers:
57+
Accept:
58+
- application/json
59+
Accept-Encoding:
60+
- gzip, deflate
61+
Connection:
62+
- keep-alive
63+
Content-Length:
64+
- '13'
65+
Content-Type:
66+
- application/json
67+
User-Agent:
68+
- azsdk-python-keyvault-keys/4.4.0b5 Python/3.5.3 (Windows-10-10.0.19041-SP0)
69+
method: POST
70+
uri: https://vaultname.vault.azure.net/keys/livekvtesteckey834a1138/create?api-version=7.0
71+
response:
72+
body:
73+
string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/livekvtesteckey834a1138/061999b7542745bd81eaea5a4e5baf7c","kty":"EC","key_ops":["sign","verify"],"crv":"P-256","x":"iGlAng69Ar98HwKA-lYEMxFuFlCg7VnK0e7fj1eVEO0","y":"gKStaSqV9l5xm_4pyzisXrdfHHhdTG7HX1LrMjOhY0k"},"attributes":{"enabled":true,"created":1618865374,"updated":1618865374,"recoveryLevel":"Recoverable+Purgeable"}}'
74+
headers:
75+
cache-control:
76+
- no-cache
77+
content-length:
78+
- '381'
79+
content-type:
80+
- application/json; charset=utf-8
81+
date:
82+
- Mon, 19 Apr 2021 20:49:34 GMT
83+
expires:
84+
- '-1'
85+
pragma:
86+
- no-cache
87+
strict-transport-security:
88+
- max-age=31536000;includeSubDomains
89+
x-content-type-options:
90+
- nosniff
91+
x-ms-keyvault-network-info:
92+
- conn_type=Ipv4;addr=172.92.159.124;act_addr_fam=InterNetwork;
93+
x-ms-keyvault-region:
94+
- eastus2
95+
x-ms-keyvault-service-version:
96+
- 1.2.236.0
97+
x-powered-by:
98+
- ASP.NET
99+
status:
100+
code: 200
101+
message: OK
102+
- request:
103+
body: null
104+
headers:
105+
Accept:
106+
- application/json
107+
Accept-Encoding:
108+
- gzip, deflate
109+
Connection:
110+
- keep-alive
111+
User-Agent:
112+
- azsdk-python-keyvault-keys/4.4.0b5 Python/3.5.3 (Windows-10-10.0.19041-SP0)
113+
method: GET
114+
uri: https://vaultname.vault.azure.net/keys/livekvtesteckey834a1138/061999b7542745bd81eaea5a4e5baf7c?api-version=7.2-preview
115+
response:
116+
body:
117+
string: '{"key":{"kid":"https://vaultname.vault.azure.net/keys/livekvtesteckey834a1138/061999b7542745bd81eaea5a4e5baf7c","kty":"EC","key_ops":["sign","verify"],"crv":"P-256","x":"iGlAng69Ar98HwKA-lYEMxFuFlCg7VnK0e7fj1eVEO0","y":"gKStaSqV9l5xm_4pyzisXrdfHHhdTG7HX1LrMjOhY0k"},"attributes":{"enabled":true,"created":1618865374,"updated":1618865374,"recoveryLevel":"Recoverable+Purgeable","recoverableDays":90}}'
118+
headers:
119+
cache-control:
120+
- no-cache
121+
content-length:
122+
- '402'
123+
content-type:
124+
- application/json; charset=utf-8
125+
date:
126+
- Mon, 19 Apr 2021 20:49:36 GMT
127+
expires:
128+
- '-1'
129+
pragma:
130+
- no-cache
131+
strict-transport-security:
132+
- max-age=31536000;includeSubDomains
133+
x-content-type-options:
134+
- nosniff
135+
x-ms-keyvault-network-info:
136+
- conn_type=Ipv4;addr=172.92.159.124;act_addr_fam=InterNetwork;
137+
x-ms-keyvault-region:
138+
- eastus2
139+
x-ms-keyvault-service-version:
140+
- 1.2.236.0
141+
x-powered-by:
142+
- ASP.NET
143+
status:
144+
code: 200
145+
message: OK
146+
version: 1

0 commit comments

Comments
 (0)