diff options
Diffstat (limited to 'vendor/github.com/goamz/goamz/elb')
-rw-r--r-- | vendor/github.com/goamz/goamz/elb/elb.go | 435 | ||||
-rw-r--r-- | vendor/github.com/goamz/goamz/elb/elb_test.go | 369 | ||||
-rw-r--r-- | vendor/github.com/goamz/goamz/elb/elbi_test.go | 308 | ||||
-rw-r--r-- | vendor/github.com/goamz/goamz/elb/elbt_test.go | 243 | ||||
-rw-r--r-- | vendor/github.com/goamz/goamz/elb/elbtest/server.go | 551 | ||||
-rw-r--r-- | vendor/github.com/goamz/goamz/elb/export_test.go | 9 | ||||
-rw-r--r-- | vendor/github.com/goamz/goamz/elb/response_test.go | 234 | ||||
-rw-r--r-- | vendor/github.com/goamz/goamz/elb/sign.go | 35 | ||||
-rw-r--r-- | vendor/github.com/goamz/goamz/elb/sign_test.go | 66 | ||||
-rw-r--r-- | vendor/github.com/goamz/goamz/elb/suite_test.go | 119 |
10 files changed, 0 insertions, 2369 deletions
diff --git a/vendor/github.com/goamz/goamz/elb/elb.go b/vendor/github.com/goamz/goamz/elb/elb.go deleted file mode 100644 index 0127435a7..000000000 --- a/vendor/github.com/goamz/goamz/elb/elb.go +++ /dev/null @@ -1,435 +0,0 @@ -// This package provides types and functions to interact Elastic Load Balancing service -package elb - -import ( - "encoding/xml" - "fmt" - "net/http" - "net/url" - "sort" - "strconv" - "strings" - "time" - - "github.com/goamz/goamz/aws" -) - -type ELB struct { - aws.Auth - aws.Region -} - -func New(auth aws.Auth, region aws.Region) *ELB { - return &ELB{auth, region} -} - -// The CreateLoadBalancer type encapsulates options for the respective request in AWS. -// The creation of a Load Balancer may differ inside EC2 and VPC. -// -// See http://goo.gl/4QFKi for more details. -type CreateLoadBalancer struct { - Name string - AvailabilityZones []string - Listeners []Listener - Scheme string - SecurityGroups []string - Subnets []string -} - -// Listener to configure in Load Balancer. -// -// See http://goo.gl/NJQCj for more details. -type Listener struct { - InstancePort int - InstanceProtocol string - LoadBalancerPort int - Protocol string - SSLCertificateId string -} - -// Response to a CreateLoadBalance request. -// -// See http://goo.gl/4QFKi for more details. -type CreateLoadBalancerResp struct { - DNSName string `xml:"CreateLoadBalancerResult>DNSName"` -} - -type SimpleResp struct { - RequestId string `xml:"ResponseMetadata>RequestId"` -} - -// Creates a Load Balancer in Amazon. -// -// See http://goo.gl/4QFKi for more details. -func (elb *ELB) CreateLoadBalancer(options *CreateLoadBalancer) (resp *CreateLoadBalancerResp, err error) { - params := makeCreateParams(options) - resp = new(CreateLoadBalancerResp) - if err := elb.query(params, resp); err != nil { - return nil, err - } - return -} - -// Deletes a Load Balancer. -// -// See http://goo.gl/sDmPp for more details. -func (elb *ELB) DeleteLoadBalancer(name string) (resp *SimpleResp, err error) { - params := map[string]string{ - "Action": "DeleteLoadBalancer", - "LoadBalancerName": name, - } - resp = new(SimpleResp) - if err := elb.query(params, resp); err != nil { - return nil, err - } - return resp, nil -} - -type RegisterInstancesResp struct { - InstanceIds []string `xml:"RegisterInstancesWithLoadBalancerResult>Instances>member>InstanceId"` -} - -// Register N instances with a given Load Balancer. -// -// See http://goo.gl/x9hru for more details. -func (elb *ELB) RegisterInstancesWithLoadBalancer(instanceIds []string, lbName string) (resp *RegisterInstancesResp, err error) { - // TODO: change params order and use ..., e.g (lbName string, instanceIds ...string) - params := map[string]string{ - "Action": "RegisterInstancesWithLoadBalancer", - "LoadBalancerName": lbName, - } - for i, instanceId := range instanceIds { - key := fmt.Sprintf("Instances.member.%d.InstanceId", i+1) - params[key] = instanceId - } - resp = new(RegisterInstancesResp) - if err := elb.query(params, resp); err != nil { - return nil, err - } - return resp, nil -} - -// Deregister N instances from a given Load Balancer. -// -// See http://goo.gl/Hgo4U for more details. -func (elb *ELB) DeregisterInstancesFromLoadBalancer(instanceIds []string, lbName string) (resp *SimpleResp, err error) { - // TODO: change params order and use ..., e.g (lbName string, instanceIds ...string) - params := map[string]string{ - "Action": "DeregisterInstancesFromLoadBalancer", - "LoadBalancerName": lbName, - } - for i, instanceId := range instanceIds { - key := fmt.Sprintf("Instances.member.%d.InstanceId", i+1) - params[key] = instanceId - } - resp = new(SimpleResp) - if err := elb.query(params, resp); err != nil { - return nil, err - } - return resp, nil -} - -type DescribeLoadBalancerResp struct { - LoadBalancerDescriptions []LoadBalancerDescription `xml:"DescribeLoadBalancersResult>LoadBalancerDescriptions>member"` -} - -type LoadBalancerDescription struct { - AvailabilityZones []string `xml:"AvailabilityZones>member"` - BackendServerDescriptions []BackendServerDescriptions `xml:"BackendServerDescriptions>member"` - CanonicalHostedZoneName string `xml:"CanonicalHostedZoneName"` - CanonicalHostedZoneNameId string `xml:"CanonicalHostedZoneNameID"` - CreatedTime time.Time `xml:"CreatedTime"` - DNSName string `xml:"DNSName"` - HealthCheck HealthCheck `xml:"HealthCheck"` - Instances []Instance `xml:"Instances>member"` - ListenerDescriptions []ListenerDescription `xml:"ListenerDescriptions>member"` - LoadBalancerName string `xml:"LoadBalancerName"` - Policies Policies `xml:"Policies"` - Scheme string `xml:"Scheme"` - SecurityGroups []string `xml:"SecurityGroups>member"` //vpc only - SourceSecurityGroup SourceSecurityGroup `xml:"SourceSecurityGroup"` - Subnets []string `xml:"Subnets>member"` - VPCId string `xml:"VPCId"` -} - -// Describe Load Balancers. -// It can be used to describe all Load Balancers or specific ones. -// -// See http://goo.gl/wofJA for more details. -func (elb *ELB) DescribeLoadBalancers(names ...string) (*DescribeLoadBalancerResp, error) { - params := map[string]string{"Action": "DescribeLoadBalancers"} - for i, name := range names { - index := fmt.Sprintf("LoadBalancerNames.member.%d", i+1) - params[index] = name - } - resp := new(DescribeLoadBalancerResp) - if err := elb.query(params, resp); err != nil { - return nil, err - } - return resp, nil -} - -type BackendServerDescriptions struct { - InstancePort int `xml:"InstancePort"` - PolicyNames []string `xml:"PolicyNames>member"` -} - -type HealthCheck struct { - HealthyThreshold int `xml:"HealthyThreshold"` - Interval int `xml:"Interval"` - Target string `xml:"Target"` - Timeout int `xml:"Timeout"` - UnhealthyThreshold int `xml:"UnhealthyThreshold"` -} - -type Instance struct { - InstanceId string `xml:"InstanceId"` -} - -type ListenerDescription struct { - Listener Listener `xml:"Listener"` - PolicyNames []string `xml:"PolicyNames>member"` -} - -type Policies struct { - AppCookieStickinessPolicies []AppCookieStickinessPolicies `xml:"AppCookieStickinessPolicies>member"` - LBCookieStickinessPolicies []LBCookieStickinessPolicies `xml:"LBCookieStickinessPolicies>member"` - OtherPolicies []string `xml:"OtherPolicies>member"` -} - -// see http://goo.gl/clXGV for more information. -type AppCookieStickinessPolicies struct { - CookieName string `xml:"CookieName"` - PolicyName string `xml:"PolicyName"` -} - -type LBCookieStickinessPolicies struct { - CookieExpirationPeriod int `xml:"CookieExpirationPeriod"` - PolicyName string `xml:"PolicyName"` -} - -type SourceSecurityGroup struct { - GroupName string `xml:"GroupName"` - OwnerAlias string `xml:"OwnerAlias"` -} - -// Represents a XML response for DescribeInstanceHealth action -// -// See http://goo.gl/ovIB1 for more information. -type DescribeInstanceHealthResp struct { - InstanceStates []InstanceState `xml:"DescribeInstanceHealthResult>InstanceStates>member"` -} - -// See http://goo.gl/dzWfP for more information. -type InstanceState struct { - Description string `xml:"Description"` - InstanceId string `xml:"InstanceId"` - ReasonCode string `xml:"ReasonCode"` - State string `xml:"State"` -} - -// Describe instance health. -// -// See http://goo.gl/ovIB1 for more information. -func (elb *ELB) DescribeInstanceHealth(lbName string, instanceIds ...string) (*DescribeInstanceHealthResp, error) { - params := map[string]string{ - "Action": "DescribeInstanceHealth", - "LoadBalancerName": lbName, - } - for i, iId := range instanceIds { - key := fmt.Sprintf("Instances.member.%d.InstanceId", i+1) - params[key] = iId - } - resp := new(DescribeInstanceHealthResp) - if err := elb.query(params, resp); err != nil { - return nil, err - } - return resp, nil -} - -type HealthCheckResp struct { - HealthCheck *HealthCheck `xml:"ConfigureHealthCheckResult>HealthCheck"` -} - -// Configure health check for a LB -// -// See http://goo.gl/2HE6a for more information -func (elb *ELB) ConfigureHealthCheck(lbName string, healthCheck *HealthCheck) (*HealthCheckResp, error) { - params := map[string]string{ - "Action": "ConfigureHealthCheck", - "LoadBalancerName": lbName, - "HealthCheck.HealthyThreshold": strconv.Itoa(healthCheck.HealthyThreshold), - "HealthCheck.Interval": strconv.Itoa(healthCheck.Interval), - "HealthCheck.Target": healthCheck.Target, - "HealthCheck.Timeout": strconv.Itoa(healthCheck.Timeout), - "HealthCheck.UnhealthyThreshold": strconv.Itoa(healthCheck.UnhealthyThreshold), - } - resp := new(HealthCheckResp) - if err := elb.query(params, resp); err != nil { - return nil, err - } - return resp, nil -} - -// Add tags to the named ELB -// -// Note that AWS only accepts one ELB name at a time (even though it is sent as a list) -// -// See http://goo.gl/6JW4Wf for the rest of the details -func (elb *ELB) AddTags(elbName string, tags map[string]string) (*SimpleResp, error) { - var sortedKeys []string - params := make(map[string]string) - response := &SimpleResp{} - - for tagKey := range tags { - sortedKeys = append(sortedKeys, tagKey) - } - - sort.Strings(sortedKeys) - - for _, key := range sortedKeys { - number := len(tags) - params[fmt.Sprintf("Tags.member.%d.Key", number)] = key - params[fmt.Sprintf("Tags.member.%d.Value", number)] = tags[key] - delete(tags, key) - } - - params["Action"] = "AddTags" - params["LoadBalancerNames.member.1"] = elbName - - if err := elb.query(params, response); err != nil { - return nil, err - } - - return response, nil -} - -// Remove tags from the named ELB -// -// Note that AWS only accepts one ELB name at a time (even though it is sent as a list) -// -// see http://goo.gl/ochFqo for more details - -func (elb *ELB) RemoveTags(elbName string, tagKeys []string) (*SimpleResp, error) { - response := &SimpleResp{} - params := make(map[string]string) - - params["Action"] = "RemoveTags" - params["LoadBalancerNames.member.1"] = elbName - - for i, tagKey := range tagKeys { - params[fmt.Sprintf("Tags.member.%d.Key", i+1)] = tagKey - } - - if err := elb.query(params, response); err != nil { - return nil, err - } - - return response, nil -} - -func (elb *ELB) query(params map[string]string, resp interface{}) error { - params["Version"] = "2012-06-01" - params["Timestamp"] = time.Now().In(time.UTC).Format(time.RFC3339) - data := strings.NewReader(multimap(params).Encode()) - hreq, err := http.NewRequest("GET", elb.Region.ELBEndpoint+"/", data) - if err != nil { - return err - } - - hreq.URL.RawQuery = multimap(params).Encode() - token := elb.Auth.Token() - if token != "" { - hreq.Header.Set("X-Amz-Security-Token", token) - } - - signer := aws.NewV4Signer(elb.Auth, "elasticloadbalancing", elb.Region) - signer.Sign(hreq) - - r, err := http.DefaultClient.Do(hreq) - - if err != nil { - return err - } - defer r.Body.Close() - if r.StatusCode != 200 { - return buildError(r) - } - return xml.NewDecoder(r.Body).Decode(resp) -} - -// Error encapsulates an error returned by ELB. -type Error struct { - // HTTP status code - StatusCode int - // AWS error code - Code string - // The human-oriented error message - Message string -} - -func (err *Error) Error() string { - if err.Code == "" { - return err.Message - } - - return fmt.Sprintf("%s (%s)", err.Message, err.Code) -} - -type xmlErrors struct { - Errors []Error `xml:"Error"` -} - -func buildError(r *http.Response) error { - var ( - err Error - errors xmlErrors - ) - xml.NewDecoder(r.Body).Decode(&errors) - if len(errors.Errors) > 0 { - err = errors.Errors[0] - } - err.StatusCode = r.StatusCode - if err.Message == "" { - err.Message = r.Status - } - return &err -} - -func multimap(p map[string]string) url.Values { - q := make(url.Values, len(p)) - for k, v := range p { - q[k] = []string{v} - } - return q -} - -func makeCreateParams(createLB *CreateLoadBalancer) map[string]string { - params := make(map[string]string) - params["LoadBalancerName"] = createLB.Name - params["Action"] = "CreateLoadBalancer" - if createLB.Scheme != "" { - params["Scheme"] = createLB.Scheme - } - for i, s := range createLB.SecurityGroups { - key := fmt.Sprintf("SecurityGroups.member.%d", i+1) - params[key] = s - } - for i, s := range createLB.Subnets { - key := fmt.Sprintf("Subnets.member.%d", i+1) - params[key] = s - } - for i, l := range createLB.Listeners { - key := "Listeners.member.%d.%s" - index := i + 1 - params[fmt.Sprintf(key, index, "InstancePort")] = strconv.Itoa(l.InstancePort) - params[fmt.Sprintf(key, index, "InstanceProtocol")] = l.InstanceProtocol - params[fmt.Sprintf(key, index, "Protocol")] = l.Protocol - params[fmt.Sprintf(key, index, "LoadBalancerPort")] = strconv.Itoa(l.LoadBalancerPort) - } - for i, az := range createLB.AvailabilityZones { - key := fmt.Sprintf("AvailabilityZones.member.%d", i+1) - params[key] = az - } - return params -} diff --git a/vendor/github.com/goamz/goamz/elb/elb_test.go b/vendor/github.com/goamz/goamz/elb/elb_test.go deleted file mode 100644 index db799fdfc..000000000 --- a/vendor/github.com/goamz/goamz/elb/elb_test.go +++ /dev/null @@ -1,369 +0,0 @@ -package elb_test - -import ( - "time" - - "github.com/goamz/goamz/aws" - "github.com/goamz/goamz/elb" - . "gopkg.in/check.v1" -) - -type S struct { - HTTPSuite - elb *elb.ELB -} - -var _ = Suite(&S{}) - -func (s *S) SetUpSuite(c *C) { - s.HTTPSuite.SetUpSuite(c) - auth := aws.Auth{AccessKey: "abc", SecretKey: "123"} - s.elb = elb.New(auth, aws.Region{ELBEndpoint: testServer.URL}) -} - -func (s *S) TestCreateLoadBalancer(c *C) { - testServer.PrepareResponse(200, nil, CreateLoadBalancer) - createLB := &elb.CreateLoadBalancer{ - Name: "testlb", - AvailabilityZones: []string{"us-east-1a", "us-east-1b"}, - Listeners: []elb.Listener{ - { - InstancePort: 80, - InstanceProtocol: "http", - Protocol: "http", - LoadBalancerPort: 80, - }, - }, - } - resp, err := s.elb.CreateLoadBalancer(createLB) - c.Assert(err, IsNil) - defer s.elb.DeleteLoadBalancer(createLB.Name) - values := testServer.WaitRequest().URL.Query() - c.Assert(values.Get("Version"), Equals, "2012-06-01") - c.Assert(values.Get("Action"), Equals, "CreateLoadBalancer") - c.Assert(values.Get("Timestamp"), Not(Equals), "") - c.Assert(values.Get("LoadBalancerName"), Equals, "testlb") - c.Assert(values.Get("AvailabilityZones.member.1"), Equals, "us-east-1a") - c.Assert(values.Get("AvailabilityZones.member.2"), Equals, "us-east-1b") - c.Assert(values.Get("Listeners.member.1.InstancePort"), Equals, "80") - c.Assert(values.Get("Listeners.member.1.InstanceProtocol"), Equals, "http") - c.Assert(values.Get("Listeners.member.1.Protocol"), Equals, "http") - c.Assert(values.Get("Listeners.member.1.LoadBalancerPort"), Equals, "80") - c.Assert(resp.DNSName, Equals, "testlb-339187009.us-east-1.elb.amazonaws.com") -} - -func (s *S) TestCreateLoadBalancerWithSubnetsAndMoreListeners(c *C) { - testServer.PrepareResponse(200, nil, CreateLoadBalancer) - createLB := &elb.CreateLoadBalancer{ - Name: "testlb", - Listeners: []elb.Listener{ - { - InstancePort: 80, - InstanceProtocol: "http", - Protocol: "http", - LoadBalancerPort: 80, - }, - { - InstancePort: 8080, - InstanceProtocol: "http", - Protocol: "http", - LoadBalancerPort: 8080, - }, - }, - Subnets: []string{"subnetid-1", "subnetid-2"}, - SecurityGroups: []string{"sg-1", "sg-2"}, - } - _, err := s.elb.CreateLoadBalancer(createLB) - c.Assert(err, IsNil) - defer s.elb.DeleteLoadBalancer(createLB.Name) - values := testServer.WaitRequest().URL.Query() - c.Assert(values.Get("Listeners.member.1.InstancePort"), Equals, "80") - c.Assert(values.Get("Listeners.member.1.LoadBalancerPort"), Equals, "80") - c.Assert(values.Get("Listeners.member.2.InstancePort"), Equals, "8080") - c.Assert(values.Get("Listeners.member.2.LoadBalancerPort"), Equals, "8080") - c.Assert(values.Get("Subnets.member.1"), Equals, "subnetid-1") - c.Assert(values.Get("Subnets.member.2"), Equals, "subnetid-2") - c.Assert(values.Get("SecurityGroups.member.1"), Equals, "sg-1") - c.Assert(values.Get("SecurityGroups.member.2"), Equals, "sg-2") -} - -func (s *S) TestCreateLoadBalancerWithWrongParamsCombination(c *C) { - testServer.PrepareResponse(400, nil, CreateLoadBalancerBadRequest) - createLB := &elb.CreateLoadBalancer{ - Name: "testlb", - AvailabilityZones: []string{"us-east-1a", "us-east-1b"}, - Listeners: []elb.Listener{ - { - InstancePort: 80, - InstanceProtocol: "http", - Protocol: "http", - LoadBalancerPort: 80, - }, - }, - Subnets: []string{"subnetid-1", "subnetid2"}, - } - resp, err := s.elb.CreateLoadBalancer(createLB) - c.Assert(resp, IsNil) - c.Assert(err, NotNil) - e, ok := err.(*elb.Error) - c.Assert(ok, Equals, true) - c.Assert(e.Message, Equals, "Only one of SubnetIds or AvailabilityZones may be specified") - c.Assert(e.Code, Equals, "ValidationError") -} - -func (s *S) TestDeleteLoadBalancer(c *C) { - testServer.PrepareResponse(200, nil, DeleteLoadBalancer) - resp, err := s.elb.DeleteLoadBalancer("testlb") - c.Assert(err, IsNil) - values := testServer.WaitRequest().URL.Query() - c.Assert(values.Get("Version"), Equals, "2012-06-01") - c.Assert(values.Get("Timestamp"), Not(Equals), "") - c.Assert(values.Get("Action"), Equals, "DeleteLoadBalancer") - c.Assert(values.Get("LoadBalancerName"), Equals, "testlb") - c.Assert(resp.RequestId, Equals, "8d7223db-49d7-11e2-bba9-35ba56032fe1") -} - -func (s *S) TestRegisterInstancesWithLoadBalancer(c *C) { - testServer.PrepareResponse(200, nil, RegisterInstancesWithLoadBalancer) - resp, err := s.elb.RegisterInstancesWithLoadBalancer([]string{"i-b44db8ca", "i-461ecf38"}, "testlb") - c.Assert(err, IsNil) - values := testServer.WaitRequest().URL.Query() - c.Assert(values.Get("Version"), Equals, "2012-06-01") - c.Assert(values.Get("Timestamp"), Not(Equals), "") - c.Assert(values.Get("Action"), Equals, "RegisterInstancesWithLoadBalancer") - c.Assert(values.Get("LoadBalancerName"), Equals, "testlb") - c.Assert(values.Get("Instances.member.1.InstanceId"), Equals, "i-b44db8ca") - c.Assert(values.Get("Instances.member.2.InstanceId"), Equals, "i-461ecf38") - c.Assert(resp.InstanceIds, DeepEquals, []string{"i-b44db8ca", "i-461ecf38"}) -} - -func (s *S) TestRegisterInstancesWithLoadBalancerBadRequest(c *C) { - testServer.PrepareResponse(400, nil, RegisterInstancesWithLoadBalancerBadRequest) - resp, err := s.elb.RegisterInstancesWithLoadBalancer([]string{"i-b44db8ca", "i-461ecf38"}, "absentLB") - c.Assert(resp, IsNil) - c.Assert(err, NotNil) - e, ok := err.(*elb.Error) - c.Assert(ok, Equals, true) - c.Assert(e.Message, Equals, "There is no ACTIVE Load Balancer named 'absentLB'") - c.Assert(e.Code, Equals, "LoadBalancerNotFound") -} - -func (s *S) TestDeregisterInstancesFromLoadBalancer(c *C) { - testServer.PrepareResponse(200, nil, DeregisterInstancesFromLoadBalancer) - resp, err := s.elb.DeregisterInstancesFromLoadBalancer([]string{"i-b44db8ca", "i-461ecf38"}, "testlb") - c.Assert(err, IsNil) - values := testServer.WaitRequest().URL.Query() - c.Assert(values.Get("Version"), Equals, "2012-06-01") - c.Assert(values.Get("Timestamp"), Not(Equals), "") - c.Assert(values.Get("Action"), Equals, "DeregisterInstancesFromLoadBalancer") - c.Assert(values.Get("LoadBalancerName"), Equals, "testlb") - c.Assert(values.Get("Instances.member.1.InstanceId"), Equals, "i-b44db8ca") - c.Assert(values.Get("Instances.member.2.InstanceId"), Equals, "i-461ecf38") - c.Assert(resp.RequestId, Equals, "d6490837-49fd-11e2-bba9-35ba56032fe1") -} - -func (s *S) TestDeregisterInstancesFromLoadBalancerBadRequest(c *C) { - testServer.PrepareResponse(400, nil, DeregisterInstancesFromLoadBalancerBadRequest) - resp, err := s.elb.DeregisterInstancesFromLoadBalancer([]string{"i-b44db8ca", "i-461ecf38"}, "testlb") - c.Assert(resp, IsNil) - c.Assert(err, NotNil) - e, ok := err.(*elb.Error) - c.Assert(ok, Equals, true) - c.Assert(e.Message, Equals, "There is no ACTIVE Load Balancer named 'absentlb'") - c.Assert(e.Code, Equals, "LoadBalancerNotFound") -} - -func (s *S) TestDescribeLoadBalancers(c *C) { - testServer.PrepareResponse(200, nil, DescribeLoadBalancers) - resp, err := s.elb.DescribeLoadBalancers() - c.Assert(err, IsNil) - values := testServer.WaitRequest().URL.Query() - c.Assert(values.Get("Version"), Equals, "2012-06-01") - c.Assert(values.Get("Timestamp"), Not(Equals), "") - c.Assert(values.Get("Action"), Equals, "DescribeLoadBalancers") - t, _ := time.Parse(time.RFC3339, "2012-12-27T11:51:52.970Z") - expected := &elb.DescribeLoadBalancerResp{ - []elb.LoadBalancerDescription{ - { - AvailabilityZones: []string{"us-east-1a"}, - BackendServerDescriptions: []elb.BackendServerDescriptions(nil), - CanonicalHostedZoneName: "testlb-2087227216.us-east-1.elb.amazonaws.com", - CanonicalHostedZoneNameId: "Z3DZXE0Q79N41H", - CreatedTime: t, - DNSName: "testlb-2087227216.us-east-1.elb.amazonaws.com", - HealthCheck: elb.HealthCheck{ - HealthyThreshold: 10, - Interval: 30, - Target: "TCP:80", - Timeout: 5, - UnhealthyThreshold: 2, - }, - Instances: []elb.Instance(nil), - ListenerDescriptions: []elb.ListenerDescription{ - { - Listener: elb.Listener{ - Protocol: "HTTP", - LoadBalancerPort: 80, - InstanceProtocol: "HTTP", - InstancePort: 80, - }, - }, - }, - LoadBalancerName: "testlb", - //Policies: elb.Policies(nil), - Scheme: "internet-facing", - SecurityGroups: []string(nil), - SourceSecurityGroup: elb.SourceSecurityGroup{ - GroupName: "amazon-elb-sg", - OwnerAlias: "amazon-elb", - }, - Subnets: []string(nil), - }, - }, - } - c.Assert(resp, DeepEquals, expected) -} - -func (s *S) TestDescribeLoadBalancersByName(c *C) { - testServer.PrepareResponse(200, nil, DescribeLoadBalancers) - s.elb.DescribeLoadBalancers("somelb") - values := testServer.WaitRequest().URL.Query() - c.Assert(values.Get("Version"), Equals, "2012-06-01") - c.Assert(values.Get("Timestamp"), Not(Equals), "") - c.Assert(values.Get("Action"), Equals, "DescribeLoadBalancers") - c.Assert(values.Get("LoadBalancerNames.member.1"), Equals, "somelb") -} - -func (s *S) TestDescribeLoadBalancersBadRequest(c *C) { - testServer.PrepareResponse(400, nil, DescribeLoadBalancersBadRequest) - resp, err := s.elb.DescribeLoadBalancers() - c.Assert(resp, IsNil) - c.Assert(err, NotNil) - c.Assert(err, ErrorMatches, `^Cannot find Load Balancer absentlb \(LoadBalancerNotFound\)$`) -} - -func (s *S) TestDescribeInstanceHealth(c *C) { - testServer.PrepareResponse(200, nil, DescribeInstanceHealth) - resp, err := s.elb.DescribeInstanceHealth("testlb", "i-b44db8ca") - c.Assert(err, IsNil) - values := testServer.WaitRequest().URL.Query() - c.Assert(values.Get("Version"), Equals, "2012-06-01") - c.Assert(values.Get("Timestamp"), Not(Equals), "") - c.Assert(values.Get("Action"), Equals, "DescribeInstanceHealth") - c.Assert(values.Get("LoadBalancerName"), Equals, "testlb") - c.Assert(values.Get("Instances.member.1.InstanceId"), Equals, "i-b44db8ca") - c.Assert(len(resp.InstanceStates) > 0, Equals, true) - c.Assert(resp.InstanceStates[0].Description, Equals, "Instance registration is still in progress.") - c.Assert(resp.InstanceStates[0].InstanceId, Equals, "i-b44db8ca") - c.Assert(resp.InstanceStates[0].State, Equals, "OutOfService") - c.Assert(resp.InstanceStates[0].ReasonCode, Equals, "ELB") -} - -func (s *S) TestDescribeInstanceHealthBadRequest(c *C) { - testServer.PrepareResponse(400, nil, DescribeInstanceHealthBadRequest) - resp, err := s.elb.DescribeInstanceHealth("testlb", "i-foooo") - c.Assert(err, NotNil) - c.Assert(resp, IsNil) - c.Assert(err, ErrorMatches, ".*i-foooo.*(InvalidInstance).*") -} - -func (s *S) TestConfigureHealthCheck(c *C) { - testServer.PrepareResponse(200, nil, ConfigureHealthCheck) - hc := elb.HealthCheck{ - HealthyThreshold: 10, - Interval: 30, - Target: "HTTP:80/", - Timeout: 5, - UnhealthyThreshold: 2, - } - resp, err := s.elb.ConfigureHealthCheck("testlb", &hc) - c.Assert(err, IsNil) - values := testServer.WaitRequest().URL.Query() - c.Assert(values.Get("Version"), Equals, "2012-06-01") - c.Assert(values.Get("Timestamp"), Not(Equals), "") - c.Assert(values.Get("Action"), Equals, "ConfigureHealthCheck") - c.Assert(values.Get("LoadBalancerName"), Equals, "testlb") - c.Assert(values.Get("HealthCheck.HealthyThreshold"), Equals, "10") - c.Assert(values.Get("HealthCheck.Interval"), Equals, "30") - c.Assert(values.Get("HealthCheck.Target"), Equals, "HTTP:80/") - c.Assert(values.Get("HealthCheck.Timeout"), Equals, "5") - c.Assert(values.Get("HealthCheck.UnhealthyThreshold"), Equals, "2") - c.Assert(resp.HealthCheck.HealthyThreshold, Equals, 10) - c.Assert(resp.HealthCheck.Interval, Equals, 30) - c.Assert(resp.HealthCheck.Target, Equals, "HTTP:80/") - c.Assert(resp.HealthCheck.Timeout, Equals, 5) - c.Assert(resp.HealthCheck.UnhealthyThreshold, Equals, 2) -} - -func (s *S) TestConfigureHealthCheckBadRequest(c *C) { - testServer.PrepareResponse(400, nil, ConfigureHealthCheckBadRequest) - hc := elb.HealthCheck{ - HealthyThreshold: 10, - Interval: 30, - Target: "HTTP:80/", - Timeout: 5, - UnhealthyThreshold: 2, - } - resp, err := s.elb.ConfigureHealthCheck("foolb", &hc) - c.Assert(resp, IsNil) - c.Assert(err, NotNil) - c.Assert(err, ErrorMatches, ".*foolb.*(LoadBalancerNotFound).*") -} - -func (s *S) TestAddTags(c *C) { - testServer.PrepareResponse(200, nil, AddTagsSuccessResponse) - tagsToAdd := map[string]string{ - "my-key": "my-value", - "my-super-silly-tag": "its-another-valid-value", - } - - resp, err := s.elb.AddTags("my-elb", tagsToAdd) - c.Assert(err, IsNil) - - values := testServer.WaitRequest().URL.Query() - c.Assert(values.Get("Version"), Equals, "2012-06-01") - c.Assert(values.Get("Action"), Equals, "AddTags") - c.Assert(values.Get("Timestamp"), Not(Equals), "") - c.Assert(values.Get("LoadBalancerNames.member.1"), Equals, "my-elb") - c.Assert(values.Get("Tags.member.1.Key"), Equals, "my-super-silly-tag") - c.Assert(values.Get("Tags.member.1.Value"), Equals, "its-another-valid-value") - c.Assert(values.Get("Tags.member.2.Key"), Equals, "my-key") - c.Assert(values.Get("Tags.member.2.Value"), Equals, "my-value") - - c.Assert(resp.RequestId, Equals, "360e81f7-1100-11e4-b6ed-0f30SOME-SAUCY-EXAMPLE") -} - -func (s *S) TestAddBadTags(c *C) { - testServer.PrepareResponse(400, nil, TagsBadRequest) - tagsToAdd := map[string]string{ - "my-first-key": "an invalid value", - } - - resp, err := s.elb.AddTags("my-bad-elb", tagsToAdd) - c.Assert(resp, IsNil) - c.Assert(err, ErrorMatches, ".*(InvalidParameterValue).*") -} - -func (s *S) TestRemoveTags(c *C) { - testServer.PrepareResponse(200, nil, RemoveTagsSuccessResponse) - tagKeysToRemove := []string{"a-key-one", "a-key-two"} - - resp, err := s.elb.RemoveTags("my-test-elb-1", tagKeysToRemove) - c.Assert(err, IsNil) - - values := testServer.WaitRequest().URL.Query() - c.Assert(values.Get("Version"), Equals, "2012-06-01") - c.Assert(values.Get("Action"), Equals, "RemoveTags") - c.Assert(values.Get("Timestamp"), Not(Equals), "") - c.Assert(values.Get("LoadBalancerNames.member.1"), Equals, "my-test-elb-1") - c.Assert([]string{values.Get("Tags.member.1.Key"), values.Get("Tags.member.2.Key")}, DeepEquals, tagKeysToRemove) - c.Assert(resp.RequestId, Equals, "83c88b9d-12b7-11e3-8b82-87b12DIFFEXAMPLE") -} - -func (s *S) TestRemoveTagsFailure(c *C) { - testServer.PrepareResponse(400, nil, TagsBadRequest) - - resp, err := s.elb.RemoveTags("my-test-elb", []string{"non-existant-tag"}) - c.Assert(resp, IsNil) - c.Assert(err, ErrorMatches, ".*(InvalidParameterValue).*") -} diff --git a/vendor/github.com/goamz/goamz/elb/elbi_test.go b/vendor/github.com/goamz/goamz/elb/elbi_test.go deleted file mode 100644 index 4c21f9e38..000000000 --- a/vendor/github.com/goamz/goamz/elb/elbi_test.go +++ /dev/null @@ -1,308 +0,0 @@ -package elb_test - -import ( - "flag" - - "github.com/goamz/goamz/aws" - "github.com/goamz/goamz/ec2" - "github.com/goamz/goamz/elb" - . "gopkg.in/check.v1" -) - -var amazon = flag.Bool("amazon", false, "Enable tests against amazon server") - -// AmazonServer represents an Amazon AWS server. -type AmazonServer struct { - auth aws.Auth -} - -func (s *AmazonServer) SetUp(c *C) { - auth, err := aws.EnvAuth() - if err != nil { - c.Fatal(err) - } - s.auth = auth -} - -var _ = Suite(&AmazonClientSuite{}) - -// AmazonClientSuite tests the client against a live AWS server. -type AmazonClientSuite struct { - srv AmazonServer - ClientTests -} - -// ClientTests defines integration tests designed to test the client. -// It is not used as a test suite in itself, but embedded within -// another type. -type ClientTests struct { - elb *elb.ELB - ec2 *ec2.EC2 -} - -func (s *AmazonClientSuite) SetUpSuite(c *C) { - if !*amazon { - c.Skip("AmazonClientSuite tests not enabled") - } - s.srv.SetUp(c) - s.elb = elb.New(s.srv.auth, aws.USEast) - s.ec2 = ec2.New(s.srv.auth, aws.USEast) -} - -func (s *ClientTests) TestCreateAndDeleteLoadBalancer(c *C) { - createLBReq := elb.CreateLoadBalancer{ - Name: "testlb", - AvailabilityZones: []string{"us-east-1a"}, - Listeners: []elb.Listener{ - { - InstancePort: 80, - InstanceProtocol: "http", - LoadBalancerPort: 80, - Protocol: "http", - }, - }, - } - resp, err := s.elb.CreateLoadBalancer(&createLBReq) - c.Assert(err, IsNil) - defer s.elb.DeleteLoadBalancer(createLBReq.Name) - c.Assert(resp.DNSName, Not(Equals), "") - deleteResp, err := s.elb.DeleteLoadBalancer(createLBReq.Name) - c.Assert(err, IsNil) - c.Assert(deleteResp.RequestId, Not(Equals), "") -} - -func (s *ClientTests) TestCreateLoadBalancerError(c *C) { - createLBReq := elb.CreateLoadBalancer{ - Name: "testlb", - AvailabilityZones: []string{"us-east-1a"}, - Subnets: []string{"subnetid-1"}, - Listeners: []elb.Listener{ - { - InstancePort: 80, - InstanceProtocol: "http", - LoadBalancerPort: 80, - Protocol: "http", - }, - }, - } - resp, err := s.elb.CreateLoadBalancer(&createLBReq) - c.Assert(resp, IsNil) - c.Assert(err, NotNil) - e, ok := err.(*elb.Error) - c.Assert(ok, Equals, true) - c.Assert(e.Message, Matches, "Only one of .* or .* may be specified") - c.Assert(e.Code, Equals, "ValidationError") -} - -func (s *ClientTests) createInstanceAndLB(c *C) (*elb.CreateLoadBalancer, string) { - options := ec2.RunInstancesOptions{ - ImageId: "ami-ccf405a5", - InstanceType: "t1.micro", - AvailabilityZone: "us-east-1c", - } - resp1, err := s.ec2.RunInstances(&options) - c.Assert(err, IsNil) - instId := resp1.Instances[0].InstanceId - createLBReq := elb.CreateLoadBalancer{ - Name: "testlb", - AvailabilityZones: []string{"us-east-1c"}, - Listeners: []elb.Listener{ - { - InstancePort: 80, - InstanceProtocol: "http", - LoadBalancerPort: 80, - Protocol: "http", - }, - }, - } - _, err = s.elb.CreateLoadBalancer(&createLBReq) - c.Assert(err, IsNil) - return &createLBReq, instId -} - -// Cost: 0.02 USD -func (s *ClientTests) TestCreateRegisterAndDeregisterInstanceWithLoadBalancer(c *C) { - createLBReq, instId := s.createInstanceAndLB(c) - defer func() { - _, err := s.elb.DeleteLoadBalancer(createLBReq.Name) - c.Check(err, IsNil) - _, err = s.ec2.TerminateInstances([]string{instId}) - c.Check(err, IsNil) - }() - resp, err := s.elb.RegisterInstancesWithLoadBalancer([]string{instId}, createLBReq.Name) - c.Assert(err, IsNil) - c.Assert(resp.InstanceIds, DeepEquals, []string{instId}) - resp2, err := s.elb.DeregisterInstancesFromLoadBalancer([]string{instId}, createLBReq.Name) - c.Assert(err, IsNil) - c.Assert(resp2, Not(Equals), "") -} - -func (s *ClientTests) TestDescribeLoadBalancers(c *C) { - createLBReq := elb.CreateLoadBalancer{ - Name: "testlb", - AvailabilityZones: []string{"us-east-1a"}, - Listeners: []elb.Listener{ - { - InstancePort: 80, - InstanceProtocol: "http", - LoadBalancerPort: 80, - Protocol: "http", - }, - }, - } - _, err := s.elb.CreateLoadBalancer(&createLBReq) - c.Assert(err, IsNil) - defer func() { - _, err := s.elb.DeleteLoadBalancer(createLBReq.Name) - c.Check(err, IsNil) - }() - resp, err := s.elb.DescribeLoadBalancers() - c.Assert(err, IsNil) - c.Assert(len(resp.LoadBalancerDescriptions) > 0, Equals, true) - c.Assert(resp.LoadBalancerDescriptions[0].AvailabilityZones, DeepEquals, []string{"us-east-1a"}) - c.Assert(resp.LoadBalancerDescriptions[0].LoadBalancerName, Equals, "testlb") - c.Assert(resp.LoadBalancerDescriptions[0].Scheme, Equals, "internet-facing") - hc := elb.HealthCheck{ - HealthyThreshold: 10, - Interval: 30, - Target: "TCP:80", - Timeout: 5, - UnhealthyThreshold: 2, - } - c.Assert(resp.LoadBalancerDescriptions[0].HealthCheck, DeepEquals, hc) - ld := []elb.ListenerDescription{ - { - Listener: elb.Listener{ - Protocol: "HTTP", - LoadBalancerPort: 80, - InstanceProtocol: "HTTP", - InstancePort: 80, - }, - }, - } - c.Assert(resp.LoadBalancerDescriptions[0].ListenerDescriptions, DeepEquals, ld) - ssg := elb.SourceSecurityGroup{ - GroupName: "amazon-elb-sg", - OwnerAlias: "amazon-elb", - } - c.Assert(resp.LoadBalancerDescriptions[0].SourceSecurityGroup, DeepEquals, ssg) -} - -func (s *ClientTests) TestDescribeLoadBalancersBadRequest(c *C) { - resp, err := s.elb.DescribeLoadBalancers("absentlb") - c.Assert(err, NotNil) - c.Assert(resp, IsNil) - c.Assert(err, ErrorMatches, ".*(LoadBalancerNotFound).*") -} - -func (s *ClientTests) TestDescribeInstanceHealth(c *C) { - createLBReq, instId := s.createInstanceAndLB(c) - defer func() { - _, err := s.elb.DeleteLoadBalancer(createLBReq.Name) - c.Check(err, IsNil) - _, err = s.ec2.TerminateInstances([]string{instId}) - c.Check(err, IsNil) - }() - _, err := s.elb.RegisterInstancesWithLoadBalancer([]string{instId}, createLBReq.Name) - c.Assert(err, IsNil) - resp, err := s.elb.DescribeInstanceHealth(createLBReq.Name, 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 *ClientTests) TestDescribeInstanceHealthBadRequest(c *C) { - createLBReq := elb.CreateLoadBalancer{ - Name: "testlb", - AvailabilityZones: []string{"us-east-1a"}, - Listeners: []elb.Listener{ - { - InstancePort: 80, - InstanceProtocol: "http", - LoadBalancerPort: 80, - Protocol: "http", - }, - }, - } - _, err := s.elb.CreateLoadBalancer(&createLBReq) - c.Assert(err, IsNil) - defer func() { - _, err := s.elb.DeleteLoadBalancer(createLBReq.Name) - c.Check(err, IsNil) - }() - resp, err := s.elb.DescribeInstanceHealth(createLBReq.Name, "i-foo") - c.Assert(resp, IsNil) - c.Assert(err, NotNil) - c.Assert(err, ErrorMatches, ".*i-foo.*(InvalidInstance).*") -} - -func (s *ClientTests) TestConfigureHealthCheck(c *C) { - createLBReq := elb.CreateLoadBalancer{ - Name: "testlb", - AvailabilityZones: []string{"us-east-1a"}, - Listeners: []elb.Listener{ - { - InstancePort: 80, - InstanceProtocol: "http", - LoadBalancerPort: 80, - Protocol: "http", - }, - }, - } - _, err := s.elb.CreateLoadBalancer(&createLBReq) - c.Assert(err, IsNil) - defer func() { - _, err := s.elb.DeleteLoadBalancer(createLBReq.Name) - c.Check(err, IsNil) - }() - hc := elb.HealthCheck{ - HealthyThreshold: 10, - Interval: 30, - Target: "HTTP:80/", - Timeout: 5, - UnhealthyThreshold: 2, - } - resp, err := s.elb.ConfigureHealthCheck(createLBReq.Name, &hc) - c.Assert(err, IsNil) - c.Assert(resp.HealthCheck.HealthyThreshold, Equals, 10) - c.Assert(resp.HealthCheck.Interval, Equals, 30) - c.Assert(resp.HealthCheck.Target, Equals, "HTTP:80/") - c.Assert(resp.HealthCheck.Timeout, Equals, 5) - c.Assert(resp.HealthCheck.UnhealthyThreshold, Equals, 2) -} - -func (s *ClientTests) TestConfigureHealthCheckBadRequest(c *C) { - createLBReq := elb.CreateLoadBalancer{ - Name: "testlb", - AvailabilityZones: []string{"us-east-1a"}, - Listeners: []elb.Listener{ - { - InstancePort: 80, - InstanceProtocol: "http", - LoadBalancerPort: 80, - Protocol: "http", - }, - }, - } - _, err := s.elb.CreateLoadBalancer(&createLBReq) - c.Assert(err, IsNil) - defer func() { - _, err := s.elb.DeleteLoadBalancer(createLBReq.Name) - c.Check(err, IsNil) - }() - hc := elb.HealthCheck{ - HealthyThreshold: 10, - Interval: 30, - Target: "HTTP:80", - Timeout: 5, - UnhealthyThreshold: 2, - } - resp, err := s.elb.ConfigureHealthCheck(createLBReq.Name, &hc) - c.Assert(resp, IsNil) - c.Assert(err, NotNil) - expected := "HealthCheck HTTP Target must specify a port followed by a path that begins with a slash. e.g. HTTP:80/ping/this/path (ValidationError)" - c.Assert(err.Error(), Equals, expected) -} diff --git a/vendor/github.com/goamz/goamz/elb/elbt_test.go b/vendor/github.com/goamz/goamz/elb/elbt_test.go deleted file mode 100644 index 2ea529452..000000000 --- a/vendor/github.com/goamz/goamz/elb/elbt_test.go +++ /dev/null @@ -1,243 +0,0 @@ -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) -} diff --git a/vendor/github.com/goamz/goamz/elb/elbtest/server.go b/vendor/github.com/goamz/goamz/elb/elbtest/server.go deleted file mode 100644 index 9b8f79d4e..000000000 --- a/vendor/github.com/goamz/goamz/elb/elbtest/server.go +++ /dev/null @@ -1,551 +0,0 @@ -// Package elbtest implements a fake ELB provider with the capability of -// inducing errors on any given operation, and retrospectively determining what -// operations have been carried out. -package elbtest - -import ( - "encoding/xml" - "fmt" - "github.com/goamz/goamz/elb" - "net" - "net/http" - "net/url" - "regexp" - "strconv" - "strings" - "sync" -) - -// Server implements an ELB simulator for use in testing. -type Server struct { - url string - listener net.Listener - mutex sync.Mutex - reqId int - lbs map[string]*elb.LoadBalancerDescription - lbsReqs map[string]url.Values - instances []string - instanceStates map[string][]*elb.InstanceState - instCount int -} - -// Starts and returns a new server -func NewServer() (*Server, error) { - l, err := net.Listen("tcp", "localhost:0") - if err != nil { - return nil, fmt.Errorf("cannot listen on localhost: %v", err) - } - srv := &Server{ - listener: l, - url: "http://" + l.Addr().String(), - lbs: make(map[string]*elb.LoadBalancerDescription), - instanceStates: make(map[string][]*elb.InstanceState), - } - go http.Serve(l, http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { - srv.serveHTTP(w, req) - })) - return srv, nil -} - -// Quit closes down the server. -func (srv *Server) Quit() { - srv.listener.Close() -} - -// URL returns the URL of the server. -func (srv *Server) URL() string { - return srv.url -} - -type xmlErrors struct { - XMLName string `xml:"ErrorResponse"` - Error elb.Error -} - -func (srv *Server) error(w http.ResponseWriter, err *elb.Error) { - w.WriteHeader(err.StatusCode) - xmlErr := xmlErrors{Error: *err} - if e := xml.NewEncoder(w).Encode(xmlErr); e != nil { - panic(e) - } -} - -func (srv *Server) serveHTTP(w http.ResponseWriter, req *http.Request) { - req.ParseForm() - srv.mutex.Lock() - defer srv.mutex.Unlock() - f := actions[req.Form.Get("Action")] - if f == nil { - srv.error(w, &elb.Error{ - StatusCode: 400, - Code: "InvalidParameterValue", - Message: "Unrecognized Action", - }) - } - reqId := fmt.Sprintf("req%0X", srv.reqId) - srv.reqId++ - if resp, err := f(srv, w, req, reqId); err == nil { - if err := xml.NewEncoder(w).Encode(resp); err != nil { - panic(err) - } - } else { - switch err.(type) { - case *elb.Error: - srv.error(w, err.(*elb.Error)) - default: - panic(err) - } - } -} - -func (srv *Server) createLoadBalancer(w http.ResponseWriter, req *http.Request, reqId string) (interface{}, error) { - composition := map[string]string{ - "AvailabilityZones.member.1": "Subnets.member.1", - } - if err := srv.validateComposition(req, composition); err != nil { - return nil, err - } - required := []string{ - "Listeners.member.1.InstancePort", - "Listeners.member.1.InstanceProtocol", - "Listeners.member.1.Protocol", - "Listeners.member.1.LoadBalancerPort", - "LoadBalancerName", - } - if err := srv.validate(req, required); err != nil { - return nil, err - } - path := req.FormValue("Path") - if path == "" { - path = "/" - } - lbName := req.FormValue("LoadBalancerName") - srv.lbs[lbName] = srv.makeLoadBalancerDescription(req.Form) - srv.lbs[lbName].DNSName = fmt.Sprintf("%s-some-aws-stuff.us-east-1.elb.amazonaws.com", lbName) - return elb.CreateLoadBalancerResp{ - DNSName: srv.lbs[lbName].DNSName, - }, nil -} - -func (srv *Server) deleteLoadBalancer(w http.ResponseWriter, req *http.Request, reqId string) (interface{}, error) { - if err := srv.validate(req, []string{"LoadBalancerName"}); err != nil { - return nil, err - } - srv.RemoveLoadBalancer(req.FormValue("LoadBalancerName")) - return elb.SimpleResp{RequestId: reqId}, nil -} - -func (srv *Server) registerInstancesWithLoadBalancer(w http.ResponseWriter, req *http.Request, reqId string) (interface{}, error) { - required := []string{"LoadBalancerName", "Instances.member.1.InstanceId"} - if err := srv.validate(req, required); err != nil { - return nil, err - } - lbName := req.FormValue("LoadBalancerName") - if err := srv.lbExists(lbName); err != nil { - return nil, err - } - instIds := []string{} - instances := []elb.Instance{} - i := 1 - instId := req.FormValue(fmt.Sprintf("Instances.member.%d.InstanceId", i)) - for instId != "" { - if err := srv.instanceExists(instId); err != nil { - return nil, err - } - instIds = append(instIds, instId) - instances = append(instances, elb.Instance{InstanceId: instId}) - i++ - instId = req.FormValue(fmt.Sprintf("Instances.member.%d.InstanceId", i)) - } - srv.instanceStates[lbName] = append(srv.instanceStates[lbName], srv.makeInstanceState(instId)) - srv.lbs[lbName].Instances = append(srv.lbs[lbName].Instances, instances...) - return elb.RegisterInstancesResp{InstanceIds: instIds}, nil -} - -func (srv *Server) deregisterInstancesFromLoadBalancer(w http.ResponseWriter, req *http.Request, reqId string) (interface{}, error) { - required := []string{"LoadBalancerName"} - if err := srv.validate(req, required); err != nil { - return nil, err - } - lbName := req.FormValue("LoadBalancerName") - if err := srv.lbExists(lbName); err != nil { - return nil, err - } - i := 1 - lb := srv.lbs[lbName] - instId := req.FormValue(fmt.Sprintf("Instances.member.%d.InstanceId", i)) - for instId != "" { - if err := srv.instanceExists(instId); err != nil { - return nil, err - } - i++ - removeInstanceFromLB(lb, instId) - instId = req.FormValue(fmt.Sprintf("Instances.member.%d.InstanceId", i)) - } - srv.lbs[lbName] = lb - srv.removeInstanceStatesFromLoadBalancer(lbName, instId) - return elb.SimpleResp{RequestId: reqId}, nil -} - -func (srv *Server) describeLoadBalancers(w http.ResponseWriter, req *http.Request, reqId string) (interface{}, error) { - i := 1 - lbName := req.FormValue(fmt.Sprintf("LoadBalancerNames.member.%d", i)) - for lbName != "" { - key := fmt.Sprintf("LoadBalancerNames.member.%d", i) - if req.FormValue(key) != "" { - if err := srv.lbExists(req.FormValue(key)); err != nil { - return nil, err - } - } - i++ - lbName = req.FormValue(fmt.Sprintf("LoadBalancerNames.member.%d", i)) - } - lbsDesc := make([]elb.LoadBalancerDescription, len(srv.lbs)) - i = 0 - for _, lb := range srv.lbs { - lbsDesc[i] = *lb - i++ - } - resp := elb.DescribeLoadBalancerResp{ - LoadBalancerDescriptions: lbsDesc, - } - return resp, nil -} - -// getParameters returns the value all parameters from a request that matches a -// prefix. -// -// For example, for the prefix "Subnets.member.", it will return a slice -// containing the value of keys "Subnets.member.1", "Subnets.member.2" ... -// "Subnets.member.N". The prefix must include the trailing dot. -func (srv *Server) getParameters(prefix string, values url.Values) []string { - i, key := 1, "" - var k = func(n int) string { - return fmt.Sprintf(prefix+"%d", n) - } - var result []string - for i, key = 2, k(i); values.Get(key) != ""; i, key = i+1, k(i) { - result = append(result, values.Get(key)) - } - return result -} - -func (srv *Server) makeInstanceState(id string) *elb.InstanceState { - return &elb.InstanceState{ - Description: "Instance is in pending state.", - InstanceId: id, - State: "OutOfService", - ReasonCode: "Instance", - } -} - -func removeInstanceFromLB(lb *elb.LoadBalancerDescription, id string) { - index := -1 - for i, instance := range lb.Instances { - if instance.InstanceId == id { - index = i - break - } - } - if index > -1 { - copy(lb.Instances[index:], lb.Instances[index+1:]) - lb.Instances = lb.Instances[:len(lb.Instances)-1] - } -} - -func (srv *Server) removeInstanceStatesFromLoadBalancer(lb, id string) { - for i, state := range srv.instanceStates[lb] { - if state.InstanceId == id { - a := srv.instanceStates[lb] - a[i], a = a[len(a)-1], a[:len(a)-1] - srv.instanceStates[lb] = a - return - } - } -} - -func (srv *Server) makeLoadBalancerDescription(value url.Values) *elb.LoadBalancerDescription { - lds := []elb.ListenerDescription{} - i := 1 - protocol := value.Get(fmt.Sprintf("Listeners.member.%d.Protocol", i)) - for protocol != "" { - key := fmt.Sprintf("Listeners.member.%d.", i) - lInstPort, _ := strconv.Atoi(value.Get(key + "InstancePort")) - lLBPort, _ := strconv.Atoi(value.Get(key + "LoadBalancerPort")) - lDescription := elb.ListenerDescription{ - Listener: elb.Listener{ - Protocol: strings.ToUpper(protocol), - InstanceProtocol: strings.ToUpper(value.Get(key + "InstanceProtocol")), - LoadBalancerPort: lLBPort, - InstancePort: lInstPort, - }, - } - i++ - protocol = value.Get(fmt.Sprintf("Listeners.member.%d.Protocol", i)) - lds = append(lds, lDescription) - } - sourceSecGroup := srv.makeSourceSecGroup(value) - lbDesc := elb.LoadBalancerDescription{ - AvailabilityZones: srv.getParameters("AvailabilityZones.member.", value), - Subnets: srv.getParameters("Subnets.member.", value), - SecurityGroups: srv.getParameters("SecurityGroups.member.", value), - HealthCheck: srv.makeHealthCheck(value), - ListenerDescriptions: lds, - Scheme: value.Get("Scheme"), - SourceSecurityGroup: sourceSecGroup, - LoadBalancerName: value.Get("LoadBalancerName"), - } - if lbDesc.Scheme == "" { - lbDesc.Scheme = "internet-facing" - } - return &lbDesc -} - -func (srv *Server) makeHealthCheck(value url.Values) elb.HealthCheck { - ht := 10 - timeout := 5 - ut := 2 - interval := 30 - target := "TCP:80" - if v := value.Get("HealthCheck.HealthyThreshold"); v != "" { - ht, _ = strconv.Atoi(v) - } - if v := value.Get("HealthCheck.Timeout"); v != "" { - timeout, _ = strconv.Atoi(v) - } - if v := value.Get("HealthCheck.UnhealthyThreshold"); v != "" { - ut, _ = strconv.Atoi(v) - } - if v := value.Get("HealthCheck.Interval"); v != "" { - interval, _ = strconv.Atoi(v) - } - if v := value.Get("HealthCheck.Target"); v != "" { - target = v - } - return elb.HealthCheck{ - HealthyThreshold: ht, - Interval: interval, - Target: target, - Timeout: timeout, - UnhealthyThreshold: ut, - } -} - -func (srv *Server) makeSourceSecGroup(value url.Values) elb.SourceSecurityGroup { - name := "amazon-elb-sg" - alias := "amazon-elb" - if v := value.Get("SourceSecurityGroup.GroupName"); v != "" { - name = v - } - if v := value.Get("SourceSecurityGroup.OwnerAlias"); v != "" { - alias = v - } - return elb.SourceSecurityGroup{ - GroupName: name, - OwnerAlias: alias, - } -} - -func (srv *Server) describeInstanceHealth(w http.ResponseWriter, req *http.Request, reqId string) (interface{}, error) { - if err := srv.lbExists(req.FormValue("LoadBalancerName")); err != nil { - return nil, err - } - resp := elb.DescribeInstanceHealthResp{ - InstanceStates: []elb.InstanceState{}, - } - for _, state := range srv.instanceStates[req.FormValue("LoadBalancerName")] { - resp.InstanceStates = append(resp.InstanceStates, *state) - } - i := 1 - instanceId := req.FormValue("Instances.member.1.InstanceId") - for instanceId != "" { - if err := srv.instanceExists(instanceId); err != nil { - return nil, err - } - is := elb.InstanceState{ - Description: "Instance is in pending state.", - InstanceId: instanceId, - State: "OutOfService", - ReasonCode: "Instance", - } - resp.InstanceStates = append(resp.InstanceStates, is) - i++ - instanceId = req.FormValue(fmt.Sprintf("Instances.member.%d.InstanceId", i)) - } - return resp, nil -} - -func (srv *Server) configureHealthCheck(w http.ResponseWriter, req *http.Request, reqId string) (interface{}, error) { - required := []string{ - "LoadBalancerName", - "HealthCheck.HealthyThreshold", - "HealthCheck.Interval", - "HealthCheck.Target", - "HealthCheck.Timeout", - "HealthCheck.UnhealthyThreshold", - } - if err := srv.validate(req, required); err != nil { - return nil, err - } - target := req.FormValue("HealthCheck.Target") - r, err := regexp.Compile(`[\w]+:[\d]+\/+`) - if err != nil { - panic(err) - } - if m := r.FindStringSubmatch(target); m == nil { - return nil, &elb.Error{ - StatusCode: 400, - Code: "ValidationError", - Message: "HealthCheck HTTP Target must specify a port followed by a path that begins with a slash. e.g. HTTP:80/ping/this/path", - } - } - ht, _ := strconv.Atoi(req.FormValue("HealthCheck.HealthyThreshold")) - interval, _ := strconv.Atoi(req.FormValue("HealthCheck.Interval")) - timeout, _ := strconv.Atoi(req.FormValue("HealthCheck.Timeout")) - ut, _ := strconv.Atoi(req.FormValue("HealthCheck.UnhealthyThreshold")) - return elb.HealthCheckResp{ - HealthCheck: &elb.HealthCheck{ - HealthyThreshold: ht, - Interval: interval, - Target: target, - Timeout: timeout, - UnhealthyThreshold: ut, - }, - }, nil -} - -func (srv *Server) instanceExists(id string) error { - for _, instId := range srv.instances { - if instId == id { - return nil - } - } - return &elb.Error{ - StatusCode: 400, - Code: "InvalidInstance", - Message: fmt.Sprintf("InvalidInstance found in [%s]. Invalid id: \"%s\"", id, id), - } -} - -func (srv *Server) lbExists(name string) error { - if _, ok := srv.lbs[name]; !ok { - return &elb.Error{ - StatusCode: 400, - Code: "LoadBalancerNotFound", - Message: fmt.Sprintf("There is no ACTIVE Load Balancer named '%s'", name), - } - } - return nil -} - -func (srv *Server) validate(req *http.Request, required []string) error { - for _, field := range required { - if req.FormValue(field) == "" { - return &elb.Error{ - StatusCode: 400, - Code: "ValidationError", - Message: fmt.Sprintf("%s is required.", field), - } - } - } - return nil -} - -// Validates the composition of the fields. -// -// Some fields cannot be together in the same request, such as AvailabilityZones and Subnets. -// A sample map with the above requirement would be -// c := map[string]string{ -// "AvailabilityZones.member.1": "Subnets.member.1", -// } -// -// The server also requires that at least one of those fields are specified. -func (srv *Server) validateComposition(req *http.Request, composition map[string]string) error { - for k, v := range composition { - if req.FormValue(k) != "" && req.FormValue(v) != "" { - return &elb.Error{ - StatusCode: 400, - Code: "ValidationError", - Message: fmt.Sprintf("Only one of %s or %s may be specified", k, v), - } - } - if req.FormValue(k) == "" && req.FormValue(v) == "" { - return &elb.Error{ - StatusCode: 400, - Code: "ValidationError", - Message: fmt.Sprintf("Either %s or %s must be specified", k, v), - } - } - } - return nil -} - -// Creates a fake instance in the server -func (srv *Server) NewInstance() string { - srv.instCount++ - instId := fmt.Sprintf("i-%d", srv.instCount) - srv.instances = append(srv.instances, instId) - return instId -} - -// Removes a fake instance from the server -// -// If no instance is found it does nothing -func (srv *Server) RemoveInstance(instId string) { - for i, id := range srv.instances { - if id == instId { - srv.instances[i], srv.instances = srv.instances[len(srv.instances)-1], srv.instances[:len(srv.instances)-1] - } - } -} - -// Creates a fake load balancer in the fake server -func (srv *Server) NewLoadBalancer(name string) { - srv.lbs[name] = &elb.LoadBalancerDescription{ - LoadBalancerName: name, - DNSName: fmt.Sprintf("%s-some-aws-stuff.sa-east-1.amazonaws.com", name), - } -} - -// Removes a fake load balancer from the fake server -func (srv *Server) RemoveLoadBalancer(name string) { - delete(srv.lbs, name) -} - -// Register a fake instance with a fake Load Balancer -// -// If the Load Balancer does not exists it does nothing -func (srv *Server) RegisterInstance(instId, lbName string) { - lb, ok := srv.lbs[lbName] - if !ok { - fmt.Println("lb not found :/") - return - } - lb.Instances = append(lb.Instances, elb.Instance{InstanceId: instId}) - srv.instanceStates[lbName] = append(srv.instanceStates[lbName], srv.makeInstanceState(instId)) -} - -func (srv *Server) DeregisterInstance(instId, lbName string) { - removeInstanceFromLB(srv.lbs[lbName], instId) - srv.removeInstanceStatesFromLoadBalancer(lbName, instId) -} - -func (srv *Server) ChangeInstanceState(lb string, state elb.InstanceState) { - states := srv.instanceStates[lb] - for i, s := range states { - if s.InstanceId == state.InstanceId { - srv.instanceStates[lb][i] = &state - return - } - } -} - -var actions = map[string]func(*Server, http.ResponseWriter, *http.Request, string) (interface{}, error){ - "CreateLoadBalancer": (*Server).createLoadBalancer, - "DeleteLoadBalancer": (*Server).deleteLoadBalancer, - "RegisterInstancesWithLoadBalancer": (*Server).registerInstancesWithLoadBalancer, - "DeregisterInstancesFromLoadBalancer": (*Server).deregisterInstancesFromLoadBalancer, - "DescribeLoadBalancers": (*Server).describeLoadBalancers, - "DescribeInstanceHealth": (*Server).describeInstanceHealth, - "ConfigureHealthCheck": (*Server).configureHealthCheck, -} diff --git a/vendor/github.com/goamz/goamz/elb/export_test.go b/vendor/github.com/goamz/goamz/elb/export_test.go deleted file mode 100644 index 49a2d50fe..000000000 --- a/vendor/github.com/goamz/goamz/elb/export_test.go +++ /dev/null @@ -1,9 +0,0 @@ -package elb - -import ( - "github.com/goamz/goamz/aws" -) - -func Sign(auth aws.Auth, method, path string, params map[string]string, host string) { - sign(auth, method, path, params, host) -} diff --git a/vendor/github.com/goamz/goamz/elb/response_test.go b/vendor/github.com/goamz/goamz/elb/response_test.go deleted file mode 100644 index 637d1e140..000000000 --- a/vendor/github.com/goamz/goamz/elb/response_test.go +++ /dev/null @@ -1,234 +0,0 @@ -package elb_test - -var CreateLoadBalancer = ` -<CreateLoadBalancerResponse xmlns="http://elasticloadbalancing.amazonaws.com/doc/2012-06-01/"> - <CreateLoadBalancerResult> - <DNSName>testlb-339187009.us-east-1.elb.amazonaws.com</DNSName> - </CreateLoadBalancerResult> - <ResponseMetadata> - <RequestId>0c3a8e29-490e-11e2-8647-e14ad5151f1f</RequestId> - </ResponseMetadata> -</CreateLoadBalancerResponse> -` - -var CreateLoadBalancerBadRequest = ` -<ErrorResponse xmlns="http://elasticloadbalancing.amazonaws.com/doc/2012-06-01/"> - <Error> - <Type>Sender</Type> - <Code>ValidationError</Code> - <Message>Only one of SubnetIds or AvailabilityZones may be specified</Message> - </Error> - <RequestId>159253fc-49dc-11e2-a47d-cde463c91a3c</RequestId> -</ErrorResponse> -` - -var DeleteLoadBalancer = ` -<DeleteLoadBalancerResponse xmlns="http://elasticloadbalancing.amazonaws.com/doc/2012-06-01/"> - <DeleteLoadBalancerResult/> - <ResponseMetadata> - <RequestId>8d7223db-49d7-11e2-bba9-35ba56032fe1</RequestId> - </ResponseMetadata> -</DeleteLoadBalancerResponse> -` - -var RegisterInstancesWithLoadBalancer = ` -<RegisterInstancesWithLoadBalancerResponse xmlns="http://elasticloadbalancing.amazonaws.com/doc/2012-06-01/"> - <RegisterInstancesWithLoadBalancerResult> - <Instances> - <member> - <InstanceId>i-b44db8ca</InstanceId> - </member> - <member> - <InstanceId>i-461ecf38</InstanceId> - </member> - </Instances> - </RegisterInstancesWithLoadBalancerResult> - <ResponseMetadata> - <RequestId>0fc82478-49e1-11e2-b947-8768f15220aa</RequestId> - </ResponseMetadata> -</RegisterInstancesWithLoadBalancerResponse> -` - -var RegisterInstancesWithLoadBalancerBadRequest = ` -<ErrorResponse xmlns="http://elasticloadbalancing.amazonaws.com/doc/2012-06-01/"> - <Error> - <Type>Sender</Type> - <Code>LoadBalancerNotFound</Code> - <Message>There is no ACTIVE Load Balancer named 'absentLB'</Message> - </Error> - <RequestId>19a0bb97-49f7-11e2-90b4-6bb9ec8331bf</RequestId> -</ErrorResponse> -` - -var DeregisterInstancesFromLoadBalancer = ` -<DeregisterInstancesFromLoadBalancerResponse xmlns="http://elasticloadbalancing.amazonaws.com/doc/2012-06-01/"> - <DeregisterInstancesFromLoadBalancerResult> - <Instances/> - </DeregisterInstancesFromLoadBalancerResult> - <ResponseMetadata> - <RequestId>d6490837-49fd-11e2-bba9-35ba56032fe1</RequestId> - </ResponseMetadata> -</DeregisterInstancesFromLoadBalancerResponse> -` - -var DeregisterInstancesFromLoadBalancerBadRequest = ` -<ErrorResponse xmlns="http://elasticloadbalancing.amazonaws.com/doc/2012-06-01/"> - <Error> - <Type>Sender</Type> - <Code>LoadBalancerNotFound</Code> - <Message>There is no ACTIVE Load Balancer named 'absentlb'</Message> - </Error> - <RequestId>498e2b4a-4aa1-11e2-8839-d19a879f2eec</RequestId> -</ErrorResponse> -` - -var DescribeLoadBalancers = ` -<DescribeLoadBalancersResponse xmlns="http://elasticloadbalancing.amazonaws.com/doc/2012-06-01/"> - <DescribeLoadBalancersResult> - <LoadBalancerDescriptions> - <member> - <SecurityGroups/> - <CreatedTime>2012-12-27T11:51:52.970Z</CreatedTime> - <LoadBalancerName>testlb</LoadBalancerName> - <HealthCheck> - <Interval>30</Interval> - <Target>TCP:80</Target> - <HealthyThreshold>10</HealthyThreshold> - <Timeout>5</Timeout> - <UnhealthyThreshold>2</UnhealthyThreshold> - </HealthCheck> - <ListenerDescriptions> - <member> - <PolicyNames/> - <Listener> - <Protocol>HTTP</Protocol> - <LoadBalancerPort>80</LoadBalancerPort> - <InstanceProtocol>HTTP</InstanceProtocol> - <InstancePort>80</InstancePort> - </Listener> - </member> - </ListenerDescriptions> - <Instances/> - <Policies> - <AppCookieStickinessPolicies/> - <OtherPolicies/> - <LBCookieStickinessPolicies/> - </Policies> - <AvailabilityZones> - <member>us-east-1a</member> - </AvailabilityZones> - <CanonicalHostedZoneName>testlb-2087227216.us-east-1.elb.amazonaws.com</CanonicalHostedZoneName> - <CanonicalHostedZoneNameID>Z3DZXE0Q79N41H</CanonicalHostedZoneNameID> - <Scheme>internet-facing</Scheme> - <SourceSecurityGroup> - <OwnerAlias>amazon-elb</OwnerAlias> - <GroupName>amazon-elb-sg</GroupName> - </SourceSecurityGroup> - <DNSName>testlb-2087227216.us-east-1.elb.amazonaws.com</DNSName> - <BackendServerDescriptions/> - <Subnets/> - </member> - </LoadBalancerDescriptions> - </DescribeLoadBalancersResult> - <ResponseMetadata> - <RequestId>e2e81963-5055-11e2-99c7-434205631d9b</RequestId> - </ResponseMetadata> -</DescribeLoadBalancersResponse> -` - -var DescribeLoadBalancersBadRequest = ` -<ErrorResponse xmlns="http://elasticloadbalancing.amazonaws.com/doc/2012-06-01/"> - <Error> - <Type>Sender</Type> - <Code>LoadBalancerNotFound</Code> - <Message>Cannot find Load Balancer absentlb</Message> - </Error> - <RequestId>f14f348e-50f7-11e2-9831-f770dd71c209</RequestId> -</ErrorResponse> -` - -var DescribeInstanceHealth = ` -<DescribeInstanceHealthResponse xmlns="http://elasticloadbalancing.amazonaws.com/doc/2012-06-01/"> - <DescribeInstanceHealthResult> - <InstanceStates> - <member> - <Description>Instance registration is still in progress.</Description> - <InstanceId>i-b44db8ca</InstanceId> - <State>OutOfService</State> - <ReasonCode>ELB</ReasonCode> - </member> - </InstanceStates> - </DescribeInstanceHealthResult> - <ResponseMetadata> - <RequestId>da0d0f9e-5669-11e2-9f81-319facce7423</RequestId> - </ResponseMetadata> -</DescribeInstanceHealthResponse> -` - -var DescribeInstanceHealthBadRequest = ` -<ErrorResponse xmlns="http://elasticloadbalancing.amazonaws.com/doc/2012-06-01/"> - <Error> - <Type>Sender</Type> - <Code>InvalidInstance</Code> - <Message>Could not find EC2 instance i-foooo.</Message> - </Error> - <RequestId>352e00d6-566c-11e2-a46d-313272bbb522</RequestId> -</ErrorResponse> -` - -var ConfigureHealthCheck = ` -<ConfigureHealthCheckResponse xmlns="http://elasticloadbalancing.amazonaws.com/doc/2012-06-01/"> - <ConfigureHealthCheckResult> - <HealthCheck> - <Interval>30</Interval> - <Target>HTTP:80/</Target> - <HealthyThreshold>10</HealthyThreshold> - <Timeout>5</Timeout> - <UnhealthyThreshold>2</UnhealthyThreshold> - </HealthCheck> - </ConfigureHealthCheckResult> - <ResponseMetadata> - <RequestId>a882d12c-5694-11e2-b647-594652c9487c</RequestId> - </ResponseMetadata> -</ConfigureHealthCheckResponse> -` - -var ConfigureHealthCheckBadRequest = ` -<ErrorResponse xmlns="http://elasticloadbalancing.amazonaws.com/doc/2012-06-01/"> - <Error> - <Type>Sender</Type> - <Code>LoadBalancerNotFound</Code> - <Message>There is no ACTIVE Load Balancer named 'foolb'</Message> - </Error> - <RequestId>2d9fe4a5-5697-11e2-9415-e325c02171d7</RequestId> -</ErrorResponse> -` - -var AddTagsSuccessResponse = ` -<AddTagsResponse xmlns="http://elasticloadbalancing.amazonaws.com/doc/2012-06- 01/"> - <AddTagsResult/> - <ResponseMetadata> - <RequestId>360e81f7-1100-11e4-b6ed-0f30SOME-SAUCY-EXAMPLE</RequestId> - </ResponseMetadata> -</AddTagsResponse> -` - -var TagsBadRequest = ` -<ErrorResponse xmlns="http://elasticloadbalancing.amazonaws.com/doc/2012-06-01/"> - <Error> - <Type>Sender</Type> - <Code>InvalidParameterValue</Code> - <Message>An invalid or out-of-range value was supplied for the input parameter.</Message> - </Error> - <RequestId>terrible-request-id</RequestId> -</ErrorResponse> -` - -var RemoveTagsSuccessResponse = ` -<RemoveTagsResponse xmlns="http://elasticloadbalancing.amazonaws.com/doc/2012-06-01/"> - <RemoveTagsResult/> - <ResponseMetadata> - <RequestId>83c88b9d-12b7-11e3-8b82-87b12DIFFEXAMPLE</RequestId> - </ResponseMetadata> -</RemoveTagsResponse> -` diff --git a/vendor/github.com/goamz/goamz/elb/sign.go b/vendor/github.com/goamz/goamz/elb/sign.go deleted file mode 100644 index b7da14772..000000000 --- a/vendor/github.com/goamz/goamz/elb/sign.go +++ /dev/null @@ -1,35 +0,0 @@ -package elb - -import ( - "crypto/hmac" - "crypto/sha256" - "encoding/base64" - "github.com/goamz/goamz/aws" - "sort" - "strings" -) - -var b64 = base64.StdEncoding - -func sign(auth aws.Auth, method, path string, params map[string]string, host string) { - params["AWSAccessKeyId"] = auth.AccessKey - params["SignatureVersion"] = "2" - params["SignatureMethod"] = "HmacSHA256" - - var keys, sarray []string - for k := range params { - keys = append(keys, k) - } - sort.Strings(keys) - for _, k := range keys { - sarray = append(sarray, aws.Encode(k)+"="+aws.Encode(params[k])) - } - joined := strings.Join(sarray, "&") - payload := method + "\n" + host + "\n" + path + "\n" + joined - hash := hmac.New(sha256.New, []byte(auth.SecretKey)) - hash.Write([]byte(payload)) - signature := make([]byte, b64.EncodedLen(hash.Size())) - b64.Encode(signature, hash.Sum(nil)) - - params["Signature"] = string(signature) -} diff --git a/vendor/github.com/goamz/goamz/elb/sign_test.go b/vendor/github.com/goamz/goamz/elb/sign_test.go deleted file mode 100644 index 0dda1667e..000000000 --- a/vendor/github.com/goamz/goamz/elb/sign_test.go +++ /dev/null @@ -1,66 +0,0 @@ -package elb_test - -import ( - "github.com/goamz/goamz/aws" - "github.com/goamz/goamz/elb" - . "gopkg.in/check.v1" -) - -var testAuth = aws.Auth{AccessKey: "user", SecretKey: "secret"} - -func (s *S) TestBasicSignature(c *C) { - params := map[string]string{} - elb.Sign(testAuth, "GET", "/path", params, "localhost") - c.Assert(params["SignatureVersion"], Equals, "2") - c.Assert(params["SignatureMethod"], Equals, "HmacSHA256") - expected := "6lSe5QyXum0jMVc7cOUz32/52ZnL7N5RyKRk/09yiK4=" - c.Assert(params["Signature"], Equals, expected) -} - -func (s *S) TestParamSignature(c *C) { - params := map[string]string{ - "param1": "value1", - "param2": "value2", - "param3": "value3", - } - elb.Sign(testAuth, "GET", "/path", params, "localhost") - expected := "XWOR4+0lmK8bD8CGDGZ4kfuSPbb2JibLJiCl/OPu1oU=" - c.Assert(params["Signature"], Equals, expected) -} - -func (s *S) TestManyParams(c *C) { - params := map[string]string{ - "param1": "value10", - "param2": "value2", - "param3": "value3", - "param4": "value4", - "param5": "value5", - "param6": "value6", - "param7": "value7", - "param8": "value8", - "param9": "value9", - "param10": "value1", - } - elb.Sign(testAuth, "GET", "/path", params, "localhost") - expected := "di0sjxIvezUgQ1SIL6i+C/H8lL+U0CQ9frLIak8jkVg=" - c.Assert(params["Signature"], Equals, expected) -} - -func (s *S) TestEscaping(c *C) { - params := map[string]string{"Nonce": "+ +"} - elb.Sign(testAuth, "GET", "/path", params, "localhost") - c.Assert(params["Nonce"], Equals, "+ +") - expected := "bqffDELReIqwjg/W0DnsnVUmfLK4wXVLO4/LuG+1VFA=" - c.Assert(params["Signature"], Equals, expected) -} - -func (s *S) TestSignatureExample1(c *C) { - params := map[string]string{ - "Timestamp": "2009-02-01T12:53:20+00:00", - "Version": "2007-11-07", - "Action": "ListDomains", - } - elb.Sign(aws.Auth{AccessKey: "access", SecretKey: "secret"}, "GET", "/", params, "sdb.amazonaws.com") - expected := "okj96/5ucWBSc1uR2zXVfm6mDHtgfNv657rRtt/aunQ=" - c.Assert(params["Signature"], Equals, expected) -} diff --git a/vendor/github.com/goamz/goamz/elb/suite_test.go b/vendor/github.com/goamz/goamz/elb/suite_test.go deleted file mode 100644 index fe4c81d47..000000000 --- a/vendor/github.com/goamz/goamz/elb/suite_test.go +++ /dev/null @@ -1,119 +0,0 @@ -package elb_test - -import ( - "fmt" - "net/http" - "net/url" - "os" - "testing" - "time" - - . "gopkg.in/check.v1" -) - -func Test(t *testing.T) { - TestingT(t) -} - -type HTTPSuite struct{} - -var testServer = NewTestHTTPServer("http://localhost:4444", 5*time.Second) - -func (s *HTTPSuite) SetUpSuite(c *C) { - testServer.Start() -} - -func (s *HTTPSuite) TearDownTest(c *C) { - testServer.FlushRequests() -} - -type TestHTTPServer struct { - URL string - Timeout time.Duration - started bool - request chan *http.Request - response chan *testResponse - pending chan bool -} - -type testResponse struct { - Status int - Headers map[string]string - Body string -} - -func NewTestHTTPServer(url string, timeout time.Duration) *TestHTTPServer { - return &TestHTTPServer{URL: url, Timeout: timeout} -} - -func (s *TestHTTPServer) Start() { - if s.started { - return - } - s.started = true - - s.request = make(chan *http.Request, 64) - s.response = make(chan *testResponse, 64) - s.pending = make(chan bool, 64) - - url, _ := url.Parse(s.URL) - go http.ListenAndServe(url.Host, s) - - s.PrepareResponse(202, nil, "Nothing.") - for { - // Wait for it to be up. - resp, err := http.Get(s.URL) - if err == nil && resp.StatusCode == 202 { - break - } - time.Sleep(1e8) - } - s.WaitRequest() // Consume dummy request. -} - -// FlushRequests discards requests which were not yet consumed by WaitRequest. -func (s *TestHTTPServer) FlushRequests() { - for { - select { - case <-s.request: - default: - return - } - } -} - -func (s *TestHTTPServer) ServeHTTP(w http.ResponseWriter, req *http.Request) { - s.request <- req - var resp *testResponse - select { - case resp = <-s.response: - case <-time.After(s.Timeout): - fmt.Fprintf(os.Stderr, "ERROR: Timeout waiting for test to provide response\n") - resp = &testResponse{500, nil, ""} - } - if resp.Headers != nil { - h := w.Header() - for k, v := range resp.Headers { - h.Set(k, v) - } - } - if resp.Status != 0 { - w.WriteHeader(resp.Status) - } - w.Write([]byte(resp.Body)) -} - -func (s *TestHTTPServer) WaitRequest() *http.Request { - select { - case req := <-s.request: - req.ParseForm() - return req - case <-time.After(s.Timeout): - panic("Timeout waiting for goamz request") - } - panic("unreached") -} - -func (s *TestHTTPServer) PrepareResponse(status int, headers map[string]string, body string) { - s.response <- &testResponse{status, headers, body} -} |