github.com/aavshr/aws-sdk-go@v1.41.3/service/s3/s3crypto/helper_test.go (about)

     1  package s3crypto
     2  
     3  import (
     4  	"bytes"
     5  	"io/ioutil"
     6  	"net/http"
     7  	"os"
     8  	"testing"
     9  
    10  	"github.com/aavshr/aws-sdk-go/aws"
    11  	"github.com/aavshr/aws-sdk-go/aws/request"
    12  	"github.com/aavshr/aws-sdk-go/awstesting"
    13  	"github.com/aavshr/aws-sdk-go/internal/sdkio"
    14  )
    15  
    16  func TestBytesReadWriteSeeker_Read(t *testing.T) {
    17  	b := &bytesReadWriteSeeker{[]byte{1, 2, 3}, 0}
    18  	expected := []byte{1, 2, 3}
    19  	buf := make([]byte, 3)
    20  	n, err := b.Read(buf)
    21  
    22  	if err != nil {
    23  		t.Errorf("expected no error, but received %v", err)
    24  	}
    25  
    26  	if e, a := 3, n; e != a {
    27  		t.Errorf("expected %d, but received %d", e, a)
    28  	}
    29  
    30  	if !bytes.Equal(expected, buf) {
    31  		t.Error("expected equivalent byte slices, but received otherwise")
    32  	}
    33  }
    34  
    35  func TestBytesReadWriteSeeker_Write(t *testing.T) {
    36  	b := &bytesReadWriteSeeker{}
    37  	expected := []byte{1, 2, 3}
    38  	buf := make([]byte, 3)
    39  	n, err := b.Write([]byte{1, 2, 3})
    40  
    41  	if err != nil {
    42  		t.Errorf("expected no error, but received %v", err)
    43  	}
    44  
    45  	if e, a := 3, n; e != a {
    46  		t.Errorf("expected %d, but received %d", e, a)
    47  	}
    48  
    49  	n, err = b.Read(buf)
    50  	if err != nil {
    51  		t.Errorf("expected no error, but received %v", err)
    52  	}
    53  
    54  	if e, a := 3, n; e != a {
    55  		t.Errorf("expected %d, but received %d", e, a)
    56  	}
    57  
    58  	if !bytes.Equal(expected, buf) {
    59  		t.Error("expected equivalent byte slices, but received otherwise")
    60  	}
    61  }
    62  
    63  func TestBytesReadWriteSeeker_Seek(t *testing.T) {
    64  	b := &bytesReadWriteSeeker{[]byte{1, 2, 3}, 0}
    65  	expected := []byte{2, 3}
    66  	m, err := b.Seek(1, sdkio.SeekStart)
    67  
    68  	if err != nil {
    69  		t.Errorf("expected no error, but received %v", err)
    70  	}
    71  
    72  	if e, a := 1, int(m); e != a {
    73  		t.Errorf("expected %d, but received %d", e, a)
    74  	}
    75  
    76  	buf := make([]byte, 3)
    77  	n, err := b.Read(buf)
    78  
    79  	if err != nil {
    80  		t.Errorf("expected no error, but received %v", err)
    81  	}
    82  
    83  	if e, a := 2, n; e != a {
    84  		t.Errorf("expected %d, but received %d", e, a)
    85  	}
    86  
    87  	if !bytes.Equal(expected, buf[:n]) {
    88  		t.Error("expected equivalent byte slices, but received otherwise")
    89  	}
    90  }
    91  
    92  func TestGetWriterStore_TempFile(t *testing.T) {
    93  	response := http.Response{StatusCode: 200}
    94  	s := awstesting.NewClient(aws.NewConfig().WithMaxRetries(10))
    95  	s.Handlers.Validate.Clear()
    96  	s.Handlers.Send.Clear() // mock sending
    97  	s.Handlers.Send.PushBack(func(r *request.Request) {
    98  		r.HTTPResponse = &response
    99  	})
   100  	type testData struct {
   101  		Data string
   102  	}
   103  	out := &testData{}
   104  	r := s.NewRequest(&request.Operation{Name: "Operation"}, nil, out)
   105  	f, err := getWriterStore(r, "", true)
   106  	if err != nil {
   107  		t.Fatalf("expected no error, but received %v", err)
   108  	}
   109  	tempFile, ok := f.(*os.File)
   110  	if !ok {
   111  		t.Fatal("io.ReadWriteSeeker expected to be *os.file")
   112  	}
   113  	err = r.Send()
   114  	if err != nil {
   115  		t.Errorf("expected no error, but received %v", err)
   116  	}
   117  	if _, err := os.Stat(tempFile.Name()); !os.IsNotExist(err) {
   118  		t.Errorf("expected temp file be deleted, but still exists %v", tempFile.Name())
   119  	}
   120  }
   121  
   122  func TestGetWriterStore_TempFileWithRetry(t *testing.T) {
   123  	responses := []*http.Response{
   124  		{StatusCode: 500, Header: http.Header{}, Body: ioutil.NopCloser(&bytes.Buffer{})},
   125  		{StatusCode: 200, Header: http.Header{}, Body: ioutil.NopCloser(&bytes.Buffer{})},
   126  	}
   127  	s := awstesting.NewClient(aws.NewConfig().WithMaxRetries(10))
   128  	s.Handlers.Validate.Clear()
   129  	s.Handlers.Send.Clear() // mock sending
   130  	s.Handlers.Send.PushBack(func(r *request.Request) {
   131  		r.HTTPResponse = responses[0]
   132  		responses = responses[1:]
   133  	})
   134  	type testData struct {
   135  		Data string
   136  	}
   137  	out := &testData{}
   138  	r := s.NewRequest(&request.Operation{Name: "Operation"}, nil, out)
   139  	f, err := getWriterStore(r, "", true)
   140  	if err != nil {
   141  		t.Fatalf("expected no error, but received %v", err)
   142  	}
   143  	tempFile, ok := f.(*os.File)
   144  	if !ok {
   145  		t.Fatal("io.ReadWriteSeeker expected to be *os.file")
   146  	}
   147  	err = r.Send()
   148  	if err != nil {
   149  		t.Errorf("expected no error, but received %v", err)
   150  	}
   151  	if _, err := os.Stat(tempFile.Name()); !os.IsNotExist(err) {
   152  		t.Errorf("expected temp file be deleted, but still exists %v", tempFile.Name())
   153  	}
   154  	if v := len(responses); v != 0 {
   155  		t.Errorf("expect all retries to be used, have %v remaining", v)
   156  	}
   157  }
   158  
   159  func TestGetWriterStore_Memory(t *testing.T) {
   160  	response := http.Response{StatusCode: 200}
   161  	s := awstesting.NewClient(aws.NewConfig().WithMaxRetries(10))
   162  	s.Handlers.Validate.Clear()
   163  	s.Handlers.Send.Clear() // mock sending
   164  	s.Handlers.Send.PushBack(func(r *request.Request) {
   165  		r.HTTPResponse = &response
   166  	})
   167  	type testData struct {
   168  		Data string
   169  	}
   170  	out := &testData{}
   171  	r := s.NewRequest(&request.Operation{Name: "Operation"}, nil, out)
   172  	f, err := getWriterStore(r, "", false)
   173  	if err != nil {
   174  		t.Fatalf("expected no error, but received %v", err)
   175  	}
   176  	if _, ok := f.(*bytesReadWriteSeeker); !ok {
   177  		t.Fatal("io.ReadWriteSeeker expected to be *bytesReadWriteSeeker")
   178  	}
   179  	if err != nil {
   180  		t.Errorf("expected no error, but received %v", err)
   181  	}
   182  	err = r.Send()
   183  	if err != nil {
   184  		t.Errorf("expected no error, but received %v", err)
   185  	}
   186  }