@@ -610,6 +610,24 @@ func GetsTheMetadataOfAnObject(bucketName string, prefix string) (*http.Response
610610 return response , err
611611}
612612
613+ func RestoreObjectToASelectedVersion (bucketName string , prefix string , versionID string ) (* http.Response , error ) {
614+ request , err := http .NewRequest (
615+ "PUT" ,
616+ "http://localhost:9090/api/v1/buckets/" + bucketName + "/objects/restore?prefix=" + prefix + "&version_id=" + versionID ,
617+ nil ,
618+ )
619+ if err != nil {
620+ log .Println (err )
621+ }
622+ request .Header .Add ("Cookie" , fmt .Sprintf ("token=%s" , token ))
623+ request .Header .Add ("Content-Type" , "application/json" )
624+ client := & http.Client {
625+ Timeout : 2 * time .Second ,
626+ }
627+ response , err := client .Do (request )
628+ return response , err
629+ }
630+
613631func TestAddBucket (t * testing.T ) {
614632 assert := assert .New (t )
615633 type args struct {
@@ -1930,3 +1948,102 @@ func TestPutBucketsTags(t *testing.T) {
19301948 })
19311949 }
19321950}
1951+
1952+ func TestRestoreObjectToASelectedVersion (t * testing.T ) {
1953+
1954+ // Variables
1955+ assert := assert .New (t )
1956+ bucketName := "testrestoreobjectstoselectedversion"
1957+ fileName := "testrestoreobjectstoselectedversion.txt"
1958+ validPrefix := encodeBase64 (fileName )
1959+
1960+ // 1. Create bucket
1961+ response , err := AddBucket (bucketName , true , true , nil , nil )
1962+ assert .Nil (err )
1963+ if err != nil {
1964+ log .Println (err )
1965+ assert .Fail ("Error creating the bucket" )
1966+ return
1967+ }
1968+ if response != nil {
1969+ assert .Equal (201 , response .StatusCode , inspectHTTPResponse (response ))
1970+ }
1971+
1972+ // 2. Add object
1973+ uploadResponse , uploadError := UploadAnObject (
1974+ bucketName ,
1975+ fileName ,
1976+ )
1977+ assert .Nil (uploadError )
1978+ if uploadError != nil {
1979+ log .Println (uploadError )
1980+ return
1981+ }
1982+ addObjRsp := inspectHTTPResponse (uploadResponse )
1983+ if uploadResponse != nil {
1984+ assert .Equal (
1985+ 200 ,
1986+ uploadResponse .StatusCode ,
1987+ addObjRsp ,
1988+ )
1989+ }
1990+
1991+ // 3. Get versionID
1992+ listResponse , listError := ListObjects (bucketName , validPrefix , "true" )
1993+ fmt .Println (listError )
1994+ bodyBytes , _ := ioutil .ReadAll (listResponse .Body )
1995+ listObjs := models.ListObjectsResponse {}
1996+ err = json .Unmarshal (bodyBytes , & listObjs )
1997+ if err != nil {
1998+ log .Println (err )
1999+ assert .Nil (err )
2000+ }
2001+ versionID := listObjs .Objects [0 ].VersionID
2002+
2003+ type args struct {
2004+ prefix string
2005+ }
2006+ tests := []struct {
2007+ name string
2008+ expectedStatus int
2009+ args args
2010+ }{
2011+ {
2012+ name : "Valid prefix when restoring object" ,
2013+ expectedStatus : 200 ,
2014+ args : args {
2015+ prefix : validPrefix ,
2016+ },
2017+ },
2018+ {
2019+ name : "Invalid prefix when restoring object" ,
2020+ expectedStatus : 500 ,
2021+ args : args {
2022+ prefix : "fakefile" ,
2023+ },
2024+ },
2025+ }
2026+ for _ , tt := range tests {
2027+ t .Run (tt .name , func (t * testing.T ) {
2028+ // 4. Restore Object to a selected version
2029+ restResp , restErr := RestoreObjectToASelectedVersion (
2030+ bucketName ,
2031+ tt .args .prefix ,
2032+ versionID ,
2033+ )
2034+ assert .Nil (restErr )
2035+ if restErr != nil {
2036+ log .Println (restErr )
2037+ return
2038+ }
2039+ finalResponse := inspectHTTPResponse (restResp )
2040+ if restResp != nil {
2041+ assert .Equal (
2042+ tt .expectedStatus ,
2043+ restResp .StatusCode ,
2044+ finalResponse ,
2045+ )
2046+ }
2047+ })
2048+ }
2049+ }
0 commit comments