Ejemplo n.º 1
0
    def test_wrong_event_type(self):
        event = {}

        from cfripper.main import handler

        with pytest.raises(ValueError):
            handler(event, None)
Ejemplo n.º 2
0
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)
Ejemplo n.º 3
0
    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,
        )
Ejemplo n.º 4
0
    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)
Ejemplo n.º 5
0
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']}")
Ejemplo n.º 6
0
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']))
Ejemplo n.º 7
0
def test_wrong_event_type():
    event = {}
    with pytest.raises(ValueError):
        handler(event, None)