@@ -394,6 +394,52 @@ func UploadAnObject(bucketName string, fileName string) (*http.Response, error)
394394 return response , err
395395}
396396
397+ func DeleteObject (bucketName string , path string , recursive bool , allVersions bool ) (* http.Response , error ) {
398+ /*
399+ Helper function to delete an object from a given bucket.
400+ DELETE:
401+ {{baseUrl}}/buckets/bucketName/objects?path=Y2VzYXJpby50eHQ=&recursive=false&all_versions=false
402+ */
403+ url := "http://localhost:9090/api/v1/buckets/" + bucketName + "/objects?path=" +
404+ path + "&recursive=" + strconv .FormatBool (recursive ) + "&all_versions=" +
405+ strconv .FormatBool (allVersions )
406+ request , err := http .NewRequest (
407+ "DELETE" ,
408+ url ,
409+ nil ,
410+ )
411+ if err != nil {
412+ log .Println (err )
413+ }
414+ request .Header .Add ("Cookie" , fmt .Sprintf ("token=%s" , token ))
415+ request .Header .Add ("Content-Type" , "application/json" )
416+ client := & http.Client {
417+ Timeout : 2 * time .Second ,
418+ }
419+ response , err := client .Do (request )
420+ return response , err
421+ }
422+
423+ func ListObjects (bucketName string ) (* http.Response , error ) {
424+ /*
425+ Helper function to list objects in a bucket.
426+ GET: {{baseUrl}}/buckets/:bucket_name/objects
427+ */
428+ request , err := http .NewRequest ("GET" ,
429+ "http://localhost:9090/api/v1/buckets/" + bucketName + "/objects" ,
430+ nil )
431+ if err != nil {
432+ log .Println (err )
433+ }
434+ request .Header .Add ("Cookie" , fmt .Sprintf ("token=%s" , token ))
435+ request .Header .Add ("Content-Type" , "application/json" )
436+ client := & http.Client {
437+ Timeout : 2 * time .Second ,
438+ }
439+ response , err := client .Do (request )
440+ return response , err
441+ }
442+
397443func TestAddBucket (t * testing.T ) {
398444 assert := assert .New (t )
399445
@@ -1012,3 +1058,78 @@ func TestUploadObjectToBucket(t *testing.T) {
10121058 assert .Equal (200 , uploadResponse .StatusCode , finalResponse )
10131059 }
10141060}
1061+
1062+ func TestDeleteObject (t * testing.T ) {
1063+ /*
1064+ Test to delete an object from a given bucket.
1065+ */
1066+
1067+ // Variables
1068+ assert := assert .New (t )
1069+ bucketName := "testdeleteobjectbucket1"
1070+ fileName := "testdeleteobjectfile"
1071+ path := "dGVzdGRlbGV0ZW9iamVjdGZpbGUxLnR4dA==" // fileName encoded base64
1072+ numberOfFiles := 2
1073+
1074+ // 1. Create bucket
1075+ response , err := AddBucket (bucketName , true , true , nil , nil )
1076+ assert .Nil (err )
1077+ if err != nil {
1078+ log .Println (err )
1079+ assert .Fail ("Error creating the bucket" )
1080+ return
1081+ }
1082+ if response != nil {
1083+ assert .Equal (201 , response .StatusCode , inspectHTTPResponse (response ))
1084+ }
1085+
1086+ // 2. Add two objects to the bucket created.
1087+ for i := 1 ; i <= numberOfFiles ; i ++ {
1088+ uploadResponse , uploadError := UploadAnObject (
1089+ bucketName , fileName + strconv .Itoa (i )+ ".txt" )
1090+ assert .Nil (uploadError )
1091+ if uploadError != nil {
1092+ log .Println (uploadError )
1093+ return
1094+ }
1095+ if uploadResponse != nil {
1096+ assert .Equal (200 , uploadResponse .StatusCode ,
1097+ inspectHTTPResponse (uploadResponse ))
1098+ }
1099+ }
1100+
1101+ // 3. Delete only one object from the bucket.
1102+ deleteResponse , deleteError := DeleteObject (bucketName , path , false , false )
1103+ assert .Nil (deleteError )
1104+ if deleteError != nil {
1105+ log .Println (deleteError )
1106+ return
1107+ }
1108+ if deleteResponse != nil {
1109+ assert .Equal (200 , deleteResponse .StatusCode ,
1110+ inspectHTTPResponse (deleteResponse ))
1111+ }
1112+
1113+ // 4. List the objects in the bucket and make sure the object is gone
1114+ listResponse , listError := ListObjects (bucketName )
1115+ assert .Nil (listError )
1116+ if listError != nil {
1117+ log .Println (listError )
1118+ return
1119+ }
1120+ finalResponse := inspectHTTPResponse (listResponse )
1121+ if listResponse != nil {
1122+ assert .Equal (200 , listResponse .StatusCode ,
1123+ finalResponse )
1124+ }
1125+ // Expected only one file: "testdeleteobjectfile2.txt"
1126+ // "testdeleteobjectfile1.txt" should be gone by now.
1127+ assert .True (
1128+ strings .Contains (
1129+ finalResponse ,
1130+ "testdeleteobjectfile2.txt" ), finalResponse ) // Still there
1131+ assert .False (
1132+ strings .Contains (
1133+ finalResponse ,
1134+ "testdeleteobjectfile1.txt" ), finalResponse ) // Gone
1135+ }
0 commit comments