userHttpController_test.go 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289
  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 TestGetUserInternal(t *testing.T) {
  148. database.InitializeDatabase()
  149. deleteAllUsers()
  150. t.Run("NonExistantUser", func(t *testing.T) {
  151. admin, err := GetUserInternal("admin")
  152. assert.EqualError(t, err, "could not find any records")
  153. assert.Equal(t, "", admin.UserName)
  154. })
  155. t.Run("UserExisits", func(t *testing.T) {
  156. user := models.User{"admin", "password", nil, true}
  157. CreateUser(user)
  158. admin, err := GetUserInternal("admin")
  159. assert.Nil(t, err)
  160. assert.Equal(t, user.UserName, admin.UserName)
  161. })
  162. }
  163. func TestGetUsers(t *testing.T) {
  164. database.InitializeDatabase()
  165. deleteAllUsers()
  166. t.Run("NonExistantUser", func(t *testing.T) {
  167. admin, err := GetUsers()
  168. assert.EqualError(t, err, "could not find any records")
  169. assert.Equal(t, []models.ReturnUser(nil), admin)
  170. })
  171. t.Run("UserExisits", func(t *testing.T) {
  172. user := models.User{"admin", "password", nil, true}
  173. CreateUser(user)
  174. admins, err := GetUsers()
  175. assert.Nil(t, err)
  176. assert.Equal(t, user.UserName, admins[0].UserName)
  177. })
  178. t.Run("MulipleUsers", func(t *testing.T) {
  179. user := models.User{"user", "password", nil, true}
  180. CreateUser(user)
  181. admins, err := GetUsers()
  182. assert.Nil(t, err)
  183. assert.Equal(t, "admin", admins[0].UserName)
  184. assert.Equal(t, user.UserName, admins[1].UserName)
  185. })
  186. }
  187. func TestUpdateUser(t *testing.T) {
  188. database.InitializeDatabase()
  189. deleteAllUsers()
  190. user := models.User{"admin", "password", nil, true}
  191. newuser := models.User{"hello", "world", []string{"wirecat, netmaker"}, true}
  192. t.Run("NonExistantUser", func(t *testing.T) {
  193. admin, err := UpdateUser(newuser, user)
  194. assert.EqualError(t, err, "could not find any records")
  195. assert.Equal(t, "", admin.UserName)
  196. })
  197. t.Run("UserExisits", func(t *testing.T) {
  198. CreateUser(user)
  199. admin, err := UpdateUser(newuser, user)
  200. assert.Nil(t, err)
  201. assert.Equal(t, newuser.UserName, admin.UserName)
  202. })
  203. }
  204. func TestValidateUserToken(t *testing.T) {
  205. t.Run("EmptyToken", func(t *testing.T) {
  206. err := ValidateUserToken("", "", false)
  207. assert.NotNil(t, err)
  208. assert.Equal(t, "Missing Auth Token.", err.Error())
  209. })
  210. t.Run("InvalidToken", func(t *testing.T) {
  211. err := ValidateUserToken("Bearer: badtoken", "", false)
  212. assert.NotNil(t, err)
  213. assert.Equal(t, "Error Verifying Auth Token", err.Error())
  214. })
  215. t.Run("InvalidUser", func(t *testing.T) {
  216. t.Skip()
  217. err := ValidateUserToken("Bearer: secretkey", "baduser", false)
  218. assert.NotNil(t, err)
  219. assert.Equal(t, "Error Verifying Auth Token", err.Error())
  220. //need authorization
  221. })
  222. t.Run("ValidToken", func(t *testing.T) {
  223. err := ValidateUserToken("Bearer: secretkey", "", true)
  224. assert.Nil(t, err)
  225. })
  226. }
  227. func TestVerifyAuthRequest(t *testing.T) {
  228. database.InitializeDatabase()
  229. deleteAllUsers()
  230. var authRequest models.UserAuthParams
  231. t.Run("EmptyUserName", func(t *testing.T) {
  232. authRequest.UserName = ""
  233. authRequest.Password = "Password"
  234. jwt, err := VerifyAuthRequest(authRequest)
  235. assert.Equal(t, "", jwt)
  236. assert.EqualError(t, err, "username can't be empty")
  237. })
  238. t.Run("EmptyPassword", func(t *testing.T) {
  239. authRequest.UserName = "admin"
  240. authRequest.Password = ""
  241. jwt, err := VerifyAuthRequest(authRequest)
  242. assert.Equal(t, "", jwt)
  243. assert.EqualError(t, err, "password can't be empty")
  244. })
  245. t.Run("NonExistantUser", func(t *testing.T) {
  246. authRequest.UserName = "admin"
  247. authRequest.Password = "password"
  248. jwt, err := VerifyAuthRequest(authRequest)
  249. assert.Equal(t, "", jwt)
  250. assert.EqualError(t, err, "incorrect credentials")
  251. })
  252. t.Run("Non-Admin", func(t *testing.T) {
  253. user := models.User{"nonadmin", "somepass", nil, false}
  254. CreateUser(user)
  255. authRequest := models.UserAuthParams{"nonadmin", "somepass"}
  256. jwt, err := VerifyAuthRequest(authRequest)
  257. assert.NotNil(t, jwt)
  258. assert.Nil(t, err)
  259. })
  260. t.Run("WrongPassword", func(t *testing.T) {
  261. user := models.User{"admin", "password", nil, false}
  262. CreateUser(user)
  263. authRequest := models.UserAuthParams{"admin", "badpass"}
  264. jwt, err := VerifyAuthRequest(authRequest)
  265. assert.Equal(t, "", jwt)
  266. assert.EqualError(t, err, "incorrect credentials")
  267. })
  268. t.Run("Success", func(t *testing.T) {
  269. authRequest := models.UserAuthParams{"admin", "password"}
  270. jwt, err := VerifyAuthRequest(authRequest)
  271. assert.Nil(t, err)
  272. assert.NotNil(t, jwt)
  273. })
  274. }