From a77674ead3c5f1f9bd21a46f6f90019f178c6a70 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Sun, 14 Dec 2025 11:18:23 -0800 Subject: fix: use path instead of filepath for S3 object paths on Windows (#7739) fix: use path instead of filepath for S3 object paths on Windows (#7733) --- weed/s3api/filer_multipart_test.go | 62 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 60 insertions(+), 2 deletions(-) (limited to 'weed/s3api/filer_multipart_test.go') diff --git a/weed/s3api/filer_multipart_test.go b/weed/s3api/filer_multipart_test.go index 7f75a40de..bf4fa3ca2 100644 --- a/weed/s3api/filer_multipart_test.go +++ b/weed/s3api/filer_multipart_test.go @@ -1,12 +1,13 @@ package s3api import ( + "testing" + "time" + "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) { @@ -74,3 +75,60 @@ func Test_parsePartNumber(t *testing.T) { }) } } + +func TestGetEntryNameAndDir(t *testing.T) { + s3a := &S3ApiServer{ + option: &S3ApiServerOption{ + BucketsPath: "/buckets", + }, + } + + tests := []struct { + name string + bucket string + key string + expectedName string + expectedDirEnd string // We check the suffix since dir includes BucketsPath + }{ + { + name: "simple file at root", + bucket: "test-bucket", + key: "/file.txt", + expectedName: "file.txt", + expectedDirEnd: "/buckets/test-bucket", + }, + { + name: "file in subdirectory", + bucket: "test-bucket", + key: "/folder/file.txt", + expectedName: "file.txt", + expectedDirEnd: "/buckets/test-bucket/folder", + }, + { + name: "file in nested subdirectory", + bucket: "test-bucket", + key: "/folder/subfolder/file.txt", + expectedName: "file.txt", + expectedDirEnd: "/buckets/test-bucket/folder/subfolder", + }, + { + name: "key without leading slash", + bucket: "test-bucket", + key: "folder/file.txt", + expectedName: "file.txt", + expectedDirEnd: "/buckets/test-bucket/folder", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + input := &s3.CompleteMultipartUploadInput{ + Bucket: aws.String(tt.bucket), + Key: aws.String(tt.key), + } + entryName, dirName := s3a.getEntryNameAndDir(input) + assert.Equal(t, tt.expectedName, entryName, "entry name mismatch") + assert.Equal(t, tt.expectedDirEnd, dirName, "directory mismatch") + }) + } +} -- cgit v1.2.3