diff --git a/integration/buckets_test.go b/integration/buckets_test.go index e80b0eaa8..fd7afada9 100644 --- a/integration/buckets_test.go +++ b/integration/buckets_test.go @@ -458,6 +458,45 @@ func UploadAnObject(bucketName string, fileName string) (*http.Response, error) return response, err } +func DeleteMultipleObjects(bucketName string, files []map[string]interface{}) (*http.Response, error) { + /* + Helper function to delete multiple objects in a container. + POST: /buckets/{bucket_name}/delete-objects + files: [ + { + "path": "veniam tempor in", + "versionID": "ea dolor Duis", + "recursive": false + }, + { + "path": "proident eu esse", + "versionID": "eiusmod amet commodo", + "recursive": true + } + ] + */ + requestDataAdd := map[string]interface{}{ + "files": files, + } + requestDataJSON, _ := json.Marshal(requestDataAdd) + requestDataBody := bytes.NewReader(requestDataJSON) + request, err := http.NewRequest( + "POST", + "http://localhost:9090/api/v1/buckets/"+bucketName+"/delete-objects", + requestDataBody, + ) + if err != nil { + log.Println(err) + } + request.Header.Add("Cookie", fmt.Sprintf("token=%s", token)) + request.Header.Add("Content-Type", "application/json") + client := &http.Client{ + Timeout: 2 * time.Second, + } + response, err := client.Do(request) + return response, err +} + func DeleteObject(bucketName string, path string, recursive bool, allVersions bool) (*http.Response, error) { /* Helper function to delete an object from a given bucket. @@ -1158,6 +1197,77 @@ func TestPutObjectTag(t *testing.T) { finalResponse) } +func TestDeleteMultipleObjects(t *testing.T) { + /* + Function to test the deletion of multiple objects from a given bucket. + */ + + // Variables + assert := assert.New(t) + bucketName := "testdeletemultipleobjsbucket1" + numberOfFiles := 5 + fileName := "testdeletemultipleobjs" + + // 1. Create a bucket for this particular test + response, err := AddBucket(bucketName, false, false, nil, nil) + assert.Nil(err) + if err != nil { + log.Println(err) + return + } + if response != nil { + assert.Equal(201, response.StatusCode, "Status Code is incorrect") + } + + // 2. Add couple of objects to this bucket + for i := 1; i <= numberOfFiles; i++ { + uploadResponse, uploadError := UploadAnObject( + bucketName, fileName+strconv.Itoa(i)+".txt") + assert.Nil(uploadError) + if uploadError != nil { + log.Println(uploadError) + return + } + if uploadResponse != nil { + assert.Equal(200, uploadResponse.StatusCode, + inspectHTTPResponse(uploadResponse)) + } + } + + // 3. Delete these objects + for i := 1; i <= numberOfFiles; i++ { + deleteResponse, deleteError := DeleteObject( + bucketName, encodeBase64( + fileName+strconv.Itoa(i)+".txt"), false, false) + assert.Nil(deleteError) + if deleteError != nil { + log.Println(deleteError) + return + } + if deleteResponse != nil { + assert.Equal(200, deleteResponse.StatusCode, + inspectHTTPResponse(deleteResponse)) + } + } + + // 4. List the objects, empty list is expected! + listResponse, listError := ListObjects(bucketName, "") + assert.Nil(listError) + if listError != nil { + log.Println(listError) + return + } + finalResponse := inspectHTTPResponse(listResponse) + if listResponse != nil { + assert.Equal(200, listResponse.StatusCode, + finalResponse) + } + + // 5. Verify empty list is obtained as we deleted all the objects + expected := "Http Response: {\"objects\":null}\n" + assert.Equal(expected, finalResponse, finalResponse) +} + func TestDownloadObject(t *testing.T) { /* Test to download an object from a given bucket.