Skip to content

Commit 8250fd8

Browse files
author
Nicola Camillucci
committed
Added tests
1 parent bd017d5 commit 8250fd8

6 files changed

Lines changed: 128 additions & 2 deletions

File tree

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

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,18 @@ class AsyncKeysClientPreparer(AzureRecordedTestCase):
2222
def __init__(self, *args, **kwargs):
2323
vault_playback_url = "https://vaultname.vault.azure.net"
2424
hsm_playback_url = "https://managedhsmvaultname.managedhsm.azure.net"
25+
playback_ekm_external_id = "fake-ekm-host"
2526
self.is_logging_enabled = kwargs.pop("logging_enable", True)
2627

2728
if self.is_live:
2829
self.vault_url = os.environ["AZURE_KEYVAULT_URL"]
2930
hsm = os.environ.get("AZURE_MANAGEDHSM_URL")
3031
self.managed_hsm_url = hsm if hsm else None
32+
self.ekm_external_id = os.getenv("EKM_EXTERNAL_ID")
3133
else:
3234
self.vault_url = vault_playback_url
3335
self.managed_hsm_url = hsm_playback_url
36+
self.ekm_external_id = playback_ekm_external_id
3437

3538
self._set_mgmt_settings_real_values()
3639

@@ -44,7 +47,12 @@ async def _preparer(test_class, api_version, is_hsm, **kwargs):
4447
client = self.create_key_client(endpoint_url, api_version=api_version, **kwargs)
4548
async with client:
4649
await fn(
47-
test_class, client, is_hsm=is_hsm, managed_hsm_url=self.managed_hsm_url, vault_url=self.vault_url
50+
test_class,
51+
client,
52+
is_hsm=is_hsm,
53+
managed_hsm_url=self.managed_hsm_url,
54+
vault_url=self.vault_url,
55+
ekm_external_id=self.ekm_external_id,
4856
)
4957

5058
return _preparer

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

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ class KeysClientPreparer(AzureRecordedTestCase):
6161
def __init__(self, *args, **kwargs):
6262
vault_playback_url = "https://vaultname.vault.azure.net"
6363
hsm_playback_url = "https://managedhsmvaultname.managedhsm.azure.net"
64+
playback_ekm_external_id = "fake-ekm-host"
6465
self.is_logging_enabled = kwargs.pop("logging_enable", True)
6566

6667
if self.is_live:
@@ -70,9 +71,11 @@ def __init__(self, *args, **kwargs):
7071
self.managed_hsm_url = hsm if hsm else None
7172
if self.managed_hsm_url:
7273
self.managed_hsm_url = self.managed_hsm_url.rstrip("/")
74+
self.ekm_external_id = os.getenv("EKM_EXTERNAL_ID")
7375
else:
7476
self.vault_url = vault_playback_url
7577
self.managed_hsm_url = hsm_playback_url
78+
self.ekm_external_id = playback_ekm_external_id
7679

7780
self._set_mgmt_settings_real_values()
7881

@@ -86,7 +89,14 @@ def _preparer(test_class, api_version, is_hsm, **kwargs):
8689
client = self.create_key_client(endpoint_url, api_version=api_version, **kwargs)
8790

8891
with client:
89-
fn(test_class, client, is_hsm=is_hsm, managed_hsm_url=self.managed_hsm_url, vault_url=self.vault_url)
92+
fn(
93+
test_class,
94+
client,
95+
is_hsm=is_hsm,
96+
managed_hsm_url=self.managed_hsm_url,
97+
vault_url=self.vault_url,
98+
ekm_external_id=self.ekm_external_id,
99+
)
90100

