mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2024-01-19 02:48:24 +00:00
fix s3api copy object handler SerializationError
This commit is contained in:
parent
fa0e2ff498
commit
feb52400be
|
@ -2,14 +2,14 @@ package basic
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/aws/aws-sdk-go/aws"
|
||||
"github.com/aws/aws-sdk-go/aws/awserr"
|
||||
"github.com/aws/aws-sdk-go/aws/session"
|
||||
"github.com/aws/aws-sdk-go/service/s3"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
var (
|
||||
|
@ -109,3 +109,101 @@ func exitErrorf(msg string, args ...interface{}) {
|
|||
fmt.Fprintf(os.Stderr, msg+"\n", args...)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
const (
|
||||
Bucket = "theBucket"
|
||||
object = "foo/bar"
|
||||
Data = "<data>"
|
||||
)
|
||||
|
||||
func TestObjectOp(t *testing.T) {
|
||||
_, err := svc.CreateBucket(&s3.CreateBucketInput{
|
||||
Bucket: aws.String(Bucket),
|
||||
})
|
||||
if err != nil {
|
||||
exitErrorf("Unable to create bucket, %v", err)
|
||||
}
|
||||
|
||||
_, err = svc.PutObject(&s3.PutObjectInput{
|
||||
Bucket: aws.String(Bucket),
|
||||
Key: aws.String(object),
|
||||
Body: strings.NewReader(Data),
|
||||
})
|
||||
if err != nil {
|
||||
exitErrorf("Unable to put object, %v", err)
|
||||
}
|
||||
|
||||
dest := fmt.Sprintf("%s_bak", object)
|
||||
copyObj, err := svc.CopyObject(&s3.CopyObjectInput{
|
||||
Bucket: aws.String(Bucket),
|
||||
CopySource: aws.String(fmt.Sprintf("%s/%s", Bucket, object)),
|
||||
Key: aws.String(dest),
|
||||
})
|
||||
if err != nil {
|
||||
exitErrorf("Unable to copy object, %v", err)
|
||||
}
|
||||
t.Log("copy object result -> ", copyObj.CopyObjectResult)
|
||||
|
||||
getObj, err := svc.GetObject(&s3.GetObjectInput{
|
||||
Bucket: aws.String(Bucket),
|
||||
Key: aws.String(dest),
|
||||
})
|
||||
if err != nil {
|
||||
exitErrorf("Unable to get copy object, %v", err)
|
||||
}
|
||||
|
||||
data, err := ioutil.ReadAll(getObj.Body)
|
||||
if err != nil {
|
||||
exitErrorf("Unable to read object data, %v", err)
|
||||
}
|
||||
if string(data) != Data {
|
||||
t.Error("object data -> ", string(data))
|
||||
}
|
||||
|
||||
listObj, err := svc.ListObjectsV2(&s3.ListObjectsV2Input{
|
||||
Bucket: aws.String(Bucket),
|
||||
Prefix: aws.String("foo/"),
|
||||
})
|
||||
if err != nil {
|
||||
exitErrorf("Unable to list objects, %v", err)
|
||||
}
|
||||
count := 0
|
||||
for _, content := range listObj.Contents {
|
||||
key := aws.StringValue(content.Key)
|
||||
if key == dest {
|
||||
count++
|
||||
} else if key == object {
|
||||
count++
|
||||
}
|
||||
if count == 2 {
|
||||
break
|
||||
}
|
||||
}
|
||||
if count != 2 {
|
||||
exitErrorf("Unable to find two objects, %v", listObj.Contents)
|
||||
}
|
||||
|
||||
_, err = svc.DeleteObject(&s3.DeleteObjectInput{
|
||||
Bucket: aws.String(Bucket),
|
||||
Key: aws.String(object),
|
||||
})
|
||||
if err != nil {
|
||||
exitErrorf("Unable to delete source object, %v", err)
|
||||
}
|
||||
|
||||
_, err = svc.DeleteObject(&s3.DeleteObjectInput{
|
||||
Bucket: aws.String(Bucket),
|
||||
Key: aws.String(dest),
|
||||
})
|
||||
if err != nil {
|
||||
exitErrorf("Unable to delete object, %v", err)
|
||||
}
|
||||
|
||||
_, err = svc.DeleteBucket(&s3.DeleteBucketInput{
|
||||
Bucket: aws.String(Bucket),
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
exitErrorf("Unable to delete bucket, %v", err)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -61,7 +61,7 @@ func (s3a *S3ApiServer) CopyObjectHandler(w http.ResponseWriter, r *http.Request
|
|||
|
||||
response := CopyObjectResult{
|
||||
ETag: etag,
|
||||
LastModified: time.Now(),
|
||||
LastModified: time.Now().UTC(),
|
||||
}
|
||||
|
||||
writeSuccessResponseXML(w, encodeResponse(response))
|
||||
|
@ -143,7 +143,7 @@ func (s3a *S3ApiServer) CopyObjectPartHandler(w http.ResponseWriter, r *http.Req
|
|||
|
||||
response := CopyPartResult{
|
||||
ETag: etag,
|
||||
LastModified: time.Now(),
|
||||
LastModified: time.Now().UTC(),
|
||||
}
|
||||
|
||||
writeSuccessResponseXML(w, encodeResponse(response))
|
||||
|
|
Loading…
Reference in a new issue