Skip to content

Commit 7c26a3e

Browse files
committed
fix s3store.getBucketName parsing and add additional test case
1 parent acd6d6f commit 7c26a3e

File tree

3 files changed

+57
-30
lines changed

3 files changed

+57
-30
lines changed

metadata/metadata.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ type FsysWriteRequest struct {
7878
Extension string
7979
}
8080

81-
// WriteMetadata generates Cavorite metadata for obj and writes it to s.Fsys
81+
// WriteToFsys generates Cavorite metadata for req.Object and writes it to req.Fsys
8282
func WriteToFsys(req FsysWriteRequest) (err error) {
8383
logger.V(2).Infof("object: %s", req.Object)
8484
// generate metadata

stores/s3.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,14 @@ func (s *s3Store) getBucketName() (string, error) {
239239
case strings.HasPrefix(s.Options.BackendAddress, "http://"):
240240
fallthrough
241241
case strings.HasPrefix(s.Options.BackendAddress, "https://"):
242-
_, bucketName = path.Split(s.Options.BackendAddress)
242+
up, err := url.Parse(s.Options.BackendAddress)
243+
if err != nil {
244+
return "", err
245+
}
246+
p := strings.SplitN(up.Path, "/", 2)[1]
247+
fragments := strings.Split(p, "/")
248+
bucket := fragments[0]
249+
return bucket, nil
243250
default:
244251
return "", fmt.Errorf("unsupported s3 backend address")
245252
}

stores/s3_test.go

Lines changed: 48 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -213,38 +213,58 @@ func TestS3GetBucketNameWithS3Prefix(t *testing.T) {
213213
}
214214

215215
func TestS3GetBucketNameWithHTTPPrefix(t *testing.T) {
216-
expectedBackendAddress := "http://127.0.0.1:9000/aFakeBucket"
217-
218-
mTime, _ := time.Parse("2006-01-02T15:04:05.000Z", "2014-11-12T11:45:26.371Z")
219-
memfs, err := testutils.MemMapFsWith(map[string]testutils.MapFile{
220-
"test": {
221-
Content: []byte("bla"),
222-
ModTime: &mTime,
216+
type test struct {
217+
name string
218+
addressName string
219+
want string
220+
}
221+
tests := []test{
222+
{
223+
name: "simple address",
224+
addressName: "http://127.0.0.1:9000/aFakeBucket",
225+
want: "aFakeBucket",
223226
},
224-
})
225-
assert.NoError(t, err)
226-
227-
fakeS3Server := aferoS3Server{
228-
buckets: map[string]afero.Fs{
229-
// create a bucket in our fake s3 server
230-
"test": afero.NewMemMapFs(),
227+
{
228+
name: "complex address",
229+
addressName: "http://127.0.0.1:9000/aFakeBucket/a/b/c",
230+
want: "aFakeBucket",
231231
},
232232
}
233233

234-
store := s3Store{
235-
Options: Options{
236-
BackendAddress: expectedBackendAddress,
237-
MetadataFileExtension: "cfile",
238-
},
239-
fsys: *memfs,
240-
awsRegion: "us-east-1",
241-
s3Uploader: fakeS3Server,
242-
s3Downloader: fakeS3Server,
234+
for _, test := range tests {
235+
expectedBackendAddress := test.addressName
236+
237+
mTime, _ := time.Parse("2006-01-02T15:04:05.000Z", "2014-11-12T11:45:26.371Z")
238+
memfs, err := testutils.MemMapFsWith(map[string]testutils.MapFile{
239+
"test": {
240+
Content: []byte("bla"),
241+
ModTime: &mTime,
242+
},
243+
})
244+
assert.NoError(t, err)
245+
246+
fakeS3Server := aferoS3Server{
247+
buckets: map[string]afero.Fs{
248+
// create a bucket in our fake s3 server
249+
"test": afero.NewMemMapFs(),
250+
},
251+
}
252+
253+
store := s3Store{
254+
Options: Options{
255+
BackendAddress: expectedBackendAddress,
256+
MetadataFileExtension: "cfile",
257+
},
258+
fsys: *memfs,
259+
awsRegion: "us-east-1",
260+
s3Uploader: fakeS3Server,
261+
s3Downloader: fakeS3Server,
262+
}
263+
264+
bucketName, err := store.getBucketName()
265+
266+
assert.NoError(t, err)
267+
assert.Equal(t, test.want, bucketName)
243268
}
244269

245-
bucketName, err := store.getBucketName()
246-
247-
assert.NoError(t, err)
248-
assert.Equal(t, "aFakeBucket", bucketName)
249-
250270
}

0 commit comments

Comments
 (0)