...

Source file src/github.com/aws/smithy-go/transport/http/checksum_middleware_test.go

Documentation: github.com/aws/smithy-go/transport/http

     1  package http
     2  
     3  import (
     4  	"bytes"
     5  	"context"
     6  	"io"
     7  	"strings"
     8  	"testing"
     9  
    10  	smithyio "github.com/aws/smithy-go/io"
    11  	"github.com/aws/smithy-go/middleware"
    12  )
    13  
    14  func TestChecksumMiddleware(t *testing.T) {
    15  	cases := map[string]struct {
    16  		payload               io.Reader
    17  		expectedPayloadLength int64
    18  		expectedMD5Checksum   string
    19  		expectError           string
    20  	}{
    21  		"empty body": {
    22  			payload: smithyio.ReadSeekNopCloser{
    23  				ReadSeeker: bytes.NewReader([]byte(``)),
    24  			},
    25  			expectedPayloadLength: 0,
    26  			expectedMD5Checksum:   "1B2M2Y8AsgTpgAmY7PhCfg==",
    27  		},
    28  		"standard req body": {
    29  			payload: smithyio.ReadSeekNopCloser{
    30  				ReadSeeker: bytes.NewReader([]byte(`abc`)),
    31  			},
    32  			expectedPayloadLength: 3,
    33  			expectedMD5Checksum:   "kAFQmDzST7DWlj99KOF/cg==",
    34  		},
    35  		"nil body": {},
    36  		"unseekable payload": {
    37  			payload:     bytes.NewBuffer([]byte(`xyz`)),
    38  			expectError: "unseekable stream is not supported",
    39  		},
    40  	}
    41  
    42  	for name, c := range cases {
    43  		t.Run(name, func(t *testing.T) {
    44  			var err error
    45  			req := NewStackRequest().(*Request)
    46  
    47  			req, err = req.SetStream(c.payload)
    48  			if err != nil {
    49  				t.Fatalf("error setting request stream")
    50  			}
    51  			m := contentMD5Checksum{}
    52  			_, _, err = m.HandleBuild(context.Background(),
    53  				middleware.BuildInput{Request: req},
    54  				nopBuildHandler,
    55  			)
    56  
    57  			if len(c.expectError) != 0 {
    58  				if err == nil {
    59  					t.Fatalf("expect error, got none")
    60  				}
    61  				if e, a := c.expectError, err.Error(); !strings.Contains(a, e) {
    62  					t.Fatalf("expect error to contain %q, got %v", e, a)
    63  				}
    64  				return
    65  			} else if err != nil {
    66  				t.Fatalf("expect no error, got %v", err)
    67  			}
    68  
    69  			if e, a := c.expectedMD5Checksum, req.Header.Get(contentMD5Header); e != a {
    70  				t.Errorf("expect md5 checksum : %v, got %v", e, a)
    71  			}
    72  
    73  			size, ok, err := req.StreamLength()
    74  			if err != nil {
    75  				t.Fatalf("error fetching request stream length")
    76  			}
    77  			if !ok {
    78  				t.Fatalf("request stream is not seekable")
    79  			}
    80  			if e, a := c.expectedPayloadLength, size; e != a {
    81  				t.Fatalf("expected request stream content length to be %v, got length %v", e, a)
    82  			}
    83  		})
    84  	}
    85  }
    86  

View as plain text