91101
return _preparer
92102

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

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
from azure.core.rest import HttpRequest
1818
from azure.keyvault.keys import (
1919
ApiVersion,
20+
ExternalKey,
2021
JsonWebKey,
2122
KeyClient,
2223
KeyProperties,
@@ -807,6 +808,33 @@ def test_send_request(self, client, is_hsm, **kwargs):
807808
response = client.send_request(request)
808809
assert response.json()["key"]["kid"] == key.id
809810

811+
@pytest.mark.parametrize("api_version,is_hsm", only_hsm_default)
812+
@KeysClientPreparer()
813+
@recorded_by_proxy
814+
def test_create_external_key(self, client, **kwargs):
815+
"""Register an external HSM key and verify the external_key reference round-trips."""
816+
external_id = kwargs.pop("ekm_external_id")
817+
if not external_id:
818+
pytest.skip(
819+
"No external key ID provided. This test requires an EKM-connected HSM and an existing external key."
820+
)
821+
822+
key_name = self.get_resource_name("ext-key")
823+
external_key = ExternalKey(id=external_id)
824+
825+
created = client.create_external_key(key_name, external_key=external_key)
826+
assert created is not None
827+
assert created.name == key_name
828+
assert created.properties.external_key is not None
829+
assert created.properties.external_key.id == external_id
830+
assert created.key_type is not None
831+
832+
# Verify the external_key reference is also returned by a subsequent get_key.
833+
fetched = client.get_key(key_name)
834+
assert fetched.properties.external_key is not None
835+
assert fetched.properties.external_key.id == external_id
836+
assert fetched.key_type is not None
837+
810838
@pytest.mark.parametrize("api_version,is_hsm", only_hsm_default)
811839
@KeysClientPreparer()
812840
@recorded_by_proxy

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

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
from azure.core.rest import HttpRequest
1818
from azure.keyvault.keys import (
1919
ApiVersion,
20+
ExternalKey,
2021
JsonWebKey,
2122
KeyProperties,
2223
KeyReleasePolicy,
@@ -824,6 +825,34 @@ async def test_send_request(self, client, is_hsm, **kwargs):
824825
response = await client.send_request(request)
825826
assert response.json()["key"]["kid"] == key.id
826827

828+
@pytest.mark.asyncio
829+
@pytest.mark.parametrize("api_version,is_hsm", only_hsm_default)
830+
@AsyncKeysClientPreparer()
831+
@recorded_by_proxy_async
832+
async def test_create_external_key(self, client, **kwargs):
833+
"""Register an external HSM key and verify the external_key reference round-trips."""
834+
external_id = kwargs.pop("ekm_external_id")
835+
if not external_id:
836+
pytest.skip(
837+
"No external key ID provided. This test requires an EKM-connected HSM and an existing external key."
838+
)
839+
840+
key_name = self.get_resource_name("ext-key")
841+
external_key = ExternalKey(id=external_id)
842+
843+
created = await client.create_external_key(key_name, external_key=external_key)
844+
assert created is not None
845+
assert created.name == key_name
846+
assert created.properties.external_key is not None
847+
assert created.properties.external_key.id == external_id
848+
assert created.key_type is not None
849+
850+
# Verify the external_key reference is also returned by a subsequent get_key.
851+
fetched = await client.get_key(key_name)
852+
assert fetched.properties.external_key is not None
853+
assert fetched.properties.external_key.id == external_id
854+
assert fetched.key_type is not None
855+
827856
@pytest.mark.asyncio
828857
@pytest.mark.parametrize("api_version,is_hsm", only_hsm_default)
829858
@AsyncKeysClientPreparer()

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

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
all_api_versions = get_decorator(only_vault=True)
1818
default_version = get_decorator(api_versions=[DEFAULT_VERSION])
1919
only_hsm = get_decorator(only_hsm=True)
20+
only_hsm_default = get_decorator(only_hsm=True, api_versions=[DEFAULT_VERSION])
2021

2122

2223
def print(*args):
@@ -148,6 +149,30 @@ def test_example_create_oct_key(self, key_client, **kwargs):
148149
print(key.properties.key_size)
149150
# [END create_oct_key]
150151

152+
@pytest.mark.parametrize("api_version,is_hsm", only_hsm_default)
153+
@KeysClientPreparer()
154+
@recorded_by_proxy
155+
def test_example_create_external_key(self, key_client, **kwargs):
156+
external_id = kwargs.pop("ekm_external_id")
157+
if not external_id:
158+
pytest.skip(
159+
"No external key ID provided. This test requires an EKM-connected HSM and an existing external key."
160+
)
161+
key_name = self.get_resource_name("ext-key")
162+
163+
# [START create_external_key]
164+
from azure.keyvault.keys import ExternalKey
165+
166+
# the external_key.id refers to the key material managed by an external HSM
167+
external_key = ExternalKey(id=external_id)
168+
key = key_client.create_external_key(key_name, external_key=external_key)
169+
170+
print(key.id)
171+
print(key.name)
172+
print(key.properties.external_key.id)
173+
print(key.key_type)
174+
# [END create_external_key]
175+
151176
@pytest.mark.parametrize("api_version,is_hsm", all_api_versions)
152177
@KeysClientPreparer()
153178
@recorded_by_proxy

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

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
all_api_versions = get_decorator(is_async=True, only_vault=True)
1818
default_version = get_decorator(is_async=True, api_versions=[DEFAULT_VERSION])
1919
only_hsm = get_decorator(only_hsm=True, is_async=True)
20+
only_hsm_default = get_decorator(only_hsm=True, is_async=True, api_versions=[DEFAULT_VERSION])
2021

2122

2223
def print(*args):
@@ -150,6 +151,31 @@ async def test_example_create_oct_key(self, key_client, **kwargs):
150151
print(key.properties.key_size)
151152
# [END create_oct_key]
152153

154+
@pytest.mark.asyncio
155+
@pytest.mark.parametrize("api_version,is_hsm", only_hsm_default)
156+
@AsyncKeysClientPreparer()
157+
@recorded_by_proxy_async
158+
async def test_example_create_external_key(self, key_client, **kwargs):
159+
external_id = kwargs.pop("ekm_external_id")
160+
if not external_id:
161+
pytest.skip(
162+
"No external key ID provided. This test requires an EKM-connected HSM and an existing external key."
163+
)
164+
key_name = self.get_resource_name("ext-key")
165+
166+
# [START create_external_key]
167+
from azure.keyvault.keys import ExternalKey
168+
169+
# the external_key.id refers to the key material managed by an external HSM
170+
external_key = ExternalKey(id=external_id)
171+
key = await key_client.create_external_key(key_name, external_key=external_key)
172+
173+
print(key.id)
174+
print(key.name)
175+
print(key.properties.external_key.id)
176+
print(key.key_type)
177+
# [END create_external_key]
178+
153179
@pytest.mark.asyncio
154180
@pytest.mark.parametrize("api_version,is_hsm", all_api_versions)
155181
@AsyncKeysClientPreparer()

0 commit comments

Comments
 (0)