1package request 2 3import ( 4 "bytes" 5 "io" 6 "net/http" 7 "strings" 8 "testing" 9 10 "github.com/aws/aws-sdk-go/aws" 11) 12 13func TestResetBody_WithBodyContents(t *testing.T) { 14 r := Request{ 15 HTTPRequest: &http.Request{}, 16 } 17 18 reader := strings.NewReader("abc") 19 r.Body = reader 20 21 r.ResetBody() 22 23 if v, ok := r.HTTPRequest.Body.(*offsetReader); !ok || v == nil { 24 t.Errorf("expected request body to be set to reader, got %#v", 25 r.HTTPRequest.Body) 26 } 27} 28 29type mockReader struct{} 30 31func (mockReader) Read([]byte) (int, error) { 32 return 0, io.EOF 33} 34 35func TestResetBody_ExcludeEmptyUnseekableBodyByMethod(t *testing.T) { 36 cases := []struct { 37 Method string 38 Body io.ReadSeeker 39 IsNoBody bool 40 }{ 41 { 42 Method: "GET", 43 IsNoBody: true, 44 Body: aws.ReadSeekCloser(mockReader{}), 45 }, 46 { 47 Method: "HEAD", 48 IsNoBody: true, 49 Body: aws.ReadSeekCloser(mockReader{}), 50 }, 51 { 52 Method: "DELETE", 53 IsNoBody: true, 54 Body: aws.ReadSeekCloser(mockReader{}), 55 }, 56 { 57 Method: "PUT", 58 IsNoBody: false, 59 Body: aws.ReadSeekCloser(mockReader{}), 60 }, 61 { 62 Method: "PATCH", 63 IsNoBody: false, 64 Body: aws.ReadSeekCloser(mockReader{}), 65 }, 66 { 67 Method: "POST", 68 IsNoBody: false, 69 Body: aws.ReadSeekCloser(mockReader{}), 70 }, 71 { 72 Method: "GET", 73 IsNoBody: false, 74 Body: aws.ReadSeekCloser(bytes.NewBuffer([]byte("abc"))), 75 }, 76 { 77 Method: "GET", 78 IsNoBody: true, 79 Body: aws.ReadSeekCloser(bytes.NewBuffer(nil)), 80 }, 81 { 82 Method: "POST", 83 IsNoBody: false, 84 Body: aws.ReadSeekCloser(bytes.NewBuffer([]byte("abc"))), 85 }, 86 { 87 Method: "POST", 88 IsNoBody: true, 89 Body: aws.ReadSeekCloser(bytes.NewBuffer(nil)), 90 }, 91 } 92 93 for i, c := range cases { 94 r := Request{ 95 HTTPRequest: &http.Request{}, 96 Operation: &Operation{ 97 HTTPMethod: c.Method, 98 }, 99 } 100 r.SetReaderBody(c.Body) 101 102 if a, e := r.HTTPRequest.Body == NoBody, c.IsNoBody; a != e { 103 t.Errorf("%d, expect body to be set to noBody(%t), but was %t", i, e, a) 104 } 105 } 106 107} 108