diff --git a/server/s3/backend.go b/server/s3/backend.go index a79dd2285..7acf058d7 100644 --- a/server/s3/backend.go +++ b/server/s3/backend.go @@ -451,11 +451,17 @@ func (b *s3Backend) CopyObject(ctx context.Context, srcBucket, srcKey, dstBucket fmeta, _ := op.GetNearestMeta(srcFp) srcNode, err := fs.Get(context.WithValue(ctx, conf.MetaKey, fmeta), srcFp, &fs.GetArgs{}) if err != nil { + if errs.IsObjectNotFound(err) { + return result, gofakes3.KeyNotFound(srcKey) + } return result, err } c, err := b.GetObject(ctx, srcBucket, srcKey, nil) if err != nil { + if errs.IsObjectNotFound(err) { + return result, gofakes3.KeyNotFound(srcKey) + } return } defer func() { diff --git a/server/s3/copy_test.go b/server/s3/copy_test.go new file mode 100644 index 000000000..b9ba4dadb --- /dev/null +++ b/server/s3/copy_test.go @@ -0,0 +1,17 @@ +package s3 + +import ( + "context" + "testing" + + "github.com/OpenListTeam/gofakes3" +) + +func TestCopyObjectMissingSourceReturnsNoSuchKey(t *testing.T) { + b, _ := setupMultipartBackend(t) + + _, err := b.CopyObject(context.Background(), "mp", "missing.txt", "mp", "copy.txt", nil) + if code := s3ErrorCode(err); code != gofakes3.ErrNoSuchKey { + t.Fatalf("CopyObject() error = %v, want NoSuchKey", code) + } +}