305 lines
		
	
	
		
			9.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			305 lines
		
	
	
		
			9.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import boto3
 | |
| from botocore.exceptions import ClientError
 | |
| import pytest
 | |
| import sure  # noqa # pylint: disable=unused-import
 | |
| 
 | |
| from moto import mock_elb
 | |
| from uuid import uuid4
 | |
| 
 | |
| 
 | |
| @mock_elb
 | |
| def test_create_lb_cookie_stickiness_policy():
 | |
|     lb_name = str(uuid4())[0:6]
 | |
| 
 | |
|     client = boto3.client("elb", region_name="us-east-1")
 | |
|     client.create_load_balancer(
 | |
|         LoadBalancerName=lb_name,
 | |
|         Listeners=[{"Protocol": "http", "LoadBalancerPort": 80, "InstancePort": 8080}],
 | |
|         AvailabilityZones=["us-east-1a"],
 | |
|     )
 | |
| 
 | |
|     balancer = client.describe_load_balancers(LoadBalancerNames=[lb_name])[
 | |
|         "LoadBalancerDescriptions"
 | |
|     ][0]
 | |
|     lbc_policies = balancer["Policies"]["LBCookieStickinessPolicies"]
 | |
|     lbc_policies.should.have.length_of(0)
 | |
| 
 | |
|     client.create_lb_cookie_stickiness_policy(
 | |
|         LoadBalancerName=lb_name, PolicyName="pname", CookieExpirationPeriod=42
 | |
|     )
 | |
| 
 | |
|     balancer = client.describe_load_balancers(LoadBalancerNames=[lb_name])[
 | |
|         "LoadBalancerDescriptions"
 | |
|     ][0]
 | |
|     policies = balancer["Policies"]
 | |
|     lbc_policies = policies["LBCookieStickinessPolicies"]
 | |
|     lbc_policies.should.have.length_of(1)
 | |
|     lbc_policies[0].should.equal({"PolicyName": "pname", "CookieExpirationPeriod": 42})
 | |
| 
 | |
| 
 | |
| @mock_elb
 | |
| def test_create_lb_cookie_stickiness_policy_no_expiry():
 | |
|     lb_name = str(uuid4())[0:6]
 | |
| 
 | |
|     client = boto3.client("elb", region_name="us-east-1")
 | |
|     client.create_load_balancer(
 | |
|         LoadBalancerName=lb_name,
 | |
|         Listeners=[{"Protocol": "http", "LoadBalancerPort": 80, "InstancePort": 8080}],
 | |
|         AvailabilityZones=["us-east-1a"],
 | |
|     )
 | |
| 
 | |
|     balancer = client.describe_load_balancers(LoadBalancerNames=[lb_name])[
 | |
|         "LoadBalancerDescriptions"
 | |
|     ][0]
 | |
|     lbc_policies = balancer["Policies"]["LBCookieStickinessPolicies"]
 | |
|     lbc_policies.should.have.length_of(0)
 | |
| 
 | |
|     client.create_lb_cookie_stickiness_policy(
 | |
|         LoadBalancerName=lb_name, PolicyName="pname"
 | |
|     )
 | |
| 
 | |
|     balancer = client.describe_load_balancers(LoadBalancerNames=[lb_name])[
 | |
|         "LoadBalancerDescriptions"
 | |
|     ][0]
 | |
|     policies = balancer["Policies"]
 | |
|     lbc_policies = policies["LBCookieStickinessPolicies"]
 | |
|     lbc_policies.should.have.length_of(1)
 | |
|     lbc_policies[0].should.equal({"PolicyName": "pname"})
 | |
| 
 | |
| 
 | |
| @mock_elb
 | |
| def test_create_app_cookie_stickiness_policy():
 | |
|     lb_name = str(uuid4())[0:6]
 | |
| 
 | |
|     client = boto3.client("elb", region_name="us-east-1")
 | |
