1// +build go1.7 2 3package protocol 4 5import ( 6 "net/http" 7 "net/url" 8 "testing" 9 10 "github.com/aws/aws-sdk-go/aws" 11 "github.com/aws/aws-sdk-go/aws/request" 12) 13 14func TestHostPrefixBuilder(t *testing.T) { 15 cases := map[string]struct { 16 URLHost string 17 ReqHost string 18 Prefix string 19 LabelsFn func() map[string]string 20 Disabled bool 21 22 ExpectURLHost string 23 ExpectReqHost string 24 }{ 25 "no labels": { 26 URLHost: "service.region.amazonaws.com", 27 Prefix: "data-", 28 ExpectURLHost: "data-service.region.amazonaws.com", 29 }, 30 "with labels": { 31 URLHost: "service.region.amazonaws.com", 32 Prefix: "{first}-{second}.", 33 LabelsFn: func() map[string]string { 34 return map[string]string{ 35 "first": "abc", 36 "second": "123", 37 } 38 }, 39 ExpectURLHost: "abc-123.service.region.amazonaws.com", 40 }, 41 "with host prefix disabled": { 42 Disabled: true, 43 URLHost: "service.region.amazonaws.com", 44 Prefix: "{first}-{second}.", 45 LabelsFn: func() map[string]string { 46 return map[string]string{ 47 "first": "abc", 48 "second": "123", 49 } 50 }, 51 ExpectURLHost: "service.region.amazonaws.com", 52 }, 53 "with duplicate labels": { 54 URLHost: "service.region.amazonaws.com", 55 Prefix: "{first}-{second}-{first}.", 56 LabelsFn: func() map[string]string { 57 return map[string]string{ 58 "first": "abc", 59 "second": "123", 60 } 61 }, 62 ExpectURLHost: "abc-123-abc.service.region.amazonaws.com", 63 }, 64 "with unbracketed labels": { 65 URLHost: "service.region.amazonaws.com", 66 Prefix: "first-{second}.", 67 LabelsFn: func() map[string]string { 68 return map[string]string{ 69 "first": "abc", 70 "second": "123", 71 } 72 }, 73 ExpectURLHost: "first-123.service.region.amazonaws.com", 74 }, 75 "with req host": { 76 URLHost: "service.region.amazonaws.com:1234", 77 ReqHost: "service.region.amazonaws.com", 78 Prefix: "data-", 79 ExpectURLHost: "data-service.region.amazonaws.com:1234", 80 ExpectReqHost: "data-service.region.amazonaws.com", 81 }, 82 } 83 84 for name, c := range cases { 85 t.Run(name, func(t *testing.T) { 86 builder := HostPrefixBuilder{ 87 Prefix: c.Prefix, LabelsFn: c.LabelsFn, 88 } 89 req := &request.Request{ 90 Config: aws.Config{ 91 DisableEndpointHostPrefix: aws.Bool(c.Disabled), 92 }, 93 HTTPRequest: &http.Request{ 94 Host: c.ReqHost, 95 URL: &url.URL{ 96 Host: c.URLHost, 97 }, 98 }, 99 } 100 101 builder.Build(req) 102 if e, a := c.ExpectURLHost, req.HTTPRequest.URL.Host; e != a { 103 t.Errorf("expect URL host %v, got %v", e, a) 104 } 105 if e, a := c.ExpectReqHost, req.HTTPRequest.Host; e != a { 106 t.Errorf("expect request host %v, got %v", e, a) 107 } 108 }) 109 } 110} 111