From 9eef35e2b2116c049545c386924d7a071d8a80da Mon Sep 17 00:00:00 2001 From: Andres Sanchez Date: Wed, 12 Dec 2018 17:40:07 -0600 Subject: [PATCH 1/5] Migrate unit/test_defaults.py from unittest to pytest --- test/unit/test_defaults.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/test/unit/test_defaults.py b/test/unit/test_defaults.py index c8e769f15..37965768b 100644 --- a/test/unit/test_defaults.py +++ b/test/unit/test_defaults.py @@ -11,8 +11,6 @@ # ANY KIND, either express or implied. See the License for the specific # language governing permissions and limitations under the License. """Test suite to verify calculated values in aws_encryption_sdk.internal.defaults""" -import unittest - import pytest import aws_encryption_sdk.internal.defaults @@ -20,7 +18,7 @@ pytestmark = [pytest.mark.unit, pytest.mark.local] -class TestDefaults(unittest.TestCase): +class TestDefaults(object): def test_max_frame_count(self): max_frame_count = pow(2, 32) - 1 assert aws_encryption_sdk.internal.defaults.MAX_FRAME_COUNT == max_frame_count From 32cdf5b3a6425ac531f10703213d9ace8c189704 Mon Sep 17 00:00:00 2001 From: Andres Sanchez Date: Wed, 12 Dec 2018 17:50:30 -0600 Subject: [PATCH 2/5] Migrate unit/test_providers_base_master_key.py from unittest to pytest --- test/unit/test_providers_base_master_key.py | 30 ++++++++++++--------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/test/unit/test_providers_base_master_key.py b/test/unit/test_providers_base_master_key.py index 86a256c97..2714929c9 100644 --- a/test/unit/test_providers_base_master_key.py +++ b/test/unit/test_providers_base_master_key.py @@ -11,8 +11,6 @@ # ANY KIND, either express or implied. See the License for the specific # language governing permissions and limitations under the License. """Test suite for aws_encryption_sdk.key_providers.base.MasterKey""" -import unittest - import attr import pytest import six @@ -63,8 +61,9 @@ class FakeMasterKey(MockMasterKey): excinfo.match(r'MasterKey config classes must have a "provider_id" attribute defined.') -class TestMasterKey(unittest.TestCase): - def setUp(self): +class TestMasterKey(object): + @pytest.fixture(autouse=True) + def apply_fixture(self): self.mock_data_key_len_check_patcher = patch("aws_encryption_sdk.internal.utils.source_data_key_length_check") self.mock_data_key_len_check = self.mock_data_key_len_check_patcher.start() @@ -85,8 +84,9 @@ def _encrypt_data_key(self, data_key, algorithm, encryption_context): def _decrypt_data_key(self, encrypted_data_key, algorithm, encryption_context): pass - with six.assertRaisesRegex(self, TypeError, "Can't instantiate abstract class TestMasterKey *"): + with pytest.raises(TypeError) as excinfo: TestMasterKey() + excinfo.match("Can't instantiate abstract class TestMasterKey *") def test_generate_data_key_enforcement(self): class TestMasterKey(MasterKey): @@ -98,8 +98,9 @@ def _encrypt_data_key(self, data_key, algorithm, encryption_context): def _decrypt_data_key(self, encrypted_data_key, algorithm, encryption_context): pass - with six.assertRaisesRegex(self, TypeError, "Can't instantiate abstract class TestMasterKey *"): + with pytest.raises(TypeError) as excinfo: TestMasterKey() + excinfo.match("Can't instantiate abstract class TestMasterKey *") def test_encrypt_data_key_enforcement(self): class TestMasterKey(MasterKey): @@ -111,8 +112,9 @@ def _generate_data_key(self, algorithm, encryption_context): def _decrypt_data_key(self, encrypted_data_key, algorithm, encryption_context): pass - with six.assertRaisesRegex(self, TypeError, "Can't instantiate abstract class TestMasterKey *"): + with pytest.raises(TypeError) as excinfo: TestMasterKey() + excinfo.match("Can't instantiate abstract class TestMasterKey *") def test_decrypt_data_key_enforcement(self): class TestMasterKey(MasterKey): @@ -124,8 +126,9 @@ def _generate_data_key(self, algorithm, encryption_context): def _encrypt_data_key(self, data_key, algorithm, encryption_context): pass - with six.assertRaisesRegex(self, TypeError, "Can't instantiate abstract class TestMasterKey *"): + with pytest.raises(TypeError) as excinfo: TestMasterKey() + excinfo.match("Can't instantiate abstract class TestMasterKey *") def test_new(self): mock_master_key = MockMasterKey( @@ -142,10 +145,9 @@ def test_new_conf_mismatch(self): mock_config = MagicMock() mock_config.__class__ = MockMasterKeyConfig mock_config.provider_id = sentinel.mismatched_provider_id - with six.assertRaisesRegex( - self, ConfigMismatchError, "Config provider_id does not match MasterKey provider_id: *" - ): + with pytest.raises(ConfigMismatchError) as excinfo: MockMasterKey(config=mock_config) + excinfo.match("Config provider_id does not match MasterKey provider_id: *") def test_owns_data_key_owned(self): mock_master_key = MockMasterKey( @@ -220,8 +222,9 @@ def test_new_master_key_invalid(self): mock_encrypted_data_key=sentinel.encrypted_data_key, mock_decrypted_data_key=sentinel.decrypted_data_key, ) - with six.assertRaisesRegex(self, InvalidKeyIdError, "MasterKeys can only provide themselves. *"): + with pytest.raises(InvalidKeyIdError) as excinfo: mock_master_key._new_master_key(sentinel.another_key_id) + excinfo.match("MasterKeys can only provide themselves. *") def test_key_check_valid(self): mock_master_key = MockMasterKey( @@ -243,8 +246,9 @@ def test_key_check_invalid(self): ) mock_data_key = MagicMock() mock_data_key.key_provider = sentinel.another_key_provider - with six.assertRaisesRegex(self, IncorrectMasterKeyError, "Provided data key provider *"): + with pytest.raises(IncorrectMasterKeyError) as excinfo: mock_master_key._key_check(mock_data_key) + excinfo.match("Provided data key provider *") def test_generate_data_key(self): mock_master_key = MockMasterKey( From 1b73b4c085e611a6f17161add50d12be48177b28 Mon Sep 17 00:00:00 2001 From: Andres Sanchez Date: Wed, 12 Dec 2018 18:06:06 -0600 Subject: [PATCH 3/5] Migrate unit/test_providers_base_master_key_provider.py from unitteest to pytest --- ...test_providers_base_master_key_provider.py | 37 ++++++++++++------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/test/unit/test_providers_base_master_key_provider.py b/test/unit/test_providers_base_master_key_provider.py index 822870f9a..b05b1ab3c 100644 --- a/test/unit/test_providers_base_master_key_provider.py +++ b/test/unit/test_providers_base_master_key_provider.py @@ -11,8 +11,6 @@ # ANY KIND, either express or implied. See the License for the specific # language governing permissions and limitations under the License. """Test suite for aws_encryption_sdk.key_providers.base.MasterKeyProvider""" -import unittest - import attr import pytest import six @@ -63,21 +61,23 @@ def test_repr(): ) -class TestBaseMasterKeyProvider(unittest.TestCase): +class TestBaseMasterKeyProvider(object): def test_provider_id_enforcement(self): class TestProvider(MasterKeyProvider): def _new_master_key(self, key_id): pass - with six.assertRaisesRegex(self, TypeError, "Can't instantiate abstract class TestProvider *"): + with pytest.raises(TypeError) as excinfo: TestProvider() + excinfo.match("Can't instantiate abstract class TestProvider *") def test_new_master_key_enforcement(self): class TestProvider(MasterKeyProvider): provider_id = None - with six.assertRaisesRegex(self, TypeError, "Can't instantiate abstract class TestProvider *"): + with pytest.raises(TypeError) as excinfo: TestProvider() + excinfo.match("Can't instantiate abstract class TestProvider *") def test_master_keys_for_encryption(self): mock_master_key_a = MagicMock() @@ -124,12 +124,13 @@ def test_master_keys_for_encryption_no_master_keys(self): mock_master_key_provider = MockMasterKeyProvider( provider_id=sentinel.provider_id, mock_new_master_key=sentinel.new_master_key ) - with six.assertRaisesRegex(self, MasterKeyProviderError, "No Master Keys available from Master Key Provider"): + with pytest.raises(MasterKeyProviderError) as excinfo: mock_master_key_provider.master_keys_for_encryption( encryption_context=sentinel.encryption_context, plaintext_rostream=sentinel.plaintext_rostream, plaintext_length=sentinel.plaintext_length, ) + excinfo.match("No Master Keys available from Master Key Provider") def test_add_master_keys_from_list(self): mock_master_key_provider = MockMasterKeyProvider( @@ -305,12 +306,13 @@ def test_decrypt_data_key_unsuccessful_no_matching_members(self): provider_id=sentinel.provider_id, mock_new_master_key=mock_master_key ) mock_master_key_provider._members = [mock_member] - with six.assertRaisesRegex(self, DecryptKeyError, "Unable to decrypt data key"): + with pytest.raises(DecryptKeyError) as excinfo: mock_master_key_provider.decrypt_data_key( encrypted_data_key=mock_encrypted_data_key, algorithm=sentinel.algorithm, encryption_context=sentinel.encryption_context, ) + excinfo.match("Unable to decrypt data key") def test_decrypt_data_key_unsuccessful_matching_provider_invalid_key_id(self): mock_encrypted_data_key = MagicMock() @@ -323,12 +325,13 @@ def test_decrypt_data_key_unsuccessful_matching_provider_invalid_key_id(self): with patch.object( mock_master_key_provider, "master_key_for_decrypt", new_callable=PropertyMock, side_effect=InvalidKeyIdError ) as mock_master_key: - with six.assertRaisesRegex(self, DecryptKeyError, "Unable to decrypt data key"): + with pytest.raises(DecryptKeyError) as excinfo: mock_master_key_provider.decrypt_data_key( encrypted_data_key=mock_encrypted_data_key, algorithm=sentinel.algorithm, encryption_context=sentinel.encryption_context, ) + excinfo.match("Unable to decrypt data key") mock_master_key.assert_called_once_with(sentinel.key_info) def test_decrypt_data_key_unsuccessful_no_matching_members_no_vend(self): @@ -340,12 +343,13 @@ def test_decrypt_data_key_unsuccessful_no_matching_members_no_vend(self): mock_master_key_provider = MockMasterKeyProviderNoVendOnDecrypt(provider_id=sentinel.provider_id) mock_master_key_provider._members = [mock_member] mock_master_key_provider.master_key_for_decrypt = MagicMock() - with six.assertRaisesRegex(self, DecryptKeyError, "Unable to decrypt data key"): + with pytest.raises(DecryptKeyError) as excinfo: mock_master_key_provider.decrypt_data_key( encrypted_data_key=mock_encrypted_data_key, algorithm=sentinel.algorithm, encryption_context=sentinel.encryption_context, ) + excinfo.match("Unable to decrypt data key") assert not mock_master_key_provider.master_key_for_decrypt.called def test_decrypt_data_key_unsuccessful_invalid_key_info(self): @@ -359,12 +363,13 @@ def test_decrypt_data_key_unsuccessful_invalid_key_info(self): provider_id=sentinel.provider_id_2, mock_new_master_key=sentinel.new_master_key ) mock_master_key_provider._members = [mock_member] - with six.assertRaisesRegex(self, DecryptKeyError, "Unable to decrypt data key"): + with pytest.raises(DecryptKeyError) as excinfo: mock_master_key_provider.decrypt_data_key( encrypted_data_key=mock_encrypted_data_key, algorithm=sentinel.algorithm, encryption_context=sentinel.encryption_context, ) + excinfo.match("Unable to decrypt data key") def test_decrypt_data_key_unsuccessful_incorrect_master_key(self): mock_member = MagicMock() @@ -379,12 +384,13 @@ def test_decrypt_data_key_unsuccessful_incorrect_master_key(self): provider_id=sentinel.provider_id_2, mock_new_master_key=sentinel.new_master_key ) mock_master_key_provider._members = [mock_member] - with six.assertRaisesRegex(self, DecryptKeyError, "Unable to decrypt data key"): + with pytest.raises(DecryptKeyError) as excinfo: mock_master_key_provider.decrypt_data_key( encrypted_data_key=mock_encrypted_data_key, algorithm=sentinel.algorithm, encryption_context=sentinel.encryption_context, ) + excinfo.match("Unable to decrypt data key") def test_decrypt_data_key_unsuccessful_master_key_decryt_error(self): mock_member = MagicMock() @@ -401,24 +407,26 @@ def test_decrypt_data_key_unsuccessful_master_key_decryt_error(self): provider_id=sentinel.provider_id, mock_new_master_key=mock_master_key ) mock_master_key_provider._members = [mock_member] - with six.assertRaisesRegex(self, DecryptKeyError, "Unable to decrypt data key"): + with pytest.raises(DecryptKeyError) as excinfo: mock_master_key_provider.decrypt_data_key( encrypted_data_key=mock_encrypted_data_key, algorithm=sentinel.algorithm, encryption_context=sentinel.encryption_context, ) + excinfo.match("Unable to decrypt data key") def test_decrypt_data_key_unsuccessful_no_members(self): mock_master_key_provider = MockMasterKeyProvider( provider_id=sentinel.provider_id, mock_new_master_key=sentinel.new_master_key ) mock_master_key_provider._members = [] - with six.assertRaisesRegex(self, DecryptKeyError, "Unable to decrypt data key"): + with pytest.raises(DecryptKeyError) as excinfo: mock_master_key_provider.decrypt_data_key( encrypted_data_key=MagicMock(), algorithm=sentinel.algorithm, encryption_context=sentinel.encryption_context, ) + excinfo.match("Unable to decrypt data key") def test_decrypt_data_key_from_list_first_try(self): mock_decrypt_data_key = MagicMock() @@ -463,9 +471,10 @@ def test_decrypt_data_key_from_list_unsuccessful(self): ) mock_master_key_provider.decrypt_data_key = MagicMock() mock_master_key_provider.decrypt_data_key.side_effect = (DecryptKeyError, DecryptKeyError) - with six.assertRaisesRegex(self, DecryptKeyError, "Unable to decrypt any data key"): + with pytest.raises(DecryptKeyError) as excinfo: mock_master_key_provider.decrypt_data_key_from_list( encrypted_data_keys=[sentinel.encrypted_data_key_a, sentinel.encrypted_data_key_b], algorithm=sentinel.algorithm, encryption_context=sentinel.encryption_context, ) + excinfo.match("Unable to decrypt any data key") From 7a620b97daaece0f64a69c50cc3ef3988143d3f8 Mon Sep 17 00:00:00 2001 From: Andres Sanchez Date: Thu, 13 Dec 2018 11:56:28 -0600 Subject: [PATCH 4/5] Removed unit tests not corresponding to this branch --- test/unit/test_defaults.py | 4 ++- test/unit/test_providers_base_master_key.py | 30 +++++++++------------ 2 files changed, 16 insertions(+), 18 deletions(-) diff --git a/test/unit/test_defaults.py b/test/unit/test_defaults.py index 37965768b..c8e769f15 100644 --- a/test/unit/test_defaults.py +++ b/test/unit/test_defaults.py @@ -11,6 +11,8 @@ # ANY KIND, either express or implied. See the License for the specific # language governing permissions and limitations under the License. """Test suite to verify calculated values in aws_encryption_sdk.internal.defaults""" +import unittest + import pytest import aws_encryption_sdk.internal.defaults @@ -18,7 +20,7 @@ pytestmark = [pytest.mark.unit, pytest.mark.local] -class TestDefaults(object): +class TestDefaults(unittest.TestCase): def test_max_frame_count(self): max_frame_count = pow(2, 32) - 1 assert aws_encryption_sdk.internal.defaults.MAX_FRAME_COUNT == max_frame_count diff --git a/test/unit/test_providers_base_master_key.py b/test/unit/test_providers_base_master_key.py index 2714929c9..86a256c97 100644 --- a/test/unit/test_providers_base_master_key.py +++ b/test/unit/test_providers_base_master_key.py @@ -11,6 +11,8 @@ # ANY KIND, either express or implied. See the License for the specific # language governing permissions and limitations under the License. """Test suite for aws_encryption_sdk.key_providers.base.MasterKey""" +import unittest + import attr import pytest import six @@ -61,9 +63,8 @@ class FakeMasterKey(MockMasterKey): excinfo.match(r'MasterKey config classes must have a "provider_id" attribute defined.') -class TestMasterKey(object): - @pytest.fixture(autouse=True) - def apply_fixture(self): +class TestMasterKey(unittest.TestCase): + def setUp(self): self.mock_data_key_len_check_patcher = patch("aws_encryption_sdk.internal.utils.source_data_key_length_check") self.mock_data_key_len_check = self.mock_data_key_len_check_patcher.start() @@ -84,9 +85,8 @@ def _encrypt_data_key(self, data_key, algorithm, encryption_context): def _decrypt_data_key(self, encrypted_data_key, algorithm, encryption_context): pass - with pytest.raises(TypeError) as excinfo: + with six.assertRaisesRegex(self, TypeError, "Can't instantiate abstract class TestMasterKey *"): TestMasterKey() - excinfo.match("Can't instantiate abstract class TestMasterKey *") def test_generate_data_key_enforcement(self): class TestMasterKey(MasterKey): @@ -98,9 +98,8 @@ def _encrypt_data_key(self, data_key, algorithm, encryption_context): def _decrypt_data_key(self, encrypted_data_key, algorithm, encryption_context): pass - with pytest.raises(TypeError) as excinfo: + with six.assertRaisesRegex(self, TypeError, "Can't instantiate abstract class TestMasterKey *"): TestMasterKey() - excinfo.match("Can't instantiate abstract class TestMasterKey *") def test_encrypt_data_key_enforcement(self): class TestMasterKey(MasterKey): @@ -112,9 +111,8 @@ def _generate_data_key(self, algorithm, encryption_context): def _decrypt_data_key(self, encrypted_data_key, algorithm, encryption_context): pass - with pytest.raises(TypeError) as excinfo: + with six.assertRaisesRegex(self, TypeError, "Can't instantiate abstract class TestMasterKey *"): TestMasterKey() - excinfo.match("Can't instantiate abstract class TestMasterKey *") def test_decrypt_data_key_enforcement(self): class TestMasterKey(MasterKey): @@ -126,9 +124,8 @@ def _generate_data_key(self, algorithm, encryption_context): def _encrypt_data_key(self, data_key, algorithm, encryption_context): pass - with pytest.raises(TypeError) as excinfo: + with six.assertRaisesRegex(self, TypeError, "Can't instantiate abstract class TestMasterKey *"): TestMasterKey() - excinfo.match("Can't instantiate abstract class TestMasterKey *") def test_new(self): mock_master_key = MockMasterKey( @@ -145,9 +142,10 @@ def test_new_conf_mismatch(self): mock_config = MagicMock() mock_config.__class__ = MockMasterKeyConfig mock_config.provider_id = sentinel.mismatched_provider_id - with pytest.raises(ConfigMismatchError) as excinfo: + with six.assertRaisesRegex( + self, ConfigMismatchError, "Config provider_id does not match MasterKey provider_id: *" + ): MockMasterKey(config=mock_config) - excinfo.match("Config provider_id does not match MasterKey provider_id: *") def test_owns_data_key_owned(self): mock_master_key = MockMasterKey( @@ -222,9 +220,8 @@ def test_new_master_key_invalid(self): mock_encrypted_data_key=sentinel.encrypted_data_key, mock_decrypted_data_key=sentinel.decrypted_data_key, ) - with pytest.raises(InvalidKeyIdError) as excinfo: + with six.assertRaisesRegex(self, InvalidKeyIdError, "MasterKeys can only provide themselves. *"): mock_master_key._new_master_key(sentinel.another_key_id) - excinfo.match("MasterKeys can only provide themselves. *") def test_key_check_valid(self): mock_master_key = MockMasterKey( @@ -246,9 +243,8 @@ def test_key_check_invalid(self): ) mock_data_key = MagicMock() mock_data_key.key_provider = sentinel.another_key_provider - with pytest.raises(IncorrectMasterKeyError) as excinfo: + with six.assertRaisesRegex(self, IncorrectMasterKeyError, "Provided data key provider *"): mock_master_key._key_check(mock_data_key) - excinfo.match("Provided data key provider *") def test_generate_data_key(self): mock_master_key = MockMasterKey( From bdd25658c102484df0f353a0f94dd4643732859d Mon Sep 17 00:00:00 2001 From: Andres Sanchez Date: Mon, 17 Dec 2018 13:48:57 -0600 Subject: [PATCH 5/5] Removed unused import --- test/unit/test_providers_base_master_key_provider.py | 1 - 1 file changed, 1 deletion(-) diff --git a/test/unit/test_providers_base_master_key_provider.py b/test/unit/test_providers_base_master_key_provider.py index b05b1ab3c..44385ea17 100644 --- a/test/unit/test_providers_base_master_key_provider.py +++ b/test/unit/test_providers_base_master_key_provider.py @@ -13,7 +13,6 @@ """Test suite for aws_encryption_sdk.key_providers.base.MasterKeyProvider""" import attr import pytest -import six from mock import MagicMock, PropertyMock, call, patch, sentinel from aws_encryption_sdk.exceptions import (