def test_wrong_event_type(self): event = {} from cfripper.main import handler with pytest.raises(ValueError): handler(event, None)
def test_correct_event(): event = {"stack_template_url": "https://asdfasdfasdf/bucket/key", "stack": {"name": "blooblah"}} mock_created_s3_adapter_object = Mock() mock_created_s3_adapter_object.download_template_to_dictionary.return_value = {"Resources": {}} mock_boto3_adapter = Mock(return_value=mock_created_s3_adapter_object) mock_created_boto3_client_object = Mock() mock_created_boto3_client_object.get_template.return_value = {"Resources": {}} mock_created_boto3_client_object.compare_outputs.return_value = {} mock_boto3_client = Mock(return_value=mock_created_boto3_client_object) mock_created_rule_processor_object = Mock(spec=RuleProcessor) mock_created_rule_processor_object.process_cf_template.return_value = Result() mock_rule_processor = Mock(return_value=mock_created_rule_processor_object) mock_rule_processor.remove_debug_rules.return_value = [] with patch("cfripper.main.Boto3Client", new=mock_boto3_adapter): with patch("cfripper.main.RuleProcessor", new=mock_rule_processor): with patch("cfripper.main.Boto3Client", new=mock_boto3_client): from cfripper.main import handler handler(event, None) cfmodel = pycfmodel.parse({"Resources": {}}).resolve() mock_created_s3_adapter_object.download_template_to_dictionary.assert_called_once_with( "https://asdfasdfasdf/bucket/key" ) mock_created_rule_processor_object.process_cf_template.assert_called_once_with(cfmodel, ANY)
def test_correct_event(self): event = {'stack_template_url': 'https://asdfasdfasdf/bucket/key'} mock_created_s3_adapter_object = Mock() mock_created_s3_adapter_object.download_template_to_dictionary.return_value = { 'Resources': {} } mock_s3_adapter = Mock(return_value=mock_created_s3_adapter_object) mock_created_rule_processor_object = Mock() mock_rule_processor = Mock( return_value=mock_created_rule_processor_object) with patch('cfripper.main.S3Adapter', new=mock_s3_adapter): with patch('cfripper.main.RuleProcessor', new=mock_rule_processor): from cfripper.main import handler handler(event, None) mock_created_s3_adapter_object.download_template_to_dictionary.assert_called_once_with( 'https://asdfasdfasdf/bucket/key') mock_created_rule_processor_object.process_cf_template.assert_called_once_with( mock_created_s3_adapter_object.download_template_to_dictionary. return_value, ANY, ANY, )
def test_output_contract(self): """ Test that the output complies to the established protocol that is used by the IaC pipeline and cf-name-check. Output should look like: { "valid": "true", # NOTE: this is a string and NOT a boolean "reason": "" "failed_rules": [] # Optional } """ event = { 'stack_template_url': 'https://fake/bucket/key', } mock_created_s3_adapter_object = Mock() mock_created_s3_adapter_object.download_template_to_dictionary.return_value = { 'Resources': { "sg": { "Type": "AWS::EC2::SecurityGroup", "Properties": { "GroupDescription": "some_group_desc", "SecurityGroupIngress": { "CidrIp": "10.1.2.3/32", "FromPort": 34, "ToPort": 36, "IpProtocol": "tcp" }, "VpcId": "vpc-9f8e9dfa", } } } } mock_s3_adapter = Mock(return_value=mock_created_s3_adapter_object) with patch('cfripper.main.S3Adapter', new=mock_s3_adapter): from cfripper.main import handler event_result = handler(event, None) assert event_result['valid'] == 'true' assert isinstance(event_result['reason'], str) assert isinstance(event_result.get('failed_rules'), list)
def test_script(script_name, service_name, project_name, stack): event = { "stack_template_url": "https://fake/bucket/key", "project": project_name, "serviceName": service_name, "stack": stack, } mock_boto3_client_object = Mock() with open(f"{dir_path}/test_cf_scripts/{script_name}") as cf_script: mock_boto3_client_object.download_template_to_dictionary.return_value = convert_json_or_yaml_to_dict( cf_script.read() ) mock_boto3_client = Mock(return_value=mock_boto3_client_object) with patch("cfripper.main.Boto3Client", new=mock_boto3_client): from cfripper.main import handler event_result = handler(event, "None") print(f"{script_name} -- valid: {event_result['valid']}\n {event_result['reason']}")
def test_script(script_name, service_name, project_name): event = { 'stack_template_url': 'https://fake/bucket/key', 'project': project_name, 'serviceName': service_name, } cf_script = open('{}/test_cf_scripts/{}'.format(dir_path, script_name)) mock_created_s3_adapter_object = Mock() mock_created_s3_adapter_object.download_template_to_dictionary.return_value = S3Adapter( ).convert_json_or_yaml_to_dict(cf_script.read()) mock_s3_adapter = Mock(return_value=mock_created_s3_adapter_object) cf_script.close() with patch('cfripper.main.S3Adapter', new=mock_s3_adapter): from cfripper.main import handler event_result = handler(event, None) print('{} -- valid: {}\n {}'.format(script_name, event_result['valid'], event_result['reason']))
def test_wrong_event_type(): event = {} with pytest.raises(ValueError): handler(event, None)