@@ -189,16 +189,18 @@ func TestMain(m *testing.M) {
189189 os .Exit (code )
190190}
191191
192- func AddBucket (BucketName string , Versioning bool , Locking bool ) (* http.Response , error ) {
192+ func AddBucket (name string , locking bool , versioning bool , quota map [ string ] interface {}, retention map [ string ] interface {} ) (* http.Response , error ) {
193193 /*
194194 This is an atomic function that we can re-use to create a bucket on any
195195 desired test.
196196 */
197197 // Needed Parameters for API Call
198198 requestDataAdd := map [string ]interface {}{
199- "name" : BucketName ,
200- "versioning" : Versioning ,
201- "locking" : Locking ,
199+ "name" : name ,
200+ "locking" : locking ,
201+ "versioning" : versioning ,
202+ "quota" : quota ,
203+ "retention" : retention ,
202204 }
203205
204206 // Creating the Call by adding the URL and Headers
@@ -287,10 +289,61 @@ func PutBucketsTags(bucketName string, tags map[string]string) (*http.Response,
287289 return response , err
288290}
289291
292+ func SetBucketRetention (bucketName string , mode string , unit string , validity int ) (* http.Response , error ) {
293+ /*
294+ Helper function to set bucket's retention
295+ PUT: {{baseUrl}}/buckets/:bucket_name/retention
296+ {
297+ "mode":"compliance",
298+ "unit":"years",
299+ "validity":2
300+ }
301+ */
302+ requestDataAdd := map [string ]interface {}{
303+ "mode" : mode ,
304+ "unit" : unit ,
305+ "validity" : validity ,
306+ }
307+ requestDataJSON , _ := json .Marshal (requestDataAdd )
308+ requestDataBody := bytes .NewReader (requestDataJSON )
309+ request , err := http .NewRequest ("PUT" ,
310+ "http://localhost:9090/api/v1/buckets/" + bucketName + "/retention" ,
311+ requestDataBody )
312+ if err != nil {
313+ log .Println (err )
314+ }
315+ request .Header .Add ("Cookie" , fmt .Sprintf ("token=%s" , token ))
316+ request .Header .Add ("Content-Type" , "application/json" )
317+ client := & http.Client {
318+ Timeout : 2 * time .Second ,
319+ }
320+ response , err := client .Do (request )
321+ return response , err
322+ }
323+
324+ func GetBucketRetention (bucketName string ) (* http.Response , error ) {
325+ /*
326+ Helper function to get the bucket's retention
327+ */
328+ request , err := http .NewRequest ("GET" ,
329+ "http://localhost:9090/api/v1/buckets/" + bucketName + "/retention" ,
330+ nil )
331+ if err != nil {
332+ log .Println (err )
333+ }
334+ request .Header .Add ("Cookie" , fmt .Sprintf ("token=%s" , token ))
335+ request .Header .Add ("Content-Type" , "application/json" )
336+ client := & http.Client {
337+ Timeout : 2 * time .Second ,
338+ }
339+ response , err := client .Do (request )
340+ return response , err
341+ }
342+
290343func TestAddBucket (t * testing.T ) {
291344 assert := assert .New (t )
292345
293- response , err := AddBucket ("test1" , false , false )
346+ response , err := AddBucket ("test1" , false , false , nil , nil )
294347 assert .Nil (err )
295348 if err != nil {
296349 log .Println (err )
@@ -315,7 +368,7 @@ func TestAddBucketLocking(t *testing.T) {
315368 test will see and make sure this is not allowed and that we get proper
316369 error for this scenario.
317370 */
318- response , err := AddBucket ("test1" , false , true )
371+ response , err := AddBucket ("test1" , true , false , nil , nil )
319372 assert .Nil (err )
320373 if err != nil {
321374 log .Println (err )
@@ -332,7 +385,7 @@ func TestAddBucketLocking(t *testing.T) {
332385 /*
333386 This is valid, versioning is true, then locking can be true as well.
334387 */
335- response , err = AddBucket ("thujun" , true , true )
388+ response , err = AddBucket ("thujun" , true , true , nil , nil )
336389 assert .Nil (err )
337390 if err != nil {
338391 log .Println (err )
@@ -366,7 +419,7 @@ func TestGetBucket(t *testing.T) {
366419 Timeout : 2 * time .Second ,
367420 }
368421
369- response , err := AddBucket ("test3" , false , false )
422+ response , err := AddBucket ("test3" , false , false , nil , nil )
370423 assert .Nil (err )
371424 if err != nil {
372425 log .Println (err )
@@ -403,7 +456,7 @@ func TestSetBucketTags(t *testing.T) {
403456 }
404457
405458 // put bucket
406- response , err := AddBucket ("test4" , false , false )
459+ response , err := AddBucket ("test4" , false , false , nil , nil )
407460 assert .Nil (err )
408461 if err != nil {
409462 log .Println (err )
@@ -513,7 +566,7 @@ func TestBucketVersioning(t *testing.T) {
513566
514567 requestDataBody := bytes .NewReader (requestDataJSON )
515568
516- response , err = AddBucket ("test2" , true , false )
569+ response , err = AddBucket ("test2" , true , false , nil , nil )
517570 assert .Nil (err )
518571 if err != nil {
519572 log .Println (err )
@@ -599,7 +652,7 @@ func TestListBuckets(t *testing.T) {
599652 var numberOfBuckets = 3
600653 for i := 1 ; i <= numberOfBuckets ; i ++ {
601654 response , err := AddBucket (
602- "testlistbuckets" + strconv .Itoa (i ), false , false )
655+ "testlistbuckets" + strconv .Itoa (i ), false , false , nil , nil )
603656 assert .Nil (err )
604657 if err != nil {
605658 log .Println (err )
@@ -648,7 +701,7 @@ func TestBucketInformationSuccessfulResponse(t *testing.T) {
648701
649702 // 1. Create the bucket
650703 assert := assert .New (t )
651- response , err := AddBucket ("bucketinformation1" , false , false )
704+ response , err := AddBucket ("bucketinformation1" , false , false , nil , nil )
652705 assert .Nil (err )
653706 if err != nil {
654707 log .Println (err )
@@ -703,7 +756,7 @@ func TestBucketInformationGenericErrorResponse(t *testing.T) {
703756 */
704757 // 1. Create the bucket
705758 assert := assert .New (t )
706- response , err := AddBucket ("bucketinformation2" , false , false )
759+ response , err := AddBucket ("bucketinformation2" , false , false , nil , nil )
707760 assert .Nil (err )
708761 if err != nil {
709762 log .Println (err )
@@ -747,3 +800,77 @@ func TestBucketInformationGenericErrorResponse(t *testing.T) {
747800 // tag2 is not part of the response, this is why assert.False is used.
748801 assert .False (strings .Contains (finalResponse , "tag2" ), finalResponse )
749802}
803+
804+ func TestBucketRetention (t * testing.T ) {
805+ /*
806+ To test bucket retention feature
807+ */
808+ // 1. Create the bucket with 2 years validity retention
809+ assert := assert .New (t )
810+ /*
811+ {
812+ "name":"setbucketretention1",
813+ "versioning":true,
814+ "locking":true,
815+ "retention":
816+ {
817+ "mode":"compliance",
818+ "unit":"years",
819+ "validity":2
820+ }
821+ }
822+ */
823+ retention := make (map [string ]interface {})
824+ retention ["mode" ] = "compliance"
825+ retention ["unit" ] = "years"
826+ retention ["validity" ] = 2
827+ response , err := AddBucket ("setbucketretention1" , true , true , nil , retention )
828+ assert .Nil (err )
829+ if err != nil {
830+ log .Println (err )
831+ assert .Fail ("Error creating the bucket" )
832+ return
833+ }
834+ if response != nil {
835+ assert .Equal (201 , response .StatusCode , inspectHTTPResponse (response ))
836+ }
837+
838+ // 2. Set the bucket's retention from 2 years to 3 years
839+ setBucketRetentionResponse , setBucketRetentionError := SetBucketRetention (
840+ "setbucketretention1" ,
841+ "compliance" ,
842+ "years" ,
843+ 3 ,
844+ )
845+ assert .Nil (setBucketRetentionError )
846+ if setBucketRetentionError != nil {
847+ log .Println (setBucketRetentionError )
848+ assert .Fail ("Error creating the bucket" )
849+ return
850+ }
851+ if setBucketRetentionResponse != nil {
852+ assert .Equal (200 , setBucketRetentionResponse .StatusCode ,
853+ inspectHTTPResponse (setBucketRetentionResponse ))
854+ }
855+
856+ // 3. Verify the bucket's retention was properly set.
857+ getBucketRetentionResponse , getBucketRetentionError := GetBucketRetention (
858+ "setbucketretention1" ,
859+ )
860+ assert .Nil (getBucketRetentionError )
861+ if getBucketRetentionError != nil {
862+ log .Println (getBucketRetentionError )
863+ assert .Fail ("Error creating the bucket" )
864+ return
865+ }
866+ finalResponse := inspectHTTPResponse (getBucketRetentionResponse )
867+ if getBucketRetentionResponse != nil {
868+ assert .Equal (
869+ 200 ,
870+ getBucketRetentionResponse .StatusCode ,
871+ finalResponse ,
872+ )
873+ }
874+ expected := "Http Response: {\" mode\" :\" compliance\" ,\" unit\" :\" years\" ,\" validity\" :3}\n "
875+ assert .Equal (expected , finalResponse , finalResponse )
876+ }
0 commit comments