Skip to content

Commit 12ea0e8

Browse files
committed
verify that attributes are always set for all KMS CMPs
1 parent 51f3da4 commit 12ea0e8

File tree

6 files changed

+44
-32
lines changed

6 files changed

+44
-32
lines changed

test/functional/functional_test_utils.py

+1-4
Original file line numberDiff line numberDiff line change
@@ -290,10 +290,7 @@ def _all_possible_cmps(algorithm_generator, require_attributes):
290290
else:
291291
outer_cmp = inner_cmp
292292

293-
yield pytest.param(
294-
outer_cmp,
295-
id=id_string,
296-
)
293+
yield pytest.param(outer_cmp, id=id_string)
297294

298295

299296
def set_parametrized_cmp(metafunc, require_attributes=True):

test/integration/encrypted/test_client.py

+8-7
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@
1414
import pytest
1515

1616
from ..integration_test_utils import ( # noqa pylint: disable=unused-import
17-
aws_kms_cmp,
1817
ddb_table_name,
1918
functional_test_utils,
19+
set_parameterized_kms_cmps,
2020
)
2121

2222
pytestmark = [pytest.mark.integ, pytest.mark.ddb_integ]
@@ -26,6 +26,7 @@ def pytest_generate_tests(metafunc):
2626
functional_test_utils.set_parametrized_actions(metafunc)
2727
functional_test_utils.set_parametrized_cmp(metafunc)
2828
functional_test_utils.set_parametrized_item(metafunc)
29+
set_parameterized_kms_cmps(metafunc)
2930

3031

3132
def test_ephemeral_item_cycle(ddb_table_name, some_cmps, parametrized_actions, parametrized_item):
@@ -35,10 +36,10 @@ def test_ephemeral_item_cycle(ddb_table_name, some_cmps, parametrized_actions, p
3536
)
3637

3738

38-
def test_ephemeral_item_cycle_kms(ddb_table_name, aws_kms_cmp, parametrized_actions, parametrized_item):
39+
def test_ephemeral_item_cycle_kms(ddb_table_name, all_aws_kms_cmps, parametrized_actions, parametrized_item):
3940
"""Test the AWS KMS CMP against a small number of curated items."""
4041
functional_test_utils.client_cycle_single_item_check(
41-
aws_kms_cmp, parametrized_actions, parametrized_item, ddb_table_name
42+
all_aws_kms_cmps, parametrized_actions, parametrized_item, ddb_table_name
4243
)
4344

4445

@@ -49,10 +50,10 @@ def test_ephemeral_batch_item_cycle(ddb_table_name, some_cmps, parametrized_acti
4950
)
5051

5152

52-
def test_ephemeral_batch_item_cycle_kms(ddb_table_name, aws_kms_cmp, parametrized_actions, parametrized_item):
53+
def test_ephemeral_batch_item_cycle_kms(ddb_table_name, all_aws_kms_cmps, parametrized_actions, parametrized_item):
5354
"""Test the AWS KMS CMP against a small number of curated items."""
5455
functional_test_utils.client_cycle_batch_items_check(
55-
aws_kms_cmp, parametrized_actions, parametrized_item, ddb_table_name
56+
all_aws_kms_cmps, parametrized_actions, parametrized_item, ddb_table_name
5657
)
5758

5859

@@ -64,9 +65,9 @@ def test_ephemeral_batch_item_cycle_scan_paginator(ddb_table_name, some_cmps, pa
6465

6566

6667
def test_ephemeral_batch_item_cycle_scan_paginator_kms(
67-
ddb_table_name, aws_kms_cmp, parametrized_actions, parametrized_item
68+
ddb_table_name, all_aws_kms_cmps, parametrized_actions, parametrized_item
6869
):
6970
"""Test a the AWS KMS CMP against a small number of curated items using the scan paginator."""
7071
functional_test_utils.client_cycle_batch_items_check_scan_paginator(
71-
aws_kms_cmp, parametrized_actions, parametrized_item, ddb_table_name
72+
all_aws_kms_cmps, parametrized_actions, parametrized_item, ddb_table_name
7273
)

test/integration/encrypted/test_resource.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@
1414
import pytest
1515

1616
from ..integration_test_utils import ( # noqa pylint: disable=unused-import
17-
aws_kms_cmp,
1817
ddb_table_name,
1918
functional_test_utils,
19+
set_parameterized_kms_cmps,
2020
)
2121

2222
pytestmark = [pytest.mark.integ, pytest.mark.ddb_integ]
@@ -26,6 +26,7 @@ def pytest_generate_tests(metafunc):
2626
functional_test_utils.set_parametrized_actions(metafunc)
2727
functional_test_utils.set_parametrized_cmp(metafunc)
2828
functional_test_utils.set_parametrized_item(metafunc)
29+
set_parameterized_kms_cmps(metafunc)
2930

3031

3132
def test_ephemeral_batch_item_cycle(ddb_table_name, some_cmps, parametrized_actions, parametrized_item):
@@ -35,8 +36,8 @@ def test_ephemeral_batch_item_cycle(ddb_table_name, some_cmps, parametrized_acti
3536
)
3637

3738

38-
def test_ephemeral_batch_item_cycle_kms(ddb_table_name, aws_kms_cmp, parametrized_actions, parametrized_item):
39+
def test_ephemeral_batch_item_cycle_kms(ddb_table_name, all_aws_kms_cmps, parametrized_actions, parametrized_item):
3940
"""Test the AWS KMS CMP against a small number of curated items."""
4041
functional_test_utils.resource_cycle_batch_items_check(
41-
aws_kms_cmp, parametrized_actions, parametrized_item, ddb_table_name
42+
all_aws_kms_cmps, parametrized_actions, parametrized_item, ddb_table_name
4243
)

test/integration/encrypted/test_table.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@
1414
import pytest
1515

1616
from ..integration_test_utils import ( # noqa pylint: disable=unused-import
17-
aws_kms_cmp,
1817
ddb_table_name,
1918
functional_test_utils,
19+
set_parameterized_kms_cmps,
2020
)
2121

2222
pytestmark = [pytest.mark.integ, pytest.mark.ddb_integ]
@@ -26,6 +26,7 @@ def pytest_generate_tests(metafunc):
2626
functional_test_utils.set_parametrized_actions(metafunc)
2727
functional_test_utils.set_parametrized_cmp(metafunc)
2828
functional_test_utils.set_parametrized_item(metafunc)
29+
set_parameterized_kms_cmps(metafunc)
2930

3031

3132
def test_ephemeral_item_cycle(ddb_table_name, some_cmps, parametrized_actions, parametrized_item):
@@ -40,6 +41,6 @@ def test_ephemeral_item_cycle_batch_writer(ddb_table_name, some_cmps, parametriz
4041
)
4142

4243

43-
def test_ephemeral_item_cycle_kms(ddb_table_name, aws_kms_cmp, parametrized_actions, parametrized_item):
44+
def test_ephemeral_item_cycle_kms(ddb_table_name, all_aws_kms_cmps, parametrized_actions, parametrized_item):
4445
"""Test the AWS KMS CMP against a small number of curated items."""
45-
functional_test_utils.table_cycle_check(aws_kms_cmp, parametrized_actions, parametrized_item, ddb_table_name)
46+
functional_test_utils.table_cycle_check(all_aws_kms_cmps, parametrized_actions, parametrized_item, ddb_table_name)

test/integration/integration_test_utils.py

+9-3
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,15 @@ def cmk_arn():
4848
return cmk_arn_value()
4949

5050

51-
@pytest.fixture
52-
def aws_kms_cmp():
53-
return AwsKmsCryptographicMaterialsProvider(key_id=cmk_arn_value())
51+
def set_parameterized_kms_cmps(metafunc, require_attributes=True):
52+
inner_cmp = AwsKmsCryptographicMaterialsProvider(key_id=cmk_arn_value())
53+
if require_attributes:
54+
outer_cmp = functional_test_utils.PassThroughCryptographicMaterialsProviderThatRequiresAttributes(inner_cmp)
55+
else:
56+
outer_cmp = inner_cmp
57+
58+
if "all_aws_kms_cmps" in metafunc.fixturenames:
59+
metafunc.parametrize("all_aws_kms_cmps", (pytest.param(outer_cmp, id="Standard KMS CMP"),))
5460

5561

5662
@pytest.fixture

test/integration/material_providers/test_aws_kms.py

+18-12
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,7 @@
2323
from dynamodb_encryption_sdk.structures import AttributeActions, EncryptionContext
2424
from dynamodb_encryption_sdk.transform import dict_to_ddb
2525

26-
from ..integration_test_utils import aws_kms_cmp # noqa pylint: disable=unused-import
27-
from ..integration_test_utils import functional_test_utils, hypothesis_strategies
26+
from ..integration_test_utils import functional_test_utils, hypothesis_strategies, set_parameterized_kms_cmps
2827

2928
pytestmark = pytest.mark.integ
3029

@@ -34,12 +33,13 @@
3433
def pytest_generate_tests(metafunc):
3534
functional_test_utils.set_parametrized_actions(metafunc)
3635
functional_test_utils.set_parametrized_item(metafunc)
36+
set_parameterized_kms_cmps(metafunc, require_attributes=False)
3737

3838

39-
def test_verify_user_agent(aws_kms_cmp, caplog):
39+
def test_verify_user_agent(all_aws_kms_cmps, caplog):
4040
caplog.set_level(level=logging.DEBUG)
4141

42-
aws_kms_cmp.encryption_materials(EncryptionContext())
42+
all_aws_kms_cmps.encryption_materials(EncryptionContext())
4343

4444
assert USER_AGENT_SUFFIX in caplog.text
4545

@@ -54,10 +54,10 @@ def _many_items():
5454

5555

5656
@pytest.mark.parametrize("item", _many_items())
57-
def test_aws_kms_diverse_indexes(aws_kms_cmp, item):
57+
def test_aws_kms_diverse_indexes(all_aws_kms_cmps, item):
5858
"""Verify that AWS KMS cycle works for items with all possible combinations for primary index attribute types."""
5959
crypto_config = CryptoConfig(
60-
materials_provider=aws_kms_cmp,
60+
materials_provider=all_aws_kms_cmps,
6161
encryption_context=EncryptionContext(
6262
partition_key_name="partition_key", sort_key_name="sort_key", attributes=dict_to_ddb(item)
6363
),
@@ -68,28 +68,34 @@ def test_aws_kms_diverse_indexes(aws_kms_cmp, item):
6868
functional_test_utils.cycle_item_check(item, crypto_config)
6969

7070

71-
def test_aws_kms_item_cycle(aws_kms_cmp, parametrized_actions, parametrized_item):
71+
def test_aws_kms_item_cycle(all_aws_kms_cmps, parametrized_actions, parametrized_item):
7272
crypto_config = CryptoConfig(
73-
materials_provider=aws_kms_cmp, encryption_context=EncryptionContext(), attribute_actions=parametrized_actions
73+
materials_provider=all_aws_kms_cmps,
74+
encryption_context=EncryptionContext(),
75+
attribute_actions=parametrized_actions,
7476
)
7577
functional_test_utils.cycle_item_check(parametrized_item, crypto_config)
7678

7779

7880
@pytest.mark.slow
7981
@hypothesis_strategies.SLOW_SETTINGS
8082
@hypothesis.given(item=hypothesis_strategies.ddb_items)
81-
def test_aws_kms_item_cycle_hypothesis_slow(aws_kms_cmp, hypothesis_actions, item):
83+
def test_aws_kms_item_cycle_hypothesis_slow(all_aws_kms_cmps, hypothesis_actions, item):
8284
crypto_config = CryptoConfig(
83-
materials_provider=aws_kms_cmp, encryption_context=EncryptionContext(), attribute_actions=hypothesis_actions
85+
materials_provider=all_aws_kms_cmps,
86+
encryption_context=EncryptionContext(),
87+
attribute_actions=hypothesis_actions,
8488
)
8589
functional_test_utils.cycle_item_check(item, crypto_config)
8690

8791

8892
@pytest.mark.veryslow
8993
@hypothesis_strategies.VERY_SLOW_SETTINGS
9094
@hypothesis.given(item=hypothesis_strategies.ddb_items)
91-
def test_aws_kms_item_cycle_hypothesis_veryslow(aws_kms_cmp, hypothesis_actions, item):
95+
def test_aws_kms_item_cycle_hypothesis_veryslow(all_aws_kms_cmps, hypothesis_actions, item):
9296
crypto_config = CryptoConfig(
93-
materials_provider=aws_kms_cmp, encryption_context=EncryptionContext(), attribute_actions=hypothesis_actions
97+
materials_provider=all_aws_kms_cmps,
98+
encryption_context=EncryptionContext(),
99+
attribute_actions=hypothesis_actions,
94100
)
95101
functional_test_utils.cycle_item_check(item, crypto_config)

0 commit comments

Comments
 (0)