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