Merge pull request #252 from versity/fix/issue-243-copy-object-same-dest

Issue 243 CopyObject error case to copy the object into itself
This commit is contained in:
Ben McClelland
2023-09-18 09:34:04 -07:00
committed by GitHub
3 changed files with 27 additions and 0 deletions

View File

@@ -1239,6 +1239,10 @@ func (p *Posix) CopyObject(ctx context.Context, input *s3.CopyObjectInput) (*s3.
dstBucket := *input.Bucket
dstObject := *input.Key
if fmt.Sprintf("%v/%v", srcBucket, srcObject) == fmt.Sprintf("%v/%v", dstBucket, dstObject) {
return &s3.CopyObjectOutput{}, s3err.GetAPIError(s3err.ErrInvalidCopyDest)
}
_, err := os.Stat(srcBucket)
if errors.Is(err, fs.ErrNotExist) {
return nil, s3err.GetAPIError(s3err.ErrNoSuchBucket)

View File

@@ -88,6 +88,7 @@ func TestDeleteObjects(s *S3Conf) {
func TestCopyObject(s *S3Conf) {
CopyObject_non_existing_dst_bucket(s)
CopyObject_copy_to_itself(s)
CopyObject_success(s)
}

View File

@@ -1676,6 +1676,28 @@ func CopyObject_non_existing_dst_bucket(s *S3Conf) {
})
}
func CopyObject_copy_to_itself(s *S3Conf) {
testName := "CopyObject_copy_to_itself"
actionHandler(s, testName, func(s3client *s3.Client, bucket string) error {
obj := "my-obj"
err := putObjects(s3client, []string{obj}, bucket)
if err != nil {
return err
}
ctx, cancel := context.WithTimeout(context.Background(), shortTimeout)
_, err = s3client.CopyObject(ctx, &s3.CopyObjectInput{
Bucket: &bucket,
Key: &obj,
CopySource: getPtr(fmt.Sprintf("%v/%v", bucket, obj)),
})
cancel()
if err := checkApiErr(err, s3err.GetAPIError(s3err.ErrInvalidCopyDest)); err != nil {
return err
}
return nil
})
}
func CopyObject_success(s *S3Conf) {
testName := "CopyObject_success"
actionHandler(s, testName, func(s3client *s3.Client, bucket string) error {