Skip to content

Commit 2a4603f

Browse files
authored
Merge pull request #288 from Kudbettin/fix-issue-279
Fixes @warning tag where further steps were executed intentionally.
2 parents 0888baf + dc03e69 commit 2a4603f

File tree

6 files changed

+56
-3
lines changed

6 files changed

+56
-3
lines changed

terraform_compliance/common/error_handling.py

+2
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,8 @@ def _process(self):
7070
self._fail_step(self.step_obj.id)
7171
else:
7272
self.step_obj.state = Step.State.SKIPPED
73+
for step in self.step_obj.parent.all_steps:
74+
step.runable = False
7375
return
7476

7577
if self.no_failure is False:

tests/functional/run_functional_tests.py

+23-3
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ class Config(object):
3333

3434
test_result = ''
3535
expected = ''
36+
unexpected = ''
3637

3738
if not os.path.isfile('{}/plan.out.json'.format(directory)) or not os.path.isfile('{}/test.feature'.format(directory)):
3839
test_result = colorful.orange('skipped')
@@ -44,6 +45,10 @@ class Config(object):
4445
with open('{}/.expected'.format(directory)) as expected_file:
4546
expected = expected_file.read().split('\n')
4647

48+
if os.path.isfile('{}/.unexpected'.format(directory)):
49+
with open('{}/.unexpected'.format(directory)) as unexpected_file:
50+
unexpected = unexpected_file.read().split('\n')
51+
4752
if not os.path.isfile('{}/.no_early_exit'.format(directory)):
4853
parameters.append('-q')
4954

@@ -81,11 +86,26 @@ class Config(object):
8186

8287
test_result = colorful.red('failed')
8388
failure_happened = True
84-
else:
85-
test_result = colorful.green('passed')
8689

