@@ -1216,6 +1216,130 @@ func testPutObjectWithVersioning() {
1216
1216
logSuccess (testName , function , args , startTime )
1217
1217
}
1218
1218
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\n got : %#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
+
1219
1343
func testCopyObjectWithVersioning () {
1220
1344
// initialize logging params
1221
1345
startTime := time .Now ()
@@ -13536,6 +13660,7 @@ func main() {
13536
13660
13537
13661
// execute tests
13538
13662
if isFullMode () {
13663
+ testListMultipartUpload ()
13539
13664
testGetObjectAttributes ()
13540
13665
testGetObjectAttributesErrorCases ()
13541
13666
testMakeBucketErrorV2 ()
0 commit comments