Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,9 @@
# Licensed under the MIT License.
# ------------------------------------
import asyncio
import functools

from azure_devtools.scenario_tests.patches import mock_in_unit_test
from devtools_testutils import AzureMgmtTestCase
from .helpers_async import get_completed_future


def skip_sleep(unit_test):
Expand All @@ -26,23 +24,6 @@ def setUp(self):
self.list_test_size = 7
super(KeyVaultTestCase, self).setUp()

@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):
loop = asyncio.get_event_loop()
client = kwargs.get("client")
result = loop.run_until_complete(test_fn(test_class_instance, *args, **kwargs))
if client:
loop.run_until_complete(client.close())
return result

return run

async def _poll_until_no_exception(self, fn, *resource_names, expected_exception, max_retries=20, retry_delay=3):
"""polling helper for live tests because some operations take an unpredictable amount of time to complete"""

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,6 @@ def _validate_certificate_issuer_properties(self, a, b):
@ResourceGroupPreparer(random_name_enabled=True)
@KeyVaultPreparer()
@KeyVaultClientPreparer()
@KeyVaultTestCase.await_prepared_test
async def test_crud_operations(self, client, **kwargs):
cert_name = self.get_resource_name("cert")
lifetime_actions = [LifetimeAction(lifetime_percentage=80, action=CertificatePolicyAction.auto_renew)]
Expand Down Expand Up @@ -230,7 +229,6 @@ async def test_crud_operations(self, client, **kwargs):
@ResourceGroupPreparer(random_name_enabled=True)
@KeyVaultPreparer()
@KeyVaultClientPreparer()
@KeyVaultTestCase.await_prepared_test
async def test_list(self, client, **kwargs):

max_certificates = self.list_test_size
Expand Down Expand Up @@ -260,7 +258,6 @@ async def test_list(self, client, **kwargs):
@ResourceGroupPreparer(random_name_enabled=True)
@KeyVaultPreparer()
@KeyVaultClientPreparer()
@KeyVaultTestCase.await_prepared_test
async def test_list_certificate_versions(self, client, **kwargs):
cert_name = self.get_resource_name("certver")

