[#469] List multipart uploads streaming

Signed-off-by: Nikita Zinkevich <n.zinkevich@yadro.com>
This commit is contained in:
Nikita Zinkevich 2024-10-30 10:04:53 +03:00 committed by Alexey Vanin
parent a7ce40d745
commit c85f619f48
21 changed files with 673 additions and 383 deletions

View file

@ -293,6 +293,35 @@ func TestListMultipartUploads(t *testing.T) {
require.Equal(t, uploadInfo2.UploadID, listUploads.Uploads[1].UploadID)
})
t.Run("incorrect prefix - empty result", func(t *testing.T) {
listUploads := listMultipartUploads(hc, bktName, "/not/exists", "", "", "", -1)
require.Len(t, listUploads.Uploads, 0)
})
t.Run("check delimiter", func(t *testing.T) {
t.Run("not truncated", func(t *testing.T) {
listUploads := listMultipartUploads(hc, bktName, "/", "/", "", "", -1)
require.Len(t, listUploads.Uploads, 0)
require.Len(t, listUploads.CommonPrefixes, 2)
require.Equal(t, "/my/", listUploads.CommonPrefixes[0].Prefix)
require.Equal(t, "/zzz/", listUploads.CommonPrefixes[1].Prefix)
})
t.Run("truncated", func(t *testing.T) {
listUploads := listMultipartUploads(hc, bktName, "/", "/", "", "", 1)
require.Len(t, listUploads.Uploads, 0)
require.Len(t, listUploads.CommonPrefixes, 1)
require.Equal(t, "/my/", listUploads.CommonPrefixes[0].Prefix)
require.True(t, listUploads.IsTruncated)
listUploads = listMultipartUploads(hc, bktName, "/", "/", listUploads.NextUploadIDMarker, listUploads.NextKeyMarker, 1)
require.Len(t, listUploads.Uploads, 0)
require.Len(t, listUploads.CommonPrefixes, 1)
require.Equal(t, "/zzz/", listUploads.CommonPrefixes[0].Prefix)
require.False(t, listUploads.IsTruncated)
})
})
t.Run("check markers", func(t *testing.T) {
t.Run("check only key-marker", func(t *testing.T) {
listUploads := listMultipartUploads(hc, bktName, "", "", "", objName2, -1)
@ -321,6 +350,58 @@ func TestListMultipartUploads(t *testing.T) {
require.Equal(t, uploadInfo3.UploadID, listUploads.Uploads[0].UploadID)
})
})
t.Run("check next markers", func(t *testing.T) {
t.Run("check both next-key-marker and next-upload-id-marker", func(t *testing.T) {
listUploads := listMultipartUploads(hc, bktName, "", "", "", "", 1)
require.True(t, listUploads.IsTruncated)
require.Len(t, listUploads.Uploads, 1)
require.Equal(t, uploadInfo1.Key, listUploads.NextKeyMarker)
require.Equal(t, uploadInfo1.UploadID, listUploads.NextUploadIDMarker)
require.Equal(t, uploadInfo1.UploadID, listUploads.Uploads[0].UploadID)
require.Equal(t, uploadInfo1.Key, listUploads.Uploads[0].Key)
listUploads = listMultipartUploads(hc, bktName, "", "", listUploads.NextUploadIDMarker, listUploads.NextKeyMarker, 1)
require.True(t, listUploads.IsTruncated)
require.Len(t, listUploads.Uploads, 1)
require.Equal(t, uploadInfo2.Key, listUploads.NextKeyMarker)
require.Equal(t, uploadInfo2.UploadID, listUploads.NextUploadIDMarker)
require.Equal(t, uploadInfo2.UploadID, listUploads.Uploads[0].UploadID)
require.Equal(t, uploadInfo2.Key, listUploads.Uploads[0].Key)
listUploads = listMultipartUploads(hc, bktName, "", "", listUploads.NextUploadIDMarker, listUploads.NextKeyMarker, 1)
require.False(t, listUploads.IsTruncated)
require.Len(t, listUploads.Uploads, 1)
require.Empty(t, listUploads.NextUploadIDMarker)
require.Empty(t, listUploads.NextKeyMarker)
require.Equal(t, uploadInfo3.UploadID, listUploads.Uploads[0].UploadID)
})
t.Run("check only next-key-marker", func(t *testing.T) {
listUploads := listMultipartUploads(hc, bktName, "", "", "", "", 1)
require.True(t, listUploads.IsTruncated)
require.Len(t, listUploads.Uploads, 1)
require.Equal(t, uploadInfo1.Key, listUploads.NextKeyMarker)
require.Equal(t, uploadInfo1.UploadID, listUploads.NextUploadIDMarker)
require.Equal(t, uploadInfo1.UploadID, listUploads.Uploads[0].UploadID)
require.Equal(t, uploadInfo1.Key, listUploads.Uploads[0].Key)
listUploads = listMultipartUploads(hc, bktName, "", "", "", listUploads.NextKeyMarker, 1)
require.True(t, listUploads.IsTruncated)
require.Len(t, listUploads.Uploads, 1)
require.Equal(t, uploadInfo2.Key, listUploads.NextKeyMarker)
require.Equal(t, uploadInfo2.UploadID, listUploads.NextUploadIDMarker)
require.Equal(t, uploadInfo2.UploadID, listUploads.Uploads[0].UploadID)
require.Equal(t, uploadInfo2.Key, listUploads.Uploads[0].Key)
listUploads = listMultipartUploads(hc, bktName, "", "", "", listUploads.NextKeyMarker, 1)
require.False(t, listUploads.IsTruncated)
require.Len(t, listUploads.Uploads, 1)
require.Empty(t, listUploads.NextUploadIDMarker)
require.Empty(t, listUploads.NextKeyMarker)
require.Equal(t, uploadInfo3.UploadID, listUploads.Uploads[0].UploadID)
})
})
}
func TestMultipartUploadSize(t *testing.T) {