| 
									
										
										
										
											2022-03-21 19:55:19 -01:00
										 |  |  | 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 = [ | 
					
						
							| 
									
										
										
										
											2022-04-27 11:58:59 +00:00
										 |  |  |         listener | 
					
						
							|  |  |  |         for listener in balancer["ListenerDescriptions"] | 
					
						
							|  |  |  |         if listener["Listener"]["Protocol"] == "HTTP" | 
					
						
							| 
									
										
										
										
											2022-03-21 19:55:19 -01:00
										 |  |  |     ][0] | 
					
						
							|  |  |  |     http_l.should.have.key("PolicyNames").should.equal([]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     https_l = [ | 
					
						
							| 
									
										
										
										
											2022-04-27 11:58:59 +00:00
										 |  |  |         listener | 
					
						
							|  |  |  |         for listener in balancer["ListenerDescriptions"] | 
					
						
							|  |  |  |         if listener["Listener"]["Protocol"] == "HTTPS" | 
					
						
							| 
									
										
										
										
											2022-03-21 19:55:19 -01:00
										 |  |  |     ][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) |