@@ -189,16 +189,18 @@ func TestMain(m *testing.M) {
189
189
os .Exit (code )
190
190
}
191
191
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 ) {
193
193
/*
194
194
This is an atomic function that we can re-use to create a bucket on any
195
195
desired test.
196
196
*/
197
197
// Needed Parameters for API Call
198
198
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 ,
202
204
}
203
205
204
206
// Creating the Call by adding the URL and Headers
@@ -287,10 +289,61 @@ func PutBucketsTags(bucketName string, tags map[string]string) (*http.Response,
287
289
return response , err
288
290
}
289
291
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
+
290
343
func TestAddBucket (t * testing.T ) {
291
344
assert := assert .New (t )
292
345
293
- response , err := AddBucket ("test1" , false , false )
346
+ response , err := AddBucket ("test1" , false , false , nil , nil )
294
347
assert .Nil (err )
295
348
if err != nil {
296
349
log .Println (err )
@@ -315,7 +368,7 @@ func TestAddBucketLocking(t *testing.T) {
315
368
test will see and make sure this is not allowed and that we get proper
316
369
error for this scenario.
317
370
*/
318
- response , err := AddBucket ("test1" , false , true )
371
+ response , err := AddBucket ("test1" , true , false , nil , nil )
319
372
assert .Nil (err )
320
373
if err != nil {
321
374
log .Println (err )
@@ -332,7 +385,7 @@ func TestAddBucketLocking(t *testing.T) {
332
385
/*
333
386
This is valid, versioning is true, then locking can be true as well.
334
387
*/
335
- response , err = AddBucket ("thujun" , true , true )
388
+ response , err = AddBucket ("thujun" , true , true , nil , nil )
336
389
assert .Nil (err )
337
390
if err != nil {
338
391
log .Println (err )
@@ -366,7 +419,7 @@ func TestGetBucket(t *testing.T) {
366
419
Timeout : 2 * time .Second ,
367
420
}
368
421
369
- response , err := AddBucket ("test3" , false , false )
422
+ response , err := AddBucket ("test3" , false , false , nil , nil )
370
423
assert .Nil (err )
371
424
if err != nil {
372
425
log .Println (err )
@@ -403,7 +456,7 @@ func TestSetBucketTags(t *testing.T) {
403
456
}
404
457
405
458
// put bucket
406
- response , err := AddBucket ("test4" , false , false )
459
+ response , err := AddBucket ("test4" , false , false , nil , nil )
407
460
assert .Nil (err )
408
461
if err != nil {
409
462
log .Println (err )
@@ -513,7 +566,7 @@ func TestBucketVersioning(t *testing.T) {
513
566
514
567
requestDataBody := bytes .NewReader (requestDataJSON )
515
568
516
- response , err = AddBucket ("test2" , true , false )
569
+ response , err = AddBucket ("test2" , true , false , nil , nil )
517
570
assert .Nil (err )
518
571
if err != nil {
519
572
log .Println (err )
@@ -599,7 +652,7 @@ func TestListBuckets(t *testing.T) {
599
652
var numberOfBuckets = 3
600
653
for i := 1 ; i <= numberOfBuckets ; i ++ {
601
654
response , err := AddBucket (
602
- "testlistbuckets" + strconv .Itoa (i ), false , false )
655
+ "testlistbuckets" + strconv .Itoa (i ), false , false , nil , nil )
603
656
assert .Nil (err )
604
657
if err != nil {
605
658
log .Println (err )
@@ -648,7 +701,7 @@ func TestBucketInformationSuccessfulResponse(t *testing.T) {
648
701
649
702
// 1. Create the bucket
650
703
assert := assert .New (t )
651
- response , err := AddBucket ("bucketinformation1" , false , false )
704
+ response , err := AddBucket ("bucketinformation1" , false , false , nil , nil )
652
705
assert .Nil (err )
653
706
if err != nil {
654
707
log .Println (err )
@@ -703,7 +756,7 @@ func TestBucketInformationGenericErrorResponse(t *testing.T) {
703
756
*/
704
757
// 1. Create the bucket
705
758
assert := assert .New (t )
706
- response , err := AddBucket ("bucketinformation2" , false , false )
759
+ response , err := AddBucket ("bucketinformation2" , false , false , nil , nil )
707
760
assert .Nil (err )
708
761
if err != nil {
709
762
log .Println (err )
@@ -747,3 +800,77 @@ func TestBucketInformationGenericErrorResponse(t *testing.T) {
747
800
// tag2 is not part of the response, this is why assert.False is used.
748
801
assert .False (strings .Contains (finalResponse , "tag2" ), finalResponse )
749
802
}
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