userHttpController_test.go 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309
  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 TestCreateAdmin(t *testing.T) {
  69. database.InitializeDatabase()
  70. deleteAllUsers()
  71. var user models.User
  72. t.Run("NoAdmin", func(t *testing.T) {
  73. user.UserName = "admin"
  74. user.Password = "password"
  75. admin, err := CreateAdmin(user)
  76. assert.Nil(t, err)
  77. assert.Equal(t, user.UserName, admin.UserName)
  78. })
  79. t.Run("AdminExists", func(t *testing.T) {
  80. user.UserName = "admin2"
  81. user.Password = "password1"
  82. admin, err := CreateAdmin(user)
  83. assert.EqualError(t, err, "admin user already exists")
  84. assert.Equal(t, admin, models.User{})
  85. })
  86. }
  87. func TestDeleteUser(t *testing.T) {
  88. database.InitializeDatabase()
  89. deleteAllUsers()
  90. t.Run("NonExistent User", func(t *testing.T) {
  91. deleted, err := DeleteUser("admin")
  92. assert.EqualError(t, err, "user does not exist")
  93. assert.False(t, deleted)
  94. })
  95. t.Run("Existing User", func(t *testing.T) {
  96. user := models.User{"admin", "password", nil, true}
  97. CreateUser(user)
  98. deleted, err := DeleteUser("admin")
  99. assert.Nil(t, err)
  100. assert.True(t, deleted)
  101. })
  102. }
  103. func TestValidateUser(t *testing.T) {
  104. database.InitializeDatabase()
  105. var user models.User
  106. t.Run("Valid Create", func(t *testing.T) {
  107. user.UserName = "admin"
  108. user.Password = "validpass"
  109. err := ValidateUser("create", user)
  110. assert.Nil(t, err)
  111. })
  112. t.Run("Valid Update", func(t *testing.T) {
  113. user.UserName = "admin"
  114. user.Password = "password"
  115. err := ValidateUser("update", user)
  116. assert.Nil(t, err)
  117. })
  118. t.Run("Invalid UserName", func(t *testing.T) {
  119. t.Skip()
  120. user.UserName = "*invalid"
  121. err := ValidateUser("create", user)
  122. assert.Error(t, err)
  123. //assert.Contains(t, err.Error(), "Field validation for 'UserName' failed")
  124. })
  125. t.Run("Short UserName", func(t *testing.T) {
  126. t.Skip()
  127. user.UserName = "1"
  128. err := ValidateUser("create", user)
  129. assert.NotNil(t, err)
  130. //assert.Contains(t, err.Error(), "Field validation for 'UserName' failed")
  131. })
  132. t.Run("Empty UserName", func(t *testing.T) {
  133. t.Skip()
  134. user.UserName = ""
  135. err := ValidateUser("create", user)
  136. assert.EqualError(t, err, "some string")
  137. //assert.Contains(t, err.Error(), "Field validation for 'UserName' failed")
  138. })
  139. t.Run("EmptyPassword", func(t *testing.T) {
  140. user.Password = ""
  141. err := ValidateUser("create", user)
  142. assert.EqualError(t, err, "Key: 'User.Password' Error:Field validation for 'Password' failed on the 'required' tag")
  143. })
  144. t.Run("ShortPassword", func(t *testing.T) {
  145. user.Password = "123"
  146. err := ValidateUser("create", user)
  147. assert.EqualError(t, err, "Key: 'User.Password' Error:Field validation for 'Password' failed on the 'min' tag")
  148. })
  149. }
  150. func TestGetUser(t *testing.T) {
  151. database.InitializeDatabase()
  152. deleteAllUsers()
  153. t.Run("NonExistantUser", func(t *testing.T) {
  154. admin, err := GetUser("admin")
  155. assert.EqualError(t, err, "could not find any records")
  156. assert.Equal(t, "", admin.UserName)
  157. })
  158. t.Run("UserExisits", func(t *testing.T) {
  159. user := models.User{"admin", "password", nil, true}
  160. CreateUser(user)
  161. admin, err := GetUser("admin")
  162. assert.Nil(t, err)
  163. assert.Equal(t, user.UserName, admin.UserName)
  164. })
  165. }
  166. func TestGetUserInternal(t *testing.T) {
  167. database.InitializeDatabase()
  168. deleteAllUsers()
  169. t.Run("NonExistantUser", func(t *testing.T) {
  170. admin, err := GetUserInternal("admin")
  171. assert.EqualError(t, err, "could not find any records")
  172. assert.Equal(t, "", admin.UserName)
  173. })
  174. t.Run("UserExisits", func(t *testing.T) {
  175. user := models.User{"admin", "password", nil, true}
  176. CreateUser(user)
  177. admin, err := GetUserInternal("admin")
  178. assert.Nil(t, err)
  179. assert.Equal(t, user.UserName, admin.UserName)
  180. })
  181. }
  182. func TestGetUsers(t *testing.T) {
  183. database.InitializeDatabase()
  184. deleteAllUsers()
  185. t.Run("NonExistantUser", func(t *testing.T) {
  186. admin, err := GetUsers()
  187. assert.EqualError(t, err, "could not find any records")
  188. assert.Equal(t, []models.ReturnUser(nil), admin)
  189. })
  190. t.Run("UserExisits", func(t *testing.T) {
  191. user := models.User{"admin", "password", nil, true}
  192. CreateUser(user)
  193. admins, err := GetUsers()
  194. assert.Nil(t, err)
  195. assert.Equal(t, user.UserName, admins[0].UserName)
  196. })
  197. t.Run("MulipleUsers", func(t *testing.T) {
  198. user := models.User{"user", "password", nil, true}
  199. CreateUser(user)
  200. admins, err := GetUsers()
  201. assert.Nil(t, err)
  202. assert.Equal(t, "admin", admins[0].UserName)
  203. assert.Equal(t, user.UserName, admins[1].UserName)
  204. })
  205. }
  206. func TestUpdateUser(t *testing.T) {
  207. database.InitializeDatabase()
  208. deleteAllUsers()
  209. user := models.User{"admin", "password", nil, true}
  210. newuser := models.User{"hello", "world", []string{"wirecat, netmaker"}, true}
  211. t.Run("NonExistantUser", func(t *testing.T) {
  212. admin, err := UpdateUser(newuser, user)
  213. assert.EqualError(t, err, "could not find any records")
  214. assert.Equal(t, "", admin.UserName)
  215. })
  216. t.Run("UserExisits", func(t *testing.T) {
  217. CreateUser(user)
  218. admin, err := UpdateUser(newuser, user)
  219. assert.Nil(t, err)
  220. assert.Equal(t, newuser.UserName, admin.UserName)
  221. })
  222. }
  223. func TestValidateUserToken(t *testing.T) {
  224. t.Run("EmptyToken", func(t *testing.T) {
  225. err := ValidateUserToken("", "", false)
  226. assert.NotNil(t, err)
  227. assert.Equal(t, "Missing Auth Token.", err.Error())
  228. })
  229. t.Run("InvalidToken", func(t *testing.T) {
  230. err := ValidateUserToken("Bearer: badtoken", "", false)
  231. assert.NotNil(t, err)
  232. assert.Equal(t, "Error Verifying Auth Token", err.Error())
  233. })
  234. t.Run("InvalidUser", func(t *testing.T) {
  235. t.Skip()
  236. err := ValidateUserToken("Bearer: secretkey", "baduser", false)
  237. assert.NotNil(t, err)
  238. assert.Equal(t, "Error Verifying Auth Token", err.Error())
  239. //need authorization
  240. })
  241. t.Run("ValidToken", func(t *testing.T) {
  242. err := ValidateUserToken("Bearer: secretkey", "", true)
  243. assert.Nil(t, err)
  244. })
  245. }
  246. func TestVerifyAuthRequest(t *testing.T) {
  247. database.InitializeDatabase()
  248. deleteAllUsers()
  249. var authRequest models.UserAuthParams
  250. t.Run("EmptyUserName", func(t *testing.T) {
  251. authRequest.UserName = ""
  252. authRequest.Password = "Password"
  253. jwt, err := VerifyAuthRequest(authRequest)
  254. assert.Equal(t, "", jwt)
  255. assert.EqualError(t, err, "username can't be empty")
  256. })
  257. t.Run("EmptyPassword", func(t *testing.T) {
  258. authRequest.UserName = "admin"
  259. authRequest.Password = ""
  260. jwt, err := VerifyAuthRequest(authRequest)
  261. assert.Equal(t, "", jwt)
  262. assert.EqualError(t, err, "password can't be empty")
  263. })
  264. t.Run("NonExistantUser", func(t *testing.T) {
  265. authRequest.UserName = "admin"
  266. authRequest.Password = "password"
  267. jwt, err := VerifyAuthRequest(authRequest)
  268. assert.Equal(t, "", jwt)
  269. assert.EqualError(t, err, "incorrect credentials")
  270. })
  271. t.Run("Non-Admin", func(t *testing.T) {
  272. user := models.User{"nonadmin", "somepass", nil, false}
  273. CreateUser(user)
  274. authRequest := models.UserAuthParams{"nonadmin", "somepass"}
  275. jwt, err := VerifyAuthRequest(authRequest)
  276. assert.NotNil(t, jwt)
  277. assert.Nil(t, err)
  278. })
  279. t.Run("WrongPassword", func(t *testing.T) {
  280. user := models.User{"admin", "password", nil, false}
  281. CreateUser(user)
  282. authRequest := models.UserAuthParams{"admin", "badpass"}
  283. jwt, err := VerifyAuthRequest(authRequest)
  284. assert.Equal(t, "", jwt)
  285. assert.EqualError(t, err, "incorrect credentials")
  286. })
  287. t.Run("Success", func(t *testing.T) {
  288. authRequest := models.UserAuthParams{"admin", "password"}
  289. jwt, err := VerifyAuthRequest(authRequest)
  290. assert.Nil(t, err)
  291. assert.NotNil(t, jwt)
  292. })
  293. }