87-
else:
90+
if unexpected:
91+
unexpected_failures = [
92+
unexp for unexp in unexpected
93+
if re.findall(unexp, str(test_process.stdout))
94+
]
95+
96+
if unexpected_failures:
97+
print('\nOutput: {}'.format(test_process.stdout))
98+
print('Found;')
99+
for failure in expected_failures:
100+
print('\t{}'.format(colorful.yellow(failure)))
101+
print('in the test output. This was unexpected.\n')
102+
103+
test_result = colorful.red('failed')
104+
failure_happened = True
105+
106+
if not failure_happened:
88107
test_result = colorful.green('passed')
108+
89109
else:
90110
print('Output: {}'.format(test_process.stdout))
91111
test_result = colorful.red('failed')
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
warning: aws_autoscaling_group.bar \(aws_autoscaling_group\) does not have health_check_type property.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
warning: resource property in aws_autoscaling_group.bar resource does not match with \(^ELB$\)|\(^EC2$\) case insensitive regex. It is set to us-east-1a.
2+
warning: resource property in aws_autoscaling_group.bar resource does not match with \(^ELB$\)|\(^EC2$\) case insensitive regex. It is set to 1.
3+
warning: resource property in aws_autoscaling_group.bar resource does not match with \(^ELB$\)|\(^EC2$\) case insensitive regex. It is set to None.
4+
warning: resource property in aws_autoscaling_group.bar resource does not match with \(^ELB$\)|\(^EC2$\) case insensitive regex. It is set to False.
5+
warning: resource property in aws_autoscaling_group.bar resource does not match with \(^ELB$\)|\(^EC2$\) case insensitive regex. It is set to 300.
6+
warning: resource property in aws_autoscaling_group.bar resource does not match with \(^ELB$\)|\(^EC2$\) case insensitive regex. It is set to None.
7+
warning: resource property in aws_autoscaling_group.bar resource does not match with \(^ELB$\)|\(^EC2$\) case insensitive regex. It is set to $Latest.
8+
warning: resource property in aws_autoscaling_group.bar resource does not match with \(^ELB$\)|\(^EC2$\) case insensitive regex. It is set to True.
9+
warning: resource property in aws_autoscaling_group.bar resource does not match with \(^ELB$\)|\(^EC2$\) case insensitive regex. It is set to True.
10+
warning: resource property in aws_autoscaling_group.bar resource does not match with \(^ELB$\)|\(^EC2$\) case insensitive regex. It is set to None.
11+
warning: resource property in aws_autoscaling_group.bar resource does not match with \(^ELB$\)|\(^EC2$\) case insensitive regex. It is set to 1.
12+
warning: resource property in aws_autoscaling_group.bar resource does not match with \(^ELB$\)|\(^EC2$\) case insensitive regex. It is set to 1Minute.
13+
warning: resource property in aws_autoscaling_group.bar resource does not match with \(^ELB$\)|\(^EC2$\) case insensitive regex. It is set to None.
14+
warning: resource property in aws_autoscaling_group.bar resource does not match with \(^ELB$\)|\(^EC2$\) case insensitive regex. It is set to 1.
15+
warning: resource property in aws_autoscaling_group.bar resource does not match with \(^ELB$\)|\(^EC2$\) case insensitive regex. It is set to None.
16+
warning: resource property in aws_autoscaling_group.bar resource does not match with \(^ELB$\)|\(^EC2$\) case insensitive regex. It is set to None.
17+
warning: resource property in aws_autoscaling_group.bar resource does not match with \(^ELB$\)|\(^EC2$\) case insensitive regex. It is set to False.
18+
warning: resource property in aws_autoscaling_group.bar resource does not match with \(^ELB$\)|\(^EC2$\) case insensitive regex. It is set to None.
19+
warning: resource property in aws_autoscaling_group.bar resource does not match with \(^ELB$\)|\(^EC2$\) case insensitive regex. It is set to None.
20+
warning: resource property in aws_autoscaling_group.bar resource does not match with \(^ELB$\)|\(^EC2$\) case insensitive regex. It is set to None.
21+
warning: resource property in aws_autoscaling_group.bar resource does not match with \(^ELB$\)|\(^EC2$\) case insensitive regex. It is set to None.
22+
warning: resource property in aws_autoscaling_group.bar resource does not match with \(^ELB$\)|\(^EC2$\) case insensitive regex. It is set to 10m.
23+
warning: resource property in aws_autoscaling_group.bar resource does not match with \(^ELB$\)|\(^EC2$\) case insensitive regex. It is set to None.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"format_version":"0.1","terraform_version":"0.12.25","planned_values":{"root_module":{"resources":[{"address":"aws_autoscaling_group.bar","mode":"managed","type":"aws_autoscaling_group","name":"bar","provider_name":"aws","schema_version":0,"values":{"availability_zones":["us-east-1a"],"desired_capacity":1,"enabled_metrics":null,"force_delete":false,"health_check_grace_period":300,"initial_lifecycle_hook":[],"launch_configuration":null,"launch_template":[{"version":"$Latest"}],"max_instance_lifetime":null,"max_size":1,"metrics_granularity":"1Minute","min_elb_capacity":null,"min_size":1,"mixed_instances_policy":[],"name_prefix":null,"placement_group":null,"protect_from_scale_in":false,"suspended_processes":null,"tag":[],"tags":null,"termination_policies":null,"timeouts":null,"wait_for_capacity_timeout":"10m","wait_for_elb_capacity":null}},{"address":"aws_launch_template.foobar","mode":"managed","type":"aws_launch_template","name":"foobar","provider_name":"aws","schema_version":0,"values":{"block_device_mappings":[],"capacity_reservation_specification":[],"cpu_options":[],"credit_specification":[],"description":null,"disable_api_termination":null,"ebs_optimized":null,"elastic_gpu_specifications":[],"elastic_inference_accelerator":[],"hibernation_options":[],"iam_instance_profile":[],"image_id":"ami-1a2b3c","instance_initiated_shutdown_behavior":null,"instance_market_options":[],"instance_type":"t2.micro","kernel_id":null,"key_name":null,"license_specification":[],"monitoring":[],"name_prefix":"foobar","network_interfaces":[],"placement":[],"ram_disk_id":null,"security_group_names":null,"tag_specifications":[],"tags":null,"user_data":null,"vpc_security_group_ids":null}}]}},"resource_changes":[{"address":"aws_autoscaling_group.bar","mode":"managed","type":"aws_autoscaling_group","name":"bar","provider_name":"aws","change":{"actions":["create"],"before":null,"after":{"availability_zones":["us-east-1a"],"desired_capacity":1,"enabled_metrics":null,"force_delete":false,"health_check_grace_period":300,"initial_lifecycle_hook":[],"launch_configuration":null,"launch_template":[{"version":"$Latest"}],"max_instance_lifetime":null,"max_size":1,"metrics_granularity":"1Minute","min_elb_capacity":null,"min_size":1,"mixed_instances_policy":[],"name_prefix":null,"placement_group":null,"protect_from_scale_in":false,"suspended_processes":null,"tag":[],"tags":null,"termination_policies":null,"timeouts":null,"wait_for_capacity_timeout":"10m","wait_for_elb_capacity":null},"after_unknown":{"arn":true,"availability_zones":[false],"default_cooldown":true,"health_check_type":true,"id":true,"initial_lifecycle_hook":[],"launch_template":[{"id":true,"name":true}],"load_balancers":true,"mixed_instances_policy":[],"name":true,"service_linked_role_arn":true,"tag":[],"target_group_arns":true,"vpc_zone_identifier":true}}},{"address":"aws_launch_template.foobar","mode":"managed","type":"aws_launch_template","name":"foobar","provider_name":"aws","change":{"actions":["create"],"before":null,"after":{"block_device_mappings":[],"capacity_reservation_specification":[],"cpu_options":[],"credit_specification":[],"description":null,"disable_api_termination":null,"ebs_optimized":null,"elastic_gpu_specifications":[],"elastic_inference_accelerator":[],"hibernation_options":[],"iam_instance_profile":[],"image_id":"ami-1a2b3c","instance_initiated_shutdown_behavior":null,"instance_market_options":[],"instance_type":"t2.micro","kernel_id":null,"key_name":null,"license_specification":[],"monitoring":[],"name_prefix":"foobar","network_interfaces":[],"placement":[],"ram_disk_id":null,"security_group_names":null,"tag_specifications":[],"tags":null,"user_data":null,"vpc_security_group_ids":null},"after_unknown":{"arn":true,"block_device_mappings":[],"capacity_reservation_specification":[],"cpu_options":[],"credit_specification":[],"default_version":true,"elastic_gpu_specifications":[],"elastic_inference_accelerator":[],"hibernation_options":[],"iam_instance_profile":[],"id":true,"instance_market_options":[],"latest_version":true,"license_specification":[],"metadata_options":true,"monitoring":[],"name":true,"network_interfaces":[],"placement":[],"tag_specifications":[]}}}],"configuration":{"root_module":{"resources":[{"address":"aws_autoscaling_group.bar","mode":"managed","type":"aws_autoscaling_group","name":"bar","provider_config_key":"aws","expressions":{"availability_zones":{"constant_value":["us-east-1a"]},"desired_capacity":{"constant_value":1},"launch_template":[{"id":{"references":["aws_launch_template.foobar"]},"version":{"constant_value":"$Latest"}}],"max_size":{"constant_value":1},"min_size":{"constant_value":1}},"schema_version":0},{"address":"aws_launch_template.foobar","mode":"managed","type":"aws_launch_template","name":"foobar","provider_config_key":"aws","expressions":{"image_id":{"constant_value":"ami-1a2b3c"},"instance_type":{"constant_value":"t2.micro"},"name_prefix":{"constant_value":"foobar"}},"schema_version":0}]}}}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
Feature: ASG
2+
@warning
3+
Scenario: Health checks not enabled for ASG
4+
Given I have aws_autoscaling_group defined
5+
Then it must contain health_check_type
6+
And its value must match the "(^ELB$)|(^EC2$)" regex

0 commit comments

Comments
 (0)