summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/goamz/goamz/elb
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/goamz/goamz/elb')
-rw-r--r--vendor/github.com/goamz/goamz/elb/elb.go435
-rw-r--r--vendor/github.com/goamz/goamz/elb/elb_test.go369
-rw-r--r--vendor/github.com/goamz/goamz/elb/elbi_test.go308
-rw-r--r--vendor/github.com/goamz/goamz/elb/elbt_test.go243
-rw-r--r--vendor/github.com/goamz/goamz/elb/elbtest/server.go551
-rw-r--r--vendor/github.com/goamz/goamz/elb/export_test.go9
-rw-r--r--vendor/github.com/goamz/goamz/elb/response_test.go234
-rw-r--r--vendor/github.com/goamz/goamz/elb/sign.go35
-rw-r--r--vendor/github.com/goamz/goamz/elb/sign_test.go66
-rw-r--r--vendor/github.com/goamz/goamz/elb/suite_test.go119
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}
-}