user_test.go 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. package main
  2. import (
  3. "encoding/json"
  4. "io/ioutil"
  5. "net/http"
  6. "testing"
  7. "github.com/gravitl/netmaker/models"
  8. "github.com/stretchr/testify/assert"
  9. )
  10. func TestAdminCreation(t *testing.T) {
  11. t.Skip()
  12. var admin models.UserAuthParams
  13. var user models.User
  14. admin.UserName = "admin"
  15. admin.Password = "password"
  16. t.Run("AdminCreationSuccess", func(t *testing.T) {
  17. if adminExists(t) {
  18. deleteAdmin(t)
  19. }
  20. response, err := api(t, admin, http.MethodPost, "http://localhost:8081/api/users/adm/createadmin", "")
  21. assert.Nil(t, err, err)
  22. defer response.Body.Close()
  23. err = json.NewDecoder(response.Body).Decode(&user)
  24. assert.Nil(t, err, err)
  25. assert.Equal(t, admin.UserName, user.UserName)
  26. assert.Equal(t, true, user.IsAdmin)
  27. assert.Equal(t, http.StatusOK, response.StatusCode)
  28. assert.True(t, adminExists(t), "Admin creation failed")
  29. message, _ := ioutil.ReadAll(response.Body)
  30. t.Log(string(message))
  31. })
  32. t.Run("AdminCreationFailure", func(t *testing.T) {
  33. if !adminExists(t) {
  34. addAdmin(t)
  35. }
  36. response, err := api(t, admin, http.MethodPost, "http://localhost:8081/api/users/adm/createadmin", "")
  37. assert.Nil(t, err, err)
  38. defer response.Body.Close()
  39. var message models.ErrorResponse
  40. err = json.NewDecoder(response.Body).Decode(&message)
  41. t.Log(message)
  42. assert.Nil(t, err, err)
  43. assert.Equal(t, http.StatusUnauthorized, response.StatusCode)
  44. assert.Equal(t, http.StatusUnauthorized, message.Code)
  45. assert.Equal(t, "W1R3: Admin already exists! ", message.Message)
  46. data, _ := ioutil.ReadAll(response.Body)
  47. t.Log(string(data))
  48. })
  49. }
  50. func TestGetUser(t *testing.T) {
  51. t.Skip()
  52. if !adminExists(t) {
  53. t.Log("no admin - creating")
  54. addAdmin(t)
  55. } else {
  56. t.Log("admin exists")
  57. }
  58. t.Run("GetUserWithValidToken", func(t *testing.T) {
  59. t.Skip()
  60. token, err := authenticate(t)
  61. assert.Nil(t, err, err)
  62. response, err := api(t, "", http.MethodGet, "http://localhost:8081/api/users/admin", token)
  63. t.Log(response)
  64. assert.Nil(t, err, err)
  65. defer response.Body.Close()
  66. var user models.User
  67. json.NewDecoder(response.Body).Decode(&user)
  68. assert.Equal(t, http.StatusOK, response.StatusCode)
  69. assert.Equal(t, "admin", user.UserName)
  70. assert.Equal(t, true, user.IsAdmin)
  71. })
  72. t.Run("GetUserWithInvalidToken", func(t *testing.T) {
  73. response, err := api(t, "", http.MethodGet, "http://localhost:8081/api/users/admin", "secretkey")
  74. assert.Nil(t, err, err)
  75. defer response.Body.Close()
  76. t.Log(response.Body)
  77. })
  78. }
  79. func TestUpdateUser(t *testing.T) {
  80. t.Skip()
  81. if !adminExists(t) {
  82. addAdmin(t)
  83. }
  84. token, err := authenticate(t)
  85. assert.Nil(t, err, err)
  86. var admin models.UserAuthParams
  87. var user models.User
  88. var message models.ErrorResponse
  89. t.Run("UpdateWrongToken", func(t *testing.T) {
  90. admin.UserName = "admin"
  91. admin.Password = "admin"
  92. response, err := api(t, admin, http.MethodPut, "http://localhost:8081/api/users/admin", "secretkey")
  93. assert.Nil(t, err, err)
  94. defer response.Body.Close()
  95. err = json.NewDecoder(response.Body).Decode(&message)
  96. assert.Nil(t, err, err)
  97. assert.Equal(t, "W1R3: Error Verifying Auth Token.", message.Message)
  98. assert.Equal(t, http.StatusUnauthorized, response.StatusCode)
  99. })
  100. t.Run("UpdateSuccess", func(t *testing.T) {
  101. admin.UserName = "admin"
  102. admin.Password = "password"
  103. response, err := api(t, admin, http.MethodPut, "http://localhost:8081/api/users/admin", token)
  104. assert.Nil(t, err, err)
  105. defer response.Body.Close()
  106. err = json.NewDecoder(response.Body).Decode(&user)
  107. assert.Nil(t, err, err)
  108. assert.Equal(t, admin.UserName, user.UserName)
  109. assert.Equal(t, true, user.IsAdmin)
  110. assert.Equal(t, http.StatusOK, response.StatusCode)
  111. })
  112. }
  113. func TestDeleteUser(t *testing.T) {
  114. t.Skip()
  115. if !adminExists(t) {
  116. addAdmin(t)
  117. }
  118. token, err := authenticate(t)
  119. assert.Nil(t, err, err)
  120. t.Run("DeleteUser-WongAdmin", func(t *testing.T) {
  121. //skip for now ... shouldn't panic
  122. t.Skip()
  123. function := func() {
  124. _, _ = api(t, "", http.MethodDelete, "http://localhost:8081/api/users/xxxx", token)
  125. }
  126. assert.Panics(t, function, "")
  127. })
  128. t.Run("DeleteUser-InvalidCredentials", func(t *testing.T) {
  129. response, err := api(t, "", http.MethodDelete, "http://localhost:8081/api/users/admin", "secretkey")
  130. assert.Nil(t, err, err)
  131. var message models.ErrorResponse
  132. json.NewDecoder(response.Body).Decode(&message)
  133. assert.Equal(t, "W1R3: Error Verifying Auth Token.", message.Message)
  134. assert.Equal(t, http.StatusUnauthorized, response.StatusCode)
  135. })
  136. t.Run("DeleteUser-ValidCredentials", func(t *testing.T) {
  137. response, err := api(t, "", http.MethodDelete, "http://localhost:8081/api/users/admin", token)
  138. assert.Nil(t, err, err)
  139. var body string
  140. json.NewDecoder(response.Body).Decode(&body)
  141. assert.Equal(t, "admin deleted.", body)
  142. assert.Equal(t, http.StatusOK, response.StatusCode)
  143. })
  144. t.Run("DeleteUser-NoAdmin", func(t *testing.T) {
  145. //skip for now ... shouldn't panic
  146. t.Skip()
  147. function := func() {
  148. _, _ = api(t, "", http.MethodDelete, "http://localhost:8081/api/users/admin", token)
  149. }
  150. assert.Panics(t, function, "")
  151. })
  152. }
  153. func TestAuthenticateUser(t *testing.T) {
  154. t.Skip()
  155. cases := []AuthorizeTestCase{
  156. AuthorizeTestCase{
  157. testname: "Invalid User",
  158. name: "invaliduser",
  159. password: "password",
  160. code: http.StatusBadRequest,
  161. tokenExpected: false,
  162. errMessage: "W1R3: User invaliduser not found.",
  163. },
  164. AuthorizeTestCase{
  165. testname: "empty user",
  166. name: "",
  167. password: "password",
  168. code: http.StatusBadRequest,
  169. tokenExpected: false,
  170. errMessage: "W1R3: Username can't be empty",
  171. },
  172. AuthorizeTestCase{
  173. testname: "empty password",
  174. name: "admin",
  175. password: "",
  176. code: http.StatusBadRequest,
  177. tokenExpected: false,
  178. errMessage: "W1R3: Password can't be empty",
  179. },
  180. AuthorizeTestCase{
  181. testname: "Invalid Password",
  182. name: "admin",
  183. password: "xxxxxxx",
  184. code: http.StatusUnauthorized,
  185. tokenExpected: false,
  186. errMessage: "W1R3: Wrong Password.",
  187. },
  188. AuthorizeTestCase{
  189. testname: "Valid User",
  190. name: "admin",
  191. password: "password",
  192. code: http.StatusOK,
  193. tokenExpected: true,
  194. errMessage: "W1R3: Device Admin Authorized",
  195. },
  196. }
  197. if !adminExists(t) {
  198. addAdmin(t)
  199. }
  200. for _, tc := range cases {
  201. t.Run(tc.testname, func(t *testing.T) {
  202. var admin models.User
  203. admin.UserName = tc.name
  204. admin.Password = tc.password
  205. response, err := api(t, admin, http.MethodPost, "http://localhost:8081/api/users/adm/authenticate", "secretkey")
  206. assert.Nil(t, err, err)
  207. defer response.Body.Close()
  208. if tc.tokenExpected {
  209. var body Success
  210. err = json.NewDecoder(response.Body).Decode(&body)
  211. assert.Nil(t, err, err)
  212. assert.NotEmpty(t, body.Response.AuthToken, "token not returned")
  213. assert.Equal(t, "W1R3: Device admin Authorized", body.Message)
  214. } else {
  215. var bad models.ErrorResponse
  216. json.NewDecoder(response.Body).Decode(&bad)
  217. assert.Equal(t, tc.errMessage, bad.Message)
  218. }
  219. assert.Equal(t, tc.code, response.StatusCode)
  220. })
  221. }
  222. }