1package query 2 3import ( 4 "bytes" 5 "context" 6 "testing" 7 8 "github.com/aws/smithy-go/middleware" 9 smithyhttp "github.com/aws/smithy-go/transport/http" 10) 11 12func TestAsGetRequestMiddleware(t *testing.T) { 13 cases := map[string]struct { 14 Request *smithyhttp.Request 15 Expect *smithyhttp.Request 16 }{ 17 "post": { 18 Request: func() *smithyhttp.Request { 19 req := smithyhttp.NewStackRequest().(*smithyhttp.Request) 20 req.Method = "POST" 21 req, _ = req.SetStream(bytes.NewReader([]byte("some=field"))) 22 23 return req 24 }(), 25 Expect: func() *smithyhttp.Request { 26 req := smithyhttp.NewStackRequest().(*smithyhttp.Request) 27 req.Method = "GET" 28 req.URL.RawQuery = "some=field" 29 30 return req 31 }(), 32 }, 33 "get": { 34 Request: func() *smithyhttp.Request { 35 req := smithyhttp.NewStackRequest().(*smithyhttp.Request) 36 req.Method = "GET" 37 req.URL.RawQuery = "existing=query" 38 39 return req 40 }(), 41 Expect: func() *smithyhttp.Request { 42 req := smithyhttp.NewStackRequest().(*smithyhttp.Request) 43 req.Method = "GET" 44 req.URL.RawQuery = "existing=query" 45 46 return req 47 }(), 48 }, 49 50 "get with stream": { 51 Request: func() *smithyhttp.Request { 52 req := smithyhttp.NewStackRequest().(*smithyhttp.Request) 53 req.Method = "GET" 54 req.URL.RawQuery = "existing=query" 55 req, _ = req.SetStream(bytes.NewReader([]byte("some=field"))) 56 57 return req 58 }(), 59 Expect: func() *smithyhttp.Request { 60 req := smithyhttp.NewStackRequest().(*smithyhttp.Request) 61 req.Method = "GET" 62 req.URL.RawQuery = "existing=query&some=field" 63 64 return req 65 }(), 66 }, 67 68 "with query": { 69 Request: func() *smithyhttp.Request { 70 req := smithyhttp.NewStackRequest().(*smithyhttp.Request) 71 req.Method = "POST" 72 req.URL.RawQuery = "existing=query" 73 req, _ = req.SetStream(bytes.NewReader([]byte("some=field"))) 74 75 return req 76 }(), 77 Expect: func() *smithyhttp.Request { 78 req := smithyhttp.NewStackRequest().(*smithyhttp.Request) 79 req.Method = "GET" 80 req.URL.RawQuery = "existing=query&some=field" 81 82 return req 83 }(), 84 }, 85 86 "no body": { 87 Request: func() *smithyhttp.Request { 88 req := smithyhttp.NewStackRequest().(*smithyhttp.Request) 89 req.Method = "POST" 90 91 return req 92 }(), 93 Expect: func() *smithyhttp.Request { 94 req := smithyhttp.NewStackRequest().(*smithyhttp.Request) 95 req.Method = "GET" 96 97 return req 98 }(), 99 }, 100 } 101 102 for name, c := range cases { 103 t.Run(name, func(t *testing.T) { 104 m := &asGetRequest{} 105 106 _, _, err := m.HandleSerialize(context.Background(), middleware.SerializeInput{ 107 Parameters: struct{}{}, 108 Request: c.Request, 109 }, middleware.SerializeHandlerFunc(func( 110 ctx context.Context, input middleware.SerializeInput, 111 ) ( 112 out middleware.SerializeOutput, metadata middleware.Metadata, err error, 113 ) { 114 req, ok := input.Request.(*smithyhttp.Request) 115 if !ok { 116 t.Fatalf("expect smithy HTTP request, got %T", input.Request) 117 } 118 119 if e, a := c.Expect.URL.RawQuery, req.URL.RawQuery; e != a { 120 t.Errorf("expect %s query, got %s", e, a) 121 } 122 123 if v := req.GetStream(); v != nil { 124 t.Errorf("expect no request body, got %v", v) 125 } 126 127 return out, metadata, err 128 })) 129 if err != nil { 130 t.Fatalf("expect no error, got %v", err) 131 } 132 }) 133 } 134} 135