github.com/aavshr/aws-sdk-go@v1.41.3/aws/request/request_resetbody_test.go (about)

     1  package request
     2  
     3  import (
     4  	"bytes"
     5  	"io"
     6  	"net/http"
     7  	"strings"
     8  	"testing"
     9  
    10  	"github.com/aavshr/aws-sdk-go/aws"
    11  )
    12  
    13  func 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  
    29  type mockReader struct{}
    30  
    31  func (mockReader) Read([]byte) (int, error) {
    32  	return 0, io.EOF
    33  }
    34  
    35  func 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  }