jwt_test.go 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package apiserver
  2. import (
  3. "net/http"
  4. "net/http/httptest"
  5. "strings"
  6. "testing"
  7. log "github.com/sirupsen/logrus"
  8. "github.com/stretchr/testify/assert"
  9. )
  10. func TestLogin(t *testing.T) {
  11. router, config, err := NewAPITest()
  12. if err != nil {
  13. log.Fatalf("unable to run local API: %s", err)
  14. }
  15. body, err := CreateTestMachine(router)
  16. if err != nil {
  17. log.Fatalln(err.Error())
  18. }
  19. // Login with machine not validated yet
  20. w := httptest.NewRecorder()
  21. req, _ := http.NewRequest("POST", "/v1/watchers/login", strings.NewReader(body))
  22. req.Header.Add("User-Agent", UserAgent)
  23. router.ServeHTTP(w, req)
  24. assert.Equal(t, 401, w.Code)
  25. assert.Equal(t, "{\"code\":401,\"message\":\"machine test not validated\"}", w.Body.String())
  26. // Login with machine not exist
  27. w = httptest.NewRecorder()
  28. req, _ = http.NewRequest("POST", "/v1/watchers/login", strings.NewReader("{\"machine_id\": \"test1\", \"password\": \"test1\"}"))
  29. req.Header.Add("User-Agent", UserAgent)
  30. router.ServeHTTP(w, req)
  31. assert.Equal(t, 401, w.Code)
  32. assert.Equal(t, "{\"code\":401,\"message\":\"ent: machine not found\"}", w.Body.String())
  33. // Login with invalid body
  34. w = httptest.NewRecorder()
  35. req, _ = http.NewRequest("POST", "/v1/watchers/login", strings.NewReader("test"))
  36. req.Header.Add("User-Agent", UserAgent)
  37. router.ServeHTTP(w, req)
  38. assert.Equal(t, 401, w.Code)
  39. assert.Equal(t, "{\"code\":401,\"message\":\"missing : invalid character 'e' in literal true (expecting 'r')\"}", w.Body.String())
  40. // Login with invalid format
  41. w = httptest.NewRecorder()
  42. req, _ = http.NewRequest("POST", "/v1/watchers/login", strings.NewReader("{\"machine_id\": \"test1\"}"))
  43. req.Header.Add("User-Agent", UserAgent)
  44. router.ServeHTTP(w, req)
  45. assert.Equal(t, 401, w.Code)
  46. assert.Equal(t, "{\"code\":401,\"message\":\"input format error\"}", w.Body.String())
  47. //Validate machine
  48. err = ValidateMachine("test", config.API.Server.DbConfig)
  49. if err != nil {
  50. log.Fatalln(err.Error())
  51. }
  52. // Login with invalid password
  53. w = httptest.NewRecorder()
  54. req, _ = http.NewRequest("POST", "/v1/watchers/login", strings.NewReader("{\"machine_id\": \"test\", \"password\": \"test1\"}"))
  55. req.Header.Add("User-Agent", UserAgent)
  56. router.ServeHTTP(w, req)
  57. assert.Equal(t, 401, w.Code)
  58. assert.Equal(t, "{\"code\":401,\"message\":\"incorrect Username or Password\"}", w.Body.String())
  59. // Login with valid machine
  60. w = httptest.NewRecorder()
  61. req, _ = http.NewRequest("POST", "/v1/watchers/login", strings.NewReader(body))
  62. req.Header.Add("User-Agent", UserAgent)
  63. router.ServeHTTP(w, req)
  64. assert.Equal(t, 200, w.Code)
  65. assert.Contains(t, w.Body.String(), "\"token\"")
  66. assert.Contains(t, w.Body.String(), "\"expire\"")
  67. // Login with valid machine + scenarios
  68. w = httptest.NewRecorder()
  69. req, _ = http.NewRequest("POST", "/v1/watchers/login", strings.NewReader("{\"machine_id\": \"test\", \"password\": \"test\", \"scenarios\": [\"crowdsecurity/test\", \"crowdsecurity/test2\"]}"))
  70. req.Header.Add("User-Agent", UserAgent)
  71. router.ServeHTTP(w, req)
  72. assert.Equal(t, 200, w.Code)
  73. assert.Contains(t, w.Body.String(), "\"token\"")
  74. assert.Contains(t, w.Body.String(), "\"expire\"")
  75. }