machines_test.go 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. package apiserver
  2. import (
  3. "encoding/json"
  4. "net/http"
  5. "net/http/httptest"
  6. "strings"
  7. "testing"
  8. log "github.com/sirupsen/logrus"
  9. "github.com/stretchr/testify/assert"
  10. )
  11. func TestCreateMachine(t *testing.T) {
  12. router, _, err := NewAPITest()
  13. if err != nil {
  14. log.Fatalf("unable to run local API: %s", err)
  15. }
  16. // Create machine with invalid format
  17. w := httptest.NewRecorder()
  18. req, _ := http.NewRequest("POST", "/v1/watchers", strings.NewReader("test"))
  19. req.Header.Add("User-Agent", UserAgent)
  20. router.ServeHTTP(w, req)
  21. assert.Equal(t, 400, w.Code)
  22. assert.Equal(t, "{\"message\":\"invalid character 'e' in literal true (expecting 'r')\"}", w.Body.String())
  23. // Create machine with invalid input
  24. w = httptest.NewRecorder()
  25. req, _ = http.NewRequest("POST", "/v1/watchers", strings.NewReader("{\"test\": \"test\"}"))
  26. req.Header.Add("User-Agent", UserAgent)
  27. router.ServeHTTP(w, req)
  28. assert.Equal(t, 500, w.Code)
  29. assert.Equal(t, "{\"message\":\"validation failure list:\\nmachine_id in body is required\\npassword in body is required\"}", w.Body.String())
  30. // Create machine
  31. b, err := json.Marshal(MachineTest)
  32. if err != nil {
  33. log.Fatal("unable to marshal MachineTest")
  34. }
  35. body := string(b)
  36. w = httptest.NewRecorder()
  37. req, _ = http.NewRequest("POST", "/v1/watchers", strings.NewReader(body))
  38. req.Header.Add("User-Agent", UserAgent)
  39. router.ServeHTTP(w, req)
  40. assert.Equal(t, 201, w.Code)
  41. assert.Equal(t, "", w.Body.String())
  42. }
  43. func TestCreateMachineWithForwardedFor(t *testing.T) {
  44. router, config, err := NewAPITestForwardedFor()
  45. if err != nil {
  46. log.Fatalf("unable to run local API: %s", err)
  47. }
  48. router.TrustedPlatform = "X-Real-IP"
  49. // Create machine
  50. b, err := json.Marshal(MachineTest)
  51. if err != nil {
  52. log.Fatal("unable to marshal MachineTest")
  53. }
  54. body := string(b)
  55. w := httptest.NewRecorder()
  56. req, _ := http.NewRequest("POST", "/v1/watchers", strings.NewReader(body))
  57. req.Header.Add("User-Agent", UserAgent)
  58. req.Header.Add("X-Real-Ip", "1.1.1.1")
  59. router.ServeHTTP(w, req)
  60. assert.Equal(t, 201, w.Code)
  61. assert.Equal(t, "", w.Body.String())
  62. ip, err := GetMachineIP(*MachineTest.MachineID, config.API.Server.DbConfig)
  63. if err != nil {
  64. log.Fatalf("Could not get machine IP : %s", err)
  65. }
  66. assert.Equal(t, "1.1.1.1", ip)
  67. }
  68. func TestCreateMachineWithForwardedForNoConfig(t *testing.T) {
  69. router, config, err := NewAPITest()
  70. if err != nil {
  71. log.Fatalf("unable to run local API: %s", err)
  72. }
  73. // Create machine
  74. b, err := json.Marshal(MachineTest)
  75. if err != nil {
  76. log.Fatal("unable to marshal MachineTest")
  77. }
  78. body := string(b)
  79. w := httptest.NewRecorder()
  80. req, _ := http.NewRequest("POST", "/v1/watchers", strings.NewReader(body))
  81. req.Header.Add("User-Agent", UserAgent)
  82. req.Header.Add("X-Real-IP", "1.1.1.1")
  83. router.ServeHTTP(w, req)
  84. assert.Equal(t, 201, w.Code)
  85. assert.Equal(t, "", w.Body.String())
  86. ip, err := GetMachineIP(*MachineTest.MachineID, config.API.Server.DbConfig)
  87. if err != nil {
  88. log.Fatalf("Could not get machine IP : %s", err)
  89. }
  90. //For some reason, the IP is empty when running tests
  91. //if no forwarded-for headers are present
  92. assert.Equal(t, "", ip)
  93. }
  94. func TestCreateMachineWithoutForwardedFor(t *testing.T) {
  95. router, config, err := NewAPITestForwardedFor()
  96. if err != nil {
  97. log.Fatalf("unable to run local API: %s", err)
  98. }
  99. // Create machine
  100. b, err := json.Marshal(MachineTest)
  101. if err != nil {
  102. log.Fatal("unable to marshal MachineTest")
  103. }
  104. body := string(b)
  105. w := httptest.NewRecorder()
  106. req, _ := http.NewRequest("POST", "/v1/watchers", strings.NewReader(body))
  107. req.Header.Add("User-Agent", UserAgent)
  108. router.ServeHTTP(w, req)
  109. assert.Equal(t, 201, w.Code)
  110. assert.Equal(t, "", w.Body.String())
  111. ip, err := GetMachineIP(*MachineTest.MachineID, config.API.Server.DbConfig)
  112. if err != nil {
  113. log.Fatalf("Could not get machine IP : %s", err)
  114. }
  115. //For some reason, the IP is empty when running tests
  116. //if no forwarded-for headers are present
  117. assert.Equal(t, "", ip)
  118. }
  119. func TestCreateMachineAlreadyExist(t *testing.T) {
  120. router, _, err := NewAPITest()
  121. if err != nil {
  122. log.Fatalf("unable to run local API: %s", err)
  123. }
  124. body, err := CreateTestMachine(router)
  125. if err != nil {
  126. log.Fatalln(err.Error())
  127. }
  128. w := httptest.NewRecorder()
  129. req, _ := http.NewRequest("POST", "/v1/watchers", strings.NewReader(body))
  130. req.Header.Add("User-Agent", UserAgent)
  131. router.ServeHTTP(w, req)
  132. w = httptest.NewRecorder()
  133. req, _ = http.NewRequest("POST", "/v1/watchers", strings.NewReader(body))
  134. req.Header.Add("User-Agent", UserAgent)
  135. router.ServeHTTP(w, req)
  136. assert.Equal(t, 403, w.Code)
  137. assert.Equal(t, "{\"message\":\"user 'test': user already exist\"}", w.Body.String())
  138. }