Merge pull request #1312 from JackDanger/jack/validate-protocol-on-target-group-creation
validate protocol on target group creation
This commit is contained in:
commit
eccc8f97f8
@ -7,6 +7,8 @@ from moto.core.exceptions import RESTError
|
|||||||
from moto.core import BaseBackend, BaseModel
|
from moto.core import BaseBackend, BaseModel
|
||||||
from moto.ec2.models import ec2_backends
|
from moto.ec2.models import ec2_backends
|
||||||
from moto.acm.models import acm_backends
|
from moto.acm.models import acm_backends
|
||||||
|
from .utils import make_arn_for_target_group
|
||||||
|
from .utils import make_arn_for_load_balancer
|
||||||
from .exceptions import (
|
from .exceptions import (
|
||||||
DuplicateLoadBalancerName,
|
DuplicateLoadBalancerName,
|
||||||
DuplicateListenerError,
|
DuplicateListenerError,
|
||||||
@ -342,7 +344,7 @@ class ELBv2Backend(BaseBackend):
|
|||||||
subnets.append(subnet)
|
subnets.append(subnet)
|
||||||
|
|
||||||
vpc_id = subnets[0].vpc_id
|
vpc_id = subnets[0].vpc_id
|
||||||
arn = "arn:aws:elasticloadbalancing:%s:1:loadbalancer/%s/50dc6c495c0c9188" % (self.region_name, name)
|
arn = make_arn_for_load_balancer(account_id=1, name=name, region_name=self.region_name)
|
||||||
dns_name = "%s-1.%s.elb.amazonaws.com" % (name, self.region_name)
|
dns_name = "%s-1.%s.elb.amazonaws.com" % (name, self.region_name)
|
||||||
|
|
||||||
if arn in self.load_balancers:
|
if arn in self.load_balancers:
|
||||||
@ -430,10 +432,30 @@ class ELBv2Backend(BaseBackend):
|
|||||||
if target_group.name == name:
|
if target_group.name == name:
|
||||||
raise DuplicateTargetGroupName()
|
raise DuplicateTargetGroupName()
|
||||||
|
|
||||||
|
valid_protocols = ['HTTPS', 'HTTP', 'TCP']
|
||||||
|
if kwargs['healthcheck_protocol'] not in valid_protocols:
|
||||||
|
raise InvalidConditionValueError(
|
||||||
|
"Value {} at 'healthCheckProtocol' failed to satisfy constraint: "
|
||||||
|
"Member must satisfy enum value set: {}".format(kwargs['healthcheck_protocol'], valid_protocols))
|
||||||
|
if kwargs['protocol'] not in valid_protocols:
|
||||||
|
raise InvalidConditionValueError(
|
||||||
|
"Value {} at 'protocol' failed to satisfy constraint: "
|
||||||
|
"Member must satisfy enum value set: {}".format(kwargs['protocol'], valid_protocols))
|
||||||
|
|
||||||
if FakeTargetGroup.HTTP_CODE_REGEX.match(kwargs['matcher']['HttpCode']) is None:
|
if FakeTargetGroup.HTTP_CODE_REGEX.match(kwargs['matcher']['HttpCode']) is None:
|
||||||
raise RESTError('InvalidParameterValue', 'HttpCode must be like 200 | 200-399 | 200,201 ...')
|
raise RESTError('InvalidParameterValue', 'HttpCode must be like 200 | 200-399 | 200,201 ...')
|
||||||
|
|
||||||
arn = "arn:aws:elasticloadbalancing:%s:1:targetgroup/%s/50dc6c495c0c9188" % (self.region_name, name)
|
valid_protocols = ['HTTPS', 'HTTP', 'TCP']
|
||||||
|
if kwargs['healthcheck_protocol'] not in valid_protocols:
|
||||||
|
raise InvalidConditionValueError(
|
||||||
|
"Value {} at 'healthCheckProtocol' failed to satisfy constraint: "
|
||||||
|
"Member must satisfy enum value set: {}".format(kwargs['healthcheck_protocol'], valid_protocols))
|
||||||
|
if kwargs['protocol'] not in valid_protocols:
|
||||||
|
raise InvalidConditionValueError(
|
||||||
|
"Value {} at 'protocol' failed to satisfy constraint: "
|
||||||
|
"Member must satisfy enum value set: {}".format(kwargs['protocol'], valid_protocols))
|
||||||
|
|
||||||
|
arn = make_arn_for_target_group(account_id=1, name=name, region_name=self.region_name)
|
||||||
target_group = FakeTargetGroup(name, arn, **kwargs)
|
target_group = FakeTargetGroup(name, arn, **kwargs)
|
||||||
self.target_groups[target_group.arn] = target_group
|
self.target_groups[target_group.arn] = target_group
|
||||||
return target_group
|
return target_group
|
||||||
|
8
moto/elbv2/utils.py
Normal file
8
moto/elbv2/utils.py
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
def make_arn_for_load_balancer(account_id, name, region_name):
|
||||||
|
return "arn:aws:elasticloadbalancing:{}:{}:loadbalancer/{}/50dc6c495c0c9188".format(
|
||||||
|
region_name, account_id, name)
|
||||||
|
|
||||||
|
|
||||||
|
def make_arn_for_target_group(account_id, name, region_name):
|
||||||
|
return "arn:aws:elasticloadbalancing:{}:{}:targetgroup/{}/50dc6c495c0c9188".format(
|
||||||
|
region_name, account_id, name)
|
@ -285,6 +285,21 @@ def test_create_target_group_and_listeners():
|
|||||||
|
|
||||||
load_balancer_arn = response.get('LoadBalancers')[0].get('LoadBalancerArn')
|
load_balancer_arn = response.get('LoadBalancers')[0].get('LoadBalancerArn')
|
||||||
|
|
||||||
|
# Can't create a target group with an invalid protocol
|
||||||
|
with assert_raises(ClientError):
|
||||||
|
conn.create_target_group(
|
||||||
|
Name='a-target',
|
||||||
|
Protocol='HTTP',
|
||||||
|
Port=8080,
|
||||||
|
VpcId=vpc.id,
|
||||||
|
HealthCheckProtocol='/HTTP',
|
||||||
|
HealthCheckPort='8080',
|
||||||
|
HealthCheckPath='/',
|
||||||
|
HealthCheckIntervalSeconds=5,
|
||||||
|
HealthCheckTimeoutSeconds=5,
|
||||||
|
HealthyThresholdCount=5,
|
||||||
|
UnhealthyThresholdCount=2,
|
||||||
|
Matcher={'HttpCode': '200'})
|
||||||
response = conn.create_target_group(
|
response = conn.create_target_group(
|
||||||
Name='a-target',
|
Name='a-target',
|
||||||
Protocol='HTTP',
|
Protocol='HTTP',
|
||||||
@ -725,6 +740,21 @@ def test_handle_listener_rules():
|
|||||||
|
|
||||||
load_balancer_arn = response.get('LoadBalancers')[0].get('LoadBalancerArn')
|
load_balancer_arn = response.get('LoadBalancers')[0].get('LoadBalancerArn')
|
||||||
|
|
||||||
|
# Can't create a target group with an invalid protocol
|
||||||
|
with assert_raises(ClientError):
|
||||||
|
conn.create_target_group(
|
||||||
|
Name='a-target',
|
||||||
|
Protocol='HTTP',
|
||||||
|
Port=8080,
|
||||||
|
VpcId=vpc.id,
|
||||||
|
HealthCheckProtocol='/HTTP',
|
||||||
|
HealthCheckPort='8080',
|
||||||
|
HealthCheckPath='/',
|
||||||
|
HealthCheckIntervalSeconds=5,
|
||||||
|
HealthCheckTimeoutSeconds=5,
|
||||||
|
HealthyThresholdCount=5,
|
||||||
|
UnhealthyThresholdCount=2,
|
||||||
|
Matcher={'HttpCode': '200'})
|
||||||
response = conn.create_target_group(
|
response = conn.create_target_group(
|
||||||
Name='a-target',
|
Name='a-target',
|
||||||
Protocol='HTTP',
|
Protocol='HTTP',
|
||||||
|
Loading…
Reference in New Issue
Block a user