host_prefix_test.go 2.6 KB

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