Skip to content

Commit 14b3aa6

Browse files
authored
Add ListMultipartUploads mint tests (#1963)
Test listing of known multipart upload objects. Requires minio/minio#19756 which gives consistent upload sorting.
1 parent 7d712b5 commit 14b3aa6

File tree

1 file changed

+125
-0
lines changed

1 file changed

+125
-0
lines changed

functional_tests.go

+125
Original file line numberDiff line numberDiff line change
@@ -1216,6 +1216,130 @@ func testPutObjectWithVersioning() {
12161216
logSuccess(testName, function, args, startTime)
12171217
}
12181218

1219+
func testListMultipartUpload() {
1220+
// initialize logging params
1221+
startTime := time.Now()
1222+
testName := getFuncName()
1223+
function := "GetObject()"
1224+
args := map[string]interface{}{}
1225+
1226+
// Instantiate new minio client object.
1227+
opts := &minio.Options{
1228+
Creds: credentials.NewStaticV4(os.Getenv(accessKey), os.Getenv(secretKey), ""),
1229+
Transport: createHTTPTransport(),
1230+
Secure: mustParseBool(os.Getenv(enableHTTPS)),
1231+
}
1232+
c, err := minio.New(os.Getenv(serverEndpoint), opts)
1233+
if err != nil {
1234+
logError(testName, function, args, startTime, "", "MinIO client object creation failed", err)
1235+
return
1236+
}
1237+
core, err := minio.NewCore(os.Getenv(serverEndpoint), opts)
1238+
if err != nil {
1239+
logError(testName, function, args, startTime, "", "MinIO core client object creation failed", err)
1240+
return
1241+
}
1242+
1243+
// Enable tracing, write to stderr.
1244+
// c.TraceOn(os.Stderr)
1245+
1246+
// Set user agent.
1247+
c.SetAppInfo("MinIO-go-FunctionalTest", appVersion)
1248+
1249+
// Generate a new random bucket name.
1250+
bucketName := randString(60, rand.NewSource(time.Now().UnixNano()), "minio-go-test-")
1251+
args["bucketName"] = bucketName
1252+
1253+
// Make a new bucket.
1254+
ctx := context.Background()
1255+
err = c.MakeBucket(ctx, bucketName, minio.MakeBucketOptions{Region: "us-east-1", ObjectLocking: true})
1256+
if err != nil {
1257+
logError(testName, function, args, startTime, "", "Make bucket failed", err)
1258+
return
1259+
}
1260+
defer func() {
1261+
if err = cleanupVersionedBucket(bucketName, c); err != nil {
1262+
logError(testName, function, args, startTime, "", "CleanupBucket failed", err)
1263+
}
1264+
}()
1265+
objName := "prefix/objectName"
1266+
1267+
want := minio.ListMultipartUploadsResult{
1268+
Bucket: bucketName,
1269+
KeyMarker: "",
1270+
UploadIDMarker: "",
1271+
NextKeyMarker: "",
1272+
NextUploadIDMarker: "",
1273+
EncodingType: "url",
1274+
MaxUploads: 1000,
1275+
IsTruncated: false,
1276+
Prefix: "prefix/objectName",
1277+
Delimiter: "/",
1278+
CommonPrefixes: nil,
1279+
}
1280+
for i := 0; i < 5; i++ {
1281+
uid, err := core.NewMultipartUpload(ctx, bucketName, objName, minio.PutObjectOptions{})
1282+
if err != nil {
1283+
logError(testName, function, args, startTime, "", "NewMultipartUpload failed", err)
1284+
return
1285+
}
1286+
want.Uploads = append(want.Uploads, minio.ObjectMultipartInfo{
1287+
Initiated: time.Time{},
1288+
StorageClass: "",
1289+
Key: objName,
1290+
Size: 0,
1291+
UploadID: uid,
1292+
Err: nil,
1293+
})
1294+
1295+
for j := 0; j < 5; j++ {
1296+
cmpGot := func(call string, got minio.ListMultipartUploadsResult) bool {
1297+
for i := range got.Uploads {
1298+
got.Uploads[i].Initiated = time.Time{}
1299+
}
1300+
if !reflect.DeepEqual(want, got) {
1301+
err := fmt.Errorf("want: %#v\ngot : %#v", want, got)
1302+
logError(testName, function, args, startTime, "", call+" failed", err)
1303+
}
1304+
return true
1305+
}
1306+
got, err := core.ListMultipartUploads(ctx, bucketName, objName, "", "", "/", 1000)
1307+
if err != nil {
1308+
logError(testName, function, args, startTime, "", "ListMultipartUploads failed", err)
1309+
return
1310+
}
1311+
if !cmpGot("ListMultipartUploads-prefix", got) {
1312+
return
1313+
}
1314+
got, err = core.ListMultipartUploads(ctx, bucketName, objName, objName, "", "/", 1000)
1315+
got.KeyMarker = ""
1316+
if err != nil {
1317+
logError(testName, function, args, startTime, "", "ListMultipartUploads failed", err)
1318+
return
1319+
}
1320+
if !cmpGot("ListMultipartUploads-marker", got) {
1321+
return
1322+
}
1323+
}
1324+
if i > 2 {
1325+
err = core.AbortMultipartUpload(ctx, bucketName, objName, uid)
1326+
if err != nil {
1327+
logError(testName, function, args, startTime, "", "AbortMultipartUpload failed", err)
1328+
return
1329+
}
1330+
want.Uploads = want.Uploads[:len(want.Uploads)-1]
1331+
}
1332+
}
1333+
for _, up := range want.Uploads {
1334+
err = core.AbortMultipartUpload(ctx, bucketName, objName, up.UploadID)
1335+
if err != nil {
1336+
logError(testName, function, args, startTime, "", "AbortMultipartUpload failed", err)
1337+
return
1338+
}
1339+
}
1340+
logSuccess(testName, function, args, startTime)
1341+
}
1342+
12191343
func testCopyObjectWithVersioning() {
12201344
// initialize logging params
12211345
startTime := time.Now()
@@ -13536,6 +13660,7 @@ func main() {
1353613660

1353713661
// execute tests
1353813662
if isFullMode() {
13663+
testListMultipartUpload()
1353913664
testGetObjectAttributes()
1354013665
testGetObjectAttributesErrorCases()
1354113666
testMakeBucketErrorV2()

0 commit comments

Comments
 (0)