List dependencies for services - add integration test to verify
This commit is contained in:
parent
9f0f230d13
commit
db1d7123f6
41 changed files with 1405 additions and 1245 deletions
|
|
@ -1,6 +1,5 @@
|
|||
from __future__ import unicode_literals
|
||||
|
||||
import json
|
||||
import os
|
||||
import boto3
|
||||
import botocore
|
||||
|
|
@ -8,7 +7,7 @@ from botocore.exceptions import ClientError, ParamValidationError
|
|||
from nose.tools import assert_raises
|
||||
import sure # noqa
|
||||
|
||||
from moto import mock_elbv2, mock_ec2, mock_acm, mock_cloudformation
|
||||
from moto import mock_elbv2, mock_ec2, mock_acm
|
||||
from moto.elbv2 import elbv2_backends
|
||||
from moto.core import ACCOUNT_ID
|
||||
|
||||
|
|
@ -1667,82 +1666,6 @@ def test_modify_listener_http_to_https():
|
|||
)
|
||||
|
||||
|
||||
@mock_ec2
|
||||
@mock_elbv2
|
||||
@mock_cloudformation
|
||||
def test_create_target_groups_through_cloudformation():
|
||||
cfn_conn = boto3.client("cloudformation", region_name="us-east-1")
|
||||
elbv2_client = boto3.client("elbv2", region_name="us-east-1")
|
||||
|
||||
# test that setting a name manually as well as letting cloudformation create a name both work
|
||||
# this is a special case because test groups have a name length limit of 22 characters, and must be unique
|
||||
# https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-targetgroup.html#cfn-elasticloadbalancingv2-targetgroup-name
|
||||
template = {
|
||||
"AWSTemplateFormatVersion": "2010-09-09",
|
||||
"Description": "ECS Cluster Test CloudFormation",
|
||||
"Resources": {
|
||||
"testVPC": {
|
||||
"Type": "AWS::EC2::VPC",
|
||||
"Properties": {"CidrBlock": "10.0.0.0/16"},
|
||||
},
|
||||
"testGroup1": {
|
||||
"Type": "AWS::ElasticLoadBalancingV2::TargetGroup",
|
||||
"Properties": {
|
||||
"Port": 80,
|
||||
"Protocol": "HTTP",
|
||||
"VpcId": {"Ref": "testVPC"},
|
||||
},
|
||||
},
|
||||
"testGroup2": {
|
||||
"Type": "AWS::ElasticLoadBalancingV2::TargetGroup",
|
||||
"Properties": {
|
||||
"Port": 90,
|
||||
"Protocol": "HTTP",
|
||||
"VpcId": {"Ref": "testVPC"},
|
||||
},
|
||||
},
|
||||
"testGroup3": {
|
||||
"Type": "AWS::ElasticLoadBalancingV2::TargetGroup",
|
||||
"Properties": {
|
||||
"Name": "MyTargetGroup",
|
||||
"Port": 70,
|
||||
"Protocol": "HTTPS",
|
||||
"VpcId": {"Ref": "testVPC"},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
template_json = json.dumps(template)
|
||||
cfn_conn.create_stack(StackName="test-stack", TemplateBody=template_json)
|
||||
|
||||
describe_target_groups_response = elbv2_client.describe_target_groups()
|
||||
target_group_dicts = describe_target_groups_response["TargetGroups"]
|
||||
assert len(target_group_dicts) == 3
|
||||
|
||||
# there should be 2 target groups with the same prefix of 10 characters (since the random suffix is 12)
|
||||
# and one named MyTargetGroup
|
||||
assert (
|
||||
len(
|
||||
[
|
||||
tg
|
||||
for tg in target_group_dicts
|
||||
if tg["TargetGroupName"] == "MyTargetGroup"
|
||||
]
|
||||
)
|
||||
== 1
|
||||
)
|
||||
assert (
|
||||
len(
|
||||
[
|
||||
tg
|
||||
for tg in target_group_dicts
|
||||
if tg["TargetGroupName"].startswith("test-stack")
|
||||
]
|
||||
)
|
||||
== 2
|
||||
)
|
||||
|
||||
|
||||
@mock_elbv2
|
||||
@mock_ec2
|
||||
def test_redirect_action_listener_rule():
|
||||
|
|
@ -1816,95 +1739,6 @@ def test_redirect_action_listener_rule():
|
|||
modify_listener_actions.should.equal(expected_default_actions)
|
||||
|
||||
|
||||
@mock_elbv2
|
||||
@mock_cloudformation
|
||||
def test_redirect_action_listener_rule_cloudformation():
|
||||
cnf_conn = boto3.client("cloudformation", region_name="us-east-1")
|
||||
elbv2_client = boto3.client("elbv2", region_name="us-east-1")
|
||||
|
||||
template = {
|
||||
"AWSTemplateFormatVersion": "2010-09-09",
|
||||
"Description": "ECS Cluster Test CloudFormation",
|
||||
"Resources": {
|
||||
"testVPC": {
|
||||
"Type": "AWS::EC2::VPC",
|
||||
"Properties": {"CidrBlock": "10.0.0.0/16"},
|
||||
},
|
||||
"subnet1": {
|
||||
"Type": "AWS::EC2::Subnet",
|
||||
"Properties": {
|
||||
"CidrBlock": "10.0.0.0/24",
|
||||
"VpcId": {"Ref": "testVPC"},
|
||||
"AvalabilityZone": "us-east-1b",
|
||||
},
|
||||
},
|
||||
"subnet2": {
|
||||
"Type": "AWS::EC2::Subnet",
|
||||
"Properties": {
|
||||
"CidrBlock": "10.0.1.0/24",
|
||||
"VpcId": {"Ref": "testVPC"},
|
||||
"AvalabilityZone": "us-east-1b",
|
||||
},
|
||||
},
|
||||
"testLb": {
|
||||
"Type": "AWS::ElasticLoadBalancingV2::LoadBalancer",
|
||||
"Properties": {
|
||||
"Name": "my-lb",
|
||||
"Subnets": [{"Ref": "subnet1"}, {"Ref": "subnet2"}],
|
||||
"Type": "application",
|
||||
"SecurityGroups": [],
|
||||
},
|
||||
},
|
||||
"testListener": {
|
||||
"Type": "AWS::ElasticLoadBalancingV2::Listener",
|
||||
"Properties": {
|
||||
"LoadBalancerArn": {"Ref": "testLb"},
|
||||
"Port": 80,
|
||||
"Protocol": "HTTP",
|
||||
"DefaultActions": [
|
||||
{
|
||||
"Type": "redirect",
|
||||
"RedirectConfig": {
|
||||
"Port": "443",
|
||||
"Protocol": "HTTPS",
|
||||
"StatusCode": "HTTP_301",
|
||||
},
|
||||
}
|
||||
],
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
template_json = json.dumps(template)
|
||||
cnf_conn.create_stack(StackName="test-stack", TemplateBody=template_json)
|
||||
|
||||
describe_load_balancers_response = elbv2_client.describe_load_balancers(
|
||||
Names=["my-lb"]
|
||||
)
|
||||
describe_load_balancers_response["LoadBalancers"].should.have.length_of(1)
|
||||
load_balancer_arn = describe_load_balancers_response["LoadBalancers"][0][
|
||||
"LoadBalancerArn"
|
||||
]
|
||||
|
||||
describe_listeners_response = elbv2_client.describe_listeners(
|
||||
LoadBalancerArn=load_balancer_arn
|
||||
)
|
||||
|
||||
describe_listeners_response["Listeners"].should.have.length_of(1)
|
||||
describe_listeners_response["Listeners"][0]["DefaultActions"].should.equal(
|
||||
[
|
||||
{
|
||||
"Type": "redirect",
|
||||
"RedirectConfig": {
|
||||
"Port": "443",
|
||||
"Protocol": "HTTPS",
|
||||
"StatusCode": "HTTP_301",
|
||||
},
|
||||
}
|
||||
]
|
||||
)
|
||||
|
||||
|
||||
@mock_elbv2
|
||||
@mock_ec2
|
||||
def test_cognito_action_listener_rule():
|
||||
|
|
@ -1962,97 +1796,6 @@ def test_cognito_action_listener_rule():
|
|||
describe_listener_actions.should.equal(action)
|
||||
|
||||
|
||||
@mock_elbv2
|
||||
@mock_cloudformation
|
||||
def test_cognito_action_listener_rule_cloudformation():
|
||||
cnf_conn = boto3.client("cloudformation", region_name="us-east-1")
|
||||
elbv2_client = boto3.client("elbv2", region_name="us-east-1")
|
||||
|
||||
template = {
|
||||
"AWSTemplateFormatVersion": "2010-09-09",
|
||||
"Description": "ECS Cluster Test CloudFormation",
|
||||
"Resources": {
|
||||
"testVPC": {
|
||||
"Type": "AWS::EC2::VPC",
|
||||
"Properties": {"CidrBlock": "10.0.0.0/16"},
|
||||
},
|
||||
"subnet1": {
|
||||
"Type": "AWS::EC2::Subnet",
|
||||
"Properties": {
|
||||
"CidrBlock": "10.0.0.0/24",
|
||||
"VpcId": {"Ref": "testVPC"},
|
||||
"AvalabilityZone": "us-east-1b",
|
||||
},
|
||||
},
|
||||
"subnet2": {
|
||||
"Type": "AWS::EC2::Subnet",
|
||||
"Properties": {
|
||||
"CidrBlock": "10.0.1.0/24",
|
||||
"VpcId": {"Ref": "testVPC"},
|
||||
"AvalabilityZone": "us-east-1b",
|
||||
},
|
||||
},
|
||||
"testLb": {
|
||||
"Type": "AWS::ElasticLoadBalancingV2::LoadBalancer",
|
||||
"Properties": {
|
||||
"Name": "my-lb",
|
||||
"Subnets": [{"Ref": "subnet1"}, {"Ref": "subnet2"}],
|
||||
"Type": "application",
|
||||
"SecurityGroups": [],
|
||||
},
|
||||
},
|
||||
"testListener": {
|
||||
"Type": "AWS::ElasticLoadBalancingV2::Listener",
|
||||
"Properties": {
|
||||
"LoadBalancerArn": {"Ref": "testLb"},
|
||||
"Port": 80,
|
||||
"Protocol": "HTTP",
|
||||
"DefaultActions": [
|
||||
{
|
||||
"Type": "authenticate-cognito",
|
||||
"AuthenticateCognitoConfig": {
|
||||
"UserPoolArn": "arn:aws:cognito-idp:us-east-1:{}:userpool/us-east-1_ABCD1234".format(
|
||||
ACCOUNT_ID
|
||||
),
|
||||
"UserPoolClientId": "abcd1234abcd",
|
||||
"UserPoolDomain": "testpool",
|
||||
},
|
||||
}
|
||||
],
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
template_json = json.dumps(template)
|
||||
cnf_conn.create_stack(StackName="test-stack", TemplateBody=template_json)
|
||||
|
||||
describe_load_balancers_response = elbv2_client.describe_load_balancers(
|
||||
Names=["my-lb"]
|
||||
)
|
||||
load_balancer_arn = describe_load_balancers_response["LoadBalancers"][0][
|
||||
"LoadBalancerArn"
|
||||
]
|
||||
describe_listeners_response = elbv2_client.describe_listeners(
|
||||
LoadBalancerArn=load_balancer_arn
|
||||
)
|
||||
|
||||
describe_listeners_response["Listeners"].should.have.length_of(1)
|
||||
describe_listeners_response["Listeners"][0]["DefaultActions"].should.equal(
|
||||
[
|
||||
{
|
||||
"Type": "authenticate-cognito",
|
||||
"AuthenticateCognitoConfig": {
|
||||
"UserPoolArn": "arn:aws:cognito-idp:us-east-1:{}:userpool/us-east-1_ABCD1234".format(
|
||||
ACCOUNT_ID
|
||||
),
|
||||
"UserPoolClientId": "abcd1234abcd",
|
||||
"UserPoolDomain": "testpool",
|
||||
},
|
||||
}
|
||||
]
|
||||
)
|
||||
|
||||
|
||||
@mock_elbv2
|
||||
@mock_ec2
|
||||
def test_fixed_response_action_listener_rule():
|
||||
|
|
@ -2108,93 +1851,6 @@ def test_fixed_response_action_listener_rule():
|
|||
describe_listener_actions.should.equal(action)
|
||||
|
||||
|
||||
@mock_elbv2
|
||||
@mock_cloudformation
|
||||
def test_fixed_response_action_listener_rule_cloudformation():
|
||||
cnf_conn = boto3.client("cloudformation", region_name="us-east-1")
|
||||
elbv2_client = boto3.client("elbv2", region_name="us-east-1")
|
||||
|
||||
template = {
|
||||
"AWSTemplateFormatVersion": "2010-09-09",
|
||||
"Description": "ECS Cluster Test CloudFormation",
|
||||
"Resources": {
|
||||
"testVPC": {
|
||||
"Type": "AWS::EC2::VPC",
|
||||
"Properties": {"CidrBlock": "10.0.0.0/16"},
|
||||
},
|
||||
"subnet1": {
|
||||
"Type": "AWS::EC2::Subnet",
|
||||
"Properties": {
|
||||
"CidrBlock": "10.0.0.0/24",
|
||||
"VpcId": {"Ref": "testVPC"},
|
||||
"AvalabilityZone": "us-east-1b",
|
||||
},
|
||||
},
|
||||
"subnet2": {
|
||||
"Type": "AWS::EC2::Subnet",
|
||||
"Properties": {
|
||||
"CidrBlock": "10.0.1.0/24",
|
||||
"VpcId": {"Ref": "testVPC"},
|
||||
"AvalabilityZone": "us-east-1b",
|
||||
},
|
||||
},
|
||||
"testLb": {
|
||||
"Type": "AWS::ElasticLoadBalancingV2::LoadBalancer",
|
||||
"Properties": {
|
||||
"Name": "my-lb",
|
||||
"Subnets": [{"Ref": "subnet1"}, {"Ref": "subnet2"}],
|
||||
"Type": "application",
|
||||
"SecurityGroups": [],
|
||||
},
|
||||
},
|
||||
"testListener": {
|
||||
"Type": "AWS::ElasticLoadBalancingV2::Listener",
|
||||
"Properties": {
|
||||
"LoadBalancerArn": {"Ref": "testLb"},
|
||||
"Port": 80,
|
||||
"Protocol": "HTTP",
|
||||
"DefaultActions": [
|
||||
{
|
||||
"Type": "fixed-response",
|
||||
"FixedResponseConfig": {
|
||||
"ContentType": "text/plain",
|
||||
"MessageBody": "This page does not exist",
|
||||
"StatusCode": "404",
|
||||
},
|
||||
}
|
||||
],
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
template_json = json.dumps(template)
|
||||
cnf_conn.create_stack(StackName="test-stack", TemplateBody=template_json)
|
||||
|
||||
describe_load_balancers_response = elbv2_client.describe_load_balancers(
|
||||
Names=["my-lb"]
|
||||
)
|
||||
load_balancer_arn = describe_load_balancers_response["LoadBalancers"][0][
|
||||
"LoadBalancerArn"
|
||||
]
|
||||
describe_listeners_response = elbv2_client.describe_listeners(
|
||||
LoadBalancerArn=load_balancer_arn
|
||||
)
|
||||
|
||||
describe_listeners_response["Listeners"].should.have.length_of(1)
|
||||
describe_listeners_response["Listeners"][0]["DefaultActions"].should.equal(
|
||||
[
|
||||
{
|
||||
"Type": "fixed-response",
|
||||
"FixedResponseConfig": {
|
||||
"ContentType": "text/plain",
|
||||
"MessageBody": "This page does not exist",
|
||||
"StatusCode": "404",
|
||||
},
|
||||
}
|
||||
]
|
||||
)
|
||||
|
||||
|
||||
@mock_elbv2
|
||||
@mock_ec2
|
||||
def test_fixed_response_action_listener_rule_validates_status_code():
|
||||
|
|
|
|||
348
tests/test_elbv2/test_elbv2_cloudformation.py
Normal file
348
tests/test_elbv2/test_elbv2_cloudformation.py
Normal file
|
|
@ -0,0 +1,348 @@
|
|||
import boto3
|
||||
import json
|
||||
|
||||
from moto import mock_elbv2, mock_ec2, mock_cloudformation
|
||||
from moto.core import ACCOUNT_ID
|
||||
|
||||
|
||||
@mock_elbv2
|
||||
@mock_cloudformation
|
||||
def test_redirect_action_listener_rule_cloudformation():
|
||||
cnf_conn = boto3.client("cloudformation", region_name="us-east-1")
|
||||
elbv2_client = boto3.client("elbv2", region_name="us-east-1")
|
||||
|
||||
template = {
|
||||
"AWSTemplateFormatVersion": "2010-09-09",
|
||||
"Description": "ECS Cluster Test CloudFormation",
|
||||
"Resources": {
|
||||
"testVPC": {
|
||||
"Type": "AWS::EC2::VPC",
|
||||
"Properties": {"CidrBlock": "10.0.0.0/16"},
|
||||
},
|
||||
"subnet1": {
|
||||
"Type": "AWS::EC2::Subnet",
|
||||
"Properties": {
|
||||
"CidrBlock": "10.0.0.0/24",
|
||||
"VpcId": {"Ref": "testVPC"},
|
||||
"AvalabilityZone": "us-east-1b",
|
||||
},
|
||||
},
|
||||
"subnet2": {
|
||||
"Type": "AWS::EC2::Subnet",
|
||||
"Properties": {
|
||||
"CidrBlock": "10.0.1.0/24",
|
||||
"VpcId": {"Ref": "testVPC"},
|
||||
"AvalabilityZone": "us-east-1b",
|
||||
},
|
||||
},
|
||||
"testLb": {
|
||||
"Type": "AWS::ElasticLoadBalancingV2::LoadBalancer",
|
||||
"Properties": {
|
||||
"Name": "my-lb",
|
||||
"Subnets": [{"Ref": "subnet1"}, {"Ref": "subnet2"}],
|
||||
"Type": "application",
|
||||
"SecurityGroups": [],
|
||||
},
|
||||
},
|
||||
"testListener": {
|
||||
"Type": "AWS::ElasticLoadBalancingV2::Listener",
|
||||
"Properties": {
|
||||
"LoadBalancerArn": {"Ref": "testLb"},
|
||||
"Port": 80,
|
||||
"Protocol": "HTTP",
|
||||
"DefaultActions": [
|
||||
{
|
||||
"Type": "redirect",
|
||||
"RedirectConfig": {
|
||||
"Port": "443",
|
||||
"Protocol": "HTTPS",
|
||||
"StatusCode": "HTTP_301",
|
||||
},
|
||||
}
|
||||
],
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
template_json = json.dumps(template)
|
||||
cnf_conn.create_stack(StackName="test-stack", TemplateBody=template_json)
|
||||
|
||||
describe_load_balancers_response = elbv2_client.describe_load_balancers(
|
||||
Names=["my-lb"]
|
||||
)
|
||||
describe_load_balancers_response["LoadBalancers"].should.have.length_of(1)
|
||||
load_balancer_arn = describe_load_balancers_response["LoadBalancers"][0][
|
||||
"LoadBalancerArn"
|
||||
]
|
||||
|
||||
describe_listeners_response = elbv2_client.describe_listeners(
|
||||
LoadBalancerArn=load_balancer_arn
|
||||
)
|
||||
|
||||
describe_listeners_response["Listeners"].should.have.length_of(1)
|
||||
describe_listeners_response["Listeners"][0]["DefaultActions"].should.equal(
|
||||
[
|
||||
{
|
||||
"Type": "redirect",
|
||||
"RedirectConfig": {
|
||||
"Port": "443",
|
||||
"Protocol": "HTTPS",
|
||||
"StatusCode": "HTTP_301",
|
||||
},
|
||||
}
|
||||
]
|
||||
)
|
||||
|
||||
|
||||
@mock_elbv2
|
||||
@mock_cloudformation
|
||||
def test_cognito_action_listener_rule_cloudformation():
|
||||
cnf_conn = boto3.client("cloudformation", region_name="us-east-1")
|
||||
elbv2_client = boto3.client("elbv2", region_name="us-east-1")
|
||||
|
||||
template = {
|
||||
"AWSTemplateFormatVersion": "2010-09-09",
|
||||
"Description": "ECS Cluster Test CloudFormation",
|
||||
"Resources": {
|
||||
"testVPC": {
|
||||
"Type": "AWS::EC2::VPC",
|
||||
"Properties": {"CidrBlock": "10.0.0.0/16"},
|
||||
},
|
||||
"subnet1": {
|
||||
"Type": "AWS::EC2::Subnet",
|
||||
"Properties": {
|
||||
"CidrBlock": "10.0.0.0/24",
|
||||
"VpcId": {"Ref": "testVPC"},
|
||||
"AvalabilityZone": "us-east-1b",
|
||||
},
|
||||
},
|
||||
"subnet2": {
|
||||
"Type": "AWS::EC2::Subnet",
|
||||
"Properties": {
|
||||
"CidrBlock": "10.0.1.0/24",
|
||||
"VpcId": {"Ref": "testVPC"},
|
||||
"AvalabilityZone": "us-east-1b",
|
||||
},
|
||||
},
|
||||
"testLb": {
|
||||
"Type": "AWS::ElasticLoadBalancingV2::LoadBalancer",
|
||||
"Properties": {
|
||||
"Name": "my-lb",
|
||||
"Subnets": [{"Ref": "subnet1"}, {"Ref": "subnet2"}],
|
||||
"Type": "application",
|
||||
"SecurityGroups": [],
|
||||
},
|
||||
},
|
||||
"testListener": {
|
||||
"Type": "AWS::ElasticLoadBalancingV2::Listener",
|
||||
"Properties": {
|
||||
"LoadBalancerArn": {"Ref": "testLb"},
|
||||
"Port": 80,
|
||||
"Protocol": "HTTP",
|
||||
"DefaultActions": [
|
||||
{
|
||||
"Type": "authenticate-cognito",
|
||||
"AuthenticateCognitoConfig": {
|
||||
"UserPoolArn": "arn:aws:cognito-idp:us-east-1:{}:userpool/us-east-1_ABCD1234".format(
|
||||
ACCOUNT_ID
|
||||
),
|
||||
"UserPoolClientId": "abcd1234abcd",
|
||||
"UserPoolDomain": "testpool",
|
||||
},
|
||||
}
|
||||
],
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
template_json = json.dumps(template)
|
||||
cnf_conn.create_stack(StackName="test-stack", TemplateBody=template_json)
|
||||
|
||||
describe_load_balancers_response = elbv2_client.describe_load_balancers(
|
||||
Names=["my-lb"]
|
||||
)
|
||||
load_balancer_arn = describe_load_balancers_response["LoadBalancers"][0][
|
||||
"LoadBalancerArn"
|
||||
]
|
||||
describe_listeners_response = elbv2_client.describe_listeners(
|
||||
LoadBalancerArn=load_balancer_arn
|
||||
)
|
||||
|
||||
describe_listeners_response["Listeners"].should.have.length_of(1)
|
||||
describe_listeners_response["Listeners"][0]["DefaultActions"].should.equal(
|
||||
[
|
||||
{
|
||||
"Type": "authenticate-cognito",
|
||||
"AuthenticateCognitoConfig": {
|
||||
"UserPoolArn": "arn:aws:cognito-idp:us-east-1:{}:userpool/us-east-1_ABCD1234".format(
|
||||
ACCOUNT_ID
|
||||
),
|
||||
"UserPoolClientId": "abcd1234abcd",
|
||||
"UserPoolDomain": "testpool",
|
||||
},
|
||||
}
|
||||
]
|
||||
)
|
||||
|
||||
|
||||
@mock_ec2
|
||||
@mock_elbv2
|
||||
@mock_cloudformation
|
||||
def test_create_target_groups_through_cloudformation():
|
||||
cfn_conn = boto3.client("cloudformation", region_name="us-east-1")
|
||||
elbv2_client = boto3.client("elbv2", region_name="us-east-1")
|
||||
|
||||
# test that setting a name manually as well as letting cloudformation create a name both work
|
||||
# this is a special case because test groups have a name length limit of 22 characters, and must be unique
|
||||
# https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-targetgroup.html#cfn-elasticloadbalancingv2-targetgroup-name
|
||||
template = {
|
||||
"AWSTemplateFormatVersion": "2010-09-09",
|
||||
"Description": "ECS Cluster Test CloudFormation",
|
||||
"Resources": {
|
||||
"testVPC": {
|
||||
"Type": "AWS::EC2::VPC",
|
||||
"Properties": {"CidrBlock": "10.0.0.0/16"},
|
||||
},
|
||||
"testGroup1": {
|
||||
"Type": "AWS::ElasticLoadBalancingV2::TargetGroup",
|
||||
"Properties": {
|
||||
"Port": 80,
|
||||
"Protocol": "HTTP",
|
||||
"VpcId": {"Ref": "testVPC"},
|
||||
},
|
||||
},
|
||||
"testGroup2": {
|
||||
"Type": "AWS::ElasticLoadBalancingV2::TargetGroup",
|
||||
"Properties": {
|
||||
"Port": 90,
|
||||
"Protocol": "HTTP",
|
||||
"VpcId": {"Ref": "testVPC"},
|
||||
},
|
||||
},
|
||||
"testGroup3": {
|
||||
"Type": "AWS::ElasticLoadBalancingV2::TargetGroup",
|
||||
"Properties": {
|
||||
"Name": "MyTargetGroup",
|
||||
"Port": 70,
|
||||
"Protocol": "HTTPS",
|
||||
"VpcId": {"Ref": "testVPC"},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
template_json = json.dumps(template)
|
||||
cfn_conn.create_stack(StackName="test-stack", TemplateBody=template_json)
|
||||
|
||||
describe_target_groups_response = elbv2_client.describe_target_groups()
|
||||
target_group_dicts = describe_target_groups_response["TargetGroups"]
|
||||
assert len(target_group_dicts) == 3
|
||||
|
||||
# there should be 2 target groups with the same prefix of 10 characters (since the random suffix is 12)
|
||||
# and one named MyTargetGroup
|
||||
assert (
|
||||
len(
|
||||
[
|
||||
tg
|
||||
for tg in target_group_dicts
|
||||
if tg["TargetGroupName"] == "MyTargetGroup"
|
||||
]
|
||||
)
|
||||
== 1
|
||||
)
|
||||
assert (
|
||||
len(
|
||||
[
|
||||
tg
|
||||
for tg in target_group_dicts
|
||||
if tg["TargetGroupName"].startswith("test-stack")
|
||||
]
|
||||
)
|
||||
== 2
|
||||
)
|
||||
|
||||
|
||||
@mock_elbv2
|
||||
@mock_cloudformation
|
||||
def test_fixed_response_action_listener_rule_cloudformation():
|
||||
cnf_conn = boto3.client("cloudformation", region_name="us-east-1")
|
||||
elbv2_client = boto3.client("elbv2", region_name="us-east-1")
|
||||
|
||||
template = {
|
||||
"AWSTemplateFormatVersion": "2010-09-09",
|
||||
"Description": "ECS Cluster Test CloudFormation",
|
||||
"Resources": {
|
||||
"testVPC": {
|
||||
"Type": "AWS::EC2::VPC",
|
||||
"Properties": {"CidrBlock": "10.0.0.0/16"},
|
||||
},
|
||||
"subnet1": {
|
||||
"Type": "AWS::EC2::Subnet",
|
||||
"Properties": {
|
||||
"CidrBlock": "10.0.0.0/24",
|
||||
"VpcId": {"Ref": "testVPC"},
|
||||
"AvalabilityZone": "us-east-1b",
|
||||
},
|
||||
},
|
||||
"subnet2": {
|
||||
"Type": "AWS::EC2::Subnet",
|
||||
"Properties": {
|
||||
"CidrBlock": "10.0.1.0/24",
|
||||
"VpcId": {"Ref": "testVPC"},
|
||||
"AvalabilityZone": "us-east-1b",
|
||||
},
|
||||
},
|
||||
"testLb": {
|
||||
"Type": "AWS::ElasticLoadBalancingV2::LoadBalancer",
|
||||
"Properties": {
|
||||
"Name": "my-lb",
|
||||
"Subnets": [{"Ref": "subnet1"}, {"Ref": "subnet2"}],
|
||||
"Type": "application",
|
||||
"SecurityGroups": [],
|
||||
},
|
||||
},
|
||||
"testListener": {
|
||||
"Type": "AWS::ElasticLoadBalancingV2::Listener",
|
||||
"Properties": {
|
||||
"LoadBalancerArn": {"Ref": "testLb"},
|
||||
"Port": 80,
|
||||
"Protocol": "HTTP",
|
||||
"DefaultActions": [
|
||||
{
|
||||
"Type": "fixed-response",
|
||||
"FixedResponseConfig": {
|
||||
"ContentType": "text/plain",
|
||||
"MessageBody": "This page does not exist",
|
||||
"StatusCode": "404",
|
||||
},
|
||||
}
|
||||
],
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
template_json = json.dumps(template)
|
||||
cnf_conn.create_stack(StackName="test-stack", TemplateBody=template_json)
|
||||
|
||||
describe_load_balancers_response = elbv2_client.describe_load_balancers(
|
||||
Names=["my-lb"]
|
||||
)
|
||||
load_balancer_arn = describe_load_balancers_response["LoadBalancers"][0][
|
||||
"LoadBalancerArn"
|
||||
]
|
||||
describe_listeners_response = elbv2_client.describe_listeners(
|
||||
LoadBalancerArn=load_balancer_arn
|
||||
)
|
||||
|
||||
describe_listeners_response["Listeners"].should.have.length_of(1)
|
||||
describe_listeners_response["Listeners"][0]["DefaultActions"].should.equal(
|
||||
[
|
||||
{
|
||||
"Type": "fixed-response",
|
||||
"FixedResponseConfig": {
|
||||
"ContentType": "text/plain",
|
||||
"MessageBody": "This page does not exist",
|
||||
"StatusCode": "404",
|
||||
},
|
||||
}
|
||||
]
|
||||
)
|
||||
Loading…
Add table
Add a link
Reference in a new issue