user_test.go 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294
  1. package controller
  2. import (
  3. "testing"
  4. "github.com/gravitl/netmaker/logic"
  5. "github.com/gravitl/netmaker/models"
  6. "github.com/stretchr/testify/assert"
  7. )
  8. func deleteAllUsers() {
  9. users, _ := logic.GetUsers()
  10. for _, user := range users {
  11. logic.DeleteUser(user.UserName)
  12. }
  13. }
  14. func TestHasAdmin(t *testing.T) {
  15. //delete all current users
  16. initialize()
  17. users, _ := logic.GetUsers()
  18. for _, user := range users {
  19. success, err := logic.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 := logic.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, nil}
  30. err := logic.CreateUser(&user)
  31. assert.Nil(t, err)
  32. found, err := logic.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, nil}
  38. err := logic.CreateUser(&user)
  39. assert.Nil(t, err)
  40. found, err := logic.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, nil}
  46. err := logic.CreateUser(&user)
  47. assert.Nil(t, err)
  48. found, err := logic.HasAdmin()
  49. assert.Nil(t, err)
  50. assert.True(t, found)
  51. })
  52. }
  53. func TestCreateUser(t *testing.T) {
  54. initialize()
  55. deleteAllUsers()
  56. user := models.User{"admin", "password", nil, true, nil}
  57. t.Run("NoUser", func(t *testing.T) {
  58. err := logic.CreateUser(&user)
  59. assert.Nil(t, err)
  60. })
  61. t.Run("UserExists", func(t *testing.T) {
  62. err := logic.CreateUser(&user)
  63. assert.NotNil(t, err)
  64. assert.EqualError(t, err, "user exists")
  65. })
  66. }
  67. func TestCreateAdmin(t *testing.T) {
  68. initialize()
  69. deleteAllUsers()
  70. var user models.User
  71. t.Run("NoAdmin", func(t *testing.T) {
  72. user.UserName = "admin"
  73. user.Password = "password"
  74. err := logic.CreateAdmin(&user)
  75. assert.Nil(t, err)
  76. })
  77. t.Run("AdminExists", func(t *testing.T) {
  78. user.UserName = "admin2"
  79. user.Password = "password1"
  80. err := logic.CreateAdmin(&user)
  81. assert.EqualError(t, err, "admin user already exists")
  82. })
  83. }
  84. func TestDeleteUser(t *testing.T) {
  85. initialize()
  86. deleteAllUsers()
  87. t.Run("NonExistent User", func(t *testing.T) {
  88. deleted, err := logic.DeleteUser("admin")
  89. assert.EqualError(t, err, "user does not exist")
  90. assert.False(t, deleted)
  91. })
  92. t.Run("Existing User", func(t *testing.T) {
  93. user := models.User{"admin", "password", nil, true, nil}
  94. logic.CreateUser(&user)
  95. deleted, err := logic.DeleteUser("admin")
  96. assert.Nil(t, err)
  97. assert.True(t, deleted)
  98. })
  99. }
  100. func TestValidateUser(t *testing.T) {
  101. initialize()
  102. var user models.User
  103. t.Run("Valid Create", func(t *testing.T) {
  104. user.UserName = "admin"
  105. user.Password = "validpass"
  106. err := logic.ValidateUser(&user)
  107. assert.Nil(t, err)
  108. })
  109. t.Run("Valid Update", func(t *testing.T) {
  110. user.UserName = "admin"
  111. user.Password = "password"
  112. err := logic.ValidateUser(&user)
  113. assert.Nil(t, err)
  114. })
  115. t.Run("Invalid UserName", func(t *testing.T) {
  116. t.Skip()
  117. user.UserName = "*invalid"
  118. err := logic.ValidateUser(&user)
  119. assert.Error(t, err)
  120. //assert.Contains(t, err.Error(), "Field validation for 'UserName' failed")
  121. })
  122. t.Run("Short UserName", func(t *testing.T) {
  123. t.Skip()
  124. user.UserName = "1"
  125. err := logic.ValidateUser(&user)
  126. assert.NotNil(t, err)
  127. //assert.Contains(t, err.Error(), "Field validation for 'UserName' failed")
  128. })
  129. t.Run("Empty UserName", func(t *testing.T) {
  130. t.Skip()
  131. user.UserName = ""
  132. err := logic.ValidateUser(&user)
  133. assert.EqualError(t, err, "some string")
  134. //assert.Contains(t, err.Error(), "Field validation for 'UserName' failed")
  135. })
  136. t.Run("EmptyPassword", func(t *testing.T) {
  137. user.Password = ""
  138. err := logic.ValidateUser(&user)
  139. assert.EqualError(t, err, "Key: 'User.Password' Error:Field validation for 'Password' failed on the 'required' tag")
  140. })
  141. t.Run("ShortPassword", func(t *testing.T) {
  142. user.Password = "123"
  143. err := logic.ValidateUser(&user)
  144. assert.EqualError(t, err, "Key: 'User.Password' Error:Field validation for 'Password' failed on the 'min' tag")
  145. })
  146. }
  147. func TestGetUser(t *testing.T) {
  148. initialize()
  149. deleteAllUsers()
  150. t.Run("NonExistantUser", func(t *testing.T) {
  151. admin, err := logic.GetUser("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, nil}
  157. logic.CreateUser(&user)
  158. admin, err := logic.GetUser("admin")
  159. assert.Nil(t, err)
  160. assert.Equal(t, user.UserName, admin.UserName)
  161. })
  162. }
  163. func TestGetUsers(t *testing.T) {
  164. initialize()
  165. deleteAllUsers()
  166. t.Run("NonExistantUser", func(t *testing.T) {
  167. admin, err := logic.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, nil}
  173. logic.CreateUser(&user)
  174. admins, err := logic.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, nil}
  180. logic.CreateUser(&user)
  181. admins, err := logic.GetUsers()
  182. assert.Nil(t, err)
  183. for _, u := range admins {
  184. if u.UserName == "admin" {
  185. assert.Equal(t, "admin", u.UserName)
  186. } else {
  187. assert.Equal(t, user.UserName, u.UserName)
  188. }
  189. }
  190. })
  191. }
  192. func TestUpdateUser(t *testing.T) {
  193. initialize()
  194. deleteAllUsers()
  195. user := models.User{"admin", "password", nil, true, nil}
  196. newuser := models.User{"hello", "world", []string{"wirecat, netmaker"}, true, []string{}}
  197. t.Run("NonExistantUser", func(t *testing.T) {
  198. admin, err := logic.UpdateUser(&newuser, &user)
  199. assert.EqualError(t, err, "could not find any records")
  200. assert.Equal(t, "", admin.UserName)
  201. })
  202. t.Run("UserExists", func(t *testing.T) {
  203. logic.CreateUser(&user)
  204. admin, err := logic.UpdateUser(&newuser, &user)
  205. assert.Nil(t, err)
  206. assert.Equal(t, newuser.UserName, admin.UserName)
  207. })
  208. }
  209. // func TestValidateUserToken(t *testing.T) {
  210. // t.Run("EmptyToken", func(t *testing.T) {
  211. // err := ValidateUserToken("", "", false)
  212. // assert.NotNil(t, err)
  213. // assert.Equal(t, "Missing Auth Token.", err.Error())
  214. // })
  215. // t.Run("InvalidToken", func(t *testing.T) {
  216. // err := ValidateUserToken("Bearer: badtoken", "", false)
  217. // assert.NotNil(t, err)
  218. // assert.Equal(t, "Error Verifying Auth Token", err.Error())
  219. // })
  220. // t.Run("InvalidUser", func(t *testing.T) {
  221. // t.Skip()
  222. // err := ValidateUserToken("Bearer: secretkey", "baduser", false)
  223. // assert.NotNil(t, err)
  224. // assert.Equal(t, "Error Verifying Auth Token", err.Error())
  225. // //need authorization
  226. // })
  227. // t.Run("ValidToken", func(t *testing.T) {
  228. // err := ValidateUserToken("Bearer: secretkey", "", true)
  229. // assert.Nil(t, err)
  230. // })
  231. // }
  232. func TestVerifyAuthRequest(t *testing.T) {
  233. initialize()
  234. deleteAllUsers()
  235. var authRequest models.UserAuthParams
  236. t.Run("EmptyUserName", func(t *testing.T) {
  237. authRequest.UserName = ""
  238. authRequest.Password = "Password"
  239. jwt, err := logic.VerifyAuthRequest(authRequest)
  240. assert.Equal(t, "", jwt)
  241. assert.EqualError(t, err, "username can't be empty")
  242. })
  243. t.Run("EmptyPassword", func(t *testing.T) {
  244. authRequest.UserName = "admin"
  245. authRequest.Password = ""
  246. jwt, err := logic.VerifyAuthRequest(authRequest)
  247. assert.Equal(t, "", jwt)
  248. assert.EqualError(t, err, "password can't be empty")
  249. })
  250. t.Run("NonExistantUser", func(t *testing.T) {
  251. authRequest.UserName = "admin"
  252. authRequest.Password = "password"
  253. jwt, err := logic.VerifyAuthRequest(authRequest)
  254. assert.Equal(t, "", jwt)
  255. assert.EqualError(t, err, "error retrieving user from db: could not find any records")
  256. })
  257. t.Run("Non-Admin", func(t *testing.T) {
  258. user := models.User{"nonadmin", "somepass", nil, false, []string{}}
  259. logic.CreateUser(&user)
  260. authRequest := models.UserAuthParams{"nonadmin", "somepass"}
  261. jwt, err := logic.VerifyAuthRequest(authRequest)
  262. assert.NotNil(t, jwt)
  263. assert.Nil(t, err)
  264. })
  265. t.Run("WrongPassword", func(t *testing.T) {
  266. user := models.User{"admin", "password", nil, false, []string{}}
  267. logic.CreateUser(&user)
  268. authRequest := models.UserAuthParams{"admin", "badpass"}
  269. jwt, err := logic.VerifyAuthRequest(authRequest)
  270. assert.Equal(t, "", jwt)
  271. assert.EqualError(t, err, "incorrect credentials")
  272. })
  273. t.Run("Success", func(t *testing.T) {
  274. authRequest := models.UserAuthParams{"admin", "password"}
  275. jwt, err := logic.VerifyAuthRequest(authRequest)
  276. assert.Nil(t, err)
  277. assert.NotNil(t, jwt)
  278. })
  279. }