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  }