Skip to content

Commit

Permalink
test: Add additional tests to the DashboardEntriesTree function
Browse files Browse the repository at this point in the history
  • Loading branch information
Dobefu committed Jan 26, 2025
1 parent c993cda commit 2814a38
Show file tree
Hide file tree
Showing 2 changed files with 158 additions and 1 deletion.
1 change: 1 addition & 0 deletions cmd/server/routes/dashboard-entries-tree.go
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,7 @@ func getPublicKey() (string, error) {
err = json.Unmarshal(respBody, &data)

if err != nil {
fmt.Println("TEST")
return "", err
}

Expand Down
158 changes: 157 additions & 1 deletion cmd/server/routes/dashboard-entries-tree_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"bytes"
"crypto/rsa"
"errors"
"fmt"
"io"
"net/http"
"net/http/httptest"
Expand All @@ -24,6 +25,16 @@ func (m *MockClient) Do(req *http.Request) (*http.Response, error) {
return m.DoFunc(req)
}

type BrokenReader struct{}

func (br *BrokenReader) Read(p []byte) (n int, err error) {
return 0, fmt.Errorf("failed reading")
}

func (br *BrokenReader) Close() error {
return fmt.Errorf("failed closing")
}

var mockClient = &MockClient{
DoFunc: func(req *http.Request) (*http.Response, error) {
if strings.Contains(req.URL.String(), "https://") {
Expand All @@ -35,6 +46,33 @@ var mockClient = &MockClient{
}, nil
}

if strings.Contains(req.URL.String(), "nil-body") {
reader := BrokenReader{}

return &http.Response{
StatusCode: http.StatusOK,
Body: &reader,
}, nil
}

if strings.Contains(req.URL.String(), "json-err") {
return &http.Response{
StatusCode: http.StatusOK,
Body: io.NopCloser(bytes.NewBufferString(
`{`,
)),
}, nil
}

if strings.Contains(req.URL.String(), "json-empty") {
return &http.Response{
StatusCode: http.StatusOK,
Body: io.NopCloser(bytes.NewBufferString(
`{}`,
)),
}, nil
}

return nil, errors.New("invalid URL")
},
}
Expand Down Expand Up @@ -70,14 +108,59 @@ func TestDashboardEntriesTreeSuccess(t *testing.T) {
rr, cleanup := setupDashboardEntriesTreeTest()
defer cleanup()

req, err := http.NewRequest("GET", "/?app-token=test-token", nil)
jwtParse = func(tokenString string, keyFunc jwt.Keyfunc, options ...jwt.ParserOption) (*jwt.Token, error) {
key := &jwt.Token{Valid: true}
_, err := keyFunc(key)
assert.NoError(t, err)

return key, nil
}

req, err := http.NewRequest("GET", "/?app-token=some.test.token", nil)
assert.NoError(t, err)

DashboardEntriesTree(rr, req)
assert.Equal(t, http.StatusOK, rr.Code)
assert.NotEmpty(t, rr.Body.String())
}

func TestDashboardEntriesTreeErrParsePublicKeyFromPem(t *testing.T) {
rr, cleanup := setupDashboardEntriesTreeTest()
defer cleanup()

jwtParse = func(tokenString string, keyFunc jwt.Keyfunc, options ...jwt.ParserOption) (*jwt.Token, error) {
_, err := keyFunc(nil)
assert.EqualError(t, err, "cannot parse token")

return nil, errors.New("")
}

jwtParseRSAPublicKeyFromPEM = func(key []byte) (*rsa.PublicKey, error) {
return nil, errors.New("cannot parse token")
}

req, err := http.NewRequest("GET", "/?app-token=test-token", nil)
assert.NoError(t, err)

DashboardEntriesTree(rr, req)
assert.Equal(t, http.StatusForbidden, rr.Code)
}

func TestDashboardEntriesTreeErrInvalidPayload(t *testing.T) {
rr, cleanup := setupDashboardEntriesTreeTest()
defer cleanup()

jwtParse = func(tokenString string, keyFunc jwt.Keyfunc, options ...jwt.ParserOption) (*jwt.Token, error) {
return &jwt.Token{Valid: false}, nil
}

req, err := http.NewRequest("GET", "/?app-token=test-token", nil)
assert.NoError(t, err)

DashboardEntriesTree(rr, req)
assert.Equal(t, http.StatusForbidden, rr.Code)
}

func TestDashboardEntriesTreeErrNoToken(t *testing.T) {
rr, cleanup := setupDashboardEntriesTreeTest()
defer cleanup()
Expand Down Expand Up @@ -137,3 +220,76 @@ func TestDashboardEntriesTreeErrGetPublicKey(t *testing.T) {
DashboardEntriesTree(rr, req)
assert.Equal(t, http.StatusForbidden, rr.Code)
}

func TestDashboardEntriesTreeErrJwtParseErr(t *testing.T) {
rr, cleanup := setupDashboardEntriesTreeTest()
defer cleanup()

jwtParse = jwt.Parse

req, err := http.NewRequest("GET", "/?app-token=bogus-token", nil)
assert.NoError(t, err)

DashboardEntriesTree(rr, req)
assert.Equal(t, http.StatusForbidden, rr.Code)
}

func TestDashboardEntriesTreeErrJwtParse(t *testing.T) {
rr, cleanup := setupDashboardEntriesTreeTest()
defer cleanup()

csSdkGetUrl = func(useManagementToken bool) string {
return "bogus"
}

req, err := http.NewRequest("GET", "/?app-token=bogus-token", nil)
assert.NoError(t, err)

DashboardEntriesTree(rr, req)
assert.Equal(t, http.StatusForbidden, rr.Code)
}

func TestDashboardEntriesTreeErrBody(t *testing.T) {
rr, cleanup := setupDashboardEntriesTreeTest()
defer cleanup()

csSdkGetUrl = func(useManagementToken bool) string {
return "nil-body"
}

req, err := http.NewRequest("GET", "/?app-token=bogus-token", nil)
assert.NoError(t, err)

DashboardEntriesTree(rr, req)
assert.Equal(t, http.StatusForbidden, rr.Code)
}

func TestDashboardEntriesTreeErrJsonUnmarshal(t *testing.T) {
rr, cleanup := setupDashboardEntriesTreeTest()
defer cleanup()

csSdkGetUrl = func(useManagementToken bool) string {
return "json-err"
}

req, err := http.NewRequest("GET", "/?app-token=bogus-token", nil)
assert.NoError(t, err)

DashboardEntriesTree(rr, req)
assert.Equal(t, http.StatusForbidden, rr.Code)
}

func TestDashboardEntriesTreeErrNoSigningKey(t *testing.T) {
rr, cleanup := setupDashboardEntriesTreeTest()
defer cleanup()

csSdkGetUrl = func(useManagementToken bool) string {
return "json-empty"
}

req, err := http.NewRequest("GET", "/?app-token=bogus-token", nil)
assert.NoError(t, err)

DashboardEntriesTree(rr, req)
assert.Equal(t, http.StatusForbidden, rr.Code)
}

0 comments on commit 2814a38

Please sign in to comment.