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 }