userHttpController_test.go 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. package controller
  2. import (
  3. "testing"
  4. "github.com/gravitl/netmaker/models"
  5. "github.com/stretchr/testify/assert"
  6. )
  7. /*func TestMain(m *testing.M) {
  8. database.InitializeDatabase()
  9. var gconf models.GlobalConfig
  10. gconf.ServerGRPC = "localhost:8081"
  11. gconf.PortGRPC = "50051"
  12. //err := SetGlobalConfig(gconf)
  13. collection := REMOVE.Client.Database(models.NODE_SERVER_NAME).Collection("config")
  14. ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
  15. defer cancel()
  16. //create, _, err := functions.GetGlobalConfig()
  17. _, err := collection.InsertOne(ctx, gconf)
  18. if err != nil {
  19. panic("could not create config store")
  20. }
  21. //drop network, nodes, and user collections
  22. var collections = []string{"networks", "nodes", "users", "dns"}
  23. for _, table := range collections {
  24. collection := REMOVE.Client.Database(models.NODE_SERVER_NAME).Collection(table)
  25. ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
  26. defer cancel()
  27. err := collection.Drop(ctx)
  28. if err != nil {
  29. panic("could not drop collection")
  30. }
  31. }
  32. os.Exit(m.Run())
  33. }
  34. */
  35. func TestHasAdmin(t *testing.T) {
  36. _, err := DeleteUser("admin")
  37. assert.Nil(t, err)
  38. user := models.User{"admin", "password", nil, true}
  39. _, err = CreateUser(user)
  40. assert.Nil(t, err)
  41. t.Run("AdminExists", func(t *testing.T) {
  42. found, err := HasAdmin()
  43. assert.Nil(t, err)
  44. assert.True(t, found)
  45. })
  46. t.Run("NoUser", func(t *testing.T) {
  47. _, err := DeleteUser("admin")
  48. assert.Nil(t, err)
  49. found, err := HasAdmin()
  50. assert.Nil(t, err)
  51. assert.False(t, found)
  52. })
  53. }
  54. func TestCreateUser(t *testing.T) {
  55. user := models.User{"admin", "password", nil, true}
  56. t.Run("NoUser", func(t *testing.T) {
  57. _, err := DeleteUser("admin")
  58. assert.Nil(t, err)
  59. admin, err := CreateUser(user)
  60. assert.Nil(t, err)
  61. assert.Equal(t, user.UserName, admin.UserName)
  62. })
  63. t.Run("AdminExists", func(t *testing.T) {
  64. _, err := CreateUser(user)
  65. assert.NotNil(t, err)
  66. assert.Equal(t, "Admin already Exists", err.Error())
  67. })
  68. }
  69. func TestDeleteUser(t *testing.T) {
  70. hasadmin, err := HasAdmin()
  71. assert.Nil(t, err)
  72. if !hasadmin {
  73. user := models.User{"admin", "pasword", nil, true}
  74. _, err := CreateUser(user)
  75. assert.Nil(t, err)
  76. }
  77. t.Run("ExistingUser", func(t *testing.T) {
  78. deleted, err := DeleteUser("admin")
  79. assert.Nil(t, err)
  80. assert.True(t, deleted)
  81. t.Log(deleted, err)
  82. })
  83. t.Run("NonExistantUser", func(t *testing.T) {
  84. deleted, err := DeleteUser("admin")
  85. assert.Nil(t, err)
  86. assert.False(t, deleted)
  87. })
  88. }
  89. func TestValidateUser(t *testing.T) {
  90. var user models.User
  91. t.Run("ValidCreate", func(t *testing.T) {
  92. user.UserName = "admin"
  93. user.Password = "validpass"
  94. err := ValidateUser("create", user)
  95. assert.Nil(t, err)
  96. })
  97. t.Run("ValidUpdate", func(t *testing.T) {
  98. user.UserName = "admin"
  99. user.Password = "password"
  100. err := ValidateUser("update", user)
  101. assert.Nil(t, err)
  102. })
  103. t.Run("InvalidUserName", func(t *testing.T) {
  104. user.UserName = "invalid*"
  105. err := ValidateUser("update", user)
  106. assert.NotNil(t, err)
  107. assert.Contains(t, err.Error(), "Field validation for 'UserName' failed")
  108. })
  109. t.Run("ShortUserName", func(t *testing.T) {
  110. user.UserName = "12"
  111. err := ValidateUser("create", user)
  112. assert.NotNil(t, err)
  113. assert.Contains(t, err.Error(), "Field validation for 'UserName' failed")
  114. })
  115. t.Run("EmptyPassword", func(t *testing.T) {
  116. user.Password = ""
  117. err := ValidateUser("create", user)
  118. assert.NotNil(t, err)
  119. assert.Contains(t, err.Error(), "Field validation for 'Password' failed")
  120. })
  121. t.Run("ShortPassword", func(t *testing.T) {
  122. user.Password = "123"
  123. err := ValidateUser("create", user)
  124. assert.NotNil(t, err)
  125. assert.Contains(t, err.Error(), "Field validation for 'Password' failed")
  126. })
  127. }
  128. func TestGetUser(t *testing.T) {
  129. t.Run("UserExisits", func(t *testing.T) {
  130. user := models.User{"admin", "password", nil, true}
  131. hasadmin, err := HasAdmin()
  132. assert.Nil(t, err)
  133. if !hasadmin {
  134. _, err := CreateUser(user)
  135. assert.Nil(t, err)
  136. }
  137. admin, err := GetUser("admin")
  138. assert.Nil(t, err)
  139. assert.Equal(t, user.UserName, admin.UserName)
  140. })
  141. t.Run("NonExistantUser", func(t *testing.T) {
  142. _, err := DeleteUser("admin")
  143. assert.Nil(t, err)
  144. admin, err := GetUser("admin")
  145. assert.Equal(t, "mongo: no documents in result", err.Error())
  146. assert.Equal(t, "", admin.UserName)
  147. })
  148. }
  149. func TestUpdateUser(t *testing.T) {
  150. user := models.User{"admin", "password", nil, true}
  151. newuser := models.User{"hello", "world", nil, true}
  152. t.Run("UserExisits", func(t *testing.T) {
  153. _, err := DeleteUser("admin")
  154. _, err = CreateUser(user)
  155. assert.Nil(t, err)
  156. admin, err := UpdateUser(newuser, user)
  157. assert.Nil(t, err)
  158. assert.Equal(t, newuser.UserName, admin.UserName)
  159. })
  160. t.Run("NonExistantUser", func(t *testing.T) {
  161. _, err := DeleteUser("hello")
  162. assert.Nil(t, err)
  163. _, err = UpdateUser(newuser, user)
  164. assert.Equal(t, "mongo: no documents in result", err.Error())
  165. })
  166. }
  167. func TestValidateUserToken(t *testing.T) {
  168. t.Run("EmptyToken", func(t *testing.T) {
  169. err := ValidateUserToken("", "", false)
  170. assert.NotNil(t, err)
  171. assert.Equal(t, "Missing Auth Token.", err.Error())
  172. })
  173. t.Run("InvalidToken", func(t *testing.T) {
  174. err := ValidateUserToken("Bearer: badtoken", "", false)
  175. assert.NotNil(t, err)
  176. assert.Equal(t, "Error Verifying Auth Token", err.Error())
  177. })
  178. t.Run("InvalidUser", func(t *testing.T) {
  179. t.Skip()
  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. var authRequest models.UserAuthParams
  189. t.Run("EmptyUserName", func(t *testing.T) {
  190. authRequest.UserName = ""
  191. authRequest.Password = "Password"
  192. jwt, err := VerifyAuthRequest(authRequest)
  193. assert.NotNil(t, err)
  194. assert.Equal(t, "", jwt)
  195. assert.Equal(t, "Username can't be empty", err.Error())
  196. })
  197. t.Run("EmptyPassword", func(t *testing.T) {
  198. authRequest.UserName = "admin"
  199. authRequest.Password = ""
  200. jwt, err := VerifyAuthRequest(authRequest)
  201. assert.NotNil(t, err)
  202. assert.Equal(t, "", jwt)
  203. assert.Equal(t, "Password can't be empty", err.Error())
  204. })
  205. t.Run("NonExistantUser", func(t *testing.T) {
  206. _, err := DeleteUser("admin")
  207. authRequest.UserName = "admin"
  208. authRequest.Password = "password"
  209. jwt, err := VerifyAuthRequest(authRequest)
  210. assert.NotNil(t, err)
  211. assert.Equal(t, "", jwt)
  212. assert.Equal(t, "User admin not found", err.Error())
  213. })
  214. t.Run("Non-Admin", func(t *testing.T) {
  215. //can't create a user that is not a an admin
  216. t.Skip()
  217. user := models.User{"admin", "admin", nil, false}
  218. _, err := CreateUser(user)
  219. assert.Nil(t, err)
  220. authRequest := models.UserAuthParams{"admin", "admin"}
  221. jwt, err := VerifyAuthRequest(authRequest)
  222. assert.NotNil(t, err)
  223. assert.Equal(t, "", jwt)
  224. assert.Equal(t, "User is not an admin", err.Error())
  225. })
  226. t.Run("WrongPassword", func(t *testing.T) {
  227. _, err := DeleteUser("admin")
  228. user := models.User{"admin", "password", nil, true}
  229. _, err = CreateUser(user)
  230. assert.Nil(t, err)
  231. authRequest := models.UserAuthParams{"admin", "badpass"}
  232. jwt, err := VerifyAuthRequest(authRequest)
  233. assert.NotNil(t, err)
  234. assert.Equal(t, "", jwt)
  235. assert.Equal(t, "Wrong Password", err.Error())
  236. })
  237. t.Run("Success", func(t *testing.T) {
  238. authRequest := models.UserAuthParams{"admin", "password"}
  239. jwt, err := VerifyAuthRequest(authRequest)
  240. assert.Nil(t, err)
  241. assert.NotNil(t, jwt)
  242. })
  243. }