mirror of
https://github.com/gravitl/netmaker.git
synced 2025-10-04 10:54:24 +08:00
updated test/user tests
This commit is contained in:
parent
2e5511a0ab
commit
c533bf7183
3 changed files with 45 additions and 33 deletions
|
@ -50,13 +50,13 @@ func authenticateUser(response http.ResponseWriter, request *http.Request) {
|
||||||
|
|
||||||
jwt, err := VerifyAuthRequest(authRequest)
|
jwt, err := VerifyAuthRequest(authRequest)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
errorResponse.Code = http.StatusBadRequest
|
returnErrorResponse(response, request, formatError(err, "badrequest"))
|
||||||
errorResponse.Message = err.Error()
|
return
|
||||||
returnErrorResponse(response, request, errorResponse)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if jwt == "" {
|
if jwt == "" {
|
||||||
returnErrorResponse(response, request, errorResponse)
|
//very unlikely that err is !nil and no jwt returned, but handle it anyways.
|
||||||
|
returnErrorResponse(response, request, formatError(errors.New("No token returned"), "internal"))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -122,18 +122,13 @@ func VerifyAuthRequest(authRequest models.UserAuthParams) (string, error) {
|
||||||
//TODO: Consider better RBAC implementations
|
//TODO: Consider better RBAC implementations
|
||||||
func authorizeUser(next http.Handler) http.HandlerFunc {
|
func authorizeUser(next http.Handler) http.HandlerFunc {
|
||||||
return func(w http.ResponseWriter, r *http.Request) {
|
return func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
var errorResponse = models.ErrorResponse{
|
|
||||||
Code: http.StatusInternalServerError, Message: "W1R3: It's not you it's me.",
|
|
||||||
}
|
|
||||||
|
|
||||||
w.Header().Set("Content-Type", "application/json")
|
w.Header().Set("Content-Type", "application/json")
|
||||||
|
|
||||||
//get the auth token
|
//get the auth token
|
||||||
bearerToken := r.Header.Get("Authorization")
|
bearerToken := r.Header.Get("Authorization")
|
||||||
err := ValidateToken(bearerToken)
|
err := ValidateToken(bearerToken)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
returnErrorResponse(w, r, errorResponse)
|
returnErrorResponse(w, r, formatError(err, "unauthorized"))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
next.ServeHTTP(w, r)
|
next.ServeHTTP(w, r)
|
||||||
|
@ -286,8 +281,9 @@ func createAdmin(w http.ResponseWriter, r *http.Request) {
|
||||||
_ = json.NewDecoder(r.Body).Decode(&admin)
|
_ = json.NewDecoder(r.Body).Decode(&admin)
|
||||||
|
|
||||||
admin, err := CreateUser(admin)
|
admin, err := CreateUser(admin)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
json.NewEncoder(w).Encode(err)
|
returnErrorResponse(w, r, formatError(err, "badrequest"))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -377,7 +373,7 @@ func updateUser(w http.ResponseWriter, r *http.Request) {
|
||||||
user, err = UpdateUser(userchange, user)
|
user, err = UpdateUser(userchange, user)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
json.NewEncoder(w).Encode(err)
|
returnErrorResponse(w, r, formatError(err, "badrequest"))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,7 @@ func TestMain(m *testing.M) {
|
||||||
func TestHasAdmin(t *testing.T) {
|
func TestHasAdmin(t *testing.T) {
|
||||||
_, err := DeleteUser("admin")
|
_, err := DeleteUser("admin")
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
user := models.User{"admin", "admin", true}
|
user := models.User{"admin", "password", true}
|
||||||
_, err = CreateUser(user)
|
_, err = CreateUser(user)
|
||||||
assert.Nil(t, err, err)
|
assert.Nil(t, err, err)
|
||||||
t.Run("AdminExists", func(t *testing.T) {
|
t.Run("AdminExists", func(t *testing.T) {
|
||||||
|
@ -49,7 +49,7 @@ func TestHasAdmin(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestCreateUser(t *testing.T) {
|
func TestCreateUser(t *testing.T) {
|
||||||
user := models.User{"admin", "admin", true}
|
user := models.User{"admin", "password", true}
|
||||||
t.Run("NoUser", func(t *testing.T) {
|
t.Run("NoUser", func(t *testing.T) {
|
||||||
_, err := DeleteUser("admin")
|
_, err := DeleteUser("admin")
|
||||||
assert.Nil(t, err, err)
|
assert.Nil(t, err, err)
|
||||||
|
@ -68,7 +68,7 @@ func TestDeleteUser(t *testing.T) {
|
||||||
hasadmin, err := HasAdmin()
|
hasadmin, err := HasAdmin()
|
||||||
assert.Nil(t, err, err)
|
assert.Nil(t, err, err)
|
||||||
if !hasadmin {
|
if !hasadmin {
|
||||||
user := models.User{"admin", "admin", true}
|
user := models.User{"admin", "pasword", true}
|
||||||
_, err := CreateUser(user)
|
_, err := CreateUser(user)
|
||||||
assert.Nil(t, err, err)
|
assert.Nil(t, err, err)
|
||||||
}
|
}
|
||||||
|
@ -95,7 +95,7 @@ func TestValidateUser(t *testing.T) {
|
||||||
})
|
})
|
||||||
t.Run("ValidUpdate", func(t *testing.T) {
|
t.Run("ValidUpdate", func(t *testing.T) {
|
||||||
user.UserName = "admin"
|
user.UserName = "admin"
|
||||||
user.Password = "admin"
|
user.Password = "password"
|
||||||
err := ValidateUser("update", user)
|
err := ValidateUser("update", user)
|
||||||
assert.Nil(t, err, err)
|
assert.Nil(t, err, err)
|
||||||
})
|
})
|
||||||
|
@ -122,10 +122,14 @@ func TestValidateUser(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGetUser(t *testing.T) {
|
func TestGetUser(t *testing.T) {
|
||||||
user := models.User{"admin", "admin", true}
|
|
||||||
t.Run("UserExisits", func(t *testing.T) {
|
t.Run("UserExisits", func(t *testing.T) {
|
||||||
_, err := CreateUser(user)
|
user := models.User{"admin", "password", true}
|
||||||
|
hasadmin, err := HasAdmin()
|
||||||
assert.Nil(t, err, err)
|
assert.Nil(t, err, err)
|
||||||
|
if !hasadmin {
|
||||||
|
_, err := CreateUser(user)
|
||||||
|
assert.Nil(t, err, err)
|
||||||
|
}
|
||||||
admin, err := GetUser("admin")
|
admin, err := GetUser("admin")
|
||||||
assert.Nil(t, err, err)
|
assert.Nil(t, err, err)
|
||||||
assert.Equal(t, user.UserName, admin.UserName)
|
assert.Equal(t, user.UserName, admin.UserName)
|
||||||
|
@ -140,7 +144,7 @@ func TestGetUser(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestUpdateUser(t *testing.T) {
|
func TestUpdateUser(t *testing.T) {
|
||||||
user := models.User{"admin", "admin", true}
|
user := models.User{"admin", "password", true}
|
||||||
newuser := models.User{"hello", "world", true}
|
newuser := models.User{"hello", "world", true}
|
||||||
t.Run("UserExisits", func(t *testing.T) {
|
t.Run("UserExisits", func(t *testing.T) {
|
||||||
_, err := DeleteUser("admin")
|
_, err := DeleteUser("admin")
|
||||||
|
@ -220,7 +224,7 @@ func TestVerifyAuthRequest(t *testing.T) {
|
||||||
})
|
})
|
||||||
t.Run("WrongPassword", func(t *testing.T) {
|
t.Run("WrongPassword", func(t *testing.T) {
|
||||||
_, err := DeleteUser("admin")
|
_, err := DeleteUser("admin")
|
||||||
user := models.User{"admin", "admin", true}
|
user := models.User{"admin", "password", true}
|
||||||
_, err = CreateUser(user)
|
_, err = CreateUser(user)
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
authRequest := models.UserAuthParams{"admin", "badpass"}
|
authRequest := models.UserAuthParams{"admin", "badpass"}
|
||||||
|
@ -230,7 +234,7 @@ func TestVerifyAuthRequest(t *testing.T) {
|
||||||
assert.Equal(t, "Wrong Password", err.Error())
|
assert.Equal(t, "Wrong Password", err.Error())
|
||||||
})
|
})
|
||||||
t.Run("Success", func(t *testing.T) {
|
t.Run("Success", func(t *testing.T) {
|
||||||
authRequest := models.UserAuthParams{"admin", "admin"}
|
authRequest := models.UserAuthParams{"admin", "password"}
|
||||||
jwt, err := VerifyAuthRequest(authRequest)
|
jwt, err := VerifyAuthRequest(authRequest)
|
||||||
assert.Nil(t, err, err)
|
assert.Nil(t, err, err)
|
||||||
assert.NotNil(t, jwt)
|
assert.NotNil(t, jwt)
|
||||||
|
|
|
@ -2,6 +2,7 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"io/ioutil"
|
||||||
"net/http"
|
"net/http"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
@ -38,11 +39,9 @@ func TestAdminCreation(t *testing.T) {
|
||||||
var message models.ErrorResponse
|
var message models.ErrorResponse
|
||||||
err = json.NewDecoder(response.Body).Decode(&message)
|
err = json.NewDecoder(response.Body).Decode(&message)
|
||||||
assert.Nil(t, err, err)
|
assert.Nil(t, err, err)
|
||||||
assert.Equal(t, http.StatusUnauthorized, response.StatusCode)
|
assert.Equal(t, http.StatusBadRequest, response.StatusCode)
|
||||||
assert.Equal(t, http.StatusUnauthorized, message.Code)
|
assert.Equal(t, "Admin already Exists", message.Message)
|
||||||
assert.Equal(t, "W1R3: Admin already exists! ", message.Message)
|
|
||||||
})
|
})
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGetUser(t *testing.T) {
|
func TestGetUser(t *testing.T) {
|
||||||
|
@ -70,12 +69,13 @@ func TestGetUser(t *testing.T) {
|
||||||
assert.Nil(t, err, err)
|
assert.Nil(t, err, err)
|
||||||
assert.Equal(t, http.StatusUnauthorized, response.StatusCode)
|
assert.Equal(t, http.StatusUnauthorized, response.StatusCode)
|
||||||
assert.Equal(t, http.StatusUnauthorized, message.Code)
|
assert.Equal(t, http.StatusUnauthorized, message.Code)
|
||||||
assert.Equal(t, "W1R3: Error Verifying Auth Token.", message.Message)
|
assert.Equal(t, "Error Verifying Auth Token", message.Message)
|
||||||
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestUpdateUser(t *testing.T) {
|
func TestUpdateUser(t *testing.T) {
|
||||||
|
deleteAdmin(t)
|
||||||
if !adminExists(t) {
|
if !adminExists(t) {
|
||||||
addAdmin(t)
|
addAdmin(t)
|
||||||
}
|
}
|
||||||
|
@ -92,7 +92,7 @@ func TestUpdateUser(t *testing.T) {
|
||||||
defer response.Body.Close()
|
defer response.Body.Close()
|
||||||
err = json.NewDecoder(response.Body).Decode(&message)
|
err = json.NewDecoder(response.Body).Decode(&message)
|
||||||
assert.Nil(t, err, err)
|
assert.Nil(t, err, err)
|
||||||
assert.Equal(t, "W1R3: Error Verifying Auth Token.", message.Message)
|
assert.Equal(t, "Error Verifying Auth Token", message.Message)
|
||||||
assert.Equal(t, http.StatusUnauthorized, response.StatusCode)
|
assert.Equal(t, http.StatusUnauthorized, response.StatusCode)
|
||||||
})
|
})
|
||||||
t.Run("UpdateSuccess", func(t *testing.T) {
|
t.Run("UpdateSuccess", func(t *testing.T) {
|
||||||
|
@ -107,6 +107,18 @@ func TestUpdateUser(t *testing.T) {
|
||||||
assert.Equal(t, true, user.IsAdmin)
|
assert.Equal(t, true, user.IsAdmin)
|
||||||
assert.Equal(t, http.StatusOK, response.StatusCode)
|
assert.Equal(t, http.StatusOK, response.StatusCode)
|
||||||
})
|
})
|
||||||
|
t.Run("ShortPassword", func(t *testing.T) {
|
||||||
|
admin.UserName = "user"
|
||||||
|
admin.Password = "123"
|
||||||
|
response, err := api(t, admin, http.MethodPut, "http://localhost:8081/api/users/admin", token)
|
||||||
|
assert.Nil(t, err, err)
|
||||||
|
defer response.Body.Close()
|
||||||
|
message, err := ioutil.ReadAll(response.Body)
|
||||||
|
assert.Nil(t, err, err)
|
||||||
|
assert.Contains(t, string(message), "Field validation for 'Password' failed")
|
||||||
|
assert.Equal(t, http.StatusBadRequest, response.StatusCode)
|
||||||
|
})
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestDeleteUser(t *testing.T) {
|
func TestDeleteUser(t *testing.T) {
|
||||||
|
@ -123,7 +135,7 @@ func TestDeleteUser(t *testing.T) {
|
||||||
assert.Equal(t, http.StatusUnauthorized, response.StatusCode)
|
assert.Equal(t, http.StatusUnauthorized, response.StatusCode)
|
||||||
var message models.ErrorResponse
|
var message models.ErrorResponse
|
||||||
json.NewDecoder(response.Body).Decode(&message)
|
json.NewDecoder(response.Body).Decode(&message)
|
||||||
assert.Equal(t, "W1R3: Error Verifying Auth Token.", message.Message)
|
assert.Equal(t, "Error Verifying Auth Token", message.Message)
|
||||||
assert.Equal(t, http.StatusUnauthorized, response.StatusCode)
|
assert.Equal(t, http.StatusUnauthorized, response.StatusCode)
|
||||||
})
|
})
|
||||||
t.Run("DeleteUser-ValidCredentials", func(t *testing.T) {
|
t.Run("DeleteUser-ValidCredentials", func(t *testing.T) {
|
||||||
|
@ -155,7 +167,7 @@ func TestAuthenticateUser(t *testing.T) {
|
||||||
password: "password",
|
password: "password",
|
||||||
code: http.StatusBadRequest,
|
code: http.StatusBadRequest,
|
||||||
tokenExpected: false,
|
tokenExpected: false,
|
||||||
errMessage: "W1R3: User invaliduser not found.",
|
errMessage: "User invaliduser not found",
|
||||||
},
|
},
|
||||||
AuthorizeTestCase{
|
AuthorizeTestCase{
|
||||||
testname: "empty user",
|
testname: "empty user",
|
||||||
|
@ -163,7 +175,7 @@ func TestAuthenticateUser(t *testing.T) {
|
||||||
password: "password",
|
password: "password",
|
||||||
code: http.StatusBadRequest,
|
code: http.StatusBadRequest,
|
||||||
tokenExpected: false,
|
tokenExpected: false,
|
||||||
errMessage: "W1R3: Username can't be empty",
|
errMessage: "Username can't be empty",
|
||||||
},
|
},
|
||||||
AuthorizeTestCase{
|
AuthorizeTestCase{
|
||||||
testname: "empty password",
|
testname: "empty password",
|
||||||
|
@ -171,15 +183,15 @@ func TestAuthenticateUser(t *testing.T) {
|
||||||
password: "",
|
password: "",
|
||||||
code: http.StatusBadRequest,
|
code: http.StatusBadRequest,
|
||||||
tokenExpected: false,
|
tokenExpected: false,
|
||||||
errMessage: "W1R3: Password can't be empty",
|
errMessage: "Password can't be empty",
|
||||||
},
|
},
|
||||||
AuthorizeTestCase{
|
AuthorizeTestCase{
|
||||||
testname: "Invalid Password",
|
testname: "Invalid Password",
|
||||||
name: "admin",
|
name: "admin",
|
||||||
password: "xxxxxxx",
|
password: "xxxxxxx",
|
||||||
code: http.StatusUnauthorized,
|
code: http.StatusBadRequest,
|
||||||
tokenExpected: false,
|
tokenExpected: false,
|
||||||
errMessage: "W1R3: Wrong Password.",
|
errMessage: "Wrong Password",
|
||||||
},
|
},
|
||||||
AuthorizeTestCase{
|
AuthorizeTestCase{
|
||||||
testname: "Valid User",
|
testname: "Valid User",
|
||||||
|
|
Loading…
Add table
Reference in a new issue