Skip to content

Commit

Permalink
Add user tests (#51)
Browse files Browse the repository at this point in the history
* Add more user tests

* Add more user tests

* Add linebreaks

* Test error conditions

* Dont overwrite err

* Test error conditions for methods with no output

* Actually return errors

* Add linebreaks
  • Loading branch information
sjafferali authored Oct 17, 2023
1 parent 39483de commit 4bbb6ee
Show file tree
Hide file tree
Showing 8 changed files with 311 additions and 10 deletions.
9 changes: 9 additions & 0 deletions pfsenseapi/testdata/addprivilegestouser.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"status": "ok",
"code": 200,
"return": 0,
"message": "Success",
"data": [
"system-xmlrpc-ha-sync"
]
}
9 changes: 9 additions & 0 deletions pfsenseapi/testdata/addusertogroups.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"status": "ok",
"code": 200,
"return": 0,
"message": "Success",
"data": [
"admins"
]
}
6 changes: 6 additions & 0 deletions pfsenseapi/testdata/badjson.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"status": "bad request",
"code": 400,
"return": 5001,
"message": "User does not exist",
"data": []
18 changes: 18 additions & 0 deletions pfsenseapi/testdata/createuser.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"status": "ok",
"code": 200,
"return": 0,
"message": "Success",
"data": {
"uid": "2002",
"scope": "user",
"name": "testing123",
"bcrypt-hash": "$2y$10$JDvXIS.ac5yuO.fI5DEtW.K1Xei3USarsVb22Cj6lq1iAwq1jUfQC",
"priv": [],
"descr": "testing123",
"expires": "10/17/2023",
"cert": [],
"authorizedkeys": "",
"ipsecpsk": ""
}
}
7 changes: 7 additions & 0 deletions pfsenseapi/testdata/error.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"status": "bad request",
"code": 400,
"return": 5001,
"message": "User does not exist",
"data": []
}
4 changes: 2 additions & 2 deletions pfsenseapi/user.go
Original file line number Diff line number Diff line change
Expand Up @@ -255,7 +255,7 @@ func (s UserService) AddUserToGroups(ctx context.Context, username string, group
return err
}

if _, err = s.client.post(ctx, groupMemberEndpoint, nil, jsonData); err != nil {
if _, err := s.client.post(ctx, groupMemberEndpoint, nil, jsonData); err != nil {
return err
}
return nil
Expand Down Expand Up @@ -310,7 +310,7 @@ func (s UserService) AddPrivilegesToUser(ctx context.Context, username string, p
return err
}

if _, err = s.client.post(ctx, privilegeEndpoint, nil, jsonData); err != nil {
if _, err := s.client.post(ctx, privilegeEndpoint, nil, jsonData); err != nil {
return err
}
return nil
Expand Down
224 changes: 216 additions & 8 deletions pfsenseapi/user_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,12 @@ import (
)

func TestUserService_ListGroups(t *testing.T) {
data := mustReadFileString(t, "testdata/listgroups.json")
data := makeResultList(t, mustReadFileString(t, "testdata/listgroups.json"))

handler := func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
_, _ = io.WriteString(w, data)
w.WriteHeader(data.popStatus())
_, _ = io.WriteString(w, data.popResult())
}

server := httptest.NewServer(http.HandlerFunc(handler))
Expand All @@ -25,14 +26,23 @@ func TestUserService_ListGroups(t *testing.T) {
response, err := newClient.User.ListGroups(context.Background())
require.NoError(t, err)
require.Len(t, response, 2)

response, err = newClient.User.ListGroups(context.Background())
require.Error(t, err)
require.Nil(t, response)

response, err = newClient.User.ListGroups(context.Background())
require.Error(t, err)
require.Nil(t, response)
}

func TestUserService_ListUsers(t *testing.T) {
data := mustReadFileString(t, "testdata/listusers.json")
data := makeResultList(t, mustReadFileString(t, "testdata/listusers.json"))

handler := func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
_, _ = io.WriteString(w, data)
w.WriteHeader(data.popStatus())
_, _ = io.WriteString(w, data.popResult())
}

server := httptest.NewServer(http.HandlerFunc(handler))
Expand All @@ -42,14 +52,95 @@ func TestUserService_ListUsers(t *testing.T) {
response, err := newClient.User.ListUsers(context.Background())
require.NoError(t, err)
require.Len(t, response, 2)

response, err = newClient.User.ListUsers(context.Background())
require.Error(t, err)
require.Nil(t, response)

response, err = newClient.User.ListUsers(context.Background())
require.Error(t, err)
require.Nil(t, response)
}

func TestUserService_CreateUser(t *testing.T) {
data := makeResultList(t, mustReadFileString(t, "testdata/createuser.json"))

handler := func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(data.popStatus())
_, _ = io.WriteString(w, data.popResult())
}

server := httptest.NewServer(http.HandlerFunc(handler))
defer server.Close()

newClient := NewClientWithNoAuth(server.URL)
response, err := newClient.User.CreateUser(context.Background(), UserRequest{})
require.NotNil(t, response)
require.NoError(t, err)

response, err = newClient.User.CreateUser(context.Background(), UserRequest{})
require.Nil(t, response)
require.Error(t, err)

response, err = newClient.User.CreateUser(context.Background(), UserRequest{})
require.Nil(t, response)
require.Error(t, err)
}

func TestUserService_UpdateUser(t *testing.T) {
data := makeResultList(t, mustReadFileString(t, "testdata/createuser.json"))

handler := func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(data.popStatus())
_, _ = io.WriteString(w, data.popResult())
}

server := httptest.NewServer(http.HandlerFunc(handler))
defer server.Close()

newClient := NewClientWithNoAuth(server.URL)
response, err := newClient.User.UpdateUser(context.Background(), UserRequest{})
require.NotNil(t, response)
require.NoError(t, err)

response, err = newClient.User.UpdateUser(context.Background(), UserRequest{})
require.Nil(t, response)
require.Error(t, err)

response, err = newClient.User.UpdateUser(context.Background(), UserRequest{})
require.Nil(t, response)
require.Error(t, err)
}

