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