Skip to content

Commit

Permalink
Fixed imgrpkg's TestHTTPServer() to properly validate GET /volume/<vo…
Browse files Browse the repository at this point in the history
…lumeName>/inode/<inodeNumber> response
  • Loading branch information
edmc-ss committed Aug 19, 2021
1 parent 5a7b4ab commit 9a6e16a
Showing 1 changed file with 45 additions and 7 deletions.
52 changes: 45 additions & 7 deletions imgr/imgrpkg/http-server_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,19 +8,25 @@ import (
"net/http"
"strings"
"testing"
"time"

"github.com/NVIDIA/proxyfs/ilayout"
"github.com/NVIDIA/proxyfs/version"
)

func TestHTTPServer(t *testing.T) {
var (
err error
getRequestHeaders http.Header
postRequestBody string
putRequestBody string
responseBody []byte
responseBodyExpected string
err error
getRequestHeaders http.Header
postRequestBody string
putRequestBody string
responseBody []byte
responseBodyAsString string
responseBodyAsStringSplit []string
responseBodyExpected string
responseBodyExpectedStaticPrefix string
responseBodyExpectedStaticMiddle string
responseBodyExpectedStaticSuffix string
)

testSetup(t, nil)
Expand Down Expand Up @@ -120,7 +126,7 @@ func TestHTTPServer(t *testing.T) {
t.Fatalf("testDoHTTPRequest(\"PUT\", testGlobals.httpServerURL+\"/volume\"+testVolume, nil, strings.NewReader(putRequestBody)) [case 2] failed: %v", err)
}

responseBodyExpected = fmt.Sprintf("{\"Name\":\"%s\",\"StorageURL\":\"%s\",\"AuthToken\":\"%s\",\"HealthyMounts\":0,\"LeasesExpiredMounts\":0,\"AuthTokenExpiredMounts\":0,\"SuperBlockObjectName\":\"3000000000000000\",\"SuperBlockLength\":96,\"ReservedToNonce\":3,\"InodeTableLayout\":[{\"ObjectName\":\"3000000000000000\",\"ObjectSize\":58,\"BytesReferenced\":58}],\"InodeObjectCount\":1,\"InodeObjectSize\":237,\"InodeBytesReferenced\":237,\"PendingDeleteObjectNameArray\":[],\"InodeTable\":[{\"InodeNumber\":1,\"InodeHeadObjectName\":\"2000000000000000\",\"InodeHeadLength\":174}]}", testVolume, testGlobals.containerURL, testGlobals.authToken)
responseBodyExpected = fmt.Sprintf("{\"Name\":\"%s\",\"StorageURL\":\"%s\",\"AuthToken\":\"%s\",\"HealthyMounts\":0,\"LeasesExpiredMounts\":0,\"AuthTokenExpiredMounts\":0,\"SuperBlockObjectName\":\"3000000000000000\",\"SuperBlockLength\":96,\"ReservedToNonce\":3,\"InodeTableMinInodesPerNode\":1024,\"InodeTableMaxInodesPerNode\":2048,\"InodeTableInodeCount\":1,\"InodeTableHeight\":1,\"InodeTableLayout\":[{\"ObjectName\":\"3000000000000000\",\"ObjectSize\":58,\"BytesReferenced\":58}],\"InodeObjectCount\":1,\"InodeObjectSize\":237,\"InodeBytesReferenced\":237,\"PendingDeleteObjectNameArray\":[],\"InodeTable\":[{\"InodeNumber\":1,\"InodeHeadObjectName\":\"2000000000000000\",\"InodeHeadLength\":174}]}", testVolume, testGlobals.containerURL, testGlobals.authToken)

_, responseBody, err = testDoHTTPRequest("GET", testGlobals.httpServerURL+"/volume/"+testVolume, nil, nil)
if nil != err {
Expand All @@ -130,6 +136,38 @@ func TestHTTPServer(t *testing.T) {
t.Fatalf("GET /volume/%s [case 2] returned unexpected responseBody: \"%s\"", testVolume, responseBody)
}

responseBodyExpectedStaticPrefix = "{\"InodeNumber\":1,\"InodeType\":\"Dir\",\"LinkTable\":[{\"ParentDirInodeNumber\":1,\"ParentDirEntryName\":\".\"},{\"ParentDirInodeNumber\":1,\"ParentDirEntryName\":\"..\"}],\"ModificationTime\":\""
// Next segment to be a quoted ModificationTime.Format(time.RFC3339)
responseBodyExpectedStaticMiddle = "\",\"StatusChangeTime\":\""
// Next segment to be a quoted StatusChangeTime.Format(time.RFC3339)
responseBodyExpectedStaticSuffix = "\",\"Mode\":511,\"UserID\":0,\"GroupID\":0,\"StreamTable\":[],\"MinDirEntriesPerNode\":512,\"MaxDirEntriesPerNode\":1024,\"DirEntryCount\":2,\"DirectoryHeight\":1,\"Payload\":[{\"BaseName\":\".\",\"InodeNumber\":1,\"InodeType\":\"Dir\"},{\"BaseName\":\"..\",\"InodeNumber\":1,\"InodeType\":\"Dir\"}],\"Layout\":[{\"ObjectName\":\"2000000000000000\",\"ObjectSize\":63,\"BytesReferenced\":63}]}"

_, responseBody, err = testDoHTTPRequest("GET", testGlobals.httpServerURL+"/volume/"+testVolume+"/inode/1", nil, nil)
if nil != err {
t.Fatalf("GET /volume/%s/inode/1 failed: %v", testVolume, err)
}
responseBodyAsString = string(responseBody[:])
if !strings.HasPrefix(responseBodyAsString, responseBodyExpectedStaticPrefix) {
t.Fatalf("GET /volume/%s/inode/1 returned unexpected responseBody [case 1]: \"%s\"", testVolume, responseBody)
}
if !strings.HasSuffix(responseBodyAsString, responseBodyExpectedStaticSuffix) {
t.Fatalf("GET /volume/%s/inode/1 returned unexpected responseBody [case 2]: \"%s\"", testVolume, responseBody)
}
responseBodyAsString = strings.TrimPrefix(responseBodyAsString, responseBodyExpectedStaticPrefix)
responseBodyAsString = strings.TrimSuffix(responseBodyAsString, responseBodyExpectedStaticSuffix)
responseBodyAsStringSplit = strings.Split(responseBodyAsString, responseBodyExpectedStaticMiddle)
if len(responseBodyAsStringSplit) != 2 {
t.Fatalf("GET /volume/%s/inode/1 returned unexpected responseBody [case 3]: \"%s\"", testVolume, responseBody)
}
_, err = time.Parse(time.RFC3339, responseBodyAsStringSplit[0])
if nil != err {
t.Fatalf("GET /volume/%s/inode/1 returned unexpected responseBody [case 4]: \"%s\"", testVolume, responseBody)
}
_, err = time.Parse(time.RFC3339, responseBodyAsStringSplit[1])
if nil != err {
t.Fatalf("GET /volume/%s/inode/1 returned unexpected responseBody [case 5]: \"%s\"", testVolume, responseBody)
}

responseBodyExpected = fmt.Sprintf("[{\"Name\":\"%s\",\"StorageURL\":\"%s\",\"AuthToken\":\"%s\",\"HealthyMounts\":0,\"LeasesExpiredMounts\":0,\"AuthTokenExpiredMounts\":0}]", testVolume, testGlobals.containerURL, testGlobals.authToken)

_, responseBody, err = testDoHTTPRequest("GET", testGlobals.httpServerURL+"/volume", nil, nil)
Expand Down

0 comments on commit 9a6e16a

Please sign in to comment.