def test_set_security_groups_invalid_alb_type(aws_client):
    client = MagicMock()
    aws_client.return_value = client
    alb_names = ["test-loadbalancer-01", "test-loadbalancer-02"]
    security_group_ids = ["sg-0123456789abcdef0", "sg-0fedcba9876543210"]

    client.describe_security_groups.return_value = {
        "SecurityGroups": [
            {"GroupId": "sg-0123456789abcdef0"},
            {"GroupId": "sg-0fedcba9876543210"},
        ]
    }
    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_security_groups(alb_names, security_group_ids)
    assert "Cannot change security groups of network load balancers." in str(x.value)
def test_set_security_group_invalid_alb_name(aws_client):
    client = MagicMock()
    aws_client.return_value = client
    alb_names = ['test-loadbalancer-01', 'test-loadbalancer-02']
    security_group_ids = ['sg-0123456789abcdef0', 'sg-0fedcba9876543210']

    client.describe_security_groups.return_value = {
        'SecurityGroups': [{
            'GroupId': 'sg-0123456789abcdef0'
        }, {
            'GroupId': 'sg-0fedcba9876543210'
        }]
    }
    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_security_groups(alb_names, security_group_ids)
    assert 'Unable to locate load balancer(s): {}'.format([alb_names[1]
                                                           ]) in str(x)
def test_set_security_group_no_args():
    with pytest.raises(TypeError) as x:
        set_security_groups()
    assert (
        "set_security_groups() missing 2 required positional arguments: "
        "'load_balancer_names' and 'security_group_ids" in str(x.value)
    )
def test_set_security_group_no_subnets():
    alb_names = ["test-loadbalancer-01", "test-loadbalancer-02"]
    with pytest.raises(TypeError) as x:
        set_security_groups(alb_names)
    assert (
        "set_security_groups() missing 1 required positional "
        "argument: 'security_group_ids'" in str(x.value)
    )
def test_set_security_groups(aws_client):
    client = MagicMock()
    aws_client.return_value = client
    alb_names = ['test-loadbalancer-01', 'test-loadbalancer-02']
    security_group_ids = ['sg-0123456789abcdef0', 'sg-0fedcba9876543210']

    client.describe_security_groups.return_value = {
        'SecurityGroups': [{
            'GroupId': 'sg-0123456789abcdef0'
        }, {
            'GroupId': 'sg-0fedcba9876543210'
        }]
    }
    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_security_groups(alb_names, security_group_ids)

    calls = [
        call(LoadBalancerArn='arn:aws:elasticloadbalancing:us-east-1:'
             '000000000000:loadbalancer/app/'
             'test-loadbalancer-01/0f158eab895ab000',
             SecurityGroups=security_group_ids),
        call(LoadBalancerArn='arn:aws:elasticloadbalancing:us-east-1:'
             '000000000000:loadbalancer/app/'
             'test-loadbalancer-02/010aec0000fae123',
             SecurityGroups=security_group_ids)
    ]
    client.set_security_groups.assert_has_calls(calls, any_order=True)
def test_set_security_groups_invalid_group(aws_client):
    client = MagicMock()
    aws_client.return_value = client
    alb_names = ["test-loadbalancer-01", "test-loadbalancer-02"]
    security_group_ids = ["sg-0123456789abcdef0", "sg-0fedcba9876543210"]

    client.describe_security_groups.return_value = {
        "SecurityGroups": [{"GroupId": "sg-0123456789abcdef0"}]
    }

    with pytest.raises(FailedActivity) as x:
        set_security_groups(alb_names, security_group_ids)
    assert f"Invalid security group id(s): {[security_group_ids[1]]}" in str(x.value)
def test_set_security_groups(aws_client):
    client = MagicMock()
    aws_client.return_value = client
    alb_names = ["test-loadbalancer-01", "test-loadbalancer-02"]
    security_group_ids = ["sg-0123456789abcdef0", "sg-0fedcba9876543210"]

    client.describe_security_groups.return_value = {
        "SecurityGroups": [
            {"GroupId": "sg-0123456789abcdef0"},
            {"GroupId": "sg-0fedcba9876543210"},
        ]
    }
    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_security_groups(alb_names, security_group_ids)

    calls = [
        call(
            LoadBalancerArn="arn:aws:elasticloadbalancing:us-east-1:"
            "000000000000:loadbalancer/app/"
            "test-loadbalancer-01/0f158eab895ab000",
            SecurityGroups=security_group_ids,
        ),
        call(
            LoadBalancerArn="arn:aws:elasticloadbalancing:us-east-1:"
            "000000000000:loadbalancer/app/"
            "test-loadbalancer-02/010aec0000fae123",
            SecurityGroups=security_group_ids,
        ),
    ]
    client.set_security_groups.assert_has_calls(calls, any_order=True)
def test_set_security_groups_invalid_group(aws_client):
    client = MagicMock()
    aws_client.return_value = client
    alb_names = ['test-loadbalancer-01', 'test-loadbalancer-02']
    security_group_ids = ['sg-0123456789abcdef0', 'sg-0fedcba9876543210']

    client.describe_security_groups.return_value = {
        'SecurityGroups': [{
            'GroupId': 'sg-0123456789abcdef0'
        }]
    }

    with pytest.raises(FailedActivity) as x:
        set_security_groups(alb_names, security_group_ids)
    assert 'Invalid security group id(s): {}'.format([security_group_ids[1]
                                                      ]) in str(x)
def test_set_security_groups_invalid_alb_type(aws_client):
    client = MagicMock()
    aws_client.return_value = client
    alb_names = ['test-loadbalancer-01', 'test-loadbalancer-02']
    security_group_ids = ['sg-0123456789abcdef0', 'sg-0fedcba9876543210']

    client.describe_security_groups.return_value = {
        'SecurityGroups': [{
            'GroupId': 'sg-0123456789abcdef0'
        }, {
            'GroupId': 'sg-0fedcba9876543210'
        }]
    }
    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_security_groups(alb_names, security_group_ids)
    assert 'Cannot change security groups of network load balancers.' in str(
        x.value)