@@ -523,13 +523,13 @@ func DeleteObject(bucketName string, path string, recursive bool, allVersions bo
523
523
return response , err
524
524
}
525
525
526
- func ListObjects (bucketName string , prefix string ) (* http.Response , error ) {
526
+ func ListObjects (bucketName string , prefix string , withVersions string ) (* http.Response , error ) {
527
527
/*
528
528
Helper function to list objects in a bucket.
529
529
GET: {{baseUrl}}/buckets/:bucket_name/objects
530
530
*/
531
531
request , err := http .NewRequest ("GET" ,
532
- "http://localhost:9090/api/v1/buckets/" + bucketName + "/objects?prefix=" + prefix ,
532
+ "http://localhost:9090/api/v1/buckets/" + bucketName + "/objects?prefix=" + prefix + "&with_versions=" + withVersions ,
533
533
nil )
534
534
if err != nil {
535
535
log .Println (err )
@@ -562,6 +562,31 @@ func SharesAnObjectOnAUrl(bucketName string, prefix string, versionID string, ex
562
562
return response , err
563
563
}
564
564
565
+ func PutObjectsRetentionStatus (bucketName string , prefix string , versionID string , mode string , expires string , governanceBypass bool ) (* http.Response , error ) {
566
+ requestDataAdd := map [string ]interface {}{
567
+ "mode" : mode ,
568
+ "expires" : expires ,
569
+ "governance_bypass" : governanceBypass ,
570
+ }
571
+ requestDataJSON , _ := json .Marshal (requestDataAdd )
572
+ requestDataBody := bytes .NewReader (requestDataJSON )
573
+ request , err := http .NewRequest (
574
+ "PUT" ,
575
+ "http://localhost:9090/api/v1/buckets/" + bucketName + "/objects/retention?prefix=" + prefix + "&version_id=" + versionID ,
576
+ requestDataBody ,
577
+ )
578
+ if err != nil {
579
+ log .Println (err )
580
+ }
581
+ request .Header .Add ("Cookie" , fmt .Sprintf ("token=%s" , token ))
582
+ request .Header .Add ("Content-Type" , "application/json" )
583
+ client := & http.Client {
584
+ Timeout : 2 * time .Second ,
585
+ }
586
+ response , err := client .Do (request )
587
+ return response , err
588
+ }
589
+
565
590
func TestAddBucket (t * testing.T ) {
566
591
assert := assert .New (t )
567
592
type args struct {
@@ -1229,7 +1254,7 @@ func TestPutObjectTag(t *testing.T) {
1229
1254
}
1230
1255
1231
1256
// 4. Verify the object's tag is set
1232
- listResponse , listError := ListObjects (bucketName , path )
1257
+ listResponse , listError := ListObjects (bucketName , path , "false" )
1233
1258
assert .Nil (listError )
1234
1259
if listError != nil {
1235
1260
log .Println (listError )
@@ -1299,7 +1324,7 @@ func TestDeleteMultipleObjects(t *testing.T) {
1299
1324
}
1300
1325
1301
1326
// 4. List the objects, empty list is expected!
1302
- listResponse , listError := ListObjects (bucketName , "" )
1327
+ listResponse , listError := ListObjects (bucketName , "" , "false" )
1303
1328
assert .Nil (listError )
1304
1329
if listError != nil {
1305
1330
log .Println (listError )
@@ -1477,7 +1502,7 @@ func TestDeleteObject(t *testing.T) {
1477
1502
}
1478
1503
1479
1504
// 4. List the objects in the bucket and make sure the object is gone
1480
- listResponse , listError := ListObjects (bucketName , "" )
1505
+ listResponse , listError := ListObjects (bucketName , "" , "false" )
1481
1506
assert .Nil (listError )
1482
1507
if listError != nil {
1483
1508
log .Println (listError )
@@ -1534,7 +1559,7 @@ func TestListObjects(t *testing.T) {
1534
1559
}
1535
1560
1536
1561
// 3. List the object
1537
- listResponse , listError := ListObjects (bucketName , "" )
1562
+ listResponse , listError := ListObjects (bucketName , "" , "false" )
1538
1563
assert .Nil (listError )
1539
1564
if listError != nil {
1540
1565
log .Println (listError )
@@ -1637,3 +1662,104 @@ func TestShareObjectOnURL(t *testing.T) {
1637
1662
})
1638
1663
}
1639
1664
}
1665
+
1666
+ func TestPutObjectsRetentionStatus (t * testing.T ) {
1667
+
1668
+ // Variables
1669
+ assert := assert .New (t )
1670
+ bucketName := "testputobjectslegalholdstatus"
1671
+ fileName := "testputobjectslegalholdstatus.txt"
1672
+ prefix := "dGVzdHB1dG9iamVjdHNsZWdhbGhvbGRzdGF0dXMudHh0" // encoded base64
1673
+
1674
+ // 1. Create bucket
1675
+ response , err := AddBucket (bucketName , true , true , nil , nil )
1676
+ assert .Nil (err )
1677
+ if err != nil {
1678
+ log .Println (err )
1679
+ assert .Fail ("Error creating the bucket" )
1680
+ return
1681
+ }
1682
+ if response != nil {
1683
+ assert .Equal (201 , response .StatusCode , inspectHTTPResponse (response ))
1684
+ }
1685
+
1686
+ // 2. Add object
1687
+ uploadResponse , uploadError := UploadAnObject (
1688
+ bucketName ,
1689
+ fileName ,
1690
+ )
1691
+ assert .Nil (uploadError )
1692
+ if uploadError != nil {
1693
+ log .Println (uploadError )
1694
+ return
1695
+ }
1696
+ addObjRsp := inspectHTTPResponse (uploadResponse )
1697
+ if uploadResponse != nil {
1698
+ assert .Equal (
1699
+ 200 ,
1700
+ uploadResponse .StatusCode ,
1701
+ addObjRsp ,
1702
+ )
1703
+ }
1704
+
1705
+ // Get versionID
1706
+ listResponse , listError := ListObjects (bucketName , prefix , "true" )
1707
+ fmt .Println (listError )
1708
+ bodyBytes , _ := ioutil .ReadAll (listResponse .Body )
1709
+ listObjs := models.ListObjectsResponse {}
1710
+ err = json .Unmarshal (bodyBytes , & listObjs )
1711
+ if err != nil {
1712
+ log .Println (err )
1713
+ assert .Nil (err )
1714
+ }
1715
+ validVersionID := listObjs .Objects [0 ].VersionID
1716
+
1717
+ type args struct {
1718
+ versionID string
1719
+ }
1720
+ tests := []struct {
1721
+ name string
1722
+ expectedStatus int
1723
+ args args
1724
+ }{
1725
+ {
1726
+ name : "Valid VersionID when putting object's retention status" ,
1727
+ expectedStatus : 200 ,
1728
+ args : args {
1729
+ versionID : validVersionID ,
1730
+ },
1731
+ },
1732
+ {
1733
+ name : "Invalid VersionID when putting object's retention status" ,
1734
+ expectedStatus : 500 ,
1735
+ args : args {
1736
+ versionID : "*&^###Test1ThisMightBeInvalid555" ,
1737
+ },
1738
+ },
1739
+ }
1740
+ for _ , tt := range tests {
1741
+ t .Run (tt .name , func (t * testing.T ) {
1742
+ // 3. Put Objects Legal Status
1743
+ putResponse , putError := PutObjectsRetentionStatus (
1744
+ bucketName ,
1745
+ prefix ,
1746
+ tt .args .versionID ,
1747
+ "compliance" ,
1748
+ "2033-01-13T23:59:59Z" ,
1749
+ false ,
1750
+ )
1751
+ if putError != nil {
1752
+ log .Println (putError )
1753
+ assert .Fail ("Error creating the bucket" )
1754
+ }
1755
+ if putResponse != nil {
1756
+ assert .Equal (
1757
+ tt .expectedStatus ,
1758
+ putResponse .StatusCode ,
1759
+ inspectHTTPResponse (putResponse ),
1760
+ )
1761
+ }
1762
+ })
1763
+ }
1764
+
1765
+ }
0 commit comments