userHttpController_test.go 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  1. package controller
  2. import (
  3. "testing"
  4. "github.com/gravitl/netmaker/database"
  5. "github.com/gravitl/netmaker/models"
  6. "github.com/stretchr/testify/assert"
  7. )
  8. func deleteAllUsers() {
  9. users, _ := GetUsers()
  10. for _, user := range users {
  11. DeleteUser(user.UserName)
  12. }
  13. }
  14. func TestHasAdmin(t *testing.T) {
  15. //delete all current users
  16. database.InitializeDatabase()
  17. users, _ := GetUsers()
  18. for _, user := range users {
  19. success, err := DeleteUser(user.UserName)
  20. assert.Nil(t, err)
  21. assert.True(t, success)
  22. }
  23. t.Run("NoUser", func(t *testing.T) {
  24. found, err := HasAdmin()
  25. assert.Nil(t, err)
  26. assert.False(t, found)
  27. })
  28. t.Run("No admin user", func(t *testing.T) {
  29. var user = models.User{"noadmin", "password", nil, false}
  30. _, err := CreateUser(user)
  31. assert.Nil(t, err)
  32. found, err := HasAdmin()
  33. assert.Nil(t, err)
  34. assert.False(t, found)
  35. })
  36. t.Run("admin user", func(t *testing.T) {
  37. var user = models.User{"admin", "password", nil, true}
  38. _, err := CreateUser(user)
  39. assert.Nil(t, err)
  40. found, err := HasAdmin()
  41. assert.Nil(t, err)
  42. assert.True(t, found)
  43. })
  44. t.Run("multiple admins", func(t *testing.T) {
  45. var user = models.User{"admin1", "password", nil, true}
  46. _, err := CreateUser(user)
  47. assert.Nil(t, err)
  48. found, err := HasAdmin()
  49. assert.Nil(t, err)
  50. assert.True(t, found)
  51. })
  52. }
  53. func TestCreateUser(t *testing.T) {
  54. database.InitializeDatabase()
  55. deleteAllUsers()
  56. user := models.User{"admin", "password", nil, true}
  57. t.Run("NoUser", func(t *testing.T) {
  58. admin, err := CreateUser(user)
  59. assert.Nil(t, err)
  60. assert.Equal(t, user.UserName, admin.UserName)
  61. })
  62. t.Run("UserExists", func(t *testing.T) {
  63. _, err := CreateUser(user)
  64. assert.NotNil(t, err)
  65. assert.EqualError(t, err, "user exists")
  66. })
  67. }
  68. func TestDeleteUser(t *testing.T) {
  69. database.InitializeDatabase()
  70. deleteAllUsers()
  71. t.Run("NonExistent User", func(t *testing.T) {
  72. deleted, err := DeleteUser("admin")
  73. assert.EqualError(t, err, "user does not exist")
  74. assert.False(t, deleted)
  75. })
  76. t.Run("Existing User", func(t *testing.T) {
  77. user := models.User{"admin", "password", nil, true}
  78. CreateUser(user)
  79. deleted, err := DeleteUser("admin")
  80. assert.Nil(t, err)
  81. assert.True(t, deleted)
  82. })
  83. }
  84. func TestValidateUser(t *testing.T) {
  85. database.InitializeDatabase()
  86. var user models.User
  87. t.Run("Valid Create", func(t *testing.T) {
  88. user.UserName = "admin"
  89. user.Password = "validpass"
  90. err := ValidateUser("create", user)
  91. assert.Nil(t, err)
  92. })
  93. t.Run("Valid Update", func(t *testing.T) {
  94. user.UserName = "admin"
  95. user.Password = "password"
  96. err := ValidateUser("update", user)
  97. assert.Nil(t, err)
  98. })
  99. t.Run("Invalid UserName", func(t *testing.T) {
  100. t.Skip()
  101. user.UserName = "*invalid"
  102. err := ValidateUser("create", user)
  103. assert.Error(t, err)
  104. //assert.Contains(t, err.Error(), "Field validation for 'UserName' failed")
  105. })
  106. t.Run("Short UserName", func(t *testing.T) {
  107. t.Skip()
  108. user.UserName = "1"
  109. err := ValidateUser("create", user)
  110. assert.NotNil(t, err)
  111. //assert.Contains(t, err.Error(), "Field validation for 'UserName' failed")
  112. })
  113. t.Run("Empty UserName", func(t *testing.T) {
  114. t.Skip()
  115. user.UserName = ""
  116. err := ValidateUser("create", user)
  117. assert.EqualError(t, err, "some string")
  118. //assert.Contains(t, err.Error(), "Field validation for 'UserName' failed")
  119. })
  120. t.Run("EmptyPassword", func(t *testing.T) {
  121. user.Password = ""
  122. err := ValidateUser("create", user)
  123. assert.EqualError(t, err, "Key: 'User.Password' Error:Field validation for 'Password' failed on the 'required' tag")
  124. })
  125. t.Run("ShortPassword", func(t *testing.T) {
  126. user.Password = "123"
  127. err := ValidateUser("create", user)
  128. assert.EqualError(t, err, "Key: 'User.Password' Error:Field validation for 'Password' failed on the 'min' tag")
  129. })
  130. }
  131. func TestGetUser(t *testing.T) {
  132. database.InitializeDatabase()
  133. deleteAllUsers()
  134. t.Run("NonExistantUser", func(t *testing.T) {
  135. admin, err := GetUser("admin")
  136. assert.EqualError(t, err, "could not find any records")
  137. assert.Equal(t, "", admin.UserName)
  138. })
  139. t.Run("UserExisits", func(t *testing.T) {
  140. user := models.User{"admin", "password", nil, true}
  141. CreateUser(user)
  142. admin, err := GetUser("admin")
  143. assert.Nil(t, err)
  144. assert.Equal(t, user.UserName, admin.UserName)
  145. })
  146. }
  147. func TestUpdateUser(t *testing.T) {
  148. database.InitializeDatabase()
  149. deleteAllUsers()
  150. user := models.User{"admin", "password", nil, true}
  151. newuser := models.User{"hello", "world", []string{"wirecat, netmaker"}, true}
  152. t.Run("NonExistantUser", func(t *testing.T) {
  153. admin, err := UpdateUser(newuser, user)
  154. assert.EqualError(t, err, "could not find any records")
  155. assert.Equal(t, "", admin.UserName)
  156. })
  157. t.Run("UserExisits", func(t *testing.T) {
  158. CreateUser(user)
  159. admin, err := UpdateUser(newuser, user)
  160. assert.Nil(t, err)
  161. assert.Equal(t, newuser.UserName, admin.UserName)
  162. })
  163. }
  164. func TestValidateUserToken(t *testing.T) {
  165. t.Run("EmptyToken", func(t *testing.T) {
  166. err := ValidateUserToken("", "", false)
  167. assert.NotNil(t, err)
  168. assert.Equal(t, "Missing Auth Token.", err.Error())
  169. })
  170. t.Run("InvalidToken", func(t *testing.T) {
  171. err := ValidateUserToken("Bearer: badtoken", "", false)
  172. assert.NotNil(t, err)
  173. assert.Equal(t, "Error Verifying Auth Token", err.Error())
  174. })
  175. t.Run("InvalidUser", func(t *testing.T) {
  176. t.Skip()
  177. err := ValidateUserToken("Bearer: secretkey", "baduser", false)
  178. assert.NotNil(t, err)
  179. assert.Equal(t, "Error Verifying Auth Token", err.Error())
  180. //need authorization
  181. })
  182. t.Run("ValidToken", func(t *testing.T) {
  183. err := ValidateUserToken("Bearer: secretkey", "", true)
  184. assert.Nil(t, err)
  185. })
  186. }
  187. func TestVerifyAuthRequest(t *testing.T) {
  188. database.InitializeDatabase()
  189. deleteAllUsers()
  190. var authRequest models.UserAuthParams
  191. t.Run("EmptyUserName", func(t *testing.T) {
  192. authRequest.UserName = ""
  193. authRequest.Password = "Password"
  194. jwt, err := VerifyAuthRequest(authRequest)
  195. assert.Equal(t, "", jwt)
  196. assert.EqualError(t, err, "username can't be empty")
  197. })
  198. t.Run("EmptyPassword", func(t *testing.T) {
  199. authRequest.UserName = "admin"
  200. authRequest.Password = ""
  201. jwt, err := VerifyAuthRequest(authRequest)
  202. assert.Equal(t, "", jwt)
  203. assert.EqualError(t, err, "password can't be empty")
  204. })
  205. t.Run("NonExistantUser", func(t *testing.T) {
  206. authRequest.UserName = "admin"
  207. authRequest.Password = "password"
  208. jwt, err := VerifyAuthRequest(authRequest)
  209. assert.Equal(t, "", jwt)
  210. assert.EqualError(t, err, "user admin not found")
  211. })
  212. t.Run("Non-Admin", func(t *testing.T) {
  213. user := models.User{"nonadmin", "somepass", nil, false}
  214. CreateUser(user)
  215. authRequest := models.UserAuthParams{"nonadmin", "somepass"}
  216. jwt, err := VerifyAuthRequest(authRequest)
  217. assert.NotNil(t, jwt)
  218. assert.Nil(t, err)
  219. })
  220. t.Run("WrongPassword", func(t *testing.T) {
  221. user := models.User{"admin", "password", nil, false}
  222. CreateUser(user)
  223. authRequest := models.UserAuthParams{"admin", "badpass"}
  224. jwt, err := VerifyAuthRequest(authRequest)
  225. assert.Equal(t, "", jwt)
  226. assert.EqualError(t, err, "wrong password")
  227. })
  228. t.Run("Success", func(t *testing.T) {
  229. authRequest := models.UserAuthParams{"admin", "password"}
  230. jwt, err := VerifyAuthRequest(authRequest)
  231. assert.Nil(t, err)
  232. assert.NotNil(t, jwt)
  233. })
  234. }