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

     1  //go:build integration
     2  // +build integration
     3  
     4  package s3manager_test
     5  
     6  import (
     7  	"bytes"
     8  	"crypto/md5"
     9  	"fmt"
    10  	"regexp"
    11  	"strings"
    12  	"testing"
    13  
    14  	"github.com/aavshr/aws-sdk-go/aws/awserr"
    15  	"github.com/aavshr/aws-sdk-go/aws/request"
    16  	"github.com/aavshr/aws-sdk-go/service/s3"
    17  	"github.com/aavshr/aws-sdk-go/service/s3/s3manager"
    18  )
    19  
    20  var integBuf12MB = make([]byte, 1024*1024*12)
    21  var integMD512MB = fmt.Sprintf("%x", md5.Sum(integBuf12MB))
    22  
    23  func TestUploadConcurrently(t *testing.T) {
    24  	key := "12mb-1"
    25  	mgr := s3manager.NewUploader(integSess)
    26  	out, err := mgr.Upload(&s3manager.UploadInput{
    27  		Bucket: bucketName,
    28  		Key:    &key,
    29  		Body:   bytes.NewReader(integBuf12MB),
    30  	})
    31  
    32  	if err != nil {
    33  		t.Fatalf("expect no error, got %v", err)
    34  	}
    35  	if len(out.UploadID) == 0 {
    36  		t.Errorf("expect upload ID but was empty")
    37  	}
    38  
    39  	re := regexp.MustCompile(`^https?://.+/` + key + `$`)
    40  	if e, a := re.String(), out.Location; !re.MatchString(a) {
    41  		t.Errorf("expect %s to match URL regexp %q, did not", e, a)
    42  	}
    43  
    44  	validate(t, key, integMD512MB)
    45  }
    46  
    47  func TestUploadFailCleanup(t *testing.T) {
    48  	// Break checksum on 2nd part so it fails
    49  	part := 0
    50  	svc.Handlers.Build.PushBack(func(r *request.Request) {
    51  		if r.Operation.Name == "UploadPart" {
    52  			if part == 1 {
    53  				r.HTTPRequest.Header.Set("X-Amz-Content-Sha256", "000")
    54  			}
    55  			part++
    56  		}
    57  	})
    58  
    59  	key := "12mb-leave"
    60  	mgr := s3manager.NewUploaderWithClient(svc, func(u *s3manager.Uploader) {
    61  		u.LeavePartsOnError = false
    62  	})
    63  	_, err := mgr.Upload(&s3manager.UploadInput{
    64  		Bucket: bucketName,
    65  		Key:    &key,
    66  		Body:   bytes.NewReader(integBuf12MB),
    67  	})
    68  	if err == nil {
    69  		t.Fatalf("expect error, but did not get one")
    70  	}
    71  
    72  	aerr := err.(awserr.Error)
    73  	if e, a := "MissingRegion", aerr.Code(); strings.Contains(a, e) {
    74  		t.Errorf("expect %q to not be in error code %q", e, a)
    75  	}
    76  
    77  	uploadID := ""
    78  	merr := err.(s3manager.MultiUploadFailure)
    79  	if uploadID = merr.UploadID(); len(uploadID) == 0 {
    80  		t.Errorf("expect upload ID to not be empty, but was")
    81  	}
    82  
    83  	_, err = svc.ListParts(&s3.ListPartsInput{
    84  		Bucket: bucketName, Key: &key, UploadId: &uploadID,
    85  	})
    86  	if err == nil {
    87  		t.Errorf("expect error for list parts, but got none")
    88  	}
    89  }