userHttpController_test.go 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  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, err)
  33. t.Run("AdminExists", func(t *testing.T) {
  34. found, err := HasAdmin()
  35. assert.Nil(t, err, err)
  36. assert.True(t, found)
  37. })
  38. t.Run("NoUser", func(t *testing.T) {
  39. _, err := DeleteUser("admin")
  40. assert.Nil(t, err, err)
  41. found, err := HasAdmin()
  42. assert.Nil(t, err, 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, err)
  51. admin, err := CreateUser(user)
  52. assert.Nil(t, err, 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, 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, err)
  64. if !hasadmin {
  65. user := models.User{"admin", "pasword", true}
  66. _, err := CreateUser(user)
  67. assert.Nil(t, err, err)
  68. }
  69. t.Run("ExistingUser", func(t *testing.T) {
  70. deleted, err := DeleteUser("admin")
  71. assert.Nil(t, err, 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, 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, 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, err)
  94. })
  95. t.Run("InvalidUserName", func(t *testing.T) {
  96. user.UserName = "invalid*"
  97. err := ValidateUser("update", user)
  98. assert.NotNil(t, err, err)
  99. })
  100. t.Run("ShortUserName", func(t *testing.T) {
  101. user.UserName = "12"
  102. err := ValidateUser("create", user)
  103. assert.NotNil(t, err, err)
  104. })
  105. t.Run("EmptyPassword", func(t *testing.T) {
  106. user.Password = ""
  107. err := ValidateUser("create", user)
  108. assert.NotNil(t, err, err)
  109. })
  110. t.Run("ShortPassword", func(t *testing.T) {
  111. user.Password = "123"
  112. err := ValidateUser("create", user)
  113. assert.NotNil(t, err, err)
  114. })
  115. }
  116. func TestGetUser(t *testing.T) {
  117. t.Run("UserExisits", func(t *testing.T) {
  118. user := models.User{"admin", "password", true}
  119. hasadmin, err := HasAdmin()
  120. assert.Nil(t, err, err)
  121. if !hasadmin {
  122. _, err := CreateUser(user)
  123. assert.Nil(t, err, err)
  124. }
  125. admin, err := GetUser("admin")
  126. assert.Nil(t, err, err)
  127. assert.Equal(t, user.UserName, admin.UserName)
  128. })
  129. t.Run("NonExistantUser", func(t *testing.T) {
  130. _, err := DeleteUser("admin")
  131. assert.Nil(t, err, err)
  132. admin, err := GetUser("admin")
  133. assert.Equal(t, "mongo: no documents in result", err.Error())
  134. assert.Equal(t, "", admin.UserName)
  135. })
  136. }
  137. func TestUpdateUser(t *testing.T) {
  138. user := models.User{"admin", "password", true}
  139. newuser := models.User{"hello", "world", true}
  140. t.Run("UserExisits", func(t *testing.T) {
  141. _, err := DeleteUser("admin")
  142. _, err = CreateUser(user)
  143. assert.Nil(t, err, err)
  144. admin, err := UpdateUser(newuser, user)
  145. assert.Nil(t, err, err)
  146. assert.Equal(t, newuser.UserName, admin.UserName)
  147. })
  148. t.Run("NonExistantUser", func(t *testing.T) {
  149. _, err := DeleteUser("hello")
  150. assert.Nil(t, err, err)
  151. _, err = UpdateUser(newuser, user)
  152. assert.Equal(t, "mongo: no documents in result", err.Error())
  153. })
  154. }
  155. func TestValidateToken(t *testing.T) {
  156. t.Run("EmptyToken", func(t *testing.T) {
  157. err := ValidateToken("")
  158. assert.NotNil(t, err, err)
  159. assert.Equal(t, "Missing Auth Token.", err.Error())
  160. })
  161. t.Run("InvalidToken", func(t *testing.T) {
  162. err := ValidateToken("Bearer: badtoken")
  163. assert.NotNil(t, err, err)
  164. assert.Equal(t, "Error Verifying Auth Token", err.Error())
  165. })
  166. t.Run("InvalidUser", func(t *testing.T) {
  167. t.Skip()
  168. //need authorization
  169. })
  170. t.Run("ValidToken", func(t *testing.T) {
  171. err := ValidateToken("Bearer: secretkey")
  172. assert.Nil(t, err, err)
  173. })
  174. }
  175. func TestVerifyAuthRequest(t *testing.T) {
  176. var authRequest models.UserAuthParams
  177. t.Run("EmptyUserName", func(t *testing.T) {
  178. authRequest.UserName = ""
  179. authRequest.Password = "Password"
  180. jwt, err := VerifyAuthRequest(authRequest)
  181. assert.NotNil(t, err, err)
  182. assert.Equal(t, "", jwt)
  183. assert.Equal(t, "Username can't be empty", err.Error())
  184. })
  185. t.Run("EmptyPassword", func(t *testing.T) {
  186. authRequest.UserName = "admin"
  187. authRequest.Password = ""
  188. jwt, err := VerifyAuthRequest(authRequest)
  189. assert.NotNil(t, err, err)
  190. assert.Equal(t, "", jwt)
  191. assert.Equal(t, "Password can't be empty", err.Error())
  192. })
  193. t.Run("NonExistantUser", func(t *testing.T) {
  194. _, err := DeleteUser("admin")
  195. authRequest.UserName = "admin"
  196. authRequest.Password = "password"
  197. jwt, err := VerifyAuthRequest(authRequest)
  198. assert.NotNil(t, err, err)
  199. assert.Equal(t, "", jwt)
  200. assert.Equal(t, "User admin not found", err.Error())
  201. })
  202. t.Run("Non-Admin", func(t *testing.T) {
  203. //can't create a user that is not a an admin
  204. t.Skip()
  205. user := models.User{"admin", "admin", false}
  206. _, err := CreateUser(user)
  207. assert.Nil(t, err)
  208. authRequest := models.UserAuthParams{"admin", "admin"}
  209. jwt, err := VerifyAuthRequest(authRequest)
  210. assert.NotNil(t, err, err)
  211. assert.Equal(t, "", jwt)
  212. assert.Equal(t, "User is not an admin", err.Error())
  213. })
  214. t.Run("WrongPassword", func(t *testing.T) {
  215. _, err := DeleteUser("admin")
  216. user := models.User{"admin", "password", true}
  217. _, err = CreateUser(user)
  218. assert.Nil(t, err)
  219. authRequest := models.UserAuthParams{"admin", "badpass"}
  220. jwt, err := VerifyAuthRequest(authRequest)
  221. assert.NotNil(t, err, err)
  222. assert.Equal(t, "", jwt)
  223. assert.Equal(t, "Wrong Password", err.Error())
  224. })
  225. t.Run("Success", func(t *testing.T) {
  226. authRequest := models.UserAuthParams{"admin", "password"}
  227. jwt, err := VerifyAuthRequest(authRequest)
  228. assert.Nil(t, err, err)
  229. assert.NotNil(t, jwt)
  230. })
  231. }