require "helper" require "inspec/resource" require "resources/aws/aws_elbs" require "resource_support/aws" # MAEPB = MockAwsELBsPluralBackend # Abbreviation not used outside this file #=============================================================================# # Constructor Tests #=============================================================================# class AwsElbsConstructorTest < Minitest::Test def setup AwsElbs::BackendFactory.select(MAEPB::Empty) end def test_empty_params_ok AwsElbs.new end def test_rejects_unrecognized_params assert_raises(ArgumentError) { AwsElbs.new(shoe_size: 9) } end end #=============================================================================# # Filter Criteria #=============================================================================# class AwsElbsFilterCriteriaTest < Minitest::Test def setup AwsElbs::BackendFactory.select(MAEPB::Basic) end def test_filter_with_no_criteria assert AwsElbs.new.exists? assert_equal(3, AwsElbs.new.count) end def test_filter_with_availability_zones hit = AwsElbs.new.where { availability_zones.include? "us-east-1c" } assert(hit.exists?) assert_equal(2, hit.count) miss = AwsElbs.new.where { availability_zones.include? "us-east-1g" } refute(miss.exists?) end def test_filter_with_dns_name hit = AwsElbs.new.where(dns_name: /us-east-1\.aws/) assert(hit.exists?) assert_equal(2, hit.count) miss = AwsElbs.new.where(dns_name: "bananas") refute(miss.exists?) end def test_filter_with_elb_name hit = AwsElbs.new.where(elb_name: /kang/) assert(hit.exists?) assert_equal(2, hit.count) miss = AwsElbs.new.where(elb_name: "kodos") refute(miss.exists?) end def test_filter_with_external_ports hit = AwsElbs.new.where { external_ports.include? 631 } assert(hit.exists?) assert_equal(1, hit.count) miss = AwsElbs.new.where { external_ports.include? 22000 } refute(miss.exists?) end def test_filter_with_instance_ids hit = AwsElbs.new.where { instance_ids.include? "i-12345678" } assert(hit.exists?) assert_equal(1, hit.count) miss = AwsElbs.new.where { instance_ids.include? "i-deadbeef" } refute(miss.exists?) end def test_filter_with_internal_ports hit = AwsElbs.new.where { internal_ports.include? 80 } assert(hit.exists?) assert_equal(2, hit.count) miss = AwsElbs.new.where { internal_ports.include? 93 } refute(miss.exists?) end def test_filter_with_security_group_ids hit = AwsElbs.new.where { security_group_ids.include? "sg-12345678" } assert(hit.exists?) assert_equal(3, hit.count) miss = AwsElbs.new.where { security_group_ids.include? "sg-99999999" } refute(miss.exists?) end def test_filter_with_subnet_ids hit = AwsElbs.new.where { subnet_ids.include? "subnet-12345678" } assert(hit.exists?) assert_equal(2, hit.count) miss = AwsElbs.new.where { subnet_ids.include? "subnet-99999999" } refute(miss.exists?) end def test_filter_with_vpc_id hit = AwsElbs.new.where(vpc_id: "vpc-12345678") assert(hit.exists?) assert_equal(2, hit.count) miss = AwsElbs.new.where(vpc_id: "vpc-09876543") refute(miss.exists?) end end #=============================================================================# # Properties #=============================================================================# class AwsElbsProperties < Minitest::Test def setup AwsElbs::BackendFactory.select(MAEPB::Basic) @elbs = AwsElbs.new end def test_properties_with_availability_zones assert_includes(@elbs.availability_zones, "us-east-1a") assert_includes(@elbs.availability_zones, "us-east-1e") assert_equal(4, @elbs.availability_zones.count) refute_includes(@elbs.availability_zones, nil) end def test_properties_with_dns_names assert_includes(@elbs.dns_names, "999999.us-east-1.aws.amazon.com") assert_includes(@elbs.dns_names, "12345678.us-east-2.aws.amazon.com") assert_equal(3, @elbs.dns_names.count) refute_includes(@elbs.dns_names, nil) end def test_properties_with_elb_names assert_includes(@elbs.elb_names, "kang-the-alien") assert_includes(@elbs.elb_names, "kangaroo") assert_equal(3, @elbs.elb_names.count) refute_includes(@elbs.elb_names, nil) end def test_properties_with_external_ports assert_includes(@elbs.external_ports, 80) assert_includes(@elbs.external_ports, 631) assert_equal(3, @elbs.external_ports.count) refute_includes(@elbs.external_ports, nil) end def test_properties_with_instance_ids assert_includes(@elbs.instance_ids, "i-87654321") assert_includes(@elbs.instance_ids, "i-12345678") assert_equal(3, @elbs.instance_ids.count) refute_includes(@elbs.instance_ids, nil) end def test_properties_with_internal_ports assert_includes(@elbs.internal_ports, 80) assert_includes(@elbs.internal_ports, 1001) assert_equal(2, @elbs.internal_ports.count) refute_includes(@elbs.internal_ports, nil) end def test_properties_with_security_group_ids assert_includes(@elbs.security_group_ids, "sg-12345678") assert_includes(@elbs.security_group_ids, "sg-99998888") assert_equal(4, @elbs.security_group_ids.count) refute_includes(@elbs.security_group_ids, nil) end def test_properties_with_subnet_ids assert_includes(@elbs.subnet_ids, "subnet-ccccdddd") assert_includes(@elbs.subnet_ids, "subnet-12345678") assert_equal(3, @elbs.subnet_ids.count) refute_includes(@elbs.subnet_ids, nil) end def test_property_vpc_ids assert_includes(@elbs.vpc_ids, "vpc-87654321") assert_includes(@elbs.vpc_ids, "vpc-12345678") assert_equal(2, @elbs.vpc_ids.count) refute_includes(@elbs.vpc_ids, nil) end end #=============================================================================# # Test Fixtures #=============================================================================# module MAEPB class Empty < AwsBackendBase def describe_load_balancers(query = {}) Aws::ElasticLoadBalancing::Types::DescribeAccessPointsOutput.new( load_balancer_descriptions: [] ) end end class Basic < AwsBackendBase def describe_load_balancers(query = {}) Aws::ElasticLoadBalancing::Types::DescribeAccessPointsOutput.new( load_balancer_descriptions: [ Aws::ElasticLoadBalancing::Types::LoadBalancerDescription.new( availability_zones: %w{ us-east-1a us-east-1c }, dns_name: "12345678.us-east-1.aws.amazon.com", load_balancer_name: "kang-the-alien", listener_descriptions: [ Aws::ElasticLoadBalancing::Types::ListenerDescription.new( listener: Aws::ElasticLoadBalancing::Types::Listener.new( protocol: "http", load_balancer_port: 80, instance_protocol: "http", instance_port: 80 ) ), ], instances: [ Aws::ElasticLoadBalancing::Types::Instance.new(instance_id: "i-12345678"), Aws::ElasticLoadBalancing::Types::Instance.new(instance_id: "i-aaaabbbb"), ], security_groups: %w{ sg-12345678 sg-aaaabbbb sg-99998888 }, subnets: %w{ subnet-12345678 subnet-aaaabbbb }, vpc_id: "vpc-12345678" ), Aws::ElasticLoadBalancing::Types::LoadBalancerDescription.new( availability_zones: %w{ us-east-1b us-east-1c }, dns_name: "12345678.us-east-2.aws.amazon.com", load_balancer_name: "kangaroo", listener_descriptions: [ Aws::ElasticLoadBalancing::Types::ListenerDescription.new( listener: Aws::ElasticLoadBalancing::Types::Listener.new( protocol: "tcp", load_balancer_port: 1001, instance_protocol: "tcp", instance_port: 1001 ) ), ], instances: [ Aws::ElasticLoadBalancing::Types::Instance.new(instance_id: "i-87654321"), ], security_groups: %w{ sg-12345678 sg-99998888 }, subnets: %w{ subnet-12345678 subnet-aaaabbbb }, vpc_id: "vpc-12345678" ), Aws::ElasticLoadBalancing::Types::LoadBalancerDescription.new( availability_zones: %w{ us-east-1a us-east-1e }, dns_name: "999999.us-east-1.aws.amazon.com", load_balancer_name: "gamma", listener_descriptions: [ Aws::ElasticLoadBalancing::Types::ListenerDescription.new( listener: Aws::ElasticLoadBalancing::Types::Listener.new( protocol: "http", load_balancer_port: 631, instance_protocol: "http", instance_port: 80 ) ), ], instances: [ ], security_groups: %w{ sg-12345678 sg-99998888 sg-01010101 }, subnets: %w{ subnet-ccccdddd subnet-aaaabbbb }, vpc_id: "vpc-87654321" ), ] ) end end end