diff --git a/integration/buckets_test.go b/integration/buckets_test.go index a8949d52a..18a6ca525 100644 --- a/integration/buckets_test.go +++ b/integration/buckets_test.go @@ -610,6 +610,24 @@ func GetsTheMetadataOfAnObject(bucketName string, prefix string) (*http.Response return response, err } +func RestoreObjectToASelectedVersion(bucketName string, prefix string, versionID string) (*http.Response, error) { + request, err := http.NewRequest( + "PUT", + "http://localhost:9090/api/v1/buckets/"+bucketName+"/objects/restore?prefix="+prefix+"&version_id="+versionID, + nil, + ) + if err != nil { + log.Println(err) + } + request.Header.Add("Cookie", fmt.Sprintf("token=%s", token)) + request.Header.Add("Content-Type", "application/json") + client := &http.Client{ + Timeout: 2 * time.Second, + } + response, err := client.Do(request) + return response, err +} + func TestAddBucket(t *testing.T) { assert := assert.New(t) type args struct { @@ -1930,3 +1948,102 @@ func TestPutBucketsTags(t *testing.T) { }) } } + +func TestRestoreObjectToASelectedVersion(t *testing.T) { + + // Variables + assert := assert.New(t) + bucketName := "testrestoreobjectstoselectedversion" + fileName := "testrestoreobjectstoselectedversion.txt" + validPrefix := encodeBase64(fileName) + + // 1. Create bucket + response, err := AddBucket(bucketName, true, true, nil, nil) + assert.Nil(err) + if err != nil { + log.Println(err) + assert.Fail("Error creating the bucket") + return + } + if response != nil { + assert.Equal(201, response.StatusCode, inspectHTTPResponse(response)) + } + + // 2. Add object + uploadResponse, uploadError := UploadAnObject( + bucketName, + fileName, + ) + assert.Nil(uploadError) + if uploadError != nil { + log.Println(uploadError) + return + } + addObjRsp := inspectHTTPResponse(uploadResponse) + if uploadResponse != nil { + assert.Equal( + 200, + uploadResponse.StatusCode, + addObjRsp, + ) + } + + // 3. Get versionID + listResponse, listError := ListObjects(bucketName, validPrefix, "true") + fmt.Println(listError) + bodyBytes, _ := ioutil.ReadAll(listResponse.Body) + listObjs := models.ListObjectsResponse{} + err = json.Unmarshal(bodyBytes, &listObjs) + if err != nil { + log.Println(err) + assert.Nil(err) + } + versionID := listObjs.Objects[0].VersionID + + type args struct { + prefix string + } + tests := []struct { + name string + expectedStatus int + args args + }{ + { + name: "Valid prefix when restoring object", + expectedStatus: 200, + args: args{ + prefix: validPrefix, + }, + }, + { + name: "Invalid prefix when restoring object", + expectedStatus: 500, + args: args{ + prefix: "fakefile", + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + // 4. Restore Object to a selected version + restResp, restErr := RestoreObjectToASelectedVersion( + bucketName, + tt.args.prefix, + versionID, + ) + assert.Nil(restErr) + if restErr != nil { + log.Println(restErr) + return + } + finalResponse := inspectHTTPResponse(restResp) + if restResp != nil { + assert.Equal( + tt.expectedStatus, + restResp.StatusCode, + finalResponse, + ) + } + }) + } +}