func TestUserService_DeleteUser(t *testing.T) {
data := makeResultList(t, mustReadFileString(t, "testdata/createuser.json"))

handler := func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(data.popStatus())
_, _ = io.WriteString(w, data.popResult())
}

server := httptest.NewServer(http.HandlerFunc(handler))
defer server.Close()

newClient := NewClientWithNoAuth(server.URL)
err := newClient.User.DeleteUser(context.Background(), "testing123")
require.NoError(t, err)

err = newClient.User.DeleteUser(context.Background(), "testing123")
require.Error(t, err)
}

func TestUserService_CreateGroup(t *testing.T) {
data := mustReadFileString(t, "testdata/creategroup.json")
data := makeResultList(t, mustReadFileString(t, "testdata/creategroup.json"))

handler := func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
_, _ = io.WriteString(w, data)
w.WriteHeader(data.popStatus())
_, _ = io.WriteString(w, data.popResult())
}

server := httptest.NewServer(http.HandlerFunc(handler))
Expand All @@ -59,14 +150,23 @@ func TestUserService_CreateGroup(t *testing.T) {
response, err := newClient.User.CreateGroup(context.Background(), GroupRequest{})
require.NotNil(t, response)
require.NoError(t, err)

response, err = newClient.User.CreateGroup(context.Background(), GroupRequest{})
require.Nil(t, response)
require.Error(t, err)

response, err = newClient.User.CreateGroup(context.Background(), GroupRequest{})
require.Nil(t, response)
require.Error(t, err)
}

func TestUserService_UpdateGroup(t *testing.T) {
data := mustReadFileString(t, "testdata/creategroup.json")
data := makeResultList(t, mustReadFileString(t, "testdata/creategroup.json"))

handler := func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
_, _ = io.WriteString(w, data)
w.WriteHeader(data.popStatus())
_, _ = io.WriteString(w, data.popResult())
}

server := httptest.NewServer(http.HandlerFunc(handler))
Expand All @@ -76,4 +176,112 @@ func TestUserService_UpdateGroup(t *testing.T) {
response, err := newClient.User.UpdateGroup(context.Background(), "admin", GroupRequest{})
require.NotNil(t, response)
require.NoError(t, err)

response, err = newClient.User.UpdateGroup(context.Background(), "admin", GroupRequest{})
require.Nil(t, response)
require.Error(t, err)

response, err = newClient.User.UpdateGroup(context.Background(), "admin", GroupRequest{})
require.Nil(t, response)
require.Error(t, err)
}

