mirror of
https://github.com/crowdsecurity/crowdsec.git
synced 2025-05-11 20:36:12 +02:00
apiserver/apiclient: compact tests (#2694)
* apiserver/apiclient: compact tests * update golangci-lint configuration
This commit is contained in:
parent
1c03fbe99e
commit
da746f77d5
15 changed files with 563 additions and 919 deletions
|
@ -4,7 +4,6 @@ import (
|
|||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
const (
|
||||
|
@ -16,23 +15,22 @@ func TestDeleteDecisionRange(t *testing.T) {
|
|||
lapi := SetupLAPITest(t)
|
||||
|
||||
// Create Valid Alert
|
||||
lapi.InsertAlertFromFile("./tests/alert_minibulk.json")
|
||||
lapi.InsertAlertFromFile(t, "./tests/alert_minibulk.json")
|
||||
|
||||
// delete by ip wrong
|
||||
w := lapi.RecordResponse("DELETE", "/v1/decisions?range=1.2.3.0/24", emptyBody, PASSWORD)
|
||||
w := lapi.RecordResponse(t, "DELETE", "/v1/decisions?range=1.2.3.0/24", emptyBody, PASSWORD)
|
||||
assert.Equal(t, 200, w.Code)
|
||||
|
||||
assert.Equal(t, `{"nbDeleted":"0"}`, w.Body.String())
|
||||
|
||||
// delete by range
|
||||
|
||||
w = lapi.RecordResponse("DELETE", "/v1/decisions?range=91.121.79.0/24&contains=false", emptyBody, PASSWORD)
|
||||
w = lapi.RecordResponse(t, "DELETE", "/v1/decisions?range=91.121.79.0/24&contains=false", emptyBody, PASSWORD)
|
||||
assert.Equal(t, 200, w.Code)
|
||||
assert.Equal(t, `{"nbDeleted":"2"}`, w.Body.String())
|
||||
|
||||
// delete by range : ensure it was already deleted
|
||||
|
||||
w = lapi.RecordResponse("DELETE", "/v1/decisions?range=91.121.79.0/24", emptyBody, PASSWORD)
|
||||
w = lapi.RecordResponse(t, "DELETE", "/v1/decisions?range=91.121.79.0/24", emptyBody, PASSWORD)
|
||||
assert.Equal(t, 200, w.Code)
|
||||
assert.Equal(t, `{"nbDeleted":"0"}`, w.Body.String())
|
||||
}
|
||||
|
@ -41,23 +39,23 @@ func TestDeleteDecisionFilter(t *testing.T) {
|
|||
lapi := SetupLAPITest(t)
|
||||
|
||||
// Create Valid Alert
|
||||
lapi.InsertAlertFromFile("./tests/alert_minibulk.json")
|
||||
lapi.InsertAlertFromFile(t, "./tests/alert_minibulk.json")
|
||||
|
||||
// delete by ip wrong
|
||||
|
||||
w := lapi.RecordResponse("DELETE", "/v1/decisions?ip=1.2.3.4", emptyBody, PASSWORD)
|
||||
w := lapi.RecordResponse(t, "DELETE", "/v1/decisions?ip=1.2.3.4", emptyBody, PASSWORD)
|
||||
assert.Equal(t, 200, w.Code)
|
||||
assert.Equal(t, `{"nbDeleted":"0"}`, w.Body.String())
|
||||
|
||||
// delete by ip good
|
||||
|
||||
w = lapi.RecordResponse("DELETE", "/v1/decisions?ip=91.121.79.179", emptyBody, PASSWORD)
|
||||
w = lapi.RecordResponse(t, "DELETE", "/v1/decisions?ip=91.121.79.179", emptyBody, PASSWORD)
|
||||
assert.Equal(t, 200, w.Code)
|
||||
assert.Equal(t, `{"nbDeleted":"1"}`, w.Body.String())
|
||||
|
||||
// delete by scope/value
|
||||
|
||||
w = lapi.RecordResponse("DELETE", "/v1/decisions?scopes=Ip&value=91.121.79.178", emptyBody, PASSWORD)
|
||||
w = lapi.RecordResponse(t, "DELETE", "/v1/decisions?scopes=Ip&value=91.121.79.178", emptyBody, PASSWORD)
|
||||
assert.Equal(t, 200, w.Code)
|
||||
assert.Equal(t, `{"nbDeleted":"1"}`, w.Body.String())
|
||||
}
|
||||
|
@ -66,17 +64,17 @@ func TestDeleteDecisionFilterByScenario(t *testing.T) {
|
|||
lapi := SetupLAPITest(t)
|
||||
|
||||
// Create Valid Alert
|
||||
lapi.InsertAlertFromFile("./tests/alert_minibulk.json")
|
||||
lapi.InsertAlertFromFile(t, "./tests/alert_minibulk.json")
|
||||
|
||||
// delete by wrong scenario
|
||||
|
||||
w := lapi.RecordResponse("DELETE", "/v1/decisions?scenario=crowdsecurity/ssh-bff", emptyBody, PASSWORD)
|
||||
w := lapi.RecordResponse(t, "DELETE", "/v1/decisions?scenario=crowdsecurity/ssh-bff", emptyBody, PASSWORD)
|
||||
assert.Equal(t, 200, w.Code)
|
||||
assert.Equal(t, `{"nbDeleted":"0"}`, w.Body.String())
|
||||
|
||||
// delete by scenario good
|
||||
|
||||
w = lapi.RecordResponse("DELETE", "/v1/decisions?scenario=crowdsecurity/ssh-bf", emptyBody, PASSWORD)
|
||||
w = lapi.RecordResponse(t, "DELETE", "/v1/decisions?scenario=crowdsecurity/ssh-bf", emptyBody, PASSWORD)
|
||||
assert.Equal(t, 200, w.Code)
|
||||
assert.Equal(t, `{"nbDeleted":"2"}`, w.Body.String())
|
||||
}
|
||||
|
@ -85,14 +83,13 @@ func TestGetDecisionFilters(t *testing.T) {
|
|||
lapi := SetupLAPITest(t)
|
||||
|
||||
// Create Valid Alert
|
||||
lapi.InsertAlertFromFile("./tests/alert_minibulk.json")
|
||||
lapi.InsertAlertFromFile(t, "./tests/alert_minibulk.json")
|
||||
|
||||
// Get Decision
|
||||
|
||||
w := lapi.RecordResponse("GET", "/v1/decisions", emptyBody, APIKEY)
|
||||
w := lapi.RecordResponse(t, "GET", "/v1/decisions", emptyBody, APIKEY)
|
||||
assert.Equal(t, 200, w.Code)
|
||||
decisions, code, err := readDecisionsGetResp(w)
|
||||
require.NoError(t, err)
|
||||
decisions, code := readDecisionsGetResp(t, w)
|
||||
assert.Equal(t, 200, code)
|
||||
assert.Len(t, decisions, 2)
|
||||
assert.Equal(t, "crowdsecurity/ssh-bf", *decisions[0].Scenario)
|
||||
|
@ -104,10 +101,9 @@ func TestGetDecisionFilters(t *testing.T) {
|
|||
|
||||
// Get Decision : type filter
|
||||
|
||||
w = lapi.RecordResponse("GET", "/v1/decisions?type=ban", emptyBody, APIKEY)
|
||||
w = lapi.RecordResponse(t, "GET", "/v1/decisions?type=ban", emptyBody, APIKEY)
|
||||
assert.Equal(t, 200, w.Code)
|
||||
decisions, code, err = readDecisionsGetResp(w)
|
||||
require.NoError(t, err)
|
||||
decisions, code = readDecisionsGetResp(t, w)
|
||||
assert.Equal(t, 200, code)
|
||||
assert.Len(t, decisions, 2)
|
||||
assert.Equal(t, "crowdsecurity/ssh-bf", *decisions[0].Scenario)
|
||||
|
@ -122,10 +118,9 @@ func TestGetDecisionFilters(t *testing.T) {
|
|||
|
||||
// Get Decision : scope/value
|
||||
|
||||
w = lapi.RecordResponse("GET", "/v1/decisions?scopes=Ip&value=91.121.79.179", emptyBody, APIKEY)
|
||||
w = lapi.RecordResponse(t, "GET", "/v1/decisions?scopes=Ip&value=91.121.79.179", emptyBody, APIKEY)
|
||||
assert.Equal(t, 200, w.Code)
|
||||
decisions, code, err = readDecisionsGetResp(w)
|
||||
require.NoError(t, err)
|
||||
decisions, code = readDecisionsGetResp(t, w)
|
||||
assert.Equal(t, 200, code)
|
||||
assert.Len(t, decisions, 1)
|
||||
assert.Equal(t, "crowdsecurity/ssh-bf", *decisions[0].Scenario)
|
||||
|
@ -137,10 +132,9 @@ func TestGetDecisionFilters(t *testing.T) {
|
|||
|
||||
// Get Decision : ip filter
|
||||
|
||||
w = lapi.RecordResponse("GET", "/v1/decisions?ip=91.121.79.179", emptyBody, APIKEY)
|
||||
w = lapi.RecordResponse(t, "GET", "/v1/decisions?ip=91.121.79.179", emptyBody, APIKEY)
|
||||
assert.Equal(t, 200, w.Code)
|
||||
decisions, code, err = readDecisionsGetResp(w)
|
||||
require.NoError(t, err)
|
||||
decisions, code = readDecisionsGetResp(t, w)
|
||||
assert.Equal(t, 200, code)
|
||||
assert.Len(t, decisions, 1)
|
||||
assert.Equal(t, "crowdsecurity/ssh-bf", *decisions[0].Scenario)
|
||||
|
@ -151,10 +145,9 @@ func TestGetDecisionFilters(t *testing.T) {
|
|||
// assert.NotContains(t, w.Body.String(), `"id":2,"origin":"crowdsec","scenario":"crowdsecurity/ssh-bf","scope":"Ip","type":"ban","value":"91.121.79.178"`)
|
||||
|
||||
// Get decision : by range
|
||||
w = lapi.RecordResponse("GET", "/v1/decisions?range=91.121.79.0/24&contains=false", emptyBody, APIKEY)
|
||||
w = lapi.RecordResponse(t, "GET", "/v1/decisions?range=91.121.79.0/24&contains=false", emptyBody, APIKEY)
|
||||
assert.Equal(t, 200, w.Code)
|
||||
decisions, code, err = readDecisionsGetResp(w)
|
||||
require.NoError(t, err)
|
||||
decisions, code = readDecisionsGetResp(t, w)
|
||||
assert.Equal(t, 200, code)
|
||||
assert.Len(t, decisions, 2)
|
||||
assert.Contains(t, []string{*decisions[0].Value, *decisions[1].Value}, "91.121.79.179")
|
||||
|
@ -165,13 +158,12 @@ func TestGetDecision(t *testing.T) {
|
|||
lapi := SetupLAPITest(t)
|
||||
|
||||
// Create Valid Alert
|
||||
lapi.InsertAlertFromFile("./tests/alert_sample.json")
|
||||
lapi.InsertAlertFromFile(t, "./tests/alert_sample.json")
|
||||
|
||||
// Get Decision
|
||||
w := lapi.RecordResponse("GET", "/v1/decisions", emptyBody, APIKEY)
|
||||
w := lapi.RecordResponse(t, "GET", "/v1/decisions", emptyBody, APIKEY)
|
||||
assert.Equal(t, 200, w.Code)
|
||||
decisions, code, err := readDecisionsGetResp(w)
|
||||
require.NoError(t, err)
|
||||
decisions, code := readDecisionsGetResp(t, w)
|
||||
assert.Equal(t, 200, code)
|
||||
assert.Len(t, decisions, 3)
|
||||
/*decisions get doesn't perform deduplication*/
|
||||
|
@ -188,7 +180,7 @@ func TestGetDecision(t *testing.T) {
|
|||
assert.Equal(t, int64(3), decisions[2].ID)
|
||||
|
||||
// Get Decision with invalid filter. It should ignore this filter
|
||||
w = lapi.RecordResponse("GET", "/v1/decisions?test=test", emptyBody, APIKEY)
|
||||
w = lapi.RecordResponse(t, "GET", "/v1/decisions?test=test", emptyBody, APIKEY)
|
||||
assert.Equal(t, 200, w.Code)
|
||||
assert.Len(t, decisions, 3)
|
||||
}
|
||||
|
@ -197,49 +189,43 @@ func TestDeleteDecisionByID(t *testing.T) {
|
|||
lapi := SetupLAPITest(t)
|
||||
|
||||
// Create Valid Alert
|
||||
lapi.InsertAlertFromFile("./tests/alert_sample.json")
|
||||
lapi.InsertAlertFromFile(t, "./tests/alert_sample.json")
|
||||
|
||||
//Have one alerts
|
||||
w := lapi.RecordResponse("GET", "/v1/decisions/stream?startup=true", emptyBody, APIKEY)
|
||||
decisions, code, err := readDecisionsStreamResp(w)
|
||||
require.NoError(t, err)
|
||||
w := lapi.RecordResponse(t, "GET", "/v1/decisions/stream?startup=true", emptyBody, APIKEY)
|
||||
decisions, code := readDecisionsStreamResp(t, w)
|
||||
assert.Equal(t, 200, code)
|
||||
assert.Empty(t, decisions["deleted"])
|
||||
assert.Len(t, decisions["new"], 1)
|
||||
|
||||
// Delete alert with Invalid ID
|
||||
w = lapi.RecordResponse("DELETE", "/v1/decisions/test", emptyBody, PASSWORD)
|
||||
w = lapi.RecordResponse(t, "DELETE", "/v1/decisions/test", emptyBody, PASSWORD)
|
||||
assert.Equal(t, 400, w.Code)
|
||||
errResp, _, err := readDecisionsErrorResp(w)
|
||||
require.NoError(t, err)
|
||||
errResp, _ := readDecisionsErrorResp(t, w)
|
||||
assert.Equal(t, "decision_id must be valid integer", errResp["message"])
|
||||
|
||||
// Delete alert with ID that not exist
|
||||
w = lapi.RecordResponse("DELETE", "/v1/decisions/100", emptyBody, PASSWORD)
|
||||
w = lapi.RecordResponse(t, "DELETE", "/v1/decisions/100", emptyBody, PASSWORD)
|
||||
assert.Equal(t, 500, w.Code)
|
||||
errResp, _, err = readDecisionsErrorResp(w)
|
||||
require.NoError(t, err)
|
||||
errResp, _ = readDecisionsErrorResp(t, w)
|
||||
assert.Equal(t, "decision with id '100' doesn't exist: unable to delete", errResp["message"])
|
||||
|
||||
//Have one alerts
|
||||
w = lapi.RecordResponse("GET", "/v1/decisions/stream?startup=true", emptyBody, APIKEY)
|
||||
decisions, code, err = readDecisionsStreamResp(w)
|
||||
require.NoError(t, err)
|
||||
w = lapi.RecordResponse(t, "GET", "/v1/decisions/stream?startup=true", emptyBody, APIKEY)
|
||||
decisions, code = readDecisionsStreamResp(t, w)
|
||||
assert.Equal(t, 200, code)
|
||||
assert.Empty(t, decisions["deleted"])
|
||||
assert.Len(t, decisions["new"], 1)
|
||||
|
||||
// Delete alert with valid ID
|
||||
w = lapi.RecordResponse("DELETE", "/v1/decisions/1", emptyBody, PASSWORD)
|
||||
w = lapi.RecordResponse(t, "DELETE", "/v1/decisions/1", emptyBody, PASSWORD)
|
||||
assert.Equal(t, 200, w.Code)
|
||||
resp, _, err := readDecisionsDeleteResp(w)
|
||||
require.NoError(t, err)
|
||||
resp, _ := readDecisionsDeleteResp(t, w)
|
||||
assert.Equal(t, "1", resp.NbDeleted)
|
||||
|
||||
//Have one alert (because we delete an alert that has dup targets)
|
||||
w = lapi.RecordResponse("GET", "/v1/decisions/stream?startup=true", emptyBody, APIKEY)
|
||||
decisions, code, err = readDecisionsStreamResp(w)
|
||||
require.NoError(t, err)
|
||||
w = lapi.RecordResponse(t, "GET", "/v1/decisions/stream?startup=true", emptyBody, APIKEY)
|
||||
decisions, code = readDecisionsStreamResp(t, w)
|
||||
assert.Equal(t, 200, code)
|
||||
assert.Empty(t, decisions["deleted"])
|
||||
assert.Len(t, decisions["new"], 1)
|
||||
|
@ -249,20 +235,18 @@ func TestDeleteDecision(t *testing.T) {
|
|||
lapi := SetupLAPITest(t)
|
||||
|
||||
// Create Valid Alert
|
||||
lapi.InsertAlertFromFile("./tests/alert_sample.json")
|
||||
lapi.InsertAlertFromFile(t, "./tests/alert_sample.json")
|
||||
|
||||
// Delete alert with Invalid filter
|
||||
w := lapi.RecordResponse("DELETE", "/v1/decisions?test=test", emptyBody, PASSWORD)
|
||||
w := lapi.RecordResponse(t, "DELETE", "/v1/decisions?test=test", emptyBody, PASSWORD)
|
||||
assert.Equal(t, 500, w.Code)
|
||||
errResp, _, err := readDecisionsErrorResp(w)
|
||||
require.NoError(t, err)
|
||||
errResp, _ := readDecisionsErrorResp(t, w)
|
||||
assert.Equal(t, "'test' doesn't exist: invalid filter", errResp["message"])
|
||||
|
||||
// Delete all alert
|
||||
w = lapi.RecordResponse("DELETE", "/v1/decisions", emptyBody, PASSWORD)
|
||||
w = lapi.RecordResponse(t, "DELETE", "/v1/decisions", emptyBody, PASSWORD)
|
||||
assert.Equal(t, 200, w.Code)
|
||||
resp, _, err := readDecisionsDeleteResp(w)
|
||||
require.NoError(t, err)
|
||||
resp, _ := readDecisionsDeleteResp(t, w)
|
||||
assert.Equal(t, "3", resp.NbDeleted)
|
||||
}
|
||||
|
||||
|
@ -271,12 +255,11 @@ func TestStreamStartDecisionDedup(t *testing.T) {
|
|||
lapi := SetupLAPITest(t)
|
||||
|
||||
// Create Valid Alert : 3 decisions for 127.0.0.1, longest has id=3
|
||||
lapi.InsertAlertFromFile("./tests/alert_sample.json")
|
||||
lapi.InsertAlertFromFile(t, "./tests/alert_sample.json")
|
||||
|
||||
// Get Stream, we only get one decision (the longest one)
|
||||
w := lapi.RecordResponse("GET", "/v1/decisions/stream?startup=true", emptyBody, APIKEY)
|
||||
decisions, code, err := readDecisionsStreamResp(w)
|
||||
require.NoError(t, err)
|
||||
w := lapi.RecordResponse(t, "GET", "/v1/decisions/stream?startup=true", emptyBody, APIKEY)
|
||||
decisions, code := readDecisionsStreamResp(t, w)
|
||||
assert.Equal(t, 200, code)
|
||||
assert.Empty(t, decisions["deleted"])
|
||||
assert.Len(t, decisions["new"], 1)
|
||||
|
@ -285,13 +268,12 @@ func TestStreamStartDecisionDedup(t *testing.T) {
|
|||
assert.Equal(t, "127.0.0.1", *decisions["new"][0].Value)
|
||||
|
||||
// id=3 decision is deleted, this won't affect `deleted`, because there are decisions on the same ip
|
||||
w = lapi.RecordResponse("DELETE", "/v1/decisions/3", emptyBody, PASSWORD)
|
||||
w = lapi.RecordResponse(t, "DELETE", "/v1/decisions/3", emptyBody, PASSWORD)
|
||||
assert.Equal(t, 200, w.Code)
|
||||
|
||||
// Get Stream, we only get one decision (the longest one, id=2)
|
||||
w = lapi.RecordResponse("GET", "/v1/decisions/stream?startup=true", emptyBody, APIKEY)
|
||||
decisions, code, err = readDecisionsStreamResp(w)
|
||||
require.NoError(t, err)
|
||||
w = lapi.RecordResponse(t, "GET", "/v1/decisions/stream?startup=true", emptyBody, APIKEY)
|
||||
decisions, code = readDecisionsStreamResp(t, w)
|
||||
assert.Equal(t, 200, code)
|
||||
assert.Empty(t, decisions["deleted"])
|
||||
assert.Len(t, decisions["new"], 1)
|
||||
|
@ -300,13 +282,12 @@ func TestStreamStartDecisionDedup(t *testing.T) {
|
|||
assert.Equal(t, "127.0.0.1", *decisions["new"][0].Value)
|
||||
|
||||
// We delete another decision, yet don't receive it in stream, since there's another decision on same IP
|
||||
w = lapi.RecordResponse("DELETE", "/v1/decisions/2", emptyBody, PASSWORD)
|
||||
w = lapi.RecordResponse(t, "DELETE", "/v1/decisions/2", emptyBody, PASSWORD)
|
||||
assert.Equal(t, 200, w.Code)
|
||||
|
||||
// And get the remaining decision (1)
|
||||
w = lapi.RecordResponse("GET", "/v1/decisions/stream?startup=true", emptyBody, APIKEY)
|
||||
decisions, code, err = readDecisionsStreamResp(w)
|
||||
require.NoError(t, err)
|
||||
w = lapi.RecordResponse(t, "GET", "/v1/decisions/stream?startup=true", emptyBody, APIKEY)
|
||||
decisions, code = readDecisionsStreamResp(t, w)
|
||||
assert.Equal(t, 200, code)
|
||||
assert.Empty(t, decisions["deleted"])
|
||||
assert.Len(t, decisions["new"], 1)
|
||||
|
@ -315,13 +296,12 @@ func TestStreamStartDecisionDedup(t *testing.T) {
|
|||
assert.Equal(t, "127.0.0.1", *decisions["new"][0].Value)
|
||||
|
||||
// We delete the last decision, we receive the delete order
|
||||
w = lapi.RecordResponse("DELETE", "/v1/decisions/1", emptyBody, PASSWORD)
|
||||
w = lapi.RecordResponse(t, "DELETE", "/v1/decisions/1", emptyBody, PASSWORD)
|
||||
assert.Equal(t, 200, w.Code)
|
||||
|
||||
//and now we only get a deleted decision
|
||||
w = lapi.RecordResponse("GET", "/v1/decisions/stream?startup=true", emptyBody, APIKEY)
|
||||
decisions, code, err = readDecisionsStreamResp(w)
|
||||
require.NoError(t, err)
|
||||
w = lapi.RecordResponse(t, "GET", "/v1/decisions/stream?startup=true", emptyBody, APIKEY)
|
||||
decisions, code = readDecisionsStreamResp(t, w)
|
||||
assert.Equal(t, 200, code)
|
||||
assert.Len(t, decisions["deleted"], 1)
|
||||
assert.Equal(t, int64(1), decisions["deleted"][0].ID)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue