From b0a009d128cbe2b00ebd2fd62dcad89d334e68c1 Mon Sep 17 00:00:00 2001 From: Mark Chappell Date: Sat, 13 Mar 2021 19:58:43 +0100 Subject: [PATCH] Move kinesis_stream tests over to just integration tests --- .../targets/kinesis_stream/defaults/main.yml | 1 + .../targets/kinesis_stream/tasks/main.yml | 9 - .../kinesis_stream/tasks/test_encryption.yml | 125 +++---- .../plugins/modules/test_kinesis_stream.py | 330 ------------------ 4 files changed, 56 insertions(+), 409 deletions(-) delete mode 100644 tests/unit/plugins/modules/test_kinesis_stream.py diff --git a/tests/integration/targets/kinesis_stream/defaults/main.yml b/tests/integration/targets/kinesis_stream/defaults/main.yml index bdaddb348e5..fd548e87e27 100644 --- a/tests/integration/targets/kinesis_stream/defaults/main.yml +++ b/tests/integration/targets/kinesis_stream/defaults/main.yml @@ -1,4 +1,5 @@ --- +run_kms_tests: True kinesis_stream_name: '{{ resource_prefix }}' kms_cmk_alias_1: '{{ resource_prefix }}-1' diff --git a/tests/integration/targets/kinesis_stream/tasks/main.yml b/tests/integration/targets/kinesis_stream/tasks/main.yml index d59cde788ab..b6791fb06d8 100644 --- a/tests/integration/targets/kinesis_stream/tasks/main.yml +++ b/tests/integration/targets/kinesis_stream/tasks/main.yml @@ -1,14 +1,5 @@ --- # ============================================================ -# Known issues: -# -# - (Tag_snake) tag keys get snake_cased in return values -# - (Tag_changed) changing tags doesn't return changed -# - (Enc_snake) return values don't get snake_cased when updating encryption -# - (Enc_disable) disabling encryption Requires key and type be set -# - (Enc_idemp) Updating encryption settings isn't idempotent -# -# ============================================================ - name: 'Setup AWS Module Defaults' module_defaults: group/aws: diff --git a/tests/integration/targets/kinesis_stream/tasks/test_encryption.yml b/tests/integration/targets/kinesis_stream/tasks/test_encryption.yml index 308cd8ee69c..23555a94586 100644 --- a/tests/integration/targets/kinesis_stream/tasks/test_encryption.yml +++ b/tests/integration/targets/kinesis_stream/tasks/test_encryption.yml @@ -11,6 +11,9 @@ # Disable (check_mode) # Disable # +# Known issue: +# - key_id needs to be in the same form as is already set to return changed=False +# - name: 'Enable encryption using {{ key_type }} (CHECK_MODE)' check_mode: yes kinesis_stream: @@ -37,11 +40,28 @@ that: - result is success - result is changed -# Merge this into the main assertion when the main return keys are -# snake_cased -- name: 'Assert expected return values' + - result.encryption_type == 'KMS' + - result.key_id in kms_cmk_1 + - result.open_shards_count == 1 + - result.retention_period_hours == 48 + - result.stream_arn == kinesis_stream_arn + - result.stream_name == kinesis_stream_name + - result.stream_status == 'ACTIVE' + - result.tags == kinesis_stream_tags_2 + +- name: 'Re-Enable encryption using {{ key_type }} (CHECK_MODE)' + kinesis_stream: + name: '{{ kinesis_stream_name }}' + encryption_state: 'enabled' + encryption_type: 'KMS' + key_id: '{{ kinesis_key }}' + check_mode: True + register: result +- name: 'Assert that state is not changed when enabling encryption' assert: that: + - result is success + - result is not changed - result.encryption_type == 'KMS' - result.key_id in kms_cmk_1 - result.open_shards_count == 1 @@ -49,17 +69,28 @@ - result.stream_arn == kinesis_stream_arn - result.stream_name == kinesis_stream_name - result.stream_status == 'ACTIVE' - #- result.tags == kinesis_stream_tags_2 - # XXX BUG (Enc_snake) - ignore_errors: yes -# Merge this into the main assertion when the tag keys are no longer -# snake_cased -- name: 'Assert tags return as expected (tags2)' + - result.tags == kinesis_stream_tags_2 + +- name: 'Re-Enable encryption using {{ key_type }}' + kinesis_stream: + name: '{{ kinesis_stream_name }}' + encryption_state: 'enabled' + encryption_type: 'KMS' + key_id: '{{ kinesis_key }}' + register: result +- name: 'Assert that state is not changed when enabling encryption' assert: that: + - result is success + - result is not changed + - result.encryption_type == 'KMS' + - result.key_id in kms_cmk_1 + - result.open_shards_count == 1 + - result.retention_period_hours == 48 + - result.stream_arn == kinesis_stream_arn + - result.stream_name == kinesis_stream_name + - result.stream_status == 'ACTIVE' - result.tags == kinesis_stream_tags_2 - # XXX BUG (Tag_snake) - ignore_errors: yes - name: 'Test encryption idempotency comparing {{ key_type }} and ID (CHECK_MODE)' check_mode: yes @@ -69,11 +100,12 @@ encryption_type: 'KMS' key_id: '{{ kinesis_key_id }}' register: result -- name: 'Assert state is changed when enabling encryption (CHECK_MODE)' +- name: 'Assert state is not changed when comparing {{ key_id }} and ID (CHECK_MODE)' assert: that: - result is success - result is not changed + ignore_errors: yes - name: 'Test encryption idempotency comparing {{ key_type }} and ID' kinesis_stream: @@ -82,16 +114,15 @@ encryption_type: 'KMS' key_id: '{{ kinesis_key_id }}' register: result -- name: 'Assert that state is changed when enabling encryption' +- name: 'Assert that state is not changed when comparing {{ key_type }} and ID' assert: that: - - result is success - result is not changed -# Merge this into the main assertion when the main return keys are -# snake_cased + ignore_errors: yes - name: 'Assert expected return values' assert: that: + - result is success - result.encryption_type == 'KMS' - result.key_id in kms_cmk_1 - result.open_shards_count == 1 @@ -99,17 +130,7 @@ - result.stream_arn == kinesis_stream_arn - result.stream_name == kinesis_stream_name - result.stream_status == 'ACTIVE' - #- result.tags == kinesis_stream_tags_2 - # XXX BUG (Enc_snake) - ignore_errors: yes -# Merge this into the main assertion when the tag keys are no longer -# snake_cased -- name: 'Assert tags return as expected (tags2)' - assert: - that: - result.tags == kinesis_stream_tags_2 - # XXX BUG (Tag_snake) - ignore_errors: yes - name: 'Test encryption idempotency comparing {{ key_type }} and Alias (CHECK_MODE)' @@ -120,12 +141,11 @@ encryption_type: 'KMS' key_id: '{{ kinesis_key_alias }}' register: result -- name: 'Assert state is changed when enabling encryption (CHECK_MODE)' +- name: 'Assert state is not changed when comparing {{ key_type }} and Alias (CHECK_MODE)' assert: that: - result is success - result is not changed - # XXX BUG (Enc_Idemp) ignore_errors: yes - name: 'Test encryption idempotency comparing {{ key_type }} and Alias' @@ -135,18 +155,15 @@ encryption_type: 'KMS' key_id: '{{ kinesis_key_alias }}' register: result -- name: 'Assert that state is changed when enabling encryption' +- name: 'Assert that state is not changed when comparing {{ key_type }} and Alias' assert: that: - - result is success - result is not changed - # XXX BUG (Enc_Idemp) ignore_errors: yes -# Merge this into the main assertion when the main return keys are -# snake_cased - name: 'Assert expected return values' assert: that: + - result is success - result.encryption_type == 'KMS' - result.key_id in kms_cmk_1 - result.open_shards_count == 1 @@ -154,17 +171,7 @@ - result.stream_arn == kinesis_stream_arn - result.stream_name == kinesis_stream_name - result.stream_status == 'ACTIVE' - #- result.tags == kinesis_stream_tags_2 - # XXX BUG (Enc_snake) - ignore_errors: yes -# Merge this into the main assertion when the tag keys are no longer -# snake_cased -- name: 'Assert tags return as expected (tags2)' - assert: - that: - result.tags == kinesis_stream_tags_2 - # XXX BUG (Tag_snake) - ignore_errors: yes - name: 'Test encryption idempotency comparing {{ key_type }} and ARN (CHECK_MODE)' check_mode: yes @@ -174,12 +181,11 @@ encryption_type: 'KMS' key_id: '{{ kinesis_key_arn }}' register: result -- name: 'Assert state is changed when enabling encryption (CHECK_MODE)' +- name: 'Assert state is not changed when comparing {{ key_type }} and ARN (CHECK_MODE)' assert: that: - result is success - result is not changed - # XXX BUG (Enc_Idemp) ignore_errors: yes - name: 'Test encryption idempotency comparing {{ key_type }} and ARN' @@ -189,17 +195,15 @@ encryption_type: 'KMS' key_id: '{{ kinesis_key_arn }}' register: result -- name: 'Assert that state is changed when enabling encryption' +- name: 'Assert that state is not changed when comparing {{ key_type }} and ARN' assert: that: - - result is success - result is not changed ignore_errors: yes -# Merge this into the main assertion when the main return keys are -# snake_cased - name: 'Assert expected return values' assert: that: + - result is success - result.encryption_type == 'KMS' - result.key_id in kms_cmk_1 - result.open_shards_count == 1 @@ -207,27 +211,17 @@ - result.stream_arn == kinesis_stream_arn - result.stream_name == kinesis_stream_name - result.stream_status == 'ACTIVE' - #- result.tags == kinesis_stream_tags_2 - # XXX BUG (Enc_snake) - ignore_errors: yes -# Merge this into the main assertion when the tag keys are no longer -# snake_cased -- name: 'Assert tags return as expected (tags2)' - assert: - that: - result.tags == kinesis_stream_tags_2 - # XXX BUG (Tag_snake) - ignore_errors: yes - name: 'Disable encryption (CHECK_MODE)' kinesis_stream: name: '{{ kinesis_stream_name }}' encryption_state: 'disabled' - # XXX BUG (Enc_Disable) encryption_type: 'KMS' # XXX Oddity of Kinesis - This needs to match the existing setting key_id: '{{ kinesis_key_arn }}' register: result + check_mode: yes - name: 'Assert state is changed when disabling encryption (CHECK_MODE)' assert: that: @@ -238,12 +232,11 @@ kinesis_stream: name: '{{ kinesis_stream_name }}' encryption_state: 'disabled' - # XXX BUG (Enc_Disable) encryption_type: 'KMS' # XXX Oddity of Kinesis - This needs to match the existing setting key_id: '{{ kinesis_key_arn }}' register: result -- name: 'Assert state is not changed when disabling encryption' +- name: 'Assert state is changed when disabling encryption' assert: that: - result is success @@ -254,12 +247,4 @@ - result.stream_arn == kinesis_stream_arn - result.stream_name == kinesis_stream_name - result.stream_status == 'ACTIVE' - #- result.tags == kinesis_stream_tags_2 -# Merge this into the main assertion when the tag keys are no longer -# snake_cased -- name: 'Assert tags return as expected (tags2)' - assert: - that: - result.tags == kinesis_stream_tags_2 - # XXX BUG (Tag_snake) - ignore_errors: yes diff --git a/tests/unit/plugins/modules/test_kinesis_stream.py b/tests/unit/plugins/modules/test_kinesis_stream.py deleted file mode 100644 index 3aacd0e88bc..00000000000 --- a/tests/unit/plugins/modules/test_kinesis_stream.py +++ /dev/null @@ -1,330 +0,0 @@ -# Make coding more python3-ish -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import pytest -import unittest - -boto3 = pytest.importorskip("boto3") -botocore = pytest.importorskip("botocore") - -from ansible_collections.community.aws.plugins.modules import kinesis_stream - -aws_region = 'us-west-2' - - -class AnsibleKinesisStreamFunctions(unittest.TestCase): - - def test_convert_to_lower(self): - example = { - 'HasMoreShards': True, - 'RetentionPeriodHours': 24, - 'StreamName': 'test', - 'StreamARN': 'arn:aws:kinesis:east-side:123456789:stream/test', - 'StreamStatus': 'ACTIVE' - } - converted_example = kinesis_stream.convert_to_lower(example) - keys = list(converted_example.keys()) - keys.sort() - for i in range(len(keys)): - if i == 0: - self.assertEqual(keys[i], 'has_more_shards') - if i == 1: - self.assertEqual(keys[i], 'retention_period_hours') - if i == 2: - self.assertEqual(keys[i], 'stream_arn') - if i == 3: - self.assertEqual(keys[i], 'stream_name') - if i == 4: - self.assertEqual(keys[i], 'stream_status') - - def test_make_tags_in_aws_format(self): - example = { - 'env': 'development' - } - should_return = [ - { - 'Key': 'env', - 'Value': 'development' - } - ] - aws_tags = kinesis_stream.make_tags_in_aws_format(example) - self.assertEqual(aws_tags, should_return) - - def test_make_tags_in_proper_format(self): - example = [ - { - 'Key': 'env', - 'Value': 'development' - }, - { - 'Key': 'service', - 'Value': 'web' - } - ] - should_return = { - 'env': 'development', - 'service': 'web' - } - proper_tags = kinesis_stream.make_tags_in_proper_format(example) - self.assertEqual(proper_tags, should_return) - - def test_recreate_tags_from_list(self): - example = [('environment', 'development'), ('service', 'web')] - should_return = [ - { - 'Key': 'environment', - 'Value': 'development' - }, - { - 'Key': 'service', - 'Value': 'web' - } - ] - aws_tags = kinesis_stream.recreate_tags_from_list(example) - self.assertEqual(aws_tags, should_return) - - def test_get_tags(self): - client = boto3.client('kinesis', region_name=aws_region) - success, err_msg, tags = kinesis_stream.get_tags(client, 'test', check_mode=True) - self.assertTrue(success) - should_return = [ - { - 'Key': 'DryRunMode', - 'Value': 'true' - } - ] - self.assertEqual(tags, should_return) - - def test_find_stream(self): - client = boto3.client('kinesis', region_name=aws_region) - success, err_msg, stream = ( - kinesis_stream.find_stream(client, 'test', check_mode=True) - ) - should_return = { - 'OpenShardsCount': 5, - 'ClosedShardsCount': 0, - 'ShardsCount': 5, - 'HasMoreShards': True, - 'RetentionPeriodHours': 24, - 'StreamName': 'test', - 'StreamARN': 'arn:aws:kinesis:east-side:123456789:stream/test', - 'StreamStatus': 'ACTIVE', - 'EncryptionType': 'NONE' - } - self.assertTrue(success) - self.assertEqual(stream, should_return) - - def test_wait_for_status(self): - client = boto3.client('kinesis', region_name=aws_region) - success, err_msg, stream = ( - kinesis_stream.wait_for_status( - client, 'test', 'ACTIVE', check_mode=True - ) - ) - should_return = { - 'OpenShardsCount': 5, - 'ClosedShardsCount': 0, - 'ShardsCount': 5, - 'HasMoreShards': True, - 'RetentionPeriodHours': 24, - 'StreamName': 'test', - 'StreamARN': 'arn:aws:kinesis:east-side:123456789:stream/test', - 'StreamStatus': 'ACTIVE', - 'EncryptionType': 'NONE' - } - self.assertTrue(success) - self.assertEqual(stream, should_return) - - def test_tags_action_create(self): - client = boto3.client('kinesis', region_name=aws_region) - tags = { - 'env': 'development', - 'service': 'web' - } - success, err_msg = ( - kinesis_stream.tags_action( - client, 'test', tags, 'create', check_mode=True - ) - ) - self.assertTrue(success) - - def test_tags_action_delete(self): - client = boto3.client('kinesis', region_name=aws_region) - tags = { - 'env': 'development', - 'service': 'web' - } - success, err_msg = ( - kinesis_stream.tags_action( - client, 'test', tags, 'delete', check_mode=True - ) - ) - self.assertTrue(success) - - def test_tags_action_invalid(self): - client = boto3.client('kinesis', region_name=aws_region) - tags = { - 'env': 'development', - 'service': 'web' - } - success, err_msg = ( - kinesis_stream.tags_action( - client, 'test', tags, 'append', check_mode=True - ) - ) - self.assertFalse(success) - - def test_update_tags(self): - client = boto3.client('kinesis', region_name=aws_region) - tags = { - 'env': 'development', - 'service': 'web' - } - success, changed, err_msg = ( - kinesis_stream.update_tags( - client, 'test', tags, check_mode=True - ) - ) - self.assertTrue(success) - - def test_stream_action_create(self): - client = boto3.client('kinesis', region_name=aws_region) - success, err_msg = ( - kinesis_stream.stream_action( - client, 'test', 10, 'create', check_mode=True - ) - ) - self.assertTrue(success) - - def test_stream_action_delete(self): - client = boto3.client('kinesis', region_name=aws_region) - success, err_msg = ( - kinesis_stream.stream_action( - client, 'test', 10, 'delete', check_mode=True - ) - ) - self.assertTrue(success) - - def test_stream_action_invalid(self): - client = boto3.client('kinesis', region_name=aws_region) - success, err_msg = ( - kinesis_stream.stream_action( - client, 'test', 10, 'append', check_mode=True - ) - ) - self.assertFalse(success) - - def test_retention_action_increase(self): - client = boto3.client('kinesis', region_name=aws_region) - success, err_msg = ( - kinesis_stream.retention_action( - client, 'test', 48, 'increase', check_mode=True - ) - ) - self.assertTrue(success) - - def test_retention_action_decrease(self): - client = boto3.client('kinesis', region_name=aws_region) - success, err_msg = ( - kinesis_stream.retention_action( - client, 'test', 24, 'decrease', check_mode=True - ) - ) - self.assertTrue(success) - - def test_retention_action_invalid(self): - client = boto3.client('kinesis', region_name=aws_region) - success, err_msg = ( - kinesis_stream.retention_action( - client, 'test', 24, 'create', check_mode=True - ) - ) - self.assertFalse(success) - - def test_update_shard_count(self): - client = boto3.client('kinesis', region_name=aws_region) - success, err_msg = ( - kinesis_stream.update_shard_count( - client, 'test', 5, check_mode=True - ) - ) - self.assertTrue(success) - - def test_update(self): - client = boto3.client('kinesis', region_name=aws_region) - current_stream = { - 'OpenShardsCount': 5, - 'ClosedShardsCount': 0, - 'ShardsCount': 1, - 'HasMoreShards': True, - 'RetentionPeriodHours': 24, - 'StreamName': 'test', - 'StreamARN': 'arn:aws:kinesis:east-side:123456789:stream/test', - 'StreamStatus': 'ACTIVE', - 'EncryptionType': 'NONE' - } - tags = { - 'env': 'development', - 'service': 'web' - } - success, changed, err_msg = ( - kinesis_stream.update( - client, current_stream, 'test', number_of_shards=2, retention_period=48, - tags=tags, check_mode=True - ) - ) - self.assertTrue(success) - self.assertTrue(changed) - self.assertEqual(err_msg, 'Kinesis Stream test updated successfully.') - - def test_create_stream(self): - client = boto3.client('kinesis', region_name=aws_region) - tags = { - 'env': 'development', - 'service': 'web' - } - success, changed, err_msg, results = ( - kinesis_stream.create_stream( - client, 'test', number_of_shards=10, retention_period=48, - tags=tags, check_mode=True - ) - ) - should_return = { - 'open_shards_count': 5, - 'closed_shards_count': 0, - 'shards_count': 5, - 'has_more_shards': True, - 'retention_period_hours': 24, - 'stream_name': 'test', - 'stream_arn': 'arn:aws:kinesis:east-side:123456789:stream/test', - 'stream_status': 'ACTIVE', - 'encryption_type': 'NONE', - 'tags': tags, - } - self.assertTrue(success) - self.assertTrue(changed) - self.assertEqual(results, should_return) - self.assertEqual(err_msg, 'Kinesis Stream test updated successfully.') - - def test_enable_stream_encription(self): - client = boto3.client('kinesis', region_name=aws_region) - success, changed, err_msg, results = ( - kinesis_stream.start_stream_encryption( - client, 'test', encryption_type='KMS', key_id='', wait=True, wait_timeout=60, check_mode=True - ) - ) - self.assertTrue(success) - self.assertTrue(changed) - self.assertEqual(err_msg, 'Kinesis Stream test encryption started successfully.') - -# def test_disable_stream_encryption(self): -# client = boto3.client('kinesis', region_name=aws_region) -# success, changed, err_msg, results = ( -# kinesis_stream.stop_stream_encryption( -# client, 'test', encryption_type='KMS', key_id='', wait=True, wait_timeout=60, check_mode=True -# ) -# ) -# self.assertTrue(success) -# self.assertTrue(changed) -# self.assertEqual(err_msg, 'Kinesis Stream test encryption stopped successfully.')