func TestUserService_DeleteGroup(t *testing.T) {
data := makeResultList(t, mustReadFileString(t, "testdata/creategroup.json"))

handler := func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(data.popStatus())
_, _ = io.WriteString(w, data.popResult())
}

server := httptest.NewServer(http.HandlerFunc(handler))
defer server.Close()

newClient := NewClientWithNoAuth(server.URL)
err := newClient.User.DeleteGroup(context.Background(), "admin")
require.NoError(t, err)

err = newClient.User.DeleteGroup(context.Background(), "admin")
require.Error(t, err)
}

func TestUserService_RemoveUserFromGroup(t *testing.T) {
data := makeResultList(t, mustReadFileString(t, "testdata/addusertogroups.json"))

handler := func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(data.popStatus())
_, _ = io.WriteString(w, data.popResult())
}

server := httptest.NewServer(http.HandlerFunc(handler))
defer server.Close()

newClient := NewClientWithNoAuth(server.URL)
err := newClient.User.RemoveUserFromGroup(context.Background(), "admin", "admins")
require.NoError(t, err)

err = newClient.User.RemoveUserFromGroup(context.Background(), "admin", "admins")
require.Error(t, err)
}

func TestUserService_AddUserToGroups(t *testing.T) {
data := makeResultList(t, mustReadFileString(t, "testdata/addusertogroups.json"))

handler := func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(data.popStatus())
_, _ = io.WriteString(w, data.popResult())
}

server := httptest.NewServer(http.HandlerFunc(handler))
defer server.Close()

newClient := NewClientWithNoAuth(server.URL)
err := newClient.User.AddUserToGroups(context.Background(), "admin", []string{"admins"})
require.NoError(t, err)

err = newClient.User.AddUserToGroups(context.Background(), "admin", []string{"admins"})
require.Error(t, err)
}

func TestUserService_RemovePrivilegeFromUser(t *testing.T) {
data := makeResultList(t, mustReadFileString(t, "testdata/addprivilegestouser.json"))

handler := func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(data.popStatus())
_, _ = io.WriteString(w, data.popResult())
}

server := httptest.NewServer(http.HandlerFunc(handler))
defer server.Close()

newClient := NewClientWithNoAuth(server.URL)
err := newClient.User.RemovePrivilegeFromUser(context.Background(), "admin", "system-xmlrpc-ha-sync")
require.NoError(t, err)

err = newClient.User.RemovePrivilegeFromUser(context.Background(), "admin", "system-xmlrpc-ha-sync")
require.Error(t, err)
}

func TestUserService_AddPrivilegesToUser(t *testing.T) {
data := makeResultList(t, mustReadFileString(t, "testdata/addprivilegestouser.json"))

handler := func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(data.popStatus())
_, _ = io.WriteString(w, data.popResult())
}

server := httptest.NewServer(http.HandlerFunc(handler))
defer server.Close()

newClient := NewClientWithNoAuth(server.URL)
err := newClient.User.AddPrivilegesToUser(context.Background(), "admin", []string{"system-xmlrpc-ha-sync"})
require.NoError(t, err)

err = newClient.User.AddPrivilegesToUser(context.Background(), "admin", []string{"system-xmlrpc-ha-sync"})
require.Error(t, err)
}
44 changes: 44 additions & 0 deletions pfsenseapi/utils_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package pfsenseapi

import (
"net/http"
"testing"
)

func popSlice[K comparable](slice []K, s int) []K {
return append(slice[:s], slice[s+1:]...)
}

type resultList struct {
resultsData []string
resultsStatus []int
}

func (s *resultList) popResult() string {
response := s.resultsData[0]

s.resultsData = popSlice(s.resultsData, 0)
return response
}

func (s *resultList) popStatus() int {
response := s.resultsStatus[0]

s.resultsStatus = popSlice(s.resultsStatus, 0)
return response
}

func makeResultList(t *testing.T, data string) *resultList {
return &resultList{
resultsData: []string{
data,
mustReadFileString(t, "testdata/error.json"),
mustReadFileString(t, "testdata/badjson.json"),
},
resultsStatus: []int{
http.StatusOK,
http.StatusBadRequest,
http.StatusOK,
},
}
}

0 comments on commit 4bbb6ee

Please sign in to comment.