|     client.create_load_balancer(
 | |
|         LoadBalancerName=lb_name,
 | |
|         Listeners=[{"Protocol": "http", "LoadBalancerPort": 80, "InstancePort": 8080}],
 | |
|         AvailabilityZones=["us-east-1a"],
 | |
|     )
 | |
| 
 | |
|     balancer = client.describe_load_balancers(LoadBalancerNames=[lb_name])[
 | |
|         "LoadBalancerDescriptions"
 | |
|     ][0]
 | |
|     lbc_policies = balancer["Policies"]["AppCookieStickinessPolicies"]
 | |
|     lbc_policies.should.have.length_of(0)
 | |
| 
 | |
|     client.create_app_cookie_stickiness_policy(
 | |
|         LoadBalancerName=lb_name, PolicyName="pname", CookieName="cname"
 | |
|     )
 | |
| 
 | |
|     balancer = client.describe_load_balancers(LoadBalancerNames=[lb_name])[
 | |
|         "LoadBalancerDescriptions"
 | |
|     ][0]
 | |
|     policies = balancer["Policies"]
 | |
|     lbc_policies = policies["AppCookieStickinessPolicies"]
 | |
|     lbc_policies.should.have.length_of(1)
 | |
|     lbc_policies[0].should.equal({"CookieName": "cname", "PolicyName": "pname"})
 | |
| 
 | |
| 
 | |
| @mock_elb
 | |
| def test_create_lb_policy():
 | |
|     lb_name = str(uuid4())[0:6]
 | |
| 
 | |
|     client = boto3.client("elb", region_name="us-east-1")
 | |
|     client.create_load_balancer(
 | |
|         LoadBalancerName=lb_name,
 | |
|         Listeners=[{"Protocol": "http", "LoadBalancerPort": 80, "InstancePort": 8080}],
 | |
|         AvailabilityZones=["us-east-1a"],
 | |
|     )
 | |
| 
 | |
|     client.create_load_balancer_policy(
 | |
|         LoadBalancerName=lb_name,
 | |
|         PolicyName="ProxyPolicy",
 | |
|         PolicyTypeName="ProxyProtocolPolicyType",
 | |
|         PolicyAttributes=[{"AttributeName": "ProxyProtocol", "AttributeValue": "true"}],
 | |
|     )
 | |
| 
 | |
|     balancer = client.describe_load_balancers(LoadBalancerNames=[lb_name])[
 | |
|         "LoadBalancerDescriptions"
 | |
|     ][0]
 | |
|     policies = balancer["Policies"]
 | |
|     policies.should.have.key("OtherPolicies").equal(["ProxyPolicy"])
 | |
| 
 | |
| 
 | |
| @mock_elb
 | |
| def test_set_policies_of_listener():
 | |
|     lb_name = str(uuid4())[0:6]
 | |
| 
 | |
|     client = boto3.client("elb", region_name="us-east-1")
 | |
|     client.create_load_balancer(
 | |
|         LoadBalancerName=lb_name,
 | |
|         Listeners=[
 | |
|             {"Protocol": "http", "LoadBalancerPort": 80, "InstancePort": 8080},
 | |
|             {"Protocol": "https", "LoadBalancerPort": 81, "InstancePort": 8081},
 | |
|         ],
 | |
|         AvailabilityZones=["us-east-1a"],
 | |
|     )
 | |
| 
 | |
|     client.create_app_cookie_stickiness_policy(
 | |
|         LoadBalancerName=lb_name, PolicyName="pname", CookieName="cname"
 | |
|     )
 | |
| 
 | |
|     client.set_load_balancer_policies_of_listener(
 | |
|         LoadBalancerName=lb_name, LoadBalancerPort=81, PolicyNames=["pname"]
 | |
|     )
 | |
| 
 | |
|     balancer = client.describe_load_balancers(LoadBalancerNames=[lb_name])[
 | |
|         "LoadBalancerDescriptions"
 | |
|     ][0]
 | |
| 
 | |
