userHttpController_test.go 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  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", "admin", 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", "admin", 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", "admin", 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 = "admin"
  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. user := models.User{"admin", "admin", true}
  118. t.Run("UserExisits", func(t *testing.T) {
  119. _, err := CreateUser(user)
  120. assert.Nil(t, err, err)
  121. admin, err := GetUser("admin")
  122. assert.Nil(t, err, err)
  123. assert.Equal(t, user.UserName, admin.UserName)
  124. })
  125. t.Run("NonExistantUser", func(t *testing.T) {
  126. _, err := DeleteUser("admin")
  127. assert.Nil(t, err, err)
  128. admin, err := GetUser("admin")
  129. assert.Equal(t, "mongo: no documents in result", err.Error())
  130. assert.Equal(t, "", admin.UserName)
  131. })
  132. }
  133. func TestUpdateUser(t *testing.T) {
  134. user := models.User{"admin", "admin", true}
  135. newuser := models.User{"hello", "world", true}
  136. t.Run("UserExisits", func(t *testing.T) {
  137. _, err := DeleteUser("admin")
  138. _, err = CreateUser(user)
  139. assert.Nil(t, err, err)
  140. admin, err := UpdateUser(newuser, user)
  141. assert.Nil(t, err, err)
  142. assert.Equal(t, newuser.UserName, admin.UserName)
  143. })
  144. t.Run("NonExistantUser", func(t *testing.T) {
  145. _, err := DeleteUser("hello")
  146. assert.Nil(t, err, err)
  147. _, err = UpdateUser(newuser, user)
  148. assert.Equal(t, "mongo: no documents in result", err.Error())
  149. })
  150. }
  151. func TestValidateToken(t *testing.T) {
  152. t.Run("EmptyToken", func(t *testing.T) {
  153. err := ValidateToken("")
  154. assert.NotNil(t, err, err)
  155. assert.Equal(t, "Missing Auth Token.", err.Error())
  156. })
  157. t.Run("InvalidToken", func(t *testing.T) {
  158. err := ValidateToken("Bearer: badtoken")
  159. assert.NotNil(t, err, err)
  160. assert.Equal(t, "Error Verifying Auth Token", err.Error())
  161. })
  162. t.Run("InvalidUser", func(t *testing.T) {
  163. t.Skip()
  164. //need authorization
  165. })
  166. t.Run("ValidToken", func(t *testing.T) {
  167. err := ValidateToken("Bearer: secretkey")
  168. assert.Nil(t, err, err)
  169. })
  170. }
  171. func TestVerifyAuthRequest(t *testing.T) {
  172. var authRequest models.UserAuthParams
  173. t.Run("EmptyUserName", func(t *testing.T) {
  174. authRequest.UserName = ""
  175. authRequest.Password = "Password"
  176. jwt, err := VerifyAuthRequest(authRequest)
  177. assert.NotNil(t, err, err)
  178. assert.Equal(t, "", jwt)
  179. assert.Equal(t, "Username can't be empty", err.Error())
  180. })
  181. t.Run("EmptyPassword", func(t *testing.T) {
  182. authRequest.UserName = "admin"
  183. authRequest.Password = ""
  184. jwt, err := VerifyAuthRequest(authRequest)
  185. assert.NotNil(t, err, err)
  186. assert.Equal(t, "", jwt)
  187. assert.Equal(t, "Password can't be empty", err.Error())
  188. })
  189. t.Run("NonExistantUser", func(t *testing.T) {
  190. _, err := DeleteUser("admin")
  191. authRequest.UserName = "admin"
  192. authRequest.Password = "password"
  193. jwt, err := VerifyAuthRequest(authRequest)
  194. assert.NotNil(t, err, err)
  195. assert.Equal(t, "", jwt)
  196. assert.Equal(t, "User admin not found", err.Error())
  197. })
  198. t.Run("Non-Admin", func(t *testing.T) {
  199. //can't create a user that is not a an admin
  200. t.Skip()
  201. user := models.User{"admin", "admin", false}
  202. _, err := CreateUser(user)
  203. assert.Nil(t, err)
  204. authRequest := models.UserAuthParams{"admin", "admin"}
  205. jwt, err := VerifyAuthRequest(authRequest)
  206. assert.NotNil(t, err, err)
  207. assert.Equal(t, "", jwt)
  208. assert.Equal(t, "User is not an admin", err.Error())
  209. })
  210. t.Run("WrongPassword", func(t *testing.T) {
  211. _, err := DeleteUser("admin")
  212. user := models.User{"admin", "admin", true}
  213. _, err = CreateUser(user)
  214. assert.Nil(t, err)
  215. authRequest := models.UserAuthParams{"admin", "badpass"}
  216. jwt, err := VerifyAuthRequest(authRequest)
  217. assert.NotNil(t, err, err)
  218. assert.Equal(t, "", jwt)
  219. assert.Equal(t, "Wrong Password", err.Error())
  220. })
  221. t.Run("Success", func(t *testing.T) {
  222. authRequest := models.UserAuthParams{"admin", "admin"}
  223. jwt, err := VerifyAuthRequest(authRequest)
  224. assert.Nil(t, err, err)
  225. assert.NotNil(t, jwt)
  226. })
  227. }