package s3api import ( "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/service/s3" "github.com/seaweedfs/seaweedfs/weed/s3api/s3err" "github.com/stretchr/testify/assert" "testing" "time" ) func TestInitiateMultipartUploadResult(t *testing.T) { expected := ` example-bucketexample-objectVXBsb2FkIElEIGZvciA2aWWpbmcncyBteS1tb3ZpZS5tMnRzIHVwbG9hZA` response := &InitiateMultipartUploadResult{ CreateMultipartUploadOutput: s3.CreateMultipartUploadOutput{ Bucket: aws.String("example-bucket"), Key: aws.String("example-object"), UploadId: aws.String("VXBsb2FkIElEIGZvciA2aWWpbmcncyBteS1tb3ZpZS5tMnRzIHVwbG9hZA"), }, } encoded := string(s3err.EncodeXMLResponse(response)) if encoded != expected { t.Errorf("unexpected output: %s\nexpecting:%s", encoded, expected) } } func TestListPartsResult(t *testing.T) { expected := ` "12345678"1970-01-01T00:00:00Z1123` response := &ListPartsResult{ Part: []*s3.Part{ { PartNumber: aws.Int64(int64(1)), LastModified: aws.Time(time.Unix(0, 0).UTC()), Size: aws.Int64(int64(123)), ETag: aws.String("\"12345678\""), }, }, } encoded := string(s3err.EncodeXMLResponse(response)) if encoded != expected { t.Errorf("unexpected output: %s\nexpecting:%s", encoded, expected) } } func Test_findByPartNumber(t *testing.T) { type args struct { fileName string parts []CompletedPart } parts := []CompletedPart{ { ETag: "xxx", PartNumber: 1, }, { ETag: "lll", PartNumber: 1, }, { ETag: "yyy", PartNumber: 3, }, { ETag: "zzz", PartNumber: 5, }, } tests := []struct { name string args args wantEtag string wantFound bool }{ { "first", args{ "0001.part", parts, }, "lll", true, }, { "second", args{ "0002.part", parts, }, "", false, }, { "third", args{ "0003.part", parts, }, "yyy", true, }, { "fourth", args{ "0004.part", parts, }, "", false, }, { "fifth", args{ "0005.part", parts, }, "zzz", true, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { gotEtag, gotFound := findByPartNumber(tt.args.fileName, tt.args.parts) assert.Equalf(t, tt.wantEtag, gotEtag, "findByPartNumber(%v, %v)", tt.args.fileName, tt.args.parts) assert.Equalf(t, tt.wantFound, gotFound, "findByPartNumber(%v, %v)", tt.args.fileName, tt.args.parts) }) } }