|     http_l = [
 | |
|         listener
 | |
|         for listener in balancer["ListenerDescriptions"]
 | |
|         if listener["Listener"]["Protocol"] == "HTTP"
 | |
|     ][0]
 | |
|     http_l.should.have.key("PolicyNames").should.equal([])
 | |
| 
 | |
|     https_l = [
 | |
|         listener
 | |
|         for listener in balancer["ListenerDescriptions"]
 | |
|         if listener["Listener"]["Protocol"] == "HTTPS"
 | |
|     ][0]
 | |
|     https_l.should.have.key("PolicyNames").should.equal(["pname"])
 | |
| 
 | |
| 
 | |
| @mock_elb
 | |
| def test_set_policies_of_backend_server():
 | |
|     lb_name = str(uuid4())[0:6]
 | |
| 
 | |
|     client = boto3.client("elb", region_name="us-east-1")
 | |
|     client.create_load_balancer(
 | |
|         LoadBalancerName=lb_name,
 | |
|         Listeners=[
 | |
|             {"Protocol": "http", "LoadBalancerPort": 80, "InstancePort": 8080},
 | |
|             {"Protocol": "https", "LoadBalancerPort": 81, "InstancePort": 8081},
 | |
|         ],
 | |
|         AvailabilityZones=["us-east-1a"],
 | |
|     )
 | |
| 
 | |
|     client.create_app_cookie_stickiness_policy(
 | |
|         LoadBalancerName=lb_name, PolicyName="pname", CookieName="cname"
 | |
|     )
 | |
| 
 | |
|     client.set_load_balancer_policies_for_backend_server(
 | |
|         LoadBalancerName=lb_name, InstancePort=8081, PolicyNames=["pname"]
 | |
|     )
 | |
| 
 | |
|     balancer = client.describe_load_balancers(LoadBalancerNames=[lb_name])[
 | |
|         "LoadBalancerDescriptions"
 | |
|     ][0]
 | |
|     balancer.should.have.key("BackendServerDescriptions")
 | |
|     desc = balancer["BackendServerDescriptions"]
 | |
|     desc.should.have.length_of(1)
 | |
|     desc[0].should.equal({"InstancePort": 8081, "PolicyNames": ["pname"]})
 | |
| 
 | |
| 
 | |
| @mock_elb
 | |
| def test_describe_load_balancer_policies__initial():
 | |
|     lb_name = str(uuid4())[0:6]
 | |
| 
 | |
|     client = boto3.client("elb", region_name="us-east-1")
 | |
|     client.create_load_balancer(
 | |
|         LoadBalancerName=lb_name,
 | |
|         Listeners=[{"Protocol": "http", "LoadBalancerPort": 80, "InstancePort": 8080}],
 | |
|         AvailabilityZones=["us-east-1a"],
 | |
|     )
 | |
| 
 | |
|     resp = client.describe_load_balancer_policies(LoadBalancerName=lb_name)
 | |
|     resp.should.have.key("PolicyDescriptions").equals([])
 | |
| 
 | |
| 
 | |
| @mock_elb
 | |
| def test_describe_load_balancer_policies():
 | |
|     lb_name = str(uuid4())[0:6]
 | |
| 
 | |
|     client = boto3.client("elb", region_name="us-east-1")
 | |
|     client.create_load_balancer(
 | |
|         LoadBalancerName=lb_name,
 | |
|         Listeners=[{"Protocol": "http", "LoadBalancerPort": 80, "InstancePort": 8080}],
 | |
|         AvailabilityZones=["us-east-1a"],
 | |
|     )
 | |
| 
 | |
|     client.create_load_balancer_policy(
 | |
|         LoadBalancerName=lb_name,
 | |
|         PolicyName="ProxyPolicy",
 | |
|         PolicyTypeName="ProxyProtocolPolicyType",
 | |
|         PolicyAttributes=[{"AttributeName": "ProxyProtocol", "AttributeValue": "true"}],
 | |
|     )
 | |
| 
 | |
|     client.create_load_balancer_policy(
 | |
|         LoadBalancerName=lb_name,
 | |
|         PolicyName="DifferentPolicy",
 | |
|         PolicyTypeName="DifferentProtocolPolicyType",
 | |
|         PolicyAttributes=[{"AttributeName": "DiffProtocol", "AttributeValue": "true"}],
 | |
|     )
 | |
| 
 | |
|     resp = client.describe_load_balancer_policies(LoadBalancerName=lb_name)
 | |
|     resp.should.have.key("PolicyDescriptions").length_of(2)
 | |
| 
 | |
|     resp = client.describe_load_balancer_policies(
 | |
|         LoadBalancerName=lb_name, PolicyNames=["DifferentPolicy"]
 | |
|     )
 | |
|     resp.should.have.key("PolicyDescriptions").length_of(1)
 | |
|     resp["PolicyDescriptions"][0].should.equal(
 | |
|         {
 | |
|             "PolicyName": "DifferentPolicy",
 | |
|             "PolicyTypeName": "DifferentProtocolPolicyType",
 | |
|             "PolicyAttributeDescriptions": [
 | |
|                 {"AttributeName": "DiffProtocol", "AttributeValue": "true"}
 | |
|             ],
 | |
|         }
 | |
|     )
 | |
| 
 | |
| 
 | |
| @mock_elb
 | |
| def test_describe_unknown_load_balancer_policy():
 | |
|     lb_name = str(uuid4())[0:6]
 | |
| 
 | |
|     client = boto3.client("elb", region_name="us-east-1")
 | |
|     client.create_load_balancer(
 | |
|         LoadBalancerName=lb_name,
 | |
|         Listeners=[{"Protocol": "http", "LoadBalancerPort": 80, "InstancePort": 8080}],
 | |
|         AvailabilityZones=["us-east-1a"],
 | |
|     )
 | |
| 
 | |
|     with pytest.raises(ClientError) as exc:
 | |
|         client.describe_load_balancer_policies(
 | |
|             LoadBalancerName=lb_name, PolicyNames=["unknown"]
 | |
|         )
 | |
|     err = exc.value.response["Error"]
 | |
|     err["Code"].should.equal("PolicyNotFound")
 | |
| 
 | |
| 
 | |
| @mock_elb
 | |
| def test_delete_load_balancer_policies():
 | |
|     lb_name = str(uuid4())[0:6]
 | |
| 
 | |
|     client = boto3.client("elb", region_name="us-east-1")
 | |
|     client.create_load_balancer(
 | |
|         LoadBalancerName=lb_name,
 | |
|         Listeners=[{"Protocol": "http", "LoadBalancerPort": 80, "InstancePort": 8080}],
 | |
|         AvailabilityZones=["us-east-1a"],
 | |
|     )
 | |
| 
 | |
|     client.create_load_balancer_policy(
 | |
|         LoadBalancerName=lb_name,
 | |
|         PolicyName="ProxyPolicy",
 | |
|         PolicyTypeName="ProxyProtocolPolicyType",
 | |
|         PolicyAttributes=[{"AttributeName": "ProxyProtocol", "AttributeValue": "true"}],
 | |
|     )
 | |
| 
 | |
|     client.create_load_balancer_policy(
 | |
|         LoadBalancerName=lb_name,
 | |
|         PolicyName="DifferentPolicy",
 | |
|         PolicyTypeName="DifferentProtocolPolicyType",
 | |
|         PolicyAttributes=[{"AttributeName": "DiffProtocol", "AttributeValue": "true"}],
 | |
|     )
 | |
| 
 | |
|     client.delete_load_balancer_policy(
 | |
|         LoadBalancerName=lb_name, PolicyName="ProxyPolicy"
 | |
|     )
 | |
| 
 | |
|     resp = client.describe_load_balancer_policies(LoadBalancerName=lb_name)
 | |
|     resp.should.have.key("PolicyDescriptions").length_of(1)
 |