Exemple #1
0
        public void TestLoadBalancerOperations()
        {
            loadBalancerName = SDK_TEST_PREFIX + "-lb" + DateTime.Now.Ticks;
            Listener expectedListener = new Listener()
            {
                InstancePort     = 8080,
                LoadBalancerPort = 80,
                Protocol         = PROTOCOL
            };

            // Create a load balancer
            string dnsName = Client.CreateLoadBalancer(
                new CreateLoadBalancerRequest()
            {
                LoadBalancerName  = loadBalancerName,
                AvailabilityZones = new List <string>()
                {
                    AVAILABILITY_ZONE_1
                },
                Listeners = new List <Listener>()
                {
                    expectedListener
                }
            }).DNSName;

            try
            {
                Assert.IsFalse(string.IsNullOrEmpty(dnsName));


                // Configure health checks
                HealthCheck expectedHealthCheck = new HealthCheck()
                {
                    Interval           = 120,
                    Target             = "HTTP:80/ping",
                    Timeout            = 60,
                    UnhealthyThreshold = 9,
                    HealthyThreshold   = 10
                };

                HealthCheck createdHealthCheck = Client.ConfigureHealthCheck(
                    new ConfigureHealthCheckRequest()
                {
                    LoadBalancerName = loadBalancerName,
                    HealthCheck      = expectedHealthCheck
                }).HealthCheck;
                Assert.AreEqual(expectedHealthCheck.HealthyThreshold, createdHealthCheck.HealthyThreshold);
                Assert.AreEqual(expectedHealthCheck.Interval, createdHealthCheck.Interval);
                Assert.AreEqual(expectedHealthCheck.Target, createdHealthCheck.Target);
                Assert.AreEqual(expectedHealthCheck.Timeout, createdHealthCheck.Timeout);
                Assert.AreEqual(expectedHealthCheck.UnhealthyThreshold, createdHealthCheck.UnhealthyThreshold);


                // Describe
                List <LoadBalancerDescription> loadBalancerDescriptions =
                    Client.DescribeLoadBalancers(
                        new DescribeLoadBalancersRequest()
                {
                    LoadBalancerNames = new List <string>()
                    {
                        loadBalancerName
                    }
                }
                        ).LoadBalancerDescriptions;
                Assert.AreEqual(1, loadBalancerDescriptions.Count);
                LoadBalancerDescription loadBalancer = loadBalancerDescriptions[0];
                Assert.AreEqual(loadBalancerName, loadBalancer.LoadBalancerName);
                Assert.AreEqual(1, loadBalancer.AvailabilityZones.Count);
                Assert.IsTrue(loadBalancer.AvailabilityZones.Contains(AVAILABILITY_ZONE_1));
                Assert.IsNotNull(loadBalancer.CreatedTime);
                Assert.AreEqual(dnsName, loadBalancer.DNSName);
                Assert.AreEqual(expectedHealthCheck.Target, loadBalancer.HealthCheck.Target);
                Assert.IsTrue(loadBalancer.Instances.Count == 0);
                Assert.AreEqual(1, loadBalancer.ListenerDescriptions.Count);
                Assert.AreEqual((double)8080, (double)loadBalancer.ListenerDescriptions[0].Listener.InstancePort, 0.0);
                Assert.AreEqual((double)80, (double)loadBalancer.ListenerDescriptions[0].Listener.LoadBalancerPort, 0.0);
                Assert.AreEqual(PROTOCOL, loadBalancer.ListenerDescriptions[0].Listener.Protocol);
                Assert.AreEqual(loadBalancerName, loadBalancer.LoadBalancerName);
                Assert.IsNotNull(loadBalancer.SourceSecurityGroup);
                Assert.IsNotNull(loadBalancer.SourceSecurityGroup.GroupName);
                Assert.IsNotNull(loadBalancer.SourceSecurityGroup.OwnerAlias);


                // Enabled AZs
                List <String> availabilityZones =
                    Client.EnableAvailabilityZonesForLoadBalancer(
                        new EnableAvailabilityZonesForLoadBalancerRequest()
                {
                    LoadBalancerName  = loadBalancerName,
                    AvailabilityZones = new List <string>()
                    {
                        AVAILABILITY_ZONE_2
                    }
                }
                        ).AvailabilityZones;
                Assert.AreEqual(2, availabilityZones.Count);
                Assert.IsTrue(availabilityZones.Contains(AVAILABILITY_ZONE_1));
                Assert.IsTrue(availabilityZones.Contains(AVAILABILITY_ZONE_2));

                Thread.Sleep(1000 * 10);

                // Disable AZs
                availabilityZones =
                    Client.DisableAvailabilityZonesForLoadBalancer(
                        new DisableAvailabilityZonesForLoadBalancerRequest()
                {
                    LoadBalancerName  = loadBalancerName,
                    AvailabilityZones = new List <string>()
                    {
                        AVAILABILITY_ZONE_2
                    }
                }
                        ).AvailabilityZones;
                Assert.AreEqual(1, availabilityZones.Count);
                Assert.IsTrue(availabilityZones.Contains(AVAILABILITY_ZONE_1));
                Assert.IsFalse(availabilityZones.Contains(AVAILABILITY_ZONE_2));

                // Create LB stickiness policy
                String policyName = SDK_TEST_PREFIX + "-policy-" + DateTime.Now.Ticks;
                Client.CreateLBCookieStickinessPolicy(new CreateLBCookieStickinessPolicyRequest()
                {
                    LoadBalancerName = loadBalancerName,
                    PolicyName       = policyName
                });


                // Attach the policy to a listener
                Client.SetLoadBalancerPoliciesOfListener(new SetLoadBalancerPoliciesOfListenerRequest()
                {
                    LoadBalancerName = loadBalancerName,
                    LoadBalancerPort = 80,
                    PolicyNames      = new List <string>()
                    {
                        policyName
                    }
                });
                Assert.IsTrue(DoesLoadBalancerHaveListenerWithPolicy(loadBalancerName, policyName));

                // Remove the policy from the listener
                Client.SetLoadBalancerPoliciesOfListener(new SetLoadBalancerPoliciesOfListenerRequest()
                {
                    LoadBalancerName = loadBalancerName,
                    LoadBalancerPort = 80
                });
                Assert.IsFalse(DoesLoadBalancerHaveListenerWithPolicy(loadBalancerName, policyName));

                // Delete the policy
                Client.DeleteLoadBalancerPolicy(new DeleteLoadBalancerPolicyRequest(loadBalancerName, policyName));
            }
            finally
            {
                // Delete the test load balancer
                Client.DeleteLoadBalancer(new DeleteLoadBalancerRequest()
                {
                    LoadBalancerName = loadBalancerName
                });
            }
        }
        public void TestLoadBalancerOperations()
        {
            using (var ec2 = CreateClient <Amazon.EC2.AmazonEC2Client>())
            {
                var regionName = TestRunner.RegionEndpoint.SystemName;

                var availabilityZones = ec2.DescribeAvailabilityZonesAsync(new Amazon.EC2.Model.DescribeAvailabilityZonesRequest
                {
                    Filters = new List <Amazon.EC2.Model.Filter>
                    {
                        new Amazon.EC2.Model.Filter
                        {
                            Name   = "region-name",
                            Values = new List <string>
                            {
                                regionName
                            }
                        }
                    }
                }).Result.AvailabilityZones;

                AVAILABILITY_ZONE_1 = availabilityZones[0].ZoneName;
                AVAILABILITY_ZONE_2 = availabilityZones[1].ZoneName;
            }

            loadBalancerName = SDK_TEST_PREFIX + "-lb" + DateTime.Now.Ticks;
            Listener expectedListener = new Listener()
            {
                InstancePort     = 8080,
                LoadBalancerPort = 80,
                Protocol         = PROTOCOL
            };

            // Create a load balancer
            string dnsName = Client.CreateLoadBalancerAsync(
                new CreateLoadBalancerRequest()
            {
                LoadBalancerName  = loadBalancerName,
                AvailabilityZones = new List <string>()
                {
                    AVAILABILITY_ZONE_1
                },
                Listeners = new List <Listener>()
                {
                    expectedListener
                }
            }).Result.DNSName;

            try
            {
                Assert.IsFalse(string.IsNullOrEmpty(dnsName));


                // Configure health checks
                HealthCheck expectedHealthCheck = new HealthCheck()
                {
                    Interval           = 120,
                    Target             = "HTTP:80/ping",
                    Timeout            = 60,
                    UnhealthyThreshold = 9,
                    HealthyThreshold   = 10
                };

                HealthCheck createdHealthCheck = Client.ConfigureHealthCheckAsync(
                    new ConfigureHealthCheckRequest()
                {
                    LoadBalancerName = loadBalancerName,
                    HealthCheck      = expectedHealthCheck
                }).Result.HealthCheck;
                Assert.AreEqual(expectedHealthCheck.HealthyThreshold, createdHealthCheck.HealthyThreshold);
                Assert.AreEqual(expectedHealthCheck.Interval, createdHealthCheck.Interval);
                Assert.AreEqual(expectedHealthCheck.Target, createdHealthCheck.Target);
                Assert.AreEqual(expectedHealthCheck.Timeout, createdHealthCheck.Timeout);
                Assert.AreEqual(expectedHealthCheck.UnhealthyThreshold, createdHealthCheck.UnhealthyThreshold);


                // Describe
                List <LoadBalancerDescription> loadBalancerDescriptions =
                    Client.DescribeLoadBalancersAsync(
                        new DescribeLoadBalancersRequest()
                {
                    LoadBalancerNames = new List <string>()
                    {
                        loadBalancerName
                    }
                }
                        ).Result.LoadBalancerDescriptions;
                Assert.AreEqual(1, loadBalancerDescriptions.Count);
                LoadBalancerDescription loadBalancer = loadBalancerDescriptions[0];
                Assert.AreEqual(loadBalancerName, loadBalancer.LoadBalancerName);
                Assert.AreEqual(1, loadBalancer.AvailabilityZones.Count);
                Assert.IsTrue(loadBalancer.AvailabilityZones.Contains(AVAILABILITY_ZONE_1));
                Assert.IsNotNull(loadBalancer.CreatedTime);
                Assert.AreEqual(dnsName, loadBalancer.DNSName);
                Assert.AreEqual(expectedHealthCheck.Target, loadBalancer.HealthCheck.Target);
                Assert.IsTrue(loadBalancer.Instances.Count == 0);
                Assert.AreEqual(1, loadBalancer.ListenerDescriptions.Count);
                Assert.AreEqual((double)8080, (double)loadBalancer.ListenerDescriptions[0].Listener.InstancePort, 0.0);
                Assert.AreEqual((double)80, (double)loadBalancer.ListenerDescriptions[0].Listener.LoadBalancerPort, 0.0);
                Assert.AreEqual(PROTOCOL, loadBalancer.ListenerDescriptions[0].Listener.Protocol);
                Assert.AreEqual(loadBalancerName, loadBalancer.LoadBalancerName);
                Assert.IsNotNull(loadBalancer.SourceSecurityGroup);
                Assert.IsNotNull(loadBalancer.SourceSecurityGroup.GroupName);
                Assert.IsNotNull(loadBalancer.SourceSecurityGroup.OwnerAlias);


                // Enabled AZs
                List <String> availabilityZones =
                    Client.EnableAvailabilityZonesForLoadBalancerAsync(
                        new EnableAvailabilityZonesForLoadBalancerRequest()
                {
                    LoadBalancerName  = loadBalancerName,
                    AvailabilityZones = new List <string>()
                    {
                        AVAILABILITY_ZONE_2
                    }
                }
                        ).Result.AvailabilityZones;
                Assert.AreEqual(2, availabilityZones.Count);
                Assert.IsTrue(availabilityZones.Contains(AVAILABILITY_ZONE_1));
                Assert.IsTrue(availabilityZones.Contains(AVAILABILITY_ZONE_2));

                UtilityMethods.Sleep(TimeSpan.FromSeconds(10));

                // Disable AZs
                availabilityZones =
                    Client.DisableAvailabilityZonesForLoadBalancerAsync(
                        new DisableAvailabilityZonesForLoadBalancerRequest()
                {
                    LoadBalancerName  = loadBalancerName,
                    AvailabilityZones = new List <string>()
                    {
                        AVAILABILITY_ZONE_2
                    }
                }
                        ).Result.AvailabilityZones;
                Assert.AreEqual(1, availabilityZones.Count);
                Assert.IsTrue(availabilityZones.Contains(AVAILABILITY_ZONE_1));
                Assert.IsFalse(availabilityZones.Contains(AVAILABILITY_ZONE_2));

                // Create LB stickiness policy
                String policyName = SDK_TEST_PREFIX + "-policy-" + DateTime.Now.Ticks;
                Client.CreateLBCookieStickinessPolicyAsync(new CreateLBCookieStickinessPolicyRequest()
                {
                    LoadBalancerName = loadBalancerName,
                    PolicyName       = policyName
                }).Wait();


                // Attach the policy to a listener
                Client.SetLoadBalancerPoliciesOfListenerAsync(new SetLoadBalancerPoliciesOfListenerRequest()
                {
                    LoadBalancerName = loadBalancerName,
                    LoadBalancerPort = 80,
                    PolicyNames      = new List <string>()
                    {
                        policyName
                    }
                }).Wait();
                Assert.IsTrue(DoesLoadBalancerHaveListenerWithPolicy(loadBalancerName, policyName));

                // Remove the policy from the listener
                Client.SetLoadBalancerPoliciesOfListenerAsync(new SetLoadBalancerPoliciesOfListenerRequest()
                {
                    LoadBalancerName = loadBalancerName,
                    LoadBalancerPort = 80
                }).Wait();
                Assert.IsFalse(DoesLoadBalancerHaveListenerWithPolicy(loadBalancerName, policyName));

                // Delete the policy
                Client.DeleteLoadBalancerPolicyAsync(new DeleteLoadBalancerPolicyRequest(loadBalancerName, policyName)).Wait();
            }
            finally
            {
                // Delete the test load balancer
                Client.DeleteLoadBalancerAsync(new DeleteLoadBalancerRequest()
                {
                    LoadBalancerName = loadBalancerName
                }).Wait();
            }
        }