Expand Down Expand Up @@ -296,7 +293,6 @@ async def test_list_certificate_versions(self, client, **kwargs):
@ResourceGroupPreparer(random_name_enabled=True)
@KeyVaultPreparer()
@KeyVaultClientPreparer()
@KeyVaultTestCase.await_prepared_test
async def test_crud_contacts(self, client, **kwargs):
contact_list = [
CertificateContact(email="admin@contoso.com", name="John Doe", phone="1111111111"),
Expand Down Expand Up @@ -326,7 +322,6 @@ async def test_crud_contacts(self, client, **kwargs):
@ResourceGroupPreparer(random_name_enabled=True)
@KeyVaultPreparer()
@KeyVaultClientPreparer()
@KeyVaultTestCase.await_prepared_test
async def test_recover_and_purge(self, client, **kwargs):
certs = {}
# create certificates to recover
Expand Down Expand Up @@ -379,7 +374,6 @@ async def test_recover_and_purge(self, client, **kwargs):
@ResourceGroupPreparer(random_name_enabled=True)
@KeyVaultPreparer()
@KeyVaultClientPreparer()
@KeyVaultTestCase.await_prepared_test
async def test_async_request_cancellation_and_deletion(self, client, **kwargs):
cert_name = "asyncCanceledDeletedCert"
cert_policy = CertificatePolicy.get_default()
Expand Down Expand Up @@ -439,7 +433,6 @@ async def test_async_request_cancellation_and_deletion(self, client, **kwargs):
@ResourceGroupPreparer(random_name_enabled=True)
@KeyVaultPreparer()
@KeyVaultClientPreparer()
@KeyVaultTestCase.await_prepared_test
async def test_policy(self, client, **kwargs):
cert_name = "policyCertificate"
cert_policy = CertificatePolicy(
Expand Down Expand Up @@ -476,7 +469,6 @@ async def test_policy(self, client, **kwargs):
@ResourceGroupPreparer(random_name_enabled=True)
@KeyVaultPreparer()
@KeyVaultClientPreparer()
@KeyVaultTestCase.await_prepared_test
async def test_get_pending_certificate_signing_request(self, client, **kwargs):
cert_name = "unknownIssuerCert"

Expand All @@ -489,7 +481,6 @@ async def test_get_pending_certificate_signing_request(self, client, **kwargs):
@ResourceGroupPreparer(random_name_enabled=True)
@KeyVaultPreparer(enable_soft_delete=False)
@KeyVaultClientPreparer()
@KeyVaultTestCase.await_prepared_test
async def test_backup_restore(self, client, **kwargs):
cert_name = self.get_resource_name("cert")
policy = CertificatePolicy.get_default()
Expand All @@ -511,7 +502,6 @@ async def test_backup_restore(self, client, **kwargs):
@ResourceGroupPreparer(random_name_enabled=True)
@KeyVaultPreparer()
@KeyVaultClientPreparer()
@KeyVaultTestCase.await_prepared_test
async def test_crud_issuer(self, client, **kwargs):
issuer_name = "issuer"
admin_contacts = [
Expand Down Expand Up @@ -591,7 +581,6 @@ async def test_crud_issuer(self, client, **kwargs):
@ResourceGroupPreparer(random_name_enabled=True)
@KeyVaultPreparer()
@KeyVaultClientPreparer(client_kwargs={"logging_enable": True})
@KeyVaultTestCase.await_prepared_test
async def test_logging_enabled(self, client, **kwargs):
mock_handler = MockHandler()

Expand All @@ -616,7 +605,6 @@ async def test_logging_enabled(self, client, **kwargs):
@ResourceGroupPreparer(random_name_enabled=True)
@KeyVaultPreparer()
@KeyVaultClientPreparer()
@KeyVaultTestCase.await_prepared_test
async def test_logging_disabled(self, client, **kwargs):
mock_handler = MockHandler()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,6 @@ class TestExamplesKeyVault(KeyVaultTestCase):
@ResourceGroupPreparer(random_name_enabled=True)
@KeyVaultPreparer()
@KeyVaultClientPreparer()
@KeyVaultTestCase.await_prepared_test
async def test_example_certificate_crud_operations(self, client, **kwargs):
certificate_client = client

Expand Down Expand Up @@ -108,7 +107,6 @@ async def test_example_certificate_crud_operations(self, client, **kwargs):
@ResourceGroupPreparer(random_name_enabled=True)
@KeyVaultPreparer()
@KeyVaultClientPreparer()
@KeyVaultTestCase.await_prepared_test
async def test_example_certificate_list_operations(self, client, **kwargs):
certificate_client = client

Expand Down Expand Up @@ -175,7 +173,6 @@ async def test_example_certificate_list_operations(self, client, **kwargs):
@ResourceGroupPreparer(random_name_enabled=True)
@KeyVaultPreparer(enable_soft_delete=False)
@KeyVaultClientPreparer()
@KeyVaultTestCase.await_prepared_test
async def test_example_certificate_backup_restore(self, client, **kwargs):
certificate_client = client

Expand Down Expand Up @@ -224,7 +221,6 @@ async def test_example_certificate_backup_restore(self, client, **kwargs):
@ResourceGroupPreparer(random_name_enabled=True)
@KeyVaultPreparer()
@KeyVaultClientPreparer()
@KeyVaultTestCase.await_prepared_test
async def test_example_certificate_recover(self, client, **kwargs):
certificate_client = client

Expand Down Expand Up @@ -268,7 +264,6 @@ async def test_example_certificate_recover(self, client, **kwargs):
@ResourceGroupPreparer(random_name_enabled=True)
@KeyVaultPreparer()
@KeyVaultClientPreparer()
@KeyVaultTestCase.await_prepared_test
async def test_example_contacts(self, client, **kwargs):
certificate_client = client

Expand Down Expand Up @@ -315,7 +310,6 @@ async def test_example_contacts(self, client, **kwargs):
@ResourceGroupPreparer(random_name_enabled=True)
@KeyVaultPreparer()
@KeyVaultClientPreparer()
@KeyVaultTestCase.await_prepared_test
async def test_example_issuers(self, client, **kwargs):
certificate_client = client

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ def __init__(self, *args, **kwargs):
@ResourceGroupPreparer(random_name_enabled=True)
@KeyVaultPreparer()
@KeyVaultClientPreparer(CertificateClient)
@KeyVaultTestCase.await_prepared_test
async def test_merge_certificate(self, client, **kwargs):
cert_name = "mergeCertificate"
cert_policy = CertificatePolicy(
Expand Down
19 changes: 0 additions & 19 deletions sdk/keyvault/azure-keyvault-keys/tests/_shared/test_case_async.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,9 @@
# Licensed under the MIT License.
# ------------------------------------
import asyncio
import functools

from azure_devtools.scenario_tests.patches import mock_in_unit_test
from devtools_testutils import AzureMgmtTestCase
from .helpers_async import get_completed_future


def skip_sleep(unit_test):
Expand All @@ -26,23 +24,6 @@ def setUp(self):
self.list_test_size = 7
super(KeyVaultTestCase, self).setUp()

@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):
loop = asyncio.get_event_loop()
client = kwargs.get("client")
result = loop.run_until_complete(test_fn(test_class_instance, *args, **kwargs))
if client:
loop.run_until_complete(client.close())
return result

return run

async def _poll_until_no_exception(self, fn, *resource_names, expected_exception, max_retries=20, retry_delay=3):
"""polling helper for live tests because some operations take an unpredictable amount of time to complete"""

Expand Down
45 changes: 20 additions & 25 deletions sdk/keyvault/azure-keyvault-keys/tests/test_crypto_client_async.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,11 @@
import os

from azure.keyvault.keys import JsonWebKey, KeyCurveName, KeyVaultKey
from azure.keyvault.keys.aio import KeyClient
from azure.keyvault.keys.crypto.aio import CryptographyClient, EncryptionAlgorithm, KeyWrapAlgorithm, SignatureAlgorithm
from azure.mgmt.keyvault.models import KeyPermissions, Permissions
from devtools_testutils import ResourceGroupPreparer, KeyVaultPreparer
import pytest

from _shared.json_attribute_matcher import json_attribute_matcher
from _shared.test_case_async import KeyVaultTestCase

Expand Down Expand Up @@ -79,7 +80,6 @@ def _to_bytes(hex):
@ResourceGroupPreparer(random_name_enabled=True)
@KeyVaultPreparer(permissions=NO_GET)
@CryptoClientPreparer()
@KeyVaultTestCase.await_prepared_test
async def test_encrypt_and_decrypt(self, key_client, credential, **kwargs):
# TODO: use iv, authentication_data
key_name = self.get_resource_name("keycrypt")
Expand All @@ -98,7 +98,6 @@ async def test_encrypt_and_decrypt(self, key_client, credential, **kwargs):
@ResourceGroupPreparer(random_name_enabled=True)
@KeyVaultPreparer(permissions=NO_GET)
@CryptoClientPreparer()
@KeyVaultTestCase.await_prepared_test
async def test_sign_and_verify(self, key_client, credential, **kwargs):
key_name = self.get_resource_name("keysign")

Expand All @@ -120,7 +119,6 @@ async def test_sign_and_verify(self, key_client, credential, **kwargs):
@ResourceGroupPreparer(random_name_enabled=True)
@KeyVaultPreparer(permissions=NO_GET)
@CryptoClientPreparer()
@KeyVaultTestCase.await_prepared_test
async def test_wrap_and_unwrap(self, key_client, credential, **kwargs):
key_name = self.get_resource_name("keywrap")

Expand All @@ -136,27 +134,9 @@ async def test_wrap_and_unwrap(self, key_client, credential, **kwargs):
result = await crypto_client.unwrap_key(result.algorithm, result.encrypted_key)
self.assertEqual(key_bytes, result.key)

@KeyVaultTestCase.await_prepared_test
async def test_symmetric_wrap_and_unwrap_local(self, *args, **kwargs):
key = KeyVaultKey(
key_id="http://fake.test.vault/keys/key/version",
k=os.urandom(32),
kty="oct",
key_ops=["unwrapKey", "wrapKey"],
)

crypto_client = CryptographyClient(key, credential=lambda *_: None)

# Wrap a key with the created key, then unwrap it. The wrapped key's bytes should round-trip.
key_bytes = os.urandom(32)
wrap_result = await crypto_client.wrap_key(KeyWrapAlgorithm.aes_256, key_bytes)
unwrap_result = await crypto_client.unwrap_key(wrap_result.algorithm, wrap_result.encrypted_key)
self.assertEqual(unwrap_result.key, key_bytes)

@ResourceGroupPreparer(random_name_enabled=True)
@KeyVaultPreparer()
@CryptoClientPreparer()
@KeyVaultTestCase.await_prepared_test
async def test_encrypt_local(self, key_client, credential, **kwargs):
"""Encrypt locally, decrypt with Key Vault"""

Expand All @@ -173,7 +153,6 @@ async def test_encrypt_local(self, key_client, credential, **kwargs):
@ResourceGroupPreparer(random_name_enabled=True)
@KeyVaultPreparer()
@CryptoClientPreparer()
@KeyVaultTestCase.await_prepared_test
async def test_wrap_local(self, key_client, credential, **kwargs):
"""Wrap locally, unwrap with Key Vault"""

Expand All @@ -190,7 +169,6 @@ async def test_wrap_local(self, key_client, credential, **kwargs):
@ResourceGroupPreparer(random_name_enabled=True)
@KeyVaultPreparer()
@CryptoClientPreparer()
@KeyVaultTestCase.await_prepared_test
async def test_rsa_verify_local(self, key_client, credential, **kwargs):
"""Sign with Key Vault, verify locally"""

Expand All @@ -216,7 +194,6 @@ async def test_rsa_verify_local(self, key_client, credential, **kwargs):
@ResourceGroupPreparer(random_name_enabled=True)
@KeyVaultPreparer()
@CryptoClientPreparer()
@KeyVaultTestCase.await_prepared_test
async def test_ec_verify_local(self, key_client, credential, **kwargs):
"""Sign with Key Vault, verify locally"""

Expand All @@ -238,3 +215,21 @@ async def test_ec_verify_local(self, key_client, credential, **kwargs):

result = await crypto_client.verify(result.algorithm, digest, result.signature)
self.assertTrue(result.is_valid)


@pytest.mark.asyncio
async def test_symmetric_wrap_and_unwrap_local():
key = KeyVaultKey(
key_id="http://fake.test.vault/keys/key/version",
k=os.urandom(32),
kty="oct",
key_ops=["unwrapKey", "wrapKey"],
)

crypto_client = CryptographyClient(key, credential=lambda *_: None)

# Wrap a key with the created key, then unwrap it. The wrapped key's bytes should round-trip.
key_bytes = os.urandom(32)
wrap_result = await crypto_client.wrap_key(KeyWrapAlgorithm.aes_256, key_bytes)
unwrap_result = await crypto_client.unwrap_key(wrap_result.algorithm, wrap_result.encrypted_key)
assert unwrap_result.key == key_bytes
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ def __init__(self, *args, **kwargs):
@ResourceGroupPreparer(random_name_enabled=True)
@KeyVaultPreparer()
@CryptoClientPreparer()
@KeyVaultTestCase.await_prepared_test
async def test_encrypt_decrypt_async(self, key_client, credential, **kwargs):
key_name = self.get_resource_name("crypto-test-encrypt-key")
key = await key_client.create_rsa_key(key_name)
Expand Down Expand Up @@ -55,7 +54,6 @@ async def test_encrypt_decrypt_async(self, key_client, credential, **kwargs):
@ResourceGroupPreparer(random_name_enabled=True)
@KeyVaultPreparer()
@CryptoClientPreparer()
@KeyVaultTestCase.await_prepared_test
async def test_wrap_unwrap_async(self, key_client, credential, **kwargs):
key_name = self.get_resource_name("crypto-test-wrapping-key")
key = await key_client.create_rsa_key(key_name)
Expand Down Expand Up @@ -85,7 +83,6 @@ async def test_wrap_unwrap_async(self, key_client, credential, **kwargs):
@ResourceGroupPreparer(random_name_enabled=True)
@KeyVaultPreparer()
@CryptoClientPreparer()
@KeyVaultTestCase.await_prepared_test
async def test_sign_verify_async(self, key_client, credential, **kwargs):
key_name = self.get_resource_name("crypto-test-wrapping-key")
key = await key_client.create_rsa_key(key_name)
Expand Down
Loading