summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/goamz/goamz/elb/elbt_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/goamz/goamz/elb/elbt_test.go')
-rw-r--r--vendor/github.com/goamz/goamz/elb/elbt_test.go243
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)
+}