Skip to content

Commit f7f25a8

Browse files
committed
add tests for encrypting, decrypting, and cycling data using streams that only support read()
1 parent 5de76e5 commit f7f25a8

File tree

1 file changed

+39
-0
lines changed

1 file changed

+39
-0
lines changed

test/functional/test_f_aws_encryption_sdk_client.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -745,3 +745,42 @@ def test_plaintext_logs_stream(caplog, capsys, plaintext_length, frame_size):
745745

746746
_look_in_logs(caplog, plaintext)
747747
_error_check(capsys)
748+
749+
750+
class NothingButRead(object):
751+
def __init__(self, data):
752+
self._data = io.BytesIO(data)
753+
754+
def read(self, size=-1):
755+
return self._data.read(size)
756+
757+
758+
@pytest.mark.parametrize("frame_length", (0, 1024))
759+
def test_cycle_nothing_but_read(frame_length):
760+
raw_plaintext = exact_length_plaintext(100)
761+
plaintext = NothingButRead(raw_plaintext)
762+
key_provider = fake_kms_key_provider()
763+
raw_ciphertext, _encrypt_header = aws_encryption_sdk.encrypt(source=plaintext, key_provider=key_provider, frame_length=frame_length)
764+
ciphertext = NothingButRead(raw_ciphertext)
765+
decrypted, _decrypt_header = aws_encryption_sdk.decrypt(source=ciphertext, key_provider=key_provider)
766+
assert raw_plaintext == decrypted
767+
768+
769+
@pytest.mark.parametrize("frame_length", (0, 1024))
770+
def test_encrypt_nothing_but_read(frame_length):
771+
raw_plaintext = exact_length_plaintext(100)
772+
plaintext = NothingButRead(raw_plaintext)
773+
key_provider = fake_kms_key_provider()
774+
ciphertext, _encrypt_header = aws_encryption_sdk.encrypt(source=plaintext, key_provider=key_provider, frame_length=frame_length)
775+
decrypted, _decrypt_header = aws_encryption_sdk.decrypt(source=ciphertext, key_provider=key_provider)
776+
assert raw_plaintext == decrypted
777+
778+
779+
@pytest.mark.parametrize("frame_length", (0, 1024))
780+
def test_decrypt_nothing_but_read(frame_length):
781+
plaintext = exact_length_plaintext(100)
782+
key_provider = fake_kms_key_provider()
783+
raw_ciphertext, _encrypt_header = aws_encryption_sdk.encrypt(source=plaintext, key_provider=key_provider, frame_length=frame_length)
784+
ciphertext = NothingButRead(raw_ciphertext)
785+
decrypted, _decrypt_header = aws_encryption_sdk.decrypt(source=ciphertext, key_provider=key_provider)
786+
assert plaintext == decrypted

0 commit comments

Comments
 (0)