def test_aws_sts_role_try_catch(self, session_mock, client_mock, assume_role_mock): region = self.region_mock api = "sts" roleArn = self.mock_roleArn mock_response = { 'Credentials': { 'AccessKeyId': 'mock_access_id', 'SecretAccessKey': 'mock_access_secret', 'SessionToken': 'mock_session_token', }, 'AssumedRoleUser': { 'AssumedRoleId': 'mock_id_1122Null', 'Arn': self.mock_roleArn }, 'PackedPolicySize': 123 } self.boto3_mock = Mock() session_mock.return_value = "session for boto3 client mocked " assume_role_mock.return_value = mock_response instance = AbstractionLayer(region) instance.aws_sts_role(api, roleArn)
def test_aws_health_try_catch(self, session_mock, client_mock, describe_events_mock): region = self.region_mock services = self.ec2_mock codes = "200" api = self.health_mock mock_response = { 'events': [ { 'arn': 'arn:health:1212', 'service': 'health', 'eventTypeCode': '200', 'eventTypeCategory': 'accountNotification', 'region': 'mock_region', 'statusCode': 'open', }, ], } self.boto3_mock = Mock() session_mock.return_value = "session for client mocked " # handling the try code block describe_events_mock.return_value = mock_response instance = AbstractionLayer(region) instance.aws_health(api, region, services, codes)
def test_scan_region_try_catch(self, session_mock, client_mock, describe_regions_mock): region = self.region_mock # with self.assertRaises(SystemExit) as sys_exit: self.boto3_mock = Mock() session_mock.return_value = "boto3 client mocked " instance = AbstractionLayer(region) instance.scan_region(self.ec2_mock)
def test_scan_region_exception_handling(self, session_mock, client_mock): region = self.region_mock with self.assertRaises(SystemExit) as sys_exit: self.boto3_mock = Mock() session_mock.return_value = "boto3 client mocked " instance = AbstractionLayer(region) instance.scan_region("us-east-2") self.assertEqual(sys_exit.exception.code, 1)
def test_aws_sts_role_exception_catch(self, session_mock): with self.assertRaises(SystemExit) as sys_exit: region = self.region_mock api = "sts" roleArn = "" instance = AbstractionLayer(region) instance.aws_sts_role(api, roleArn) self.assertEqual(sys_exit.exception.code, 1)
def test_role_data_extraction_exception_handling(self): with self.assertRaises(SystemExit) as sys_exit: region = self.region_mock mock_credentials = { "Credentials": { "AccessKeyId": "mocked_aws_access_key_id", } } instance = AbstractionLayer(region) instance.role_data_extraction(mock_credentials) self.assertEqual(sys_exit.exception.code, 1)
def test_role_data_extraction_try_catch(self): region = self.region_mock mock_credentials = { "Credentials": { "AccessKeyId": "mocked_aws_access_key_id", "SecretAccessKey": "mocked_aws_access_secret", "SessionToken": "mocked_aws_session_token", } } instance = AbstractionLayer(region) instance.role_data_extraction(mock_credentials)
def instance_controller(region, extern_call, credentials): try: aws_instance = LayerClass(region=region) logger.info("Spinning the AWS Instance with STS Credentials .") obj_status = aws_instance.client_spin_status_check( extern_service=extern_call, temp_credentials=credentials) except Exception as err: logger.exception("Loggging spinned Instance fatal error: " + str(err) + "\n") sys.exit(1) else: return obj_status
def test_client_spin_status_outer_exception_handling(self, ): with self.assertRaises(SystemExit) as sys_exit: region = self.region_mock mock_extern_service = self.ec2_mock mock_tmp_credentials = [ "mocked_aws_access_key_id", "mocked_aws_access_key_id", ] instance = AbstractionLayer(region) instance.client_spin_status_check(mock_extern_service, mock_tmp_credentials) self.assertEqual(sys_exit.exception.code, 1)
def test_aws_health_exception_handling(self, session_mock, client_mock): region = self.region_mock services = ["ec2_mock", "s3_mock", "sts_mock"] codes = ["200", "302", "301"] with self.assertRaises(SystemExit) as sys_exit: self.boto3_mock = Mock() session_mock.return_value = "boto3 client mocked " # handling the try code block instance = AbstractionLayer(region) instance.aws_health("health_mock", region, services, codes) self.assertEqual(sys_exit.exception.code, 1)
def test_describe_instance_inner_exception_handling(self, session_mock): with self.assertRaises(SystemExit) as sys_exit: region = self.region_mock mock_extern_service = self.ec2_mock mock_tmp_credentials = [ "mocked_aws_access_key_id", "mocked_aws_access_key_id", "mocked_aws_session_token", ] instance = AbstractionLayer(region) instance.describe_instance(mock_extern_service, mock_tmp_credentials) self.assertEqual(sys_exit.exception.code, 1)
def test_describe_instance_try_catch(self, session_mock, client_mock, describe_instances_mock): region = self.region_mock mock_extern_service = self.ec2_mock mock_credentials = [ "mocked_aws_access_key_id", "mocked_aws_access_key_id", "mocked_aws_session_token", ] mock_response = { 'Reservations': [{ 'Instances': [{ 'AmiLaunchIndex': 123, 'ImageId': 'mock_id', 'InstanceId': 'mock_instance_id', 'InstanceType': 't1.micro', 'KernelId': 'mock_kernel_id', 'KeyName': 'mock_instance_tester', 'Monitoring': { 'State': 'disabled' }, 'Placement': { 'AvailabilityZone': 'us-east-2', 'Affinity': 'mock_high', 'PartitionNumber': 123, 'HostId': 'mock_host_id', 'Tenancy': 'dedicated', 'SpreadDomain': 'mock_spread_domain', 'HostResourceGroupArn': 'mock_host_resource_arn' }, }] }] } session_mock.return_value = "session for boto3 client is mocked " describe_instances_mock.return_value = mock_response instance = AbstractionLayer(region) instance.describe_instance(mock_extern_service, mock_credentials)
def ingest_api_call(response): # Logging attributes status for the spinned instances using AssumeRole methodology if response["roleArn"]: try: aws_obj = LayerClass(region=response["region"]) assume_role = aws_obj.aws_sts_role(api_call=response["apis"], role_arn=response["roleArn"]) credentials = aws_obj.role_data_extraction( assume_role_credentials=assume_role) logger.debug("STS rule controller for AWS ") except Exception as err: logger.exception("Logging STS Error: " + str(err) + "\n") sys.exit(1) else: return credentials else: logger.exception("Role ARN missing to execute the Boto3 API call ! ") sys.exit(1)