Skip to content

Commit 6caa66a

Browse files
committed
Add test to reply POST body
1 parent 4696550 commit 6caa66a

File tree

1 file changed

+58
-1
lines changed

1 file changed

+58
-1
lines changed

go/porcelain/http/http_test.go

Lines changed: 58 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package http
33
import (
44
"errors"
55
"fmt"
6+
"io/ioutil"
67
"net/http"
78
"net/http/httptest"
89
"net/url"
@@ -151,7 +152,7 @@ func TestRetryableTransport_POST(t *testing.T) {
151152
defer server.Close()
152153

153154
rwrtr := runtime.ClientRequestWriterFunc(func(req runtime.ClientRequest, _ strfmt.Registry) error {
154-
return req.SetBodyParam("test result")
155+
return req.SetBodyParam("test body")
155156
})
156157

157158
hu, _ := url.Parse(server.URL)
@@ -178,3 +179,59 @@ func TestRetryableTransport_POST(t *testing.T) {
178179
actual := result.(string)
179180
require.EqualValues(t, "test result", actual)
180181
}
182+
183+
func TestRetryableTransportWithRetry_POST(t *testing.T) {
184+
attempts := 0
185+
186+
server := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) {
187+
attempts++
188+
189+
if attempts == 1 {
190+
reset := fmt.Sprintf("%d", time.Now().Add(1*time.Second).Unix())
191+
body, err := ioutil.ReadAll(req.Body)
192+
require.NoError(t, err)
193+
require.Equal(t, "\"test body\"\n", string(body))
194+
rw.Header().Set("X-RateLimit-Reset", reset)
195+
rw.WriteHeader(http.StatusTooManyRequests)
196+
rw.Write([]byte("rate limited"))
197+
} else {
198+
body, err := ioutil.ReadAll(req.Body)
199+
require.NoError(t, err)
200+
require.Equal(t, "\"test body\"\n", string(body))
201+
rw.WriteHeader(http.StatusOK)
202+
rw.Write([]byte("ok"))
203+
}
204+
}))
205+
defer server.Close()
206+
207+
rwrtr := runtime.ClientRequestWriterFunc(func(req runtime.ClientRequest, _ strfmt.Registry) error {
208+
return req.SetBodyParam("test body")
209+
})
210+
211+
hu, _ := url.Parse(server.URL)
212+
rt := NewRetryableTransport(httptransport.New(hu.Host, "/", []string{"http"}), 2)
213+
214+
res, err := rt.Submit(&runtime.ClientOperation{
215+
ID: "getSites",
216+
Method: "POST",
217+
PathPattern: "/",
218+
Params: rwrtr,
219+
Reader: runtime.ClientResponseReaderFunc(func(response runtime.ClientResponse, consumer runtime.Consumer) (interface{}, error) {
220+
if response.Code() == 200 {
221+
var result string
222+
if err := consumer.Consume(response.Body(), &result); err != nil {
223+
return nil, err
224+
}
225+
return result, nil
226+
}
227+
return nil, errors.New("Generic error")
228+
}),
229+
})
230+
231+
require.NoError(t, err)
232+
require.Equal(t, 2, attempts)
233+
234+
require.IsType(t, "", res)
235+
actual := res.(string)
236+
require.EqualValues(t, "ok", actual)
237+
}

0 commit comments

Comments
 (0)