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)