Skip to content

Commit dfb8be4

Browse files
committed
separate client cycle items checkers to prepare for EncryptedClient integration tests
1 parent bdb7f7a commit dfb8be4

File tree

2 files changed

+87
-60
lines changed

2 files changed

+87
-60
lines changed

test/functional/encrypted/test_client.py

Lines changed: 15 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,13 @@
1111
# ANY KIND, either express or implied. See the License for the specific
1212
# language governing permissions and limitations under the License.
1313
"""Functional tests for ``dynamodb_encryption_sdk.encrypted.client``."""
14-
import boto3
1514
import hypothesis
1615
import pytest
1716

18-
from dynamodb_encryption_sdk.encrypted.client import EncryptedClient
19-
from dynamodb_encryption_sdk.internal.formatting.transform import ddb_to_dict, dict_to_ddb
2017
from ..functional_test_utils import (
21-
check_encrypted_item, cycle_batch_item_check, set_parametrized_actions, set_parametrized_cmp,
22-
set_parametrized_item, TEST_KEY, TEST_TABLE_NAME
18+
client_cycle_batch_items_check, client_cycle_single_item_check,
19+
set_parametrized_actions, set_parametrized_cmp, set_parametrized_item,
20+
TEST_TABLE_NAME
2321
)
2422
from ..functional_test_utils import example_table # noqa pylint: disable=unused-import
2523
from ..hypothesis_strategies import ddb_items, SLOW_SETTINGS, VERY_SLOW_SETTINGS
@@ -34,67 +32,24 @@ def pytest_generate_tests(metafunc):
3432

3533

3634
def _client_cycle_single_item_check(materials_provider, initial_actions, initial_item):
37-
check_attribute_actions = initial_actions.copy()
38-
check_attribute_actions.set_index_keys(*list(TEST_KEY.keys()))
39-
item = initial_item.copy()
40-
item.update(TEST_KEY)
41-
ddb_item = dict_to_ddb(item)
42-
ddb_key = dict_to_ddb(TEST_KEY)
43-
44-
client = boto3.client('dynamodb', region_name='us-west-2')
45-
e_client = EncryptedClient(
46-
client=client,
47-
materials_provider=materials_provider,
48-
attribute_actions=initial_actions
35+
return client_cycle_single_item_check(
36+
materials_provider,
37+
initial_actions,
38+
initial_item,
39+
TEST_TABLE_NAME,
40+
'us-west-2'
4941
)
5042

51-
_put_result = e_client.put_item( # noqa
52-
TableName=TEST_TABLE_NAME,
53-
Item=ddb_item
54-
)
55-
56-
encrypted_result = client.get_item(
57-
TableName=TEST_TABLE_NAME,
58-
Key=ddb_key
59-
)
60-
check_encrypted_item(item, ddb_to_dict(encrypted_result['Item']), check_attribute_actions)
61-
62-
decrypted_result = e_client.get_item(
63-
TableName=TEST_TABLE_NAME,
64-
Key=ddb_key
65-
)
66-
assert ddb_to_dict(decrypted_result['Item']) == item
67-
68-
e_client.delete_item(
69-
TableName=TEST_TABLE_NAME,
70-
Key=ddb_key
71-
)
72-
del item
73-
del check_attribute_actions
74-
7543

7644
def _client_cycle_batch_items_check(materials_provider, initial_actions, initial_item):
77-
client = boto3.client('dynamodb', region_name='us-west-2')
78-
e_client = EncryptedClient(
79-
client=client,
80-
materials_provider=materials_provider,
81-
attribute_actions=initial_actions
45+
return client_cycle_batch_items_check(
46+
materials_provider,
47+
initial_actions,
48+
initial_item,
49+
TEST_TABLE_NAME,
50+
'us-west-2'
8251
)
8352

84-
cycle_batch_item_check(
85-
raw=client,
86-
encrypted=e_client,
87-
initial_actions=initial_actions,
88-
initial_item=initial_item,
89-
write_transformer=dict_to_ddb,
90-
read_transformer=ddb_to_dict
91-
)
92-
93-
raw_scan_result = client.scan(TableName=TEST_TABLE_NAME)
94-
e_scan_result = e_client.scan(TableName=TEST_TABLE_NAME)
95-
assert not raw_scan_result['Items']
96-
assert not e_scan_result['Items']
97-
9853

9954
def test_ephemeral_item_cycle(example_table, some_cmps, parametrized_actions, parametrized_item):
10055
"""Test a small number of curated CMPs against a small number of curated items."""

test/functional/functional_test_utils.py

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,12 @@
2424
import pytest
2525

2626
from dynamodb_encryption_sdk.delegated_keys.jce import JceNameLocalDelegatedKey
27+
from dynamodb_encryption_sdk.encrypted.client import EncryptedClient
2728
from dynamodb_encryption_sdk.encrypted.item import decrypt_python_item, encrypt_python_item
2829
from dynamodb_encryption_sdk.encrypted.resource import EncryptedResource
2930
from dynamodb_encryption_sdk.encrypted.table import EncryptedTable
3031
from dynamodb_encryption_sdk.identifiers import CryptoAction
32+
from dynamodb_encryption_sdk.internal.formatting.transform import ddb_to_dict, dict_to_ddb
3133
from dynamodb_encryption_sdk.internal.identifiers import ReservedAttributes
3234
from dynamodb_encryption_sdk.material_providers.static import StaticCryptographicMaterialsProvider
3335
from dynamodb_encryption_sdk.material_providers.wrapped import WrappedCryptographicMaterialsProvider
@@ -530,3 +532,73 @@ def resource_cycle_batch_items_check(materials_provider, initial_actions, initia
530532
e_scan_result = e_resource.Table(table_name).scan()
531533
assert not raw_scan_result['Items']
532534
assert not e_scan_result['Items']
535+
536+
537+
def client_cycle_single_item_check(materials_provider, initial_actions, initial_item, table_name, region_name=None):
538+
check_attribute_actions = initial_actions.copy()
539+
check_attribute_actions.set_index_keys(*list(TEST_KEY.keys()))
540+
item = initial_item.copy()
541+
item.update(TEST_KEY)
542+
ddb_item = dict_to_ddb(item)
543+
ddb_key = dict_to_ddb(TEST_KEY)
544+
545+
kwargs = {}
546+
if region_name is not None:
547+
kwargs['region_name'] = region_name
548+
client = boto3.client('dynamodb', **kwargs)
549+
e_client = EncryptedClient(
550+
client=client,
551+
materials_provider=materials_provider,
552+
attribute_actions=initial_actions
553+
)
554+
555+
_put_result = e_client.put_item( # noqa
556+
TableName=table_name,
557+
Item=ddb_item
558+
)
559+
560+
encrypted_result = client.get_item(
561+
TableName=table_name,
562+
Key=ddb_key
563+
)
564+
check_encrypted_item(item, ddb_to_dict(encrypted_result['Item']), check_attribute_actions)
565+
566+
decrypted_result = e_client.get_item(
567+
TableName=table_name,
568+
Key=ddb_key
569+
)
570+
assert ddb_to_dict(decrypted_result['Item']) == item
571+
572+
e_client.delete_item(
573+
TableName=table_name,
574+
Key=ddb_key
575+
)
576+
del item
577+
del check_attribute_actions
578+
579+
580+
def client_cycle_batch_items_check(materials_provider, initial_actions, initial_item, table_name, region_name=None):
581+
kwargs = {}
582+
if region_name is not None:
583+
kwargs['region_name'] = region_name
584+
client = boto3.client('dynamodb', **kwargs)
585+
e_client = EncryptedClient(
586+
client=client,
587+
materials_provider=materials_provider,
588+
attribute_actions=initial_actions
589+
)
590+
591+
cycle_batch_item_check(
592+
raw=client,
593+
encrypted=e_client,
594+
initial_actions=initial_actions,
595+
initial_item=initial_item,
596+
write_transformer=dict_to_ddb,
597+
read_transformer=ddb_to_dict,
598+
table_name=table_name
599+
)
600+
601+
raw_scan_result = client.scan(TableName=table_name)
602+
e_scan_result = e_client.scan(TableName=table_name)
603+
assert not raw_scan_result['Items']
604+
assert not e_scan_result['Items']

0 commit comments

Comments
 (0)