userHttpController_test.go 6.8 KB

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