def test_handler_just_resource_owner(context, cfn_event,
                                     list_buckets_response):
    context.mock_ct.describe_trails.return_value = {'trailList': []}
    context.mock_cur.describe_report_definitions.return_value = {
        'ReportDefinitions': []
    }
    context.mock_orgs.describe_organization.return_value = {'Organization': {}}
    context.mock_s3.list_buckets.return_value = list_buckets_response
    ret = app.handler(cfn_event, None)
    assert ret is None
    assert context.mock_cfnresponse_send.call_count == 1
    ((_, _, status, output, _),
     kwargs) = context.mock_cfnresponse_send.call_args
    assert status == cfnresponse.SUCCESS
    assert output == {
        'AuditCloudTrailBucketPrefix': None,
        'AuditCloudTrailBucketName': None,
        'RemoteCloudTrailBucket': True,
        'CloudTrailSNSTopicArn': None,
        'CloudTrailTrailArn': None,
        'VisibleCloudTrailArns': None,
        'IsOrganizationTrail': None,
        'IsAuditAccount': False,
        'IsCloudTrailOwnerAccount': False,
        'IsResourceOwnerAccount': True,
        'IsMasterPayerAccount': False,
        'IsOrganizationMasterAccount': False,
        'MasterPayerBillingBucketName': None,
        'MasterPayerBillingBucketPath': None,
    }
def test_handler_non_master_payer_remote(
        context, cfn_event, describe_trails_response_local,
        list_buckets_response, describe_report_definitions_response_remote,
        describe_organizations_remote):
    context.mock_ct.describe_trails.return_value = describe_trails_response_local
    context.mock_cur.describe_report_definitions.return_value = describe_report_definitions_response_remote
    context.mock_orgs.describe_organization.return_value = describe_organizations_remote
    context.mock_s3.list_buckets.return_value = list_buckets_response
    ret = app.handler(cfn_event, None)
    assert ret is None
    assert context.mock_cfnresponse_send.call_count == 1
    ((_, _, status, output, _),
     kwargs) = context.mock_cfnresponse_send.call_args
    assert status == cfnresponse.SUCCESS
    assert output == {
        'AuditCloudTrailBucketPrefix': 'trails',
        'AuditCloudTrailBucketName': LOCAL_BUCKET_NAME,
        'RemoteCloudTrailBucket': False,
        'CloudTrailSNSTopicArn': LOCAL_TOPIC_ARN,
        'CloudTrailTrailArn': LOCAL_TRAIL_ARN,
        'VisibleCloudTrailArns': LOCAL_TRAIL_ARN,
        'IsOrganizationTrail': False,
        'IsAuditAccount': True,
        'IsCloudTrailOwnerAccount': True,
        'IsResourceOwnerAccount': True,
        'IsMasterPayerAccount': False,
        'IsOrganizationMasterAccount': False,
        'MasterPayerBillingBucketName': REMOTE_BUCKET_NAME,
        'MasterPayerBillingBucketPath': 'reports/valid-local-report',
    }
 def test_app(self):
     from src import app
     self.assertRaises(ValueError, app.handler, None, None)
     event = {"body": "{\"operation\": \"UNKNOWN_OPERATION\"} "}
     handler_response = app.handler(event, None)
     self.assertEqual(handler_response[Constants.RESPONSE_STATUS_CODE], 400,
                      'HTTP Status code not 400')
def test_handler_exception(context):
    ret = app.handler({}, None)
    assert ret is None
    assert context.mock_cfnresponse_send.call_count == 1
    ((_, _, status, output, _),
     kwargs) = context.mock_cfnresponse_send.call_args
    assert status == cfnresponse.SUCCESS
    assert output == app.DEFAULT_OUTPUT
 def test_app(self):
     from src import app
     self.assertRaises(ValueError, app.handler, None, None)
     event = {"body": "{}"}
     handler_response = app.handler(event, None)
     self.assertEqual(handler_response[Constants.RESPONSE_STATUS_CODE],
                      http.HTTPStatus.BAD_REQUEST,
                      'HTTP Status code not 400')
def test_handler_only_connected(context, cfn_event):
    context.mock_ct.describe_trails.return_value = {'trailList': []}
    context.mock_cur.describe_report_definitions.return_value = {
        'ReportDefinitions': []
    }
    context.mock_s3.list_buckets.return_value = {'Buckets': []}
    ret = app.handler(cfn_event, None)
    assert ret is None
    assert context.mock_cfnresponse_send.call_count == 1
    ((_, _, status, output, _),
     kwargs) = context.mock_cfnresponse_send.call_args
    assert status == cfnresponse.SUCCESS
    assert output == assoc_in(app.DEFAULT_OUTPUT, ['IsResourceOwnerAccount'],
                              True)
Example #7
0
def test_handler_no_cfn_coeffects(context, cfn_event):
    response = Response(200)
    context.mock_requests_post.return_value = response
    ret = app.handler(cfn_event, None)
    assert ret is None
    assert context.mock_cfnresponse_send.call_count == 1
    assert context.mock_requests_post.call_count == 1
    ((_, _, status, output, _), _) = context.mock_cfnresponse_send.call_args
    expected = {
        'version': '1',
        'message_source': 'cfn',
        'message_type': 'account-link-provisioned',
        'data': {
            'discovery': {
                'audit_cloudtrail_bucket_name': None,
                'audit_cloudtrail_bucket_prefix': None,
                'cloudtrail_sns_topic_arn': None,
                'cloudtrail_trail_arn': None,
                'is_audit_account': False,
                'is_cloudtrail_owner_account': False,
                'is_master_payer_account': False,
                'is_organization_trail': None,
                'is_organization_master_account': False,
                'is_resource_owner_account': False,
                'master_payer_billing_bucket_name': None,
                'master_payer_billing_bucket_path': None,
                'remote_cloudtrail_bucket': True,
                'visible_cloudtrail_arns': None,
            },
            'metadata': {
                'cloud_region': 'str',
                'cz_account_name': 'str',
                'cloud_account_id': 'str',
                'reactor_callback_url': 'str',
                'external_id': 'str',
                'reactor_id': 'str',
            },
            'links': {
                'audit': {
                    'role_arn': None
                },
                'legacy': {
                    'role_arn': None
                },
                'master_payer': {
                    'role_arn': None
                },
                'resource_owner': {
                    'role_arn': None
                },
                'cloudtrail_owner': {
                    'sqs_queue_arn': None,
                    'sqs_queue_policy_name': None,
                },
            }
        }
    }
    assert status == cfnresponse.SUCCESS
    assert output == expected
    (_, kwargs) = context.mock_requests_post.call_args
    assert 'json' in kwargs
    assert kwargs['json'] == expected
Example #8
0
    def test_handler(self):
        # given
        event = self._get_s3_event()

        # when
        handler(event, None)