def test_set_subnet_no_subnets():
    alb_names = ['test-loadbalancer-01', 'test-loadbalancer-02']
    with pytest.raises(TypeError) as x:
        set_subnets(alb_names)

    assert "set_subnets() missing 1 required " \
           "positional argument: 'subnet_ids'" in str(x)
def test_set_subnets_invalid_alb_name(aws_client):
    client = MagicMock()
    aws_client.return_value = client
    alb_names = ['test-loadbalancer-01', 'test-loadbalancer-02']
    subnet_ids = ['subnet-012345678', 'subnet-abcdefg0']

    client.describe_subnets.return_value = {
        'Subnets': [{
            'SubnetId': 'subnet-012345678'
        }, {
            'SubnetId': 'subnet-abcdefg0'
        }]
    }
    client.describe_load_balancers.return_value = {
        'LoadBalancers': [{
            'LoadBalancerArn':
            'arn:aws:elasticloadbalancing:us-east-1:'
            '000000000000:loadbalancer/app/'
            'test-loadbalancer-01/0f158eab895ab000',
            'State': {
                'Code': 'active'
            },
            'Type':
            'application',
            'LoadBalancerName':
            alb_names[0]
        }]
    }
    with pytest.raises(FailedActivity) as x:
        set_subnets(alb_names, subnet_ids)
    assert 'Unable to locate load balancer(s): {}'.format([alb_names[1]
                                                           ]) in str(x)
def test_set_subnet_no_args():
    with pytest.raises(TypeError) as x:
        set_subnets()
    assert (
        "set_subnets() missing 2 required positional "
        "arguments: 'load_balancer_names' and 'subnet_ids'" in str(x.value)
    )
def test_set_subnets_invalid_alb_type(aws_client):
    client = MagicMock()
    aws_client.return_value = client
    alb_names = ["test-loadbalancer-01", "test-loadbalancer-02"]
    subnet_ids = ["subnet-012345678", "subnet-abcdefg0"]

    client.describe_subnets.return_value = {
        "Subnets": [{"SubnetId": "subnet-012345678"}, {"SubnetId": "subnet-abcdefg0"}]
    }
    client.describe_load_balancers.return_value = {
        "LoadBalancers": [
            {
                "LoadBalancerArn": "arn:aws:elasticloadbalancing:us-east-1:"
                "000000000000:loadbalancer/app/"
                "test-loadbalancer-01/0f158eab895ab000",
                "State": {"Code": "active"},
                "Type": "application",
                "LoadBalancerName": alb_names[0],
            },
            {
                "LoadBalancerArn": "arn:aws:elasticloadbalancing:us-east-1:"
                "000000000000:loadbalancer/app/"
                "test-loadbalancer-02/010aec0000fae123",
                "State": {"Code": "active"},
                "Type": "network",
                "LoadBalancerName": alb_names[1],
            },
        ]
    }
    with pytest.raises(FailedActivity) as x:
        set_subnets(alb_names, subnet_ids)
    assert "Cannot change subnets of network load balancers." in str(x.value)
def test_set_subnet_no_subnets():
    alb_names = ["test-loadbalancer-01", "test-loadbalancer-02"]
    with pytest.raises(TypeError) as x:
        set_subnets(alb_names)

    assert (
        "set_subnets() missing 1 required "
        "positional argument: 'subnet_ids'" in str(x.value)
    )
def test_set_subnets(aws_client):
    client = MagicMock()
    aws_client.return_value = client
    alb_names = ['test-loadbalancer-01', 'test-loadbalancer-02']
    subnet_ids = ['subnet-012345678', 'subnet-abcdefg0']

    client.describe_subnets.return_value = {
        'Subnets': [{
            'SubnetId': 'subnet-012345678'
        }, {
            'SubnetId': 'subnet-abcdefg0'
        }]
    }
    client.describe_load_balancers.return_value = {
        'LoadBalancers': [{
            'LoadBalancerArn':
            'arn:aws:elasticloadbalancing:us-east-1:'
            '000000000000:loadbalancer/app/'
            'test-loadbalancer-01/0f158eab895ab000',
            'State': {
                'Code': 'active'
            },
            'Type':
            'application',
            'LoadBalancerName':
            alb_names[0]
        }, {
            'LoadBalancerArn':
            'arn:aws:elasticloadbalancing:us-east-1:'
            '000000000000:loadbalancer/app/'
            'test-loadbalancer-02/010aec0000fae123',
            'State': {
                'Code': 'active'
            },
            'Type':
            'application',
            'LoadBalancerName':
            alb_names[1]
        }]
    }
    set_subnets(alb_names, subnet_ids)

    calls = [
        call(LoadBalancerArn='arn:aws:elasticloadbalancing:us-east-1:'
             '000000000000:loadbalancer/app/'
             'test-loadbalancer-01/0f158eab895ab000',
             Subnets=subnet_ids),
        call(LoadBalancerArn='arn:aws:elasticloadbalancing:us-east-1:'
             '000000000000:loadbalancer/app/'
             'test-loadbalancer-02/010aec0000fae123',
             Subnets=subnet_ids)
    ]
    client.set_subnets.assert_has_calls(calls, any_order=True)
def test_set_subnets_invalid_subnet(aws_client):
    client = MagicMock()
    aws_client.return_value = client
    alb_names = ["test-loadbalancer-01", "test-loadbalancer-02"]
    subnet_ids = ["subnet-012345678", "subnet-abcdefg0"]

    client.describe_subnets.return_value = {
        "Subnets": [{"SubnetId": "subnet-012345678"}]
    }

    with pytest.raises(FailedActivity) as x:
        set_subnets(alb_names, subnet_ids)
    assert f"Invalid subnet id(s): {[subnet_ids[1]]}" in str(x.value)
def test_set_subnets_invalid_subnet(aws_client):
    client = MagicMock()
    aws_client.return_value = client
    alb_names = ['test-loadbalancer-01', 'test-loadbalancer-02']
    subnet_ids = ['subnet-012345678', 'subnet-abcdefg0']

    client.describe_subnets.return_value = {
        'Subnets': [{
            'SubnetId': 'subnet-012345678'
        }]
    }

    with pytest.raises(FailedActivity) as x:
        set_subnets(alb_names, subnet_ids)
    assert 'Invalid subnet id(s): {}'.format([subnet_ids[1]]) in str(x)
def test_set_subnets(aws_client):
    client = MagicMock()
    aws_client.return_value = client
    alb_names = ["test-loadbalancer-01", "test-loadbalancer-02"]
    subnet_ids = ["subnet-012345678", "subnet-abcdefg0"]

    client.describe_subnets.return_value = {
        "Subnets": [{"SubnetId": "subnet-012345678"}, {"SubnetId": "subnet-abcdefg0"}]
    }
    client.describe_load_balancers.return_value = {
        "LoadBalancers": [
            {
                "LoadBalancerArn": "arn:aws:elasticloadbalancing:us-east-1:"
                "000000000000:loadbalancer/app/"
                "test-loadbalancer-01/0f158eab895ab000",
                "State": {"Code": "active"},
                "Type": "application",
                "LoadBalancerName": alb_names[0],
            },
            {
                "LoadBalancerArn": "arn:aws:elasticloadbalancing:us-east-1:"
                "000000000000:loadbalancer/app/"
                "test-loadbalancer-02/010aec0000fae123",
                "State": {"Code": "active"},
                "Type": "application",
                "LoadBalancerName": alb_names[1],
            },
        ]
    }
    set_subnets(alb_names, subnet_ids)

    calls = [
        call(
            LoadBalancerArn="arn:aws:elasticloadbalancing:us-east-1:"
            "000000000000:loadbalancer/app/"
            "test-loadbalancer-01/0f158eab895ab000",
            Subnets=subnet_ids,
        ),
        call(
            LoadBalancerArn="arn:aws:elasticloadbalancing:us-east-1:"
            "000000000000:loadbalancer/app/"
            "test-loadbalancer-02/010aec0000fae123",
            Subnets=subnet_ids,
        ),
    ]
    client.set_subnets.assert_has_calls(calls, any_order=True)
def test_set_subnets_invalid_alb_type(aws_client):
    client = MagicMock()
    aws_client.return_value = client
    alb_names = ['test-loadbalancer-01', 'test-loadbalancer-02']
    subnet_ids = ['subnet-012345678', 'subnet-abcdefg0']

    client.describe_subnets.return_value = {
        'Subnets': [{
            'SubnetId': 'subnet-012345678'
        }, {
            'SubnetId': 'subnet-abcdefg0'
        }]
    }
    client.describe_load_balancers.return_value = {
        'LoadBalancers': [{
            'LoadBalancerArn':
            'arn:aws:elasticloadbalancing:us-east-1:'
            '000000000000:loadbalancer/app/'
            'test-loadbalancer-01/0f158eab895ab000',
            'State': {
                'Code': 'active'
            },
            'Type':
            'application',
            'LoadBalancerName':
            alb_names[0]
        }, {
            'LoadBalancerArn':
            'arn:aws:elasticloadbalancing:us-east-1:'
            '000000000000:loadbalancer/app/'
            'test-loadbalancer-02/010aec0000fae123',
            'State': {
                'Code': 'active'
            },
            'Type':
            'network',
            'LoadBalancerName':
            alb_names[1]
        }]
    }
    with pytest.raises(FailedActivity) as x:
        set_subnets(alb_names, subnet_ids)
    assert 'Cannot change subnets of network load balancers.' in str(x.value)