diff options
Diffstat (limited to 'vendor/github.com/goamz/goamz/elb/elbt_test.go')
-rw-r--r-- | vendor/github.com/goamz/goamz/elb/elbt_test.go | 243 |
1 files changed, 243 insertions, 0 deletions
diff --git a/vendor/github.com/goamz/goamz/elb/elbt_test.go b/vendor/github.com/goamz/goamz/elb/elbt_test.go new file mode 100644 index 000000000..2ea529452 --- /dev/null +++ b/vendor/github.com/goamz/goamz/elb/elbt_test.go @@ -0,0 +1,243 @@ +package elb_test + +import ( + "github.com/goamz/goamz/aws" + "github.com/goamz/goamz/elb" + "github.com/goamz/goamz/elb/elbtest" + . "gopkg.in/check.v1" +) + +// LocalServer represents a local elbtest fake server. +type LocalServer struct { + auth aws.Auth + region aws.Region + srv *elbtest.Server +} + +func (s *LocalServer) SetUp(c *C) { + srv, err := elbtest.NewServer() + c.Assert(err, IsNil) + c.Assert(srv, NotNil) + s.srv = srv + s.region = aws.Region{ELBEndpoint: srv.URL()} +} + +// LocalServerSuite defines tests that will run +// against the local elbtest server. It includes +// selected tests from ClientTests; +// when the elbtest functionality is sufficient, it should +// include all of them, and ClientTests can be simply embedded. +type LocalServerSuite struct { + srv LocalServer + ServerTests + clientTests ClientTests +} + +// ServerTests defines a set of tests designed to test +// the elbtest local fake elb server. +// It is not used as a test suite in itself, but embedded within +// another type. +type ServerTests struct { + elb *elb.ELB +} + +// AmazonServerSuite runs the elbtest server tests against a live ELB server. +// It will only be activated if the -all flag is specified. +type AmazonServerSuite struct { + srv AmazonServer + ServerTests +} + +var _ = Suite(&AmazonServerSuite{}) + +func (s *AmazonServerSuite) SetUpSuite(c *C) { + if !*amazon { + c.Skip("AmazonServerSuite tests not enabled") + } + s.srv.SetUp(c) + s.ServerTests.elb = elb.New(s.srv.auth, aws.USEast) +} + +var _ = Suite(&LocalServerSuite{}) + +func (s *LocalServerSuite) SetUpSuite(c *C) { + s.srv.SetUp(c) + s.ServerTests.elb = elb.New(s.srv.auth, s.srv.region) + s.clientTests.elb = elb.New(s.srv.auth, s.srv.region) +} + +func (s *LocalServerSuite) TestCreateLoadBalancer(c *C) { + s.clientTests.TestCreateAndDeleteLoadBalancer(c) +} + +func (s *LocalServerSuite) TestCreateLoadBalancerError(c *C) { + s.clientTests.TestCreateLoadBalancerError(c) +} + +func (s *LocalServerSuite) TestDescribeLoadBalancer(c *C) { + s.clientTests.TestDescribeLoadBalancers(c) +} + +func (s *LocalServerSuite) TestDescribeLoadBalancerListsAddedByNewLoadbalancerFunc(c *C) { + srv := s.srv.srv + srv.NewLoadBalancer("wierdlb") + defer srv.RemoveLoadBalancer("wierdlb") + resp, err := s.clientTests.elb.DescribeLoadBalancers() + c.Assert(err, IsNil) + isPresent := false + for _, desc := range resp.LoadBalancerDescriptions { + if desc.LoadBalancerName == "wierdlb" { + isPresent = true + } + } + c.Assert(isPresent, Equals, true) +} + +func (s *LocalServerSuite) TestDescribeLoadBalancerListsInstancesAddedByRegisterInstancesFunc(c *C) { + srv := s.srv.srv + lbName := "somelb" + srv.NewLoadBalancer(lbName) + defer srv.RemoveLoadBalancer(lbName) + instId := srv.NewInstance() + defer srv.RemoveInstance(instId) + srv.RegisterInstance(instId, lbName) // no need to deregister, since we're removing the lb + resp, err := s.clientTests.elb.DescribeLoadBalancers() + c.Assert(err, IsNil) + c.Assert(len(resp.LoadBalancerDescriptions) > 0, Equals, true) + c.Assert(len(resp.LoadBalancerDescriptions[0].Instances) > 0, Equals, true) + c.Assert(resp.LoadBalancerDescriptions[0].Instances, DeepEquals, []elb.Instance{{InstanceId: instId}}) + srv.DeregisterInstance(instId, lbName) + resp, err = s.clientTests.elb.DescribeLoadBalancers() + c.Assert(err, IsNil) + c.Assert(resp.LoadBalancerDescriptions[0].Instances, DeepEquals, []elb.Instance(nil)) +} + +func (s *LocalServerSuite) TestDescribeLoadBalancersBadRequest(c *C) { + s.clientTests.TestDescribeLoadBalancersBadRequest(c) +} + +func (s *LocalServerSuite) TestRegisterInstanceWithLoadBalancer(c *C) { + srv := s.srv.srv + instId := srv.NewInstance() + defer srv.RemoveInstance(instId) + srv.NewLoadBalancer("testlb") + defer srv.RemoveLoadBalancer("testlb") + resp, err := s.clientTests.elb.RegisterInstancesWithLoadBalancer([]string{instId}, "testlb") + c.Assert(err, IsNil) + c.Assert(resp.InstanceIds, DeepEquals, []string{instId}) +} + +func (s *LocalServerSuite) TestRegisterInstanceWithLoadBalancerWithAbsentInstance(c *C) { + srv := s.srv.srv + srv.NewLoadBalancer("testlb") + defer srv.RemoveLoadBalancer("testlb") + resp, err := s.clientTests.elb.RegisterInstancesWithLoadBalancer([]string{"i-212"}, "testlb") + c.Assert(err, NotNil) + c.Assert(err, ErrorMatches, `^InvalidInstance found in \[i-212\]. Invalid id: "i-212" \(InvalidInstance\)$`) + c.Assert(resp, IsNil) +} + +func (s *LocalServerSuite) TestRegisterInstanceWithLoadBalancerWithAbsentLoadBalancer(c *C) { + // the verification if the lb exists is done before the instances, so there is no need to create + // fixture instances for this test, it'll never get that far + resp, err := s.clientTests.elb.RegisterInstancesWithLoadBalancer([]string{"i-212"}, "absentlb") + c.Assert(err, NotNil) + c.Assert(err, ErrorMatches, `^There is no ACTIVE Load Balancer named 'absentlb' \(LoadBalancerNotFound\)$`) + c.Assert(resp, IsNil) +} + +func (s *LocalServerSuite) TestDeregisterInstanceWithLoadBalancer(c *C) { + // there is no need to register the instance first, amazon returns the same response + // in both cases (instance registered or not) + srv := s.srv.srv + instId := srv.NewInstance() + defer srv.RemoveInstance(instId) + srv.NewLoadBalancer("testlb") + defer srv.RemoveLoadBalancer("testlb") + resp, err := s.clientTests.elb.DeregisterInstancesFromLoadBalancer([]string{instId}, "testlb") + c.Assert(err, IsNil) + c.Assert(resp.RequestId, Not(Equals), "") +} + +func (s *LocalServerSuite) TestDeregisterInstanceWithLoadBalancerWithAbsentLoadBalancer(c *C) { + resp, err := s.clientTests.elb.DeregisterInstancesFromLoadBalancer([]string{"i-212"}, "absentlb") + c.Assert(resp, IsNil) + c.Assert(err, NotNil) + c.Assert(err, ErrorMatches, `^There is no ACTIVE Load Balancer named 'absentlb' \(LoadBalancerNotFound\)$`) +} + +func (s *LocalServerSuite) TestDeregisterInstancewithLoadBalancerWithAbsentInstance(c *C) { + srv := s.srv.srv + srv.NewLoadBalancer("testlb") + defer srv.RemoveLoadBalancer("testlb") + resp, err := s.clientTests.elb.DeregisterInstancesFromLoadBalancer([]string{"i-212"}, "testlb") + c.Assert(resp, IsNil) + c.Assert(err, NotNil) + c.Assert(err, ErrorMatches, `^InvalidInstance found in \[i-212\]. Invalid id: "i-212" \(InvalidInstance\)$`) +} + +func (s *LocalServerSuite) TestDescribeInstanceHealth(c *C) { + srv := s.srv.srv + instId := srv.NewInstance() + defer srv.RemoveInstance(instId) + srv.NewLoadBalancer("testlb") + defer srv.RemoveLoadBalancer("testlb") + resp, err := s.clientTests.elb.DescribeInstanceHealth("testlb", instId) + c.Assert(err, IsNil) + c.Assert(len(resp.InstanceStates) > 0, Equals, true) + c.Assert(resp.InstanceStates[0].Description, Equals, "Instance is in pending state.") + c.Assert(resp.InstanceStates[0].InstanceId, Equals, instId) + c.Assert(resp.InstanceStates[0].State, Equals, "OutOfService") + c.Assert(resp.InstanceStates[0].ReasonCode, Equals, "Instance") +} + +func (s *LocalServerSuite) TestDescribeInstanceHealthBadRequest(c *C) { + s.clientTests.TestDescribeInstanceHealthBadRequest(c) +} + +func (s *LocalServerSuite) TestDescribeInstanceHealthWithoutSpecifyingInstances(c *C) { + srv := s.srv.srv + instId := srv.NewInstance() + defer srv.RemoveInstance(instId) + srv.NewLoadBalancer("testlb") + defer srv.RemoveLoadBalancer("testlb") + srv.RegisterInstance(instId, "testlb") + resp, err := s.clientTests.elb.DescribeInstanceHealth("testlb") + c.Assert(err, IsNil) + c.Assert(len(resp.InstanceStates) > 0, Equals, true) + c.Assert(resp.InstanceStates[0].Description, Equals, "Instance is in pending state.") + c.Assert(resp.InstanceStates[0].InstanceId, Equals, instId) + c.Assert(resp.InstanceStates[0].State, Equals, "OutOfService") + c.Assert(resp.InstanceStates[0].ReasonCode, Equals, "Instance") +} + +func (s *LocalServerSuite) TestDescribeInstanceHealthChangingIt(c *C) { + srv := s.srv.srv + instId := srv.NewInstance() + defer srv.RemoveInstance(instId) + srv.NewLoadBalancer("somelb") + defer srv.RemoveLoadBalancer("somelb") + srv.RegisterInstance(instId, "somelb") + state := elb.InstanceState{ + Description: "Instance has failed at least the UnhealthyThreshold number of health checks consecutively", + InstanceId: instId, + State: "OutOfService", + ReasonCode: "Instance", + } + srv.ChangeInstanceState("somelb", state) + resp, err := s.clientTests.elb.DescribeInstanceHealth("somelb") + c.Assert(err, IsNil) + c.Assert(len(resp.InstanceStates) > 0, Equals, true) + c.Assert(resp.InstanceStates[0].Description, Equals, "Instance has failed at least the UnhealthyThreshold number of health checks consecutively") + c.Assert(resp.InstanceStates[0].InstanceId, Equals, instId) + c.Assert(resp.InstanceStates[0].State, Equals, "OutOfService") + c.Assert(resp.InstanceStates[0].ReasonCode, Equals, "Instance") +} + +func (s *LocalServerSuite) TestConfigureHealthCheck(c *C) { + s.clientTests.TestConfigureHealthCheck(c) +} + +func (s *LocalServerSuite) TestConfigureHealthCheckBadRequest(c *C) { + s.clientTests.TestConfigureHealthCheckBadRequest(c) +} |