mirror of
https://github.com/crowdsecurity/crowdsec.git
synced 2025-05-11 12:25:53 +02:00
CI/bats: test remediation api via socket (#3052)
This commit is contained in:
parent
9101de95d8
commit
d614ecbdcf
8 changed files with 67 additions and 102 deletions
|
@ -9,8 +9,6 @@ setup_file() {
|
|||
./instance-crowdsec start
|
||||
API_KEY=$(cscli bouncers add testbouncer -o raw)
|
||||
export API_KEY
|
||||
CROWDSEC_API_URL="http://localhost:8080"
|
||||
export CROWDSEC_API_URL
|
||||
}
|
||||
|
||||
teardown_file() {
|
||||
|
@ -22,11 +20,6 @@ setup() {
|
|||
if is_db_mysql; then sleep 0.3; fi
|
||||
}
|
||||
|
||||
api() {
|
||||
URI="$1"
|
||||
curl -s -H "X-Api-Key: ${API_KEY}" "${CROWDSEC_API_URL}${URI}"
|
||||
}
|
||||
|
||||
#----------
|
||||
|
||||
@test "cli - first decisions list: must be empty" {
|
||||
|
@ -37,7 +30,7 @@ api() {
|
|||
}
|
||||
|
||||
@test "API - first decisions list: must be empty" {
|
||||
rune -0 api '/v1/decisions'
|
||||
rune -0 lapi-get '/v1/decisions'
|
||||
assert_output 'null'
|
||||
}
|
||||
|
||||
|
@ -53,7 +46,7 @@ api() {
|
|||
}
|
||||
|
||||
@test "API - all decisions" {
|
||||
rune -0 api '/v1/decisions'
|
||||
rune -0 lapi-get '/v1/decisions'
|
||||
rune -0 jq -c '[ . | length, .[0].value ]' <(output)
|
||||
assert_output '[1,"1.2.3.4"]'
|
||||
}
|
||||
|
@ -67,7 +60,7 @@ api() {
|
|||
}
|
||||
|
||||
@test "API - decision for 1.2.3.4" {
|
||||
rune -0 api '/v1/decisions?ip=1.2.3.4'
|
||||
rune -0 lapi-get '/v1/decisions?ip=1.2.3.4'
|
||||
rune -0 jq -r '.[0].value' <(output)
|
||||
assert_output '1.2.3.4'
|
||||
}
|
||||
|
@ -78,7 +71,7 @@ api() {
|
|||
}
|
||||
|
||||
@test "API - decision for 1.2.3.5" {
|
||||
rune -0 api '/v1/decisions?ip=1.2.3.5'
|
||||
rune -0 lapi-get '/v1/decisions?ip=1.2.3.5'
|
||||
assert_output 'null'
|
||||
}
|
||||
|
||||
|
@ -90,7 +83,7 @@ api() {
|
|||
}
|
||||
|
||||
@test "API - decision for 1.2.3.0/24" {
|
||||
rune -0 api '/v1/decisions?range=1.2.3.0/24'
|
||||
rune -0 lapi-get '/v1/decisions?range=1.2.3.0/24'
|
||||
assert_output 'null'
|
||||
}
|
||||
|
||||
|
@ -101,7 +94,7 @@ api() {
|
|||
}
|
||||
|
||||
@test "API - decisions where IP in 1.2.3.0/24" {
|
||||
rune -0 api '/v1/decisions?range=1.2.3.0/24&contains=false'
|
||||
rune -0 lapi-get '/v1/decisions?range=1.2.3.0/24&contains=false'
|
||||
rune -0 jq -r '.[0].value' <(output)
|
||||
assert_output '1.2.3.4'
|
||||
}
|
||||
|
|
|
@ -9,8 +9,6 @@ setup_file() {
|
|||
./instance-crowdsec start
|
||||
API_KEY=$(cscli bouncers add testbouncer -o raw)
|
||||
export API_KEY
|
||||
CROWDSEC_API_URL="http://localhost:8080"
|
||||
export CROWDSEC_API_URL
|
||||
}
|
||||
|
||||
teardown_file() {
|
||||
|
@ -22,11 +20,6 @@ setup() {
|
|||
if is_db_mysql; then sleep 0.5; fi
|
||||
}
|
||||
|
||||
api() {
|
||||
URI="$1"
|
||||
curl -s -H "X-Api-Key: ${API_KEY}" "${CROWDSEC_API_URL}${URI}"
|
||||
}
|
||||
|
||||
#----------
|
||||
|
||||
@test "cli - first decisions list: must be empty" {
|
||||
|
@ -48,7 +41,7 @@ api() {
|
|||
}
|
||||
|
||||
@test "API - all decisions" {
|
||||
rune -0 api "/v1/decisions"
|
||||
rune -0 lapi-get "/v1/decisions"
|
||||
rune -0 jq -r '.[].value' <(output)
|
||||
assert_output '1111:2222:3333:4444:5555:6666:7777:8888'
|
||||
}
|
||||
|
@ -60,7 +53,7 @@ api() {
|
|||
}
|
||||
|
||||
@test "API - decisions for ip 1111:2222:3333:4444:5555:6666:7777:888" {
|
||||
rune -0 api '/v1/decisions?ip=1111:2222:3333:4444:5555:6666:7777:8888'
|
||||
rune -0 lapi-get '/v1/decisions?ip=1111:2222:3333:4444:5555:6666:7777:8888'
|
||||
rune -0 jq -r '.[].value' <(output)
|
||||
assert_output '1111:2222:3333:4444:5555:6666:7777:8888'
|
||||
}
|
||||
|
@ -71,7 +64,7 @@ api() {
|
|||
}
|
||||
|
||||
@test "API - decisions for ip 1211:2222:3333:4444:5555:6666:7777:888" {
|
||||
rune -0 api '/v1/decisions?ip=1211:2222:3333:4444:5555:6666:7777:8888'
|
||||
rune -0 lapi-get '/v1/decisions?ip=1211:2222:3333:4444:5555:6666:7777:8888'
|
||||
assert_output 'null'
|
||||
}
|
||||
|
||||
|
@ -81,7 +74,7 @@ api() {
|
|||
}
|
||||
|
||||
@test "API - decisions for ip 1111:2222:3333:4444:5555:6666:7777:8887" {
|
||||
rune -0 api '/v1/decisions?ip=1111:2222:3333:4444:5555:6666:7777:8887'
|
||||
rune -0 lapi-get '/v1/decisions?ip=1111:2222:3333:4444:5555:6666:7777:8887'
|
||||
assert_output 'null'
|
||||
}
|
||||
|
||||
|
@ -91,7 +84,7 @@ api() {
|
|||
}
|
||||
|
||||
@test "API - decisions for range 1111:2222:3333:4444:5555:6666:7777:8888/48" {
|
||||
rune -0 api '/v1/decisions?range=1111:2222:3333:4444:5555:6666:7777:8888/48'
|
||||
rune -0 lapi-get '/v1/decisions?range=1111:2222:3333:4444:5555:6666:7777:8888/48'
|
||||
assert_output 'null'
|
||||
}
|
||||
|
||||
|
@ -102,7 +95,7 @@ api() {
|
|||
}
|
||||
|
||||
@test "API - decisions for ip/range in 1111:2222:3333:4444:5555:6666:7777:8888/48" {
|
||||
rune -0 api '/v1/decisions?range=1111:2222:3333:4444:5555:6666:7777:8888/48&&contains=false'
|
||||
rune -0 lapi-get '/v1/decisions?range=1111:2222:3333:4444:5555:6666:7777:8888/48&&contains=false'
|
||||
rune -0 jq -r '.[].value' <(output)
|
||||
assert_output '1111:2222:3333:4444:5555:6666:7777:8888'
|
||||
}
|
||||
|
@ -113,7 +106,7 @@ api() {
|
|||
}
|
||||
|
||||
@test "API - decisions for range 1111:2222:3333:4444:5555:6666:7777:8888/64" {
|
||||
rune -0 api '/v1/decisions?range=1111:2222:3333:4444:5555:6666:7777:8888/64'
|
||||
rune -0 lapi-get '/v1/decisions?range=1111:2222:3333:4444:5555:6666:7777:8888/64'
|
||||
assert_output 'null'
|
||||
}
|
||||
|
||||
|
@ -124,7 +117,7 @@ api() {
|
|||
}
|
||||
|
||||
@test "API - decisions for ip/range in 1111:2222:3333:4444:5555:6666:7777:8888/64" {
|
||||
rune -0 api '/v1/decisions?range=1111:2222:3333:4444:5555:6666:7777:8888/64&&contains=false'
|
||||
rune -0 lapi-get '/v1/decisions?range=1111:2222:3333:4444:5555:6666:7777:8888/64&&contains=false'
|
||||
rune -0 jq -r '.[].value' <(output)
|
||||
assert_output '1111:2222:3333:4444:5555:6666:7777:8888'
|
||||
}
|
||||
|
|
|
@ -9,8 +9,6 @@ setup_file() {
|
|||
./instance-crowdsec start
|
||||
API_KEY=$(cscli bouncers add testbouncer -o raw)
|
||||
export API_KEY
|
||||
CROWDSEC_API_URL="http://localhost:8080"
|
||||
export CROWDSEC_API_URL
|
||||
}
|
||||
|
||||
teardown_file() {
|
||||
|
@ -22,11 +20,6 @@ setup() {
|
|||
if is_db_mysql; then sleep 0.3; fi
|
||||
}
|
||||
|
||||
api() {
|
||||
URI="$1"
|
||||
curl -s -H "X-Api-Key: ${API_KEY}" "${CROWDSEC_API_URL}${URI}"
|
||||
}
|
||||
|
||||
#----------
|
||||
|
||||
@test "cli - first decisions list: must be empty" {
|
||||
|
@ -48,7 +41,7 @@ api() {
|
|||
}
|
||||
|
||||
@test "API - all decisions" {
|
||||
rune -0 api '/v1/decisions'
|
||||
rune -0 lapi-get '/v1/decisions'
|
||||
rune -0 jq -r '.[0].value' <(output)
|
||||
assert_output '4.4.4.0/24'
|
||||
}
|
||||
|
@ -62,7 +55,7 @@ api() {
|
|||
}
|
||||
|
||||
@test "API - decisions for ip 4.4.4." {
|
||||
rune -0 api '/v1/decisions?ip=4.4.4.3'
|
||||
rune -0 lapi-get '/v1/decisions?ip=4.4.4.3'
|
||||
rune -0 jq -r '.[0].value' <(output)
|
||||
assert_output '4.4.4.0/24'
|
||||
}
|
||||
|
@ -73,7 +66,7 @@ api() {
|
|||
}
|
||||
|
||||
@test "API - decisions for ip contained in 4.4.4." {
|
||||
rune -0 api '/v1/decisions?ip=4.4.4.4&contains=false'
|
||||
rune -0 lapi-get '/v1/decisions?ip=4.4.4.4&contains=false'
|
||||
assert_output 'null'
|
||||
}
|
||||
|
||||
|
@ -83,7 +76,7 @@ api() {
|
|||
}
|
||||
|
||||
@test "API - decisions for ip 5.4.4." {
|
||||
rune -0 api '/v1/decisions?ip=5.4.4.3'
|
||||
rune -0 lapi-get '/v1/decisions?ip=5.4.4.3'
|
||||
assert_output 'null'
|
||||
}
|
||||
|
||||
|
@ -93,7 +86,7 @@ api() {
|
|||
}
|
||||
|
||||
@test "API - decisions for range 4.4.0.0/1" {
|
||||
rune -0 api '/v1/decisions?range=4.4.0.0/16'
|
||||
rune -0 lapi-get '/v1/decisions?range=4.4.0.0/16'
|
||||
assert_output 'null'
|
||||
}
|
||||
|
||||
|
@ -104,7 +97,7 @@ api() {
|
|||
}
|
||||
|
||||
@test "API - decisions for ip/range in 4.4.0.0/1" {
|
||||
rune -0 api '/v1/decisions?range=4.4.0.0/16&contains=false'
|
||||
rune -0 lapi-get '/v1/decisions?range=4.4.0.0/16&contains=false'
|
||||
rune -0 jq -r '.[0].value' <(output)
|
||||
assert_output '4.4.4.0/24'
|
||||
}
|
||||
|
@ -118,7 +111,7 @@ api() {
|
|||
}
|
||||
|
||||
@test "API - decisions for range 4.4.4.2/2" {
|
||||
rune -0 api '/v1/decisions?range=4.4.4.2/28'
|
||||
rune -0 lapi-get '/v1/decisions?range=4.4.4.2/28'
|
||||
rune -0 jq -r '.[].value' <(output)
|
||||
assert_output '4.4.4.0/24'
|
||||
}
|
||||
|
@ -129,6 +122,6 @@ api() {
|
|||
}
|
||||
|
||||
@test "API - decisions for range 4.4.3.2/2" {
|
||||
rune -0 api '/v1/decisions?range=4.4.3.2/28'
|
||||
rune -0 lapi-get '/v1/decisions?range=4.4.3.2/28'
|
||||
assert_output 'null'
|
||||
}
|
||||
|
|
|
@ -9,8 +9,6 @@ setup_file() {
|
|||
./instance-crowdsec start
|
||||
API_KEY=$(cscli bouncers add testbouncer -o raw)
|
||||
export API_KEY
|
||||
CROWDSEC_API_URL="http://localhost:8080"
|
||||
export CROWDSEC_API_URL
|
||||
}
|
||||
|
||||
teardown_file() {
|
||||
|
@ -22,11 +20,6 @@ setup() {
|
|||
if is_db_mysql; then sleep 0.3; fi
|
||||
}
|
||||
|
||||
api() {
|
||||
URI="$1"
|
||||
curl -s -H "X-Api-Key: ${API_KEY}" "${CROWDSEC_API_URL}${URI}"
|
||||
}
|
||||
|
||||
#----------
|
||||
|
||||
@test "cli - first decisions list: must be empty" {
|
||||
|
@ -48,7 +41,7 @@ api() {
|
|||
}
|
||||
|
||||
@test "API - all decisions (2)" {
|
||||
rune -0 api '/v1/decisions'
|
||||
rune -0 lapi-get '/v1/decisions'
|
||||
rune -0 jq -r '.[].value' <(output)
|
||||
assert_output 'aaaa:2222:3333:4444::/64'
|
||||
}
|
||||
|
@ -62,7 +55,7 @@ api() {
|
|||
}
|
||||
|
||||
@test "API - decisions for ip aaaa:2222:3333:4444:5555:6666:7777:8888" {
|
||||
rune -0 api '/v1/decisions?ip=aaaa:2222:3333:4444:5555:6666:7777:8888'
|
||||
rune -0 lapi-get '/v1/decisions?ip=aaaa:2222:3333:4444:5555:6666:7777:8888'
|
||||
rune -0 jq -r '.[].value' <(output)
|
||||
assert_output 'aaaa:2222:3333:4444::/64'
|
||||
}
|
||||
|
@ -73,7 +66,7 @@ api() {
|
|||
}
|
||||
|
||||
@test "API - decisions for ip aaaa:2222:3333:4445:5555:6666:7777:8888" {
|
||||
rune -0 api '/v1/decisions?ip=aaaa:2222:3333:4445:5555:6666:7777:8888'
|
||||
rune -0 lapi-get '/v1/decisions?ip=aaaa:2222:3333:4445:5555:6666:7777:8888'
|
||||
assert_output 'null'
|
||||
}
|
||||
|
||||
|
@ -83,7 +76,7 @@ api() {
|
|||
}
|
||||
|
||||
@test "API - decisions for ip aaa1:2222:3333:4444:5555:6666:7777:8887" {
|
||||
rune -0 api '/v1/decisions?ip=aaa1:2222:3333:4444:5555:6666:7777:8887'
|
||||
rune -0 lapi-get '/v1/decisions?ip=aaa1:2222:3333:4444:5555:6666:7777:8887'
|
||||
assert_output 'null'
|
||||
}
|
||||
|
||||
|
@ -96,7 +89,7 @@ api() {
|
|||
}
|
||||
|
||||
@test "API - decisions for range aaaa:2222:3333:4444:5555::/80" {
|
||||
rune -0 api '/v1/decisions?range=aaaa:2222:3333:4444:5555::/80'
|
||||
rune -0 lapi-get '/v1/decisions?range=aaaa:2222:3333:4444:5555::/80'
|
||||
rune -0 jq -r '.[].value' <(output)
|
||||
assert_output 'aaaa:2222:3333:4444::/64'
|
||||
}
|
||||
|
@ -108,7 +101,7 @@ api() {
|
|||
}
|
||||
|
||||
@test "API - decisions for range aaaa:2222:3333:4441:5555::/80" {
|
||||
rune -0 api '/v1/decisions?range=aaaa:2222:3333:4441:5555::/80'
|
||||
rune -0 lapi-get '/v1/decisions?range=aaaa:2222:3333:4441:5555::/80'
|
||||
assert_output 'null'
|
||||
}
|
||||
|
||||
|
@ -118,7 +111,7 @@ api() {
|
|||
}
|
||||
|
||||
@test "API - decisions for range aaa1:2222:3333:4444:5555::/80" {
|
||||
rune -0 api '/v1/decisions?range=aaa1:2222:3333:4444:5555::/80'
|
||||
rune -0 lapi-get '/v1/decisions?range=aaa1:2222:3333:4444:5555::/80'
|
||||
assert_output 'null'
|
||||
}
|
||||
|
||||
|
@ -130,7 +123,7 @@ api() {
|
|||
}
|
||||
|
||||
@test "API - decisions for range aaaa:2222:3333:4444:5555:6666:7777:8888/48" {
|
||||
rune -0 api '/v1/decisions?range=aaaa:2222:3333:4444:5555:6666:7777:8888/48'
|
||||
rune -0 lapi-get '/v1/decisions?range=aaaa:2222:3333:4444:5555:6666:7777:8888/48'
|
||||
assert_output 'null'
|
||||
}
|
||||
|
||||
|
@ -141,7 +134,7 @@ api() {
|
|||
}
|
||||
|
||||
@test "API - decisions for ip/range in aaaa:2222:3333:4444:5555:6666:7777:8888/48" {
|
||||
rune -0 api '/v1/decisions?range=aaaa:2222:3333:4444:5555:6666:7777:8888/48&contains=false'
|
||||
rune -0 lapi-get '/v1/decisions?range=aaaa:2222:3333:4444:5555:6666:7777:8888/48&contains=false'
|
||||
rune -0 jq -r '.[].value' <(output)
|
||||
assert_output 'aaaa:2222:3333:4444::/64'
|
||||
}
|
||||
|
@ -152,7 +145,7 @@ api() {
|
|||
}
|
||||
|
||||
@test "API - decisions for ip/range in aaaa:2222:3333:4445:5555:6666:7777:8888/48" {
|
||||
rune -0 api '/v1/decisions?range=aaaa:2222:3333:4445:5555:6666:7777:8888/48'
|
||||
rune -0 lapi-get '/v1/decisions?range=aaaa:2222:3333:4445:5555:6666:7777:8888/48'
|
||||
assert_output 'null'
|
||||
}
|
||||
|
||||
|
@ -170,7 +163,7 @@ api() {
|
|||
}
|
||||
|
||||
@test "API - decisions for ip in bbbb:db8:0000:0000:0000:6fff:ffff:ffff" {
|
||||
rune -0 api '/v1/decisions?ip=bbbb:db8:0000:0000:0000:6fff:ffff:ffff'
|
||||
rune -0 lapi-get '/v1/decisions?ip=bbbb:db8:0000:0000:0000:6fff:ffff:ffff'
|
||||
rune -0 jq -r '.[].value' <(output)
|
||||
assert_output 'bbbb:db8::/81'
|
||||
}
|
||||
|
@ -181,7 +174,7 @@ api() {
|
|||
}
|
||||
|
||||
@test "API - decisions for ip in bbbb:db8:0000:0000:0000:8fff:ffff:ffff" {
|
||||
rune -0 api '/v1/decisions?ip=bbbb:db8:0000:0000:0000:8fff:ffff:ffff'
|
||||
rune -0 lapi-get '/v1/decisions?ip=bbbb:db8:0000:0000:0000:8fff:ffff:ffff'
|
||||
assert_output 'null'
|
||||
}
|
||||
|
||||
|
|
|
@ -9,8 +9,6 @@ setup_file() {
|
|||
./instance-crowdsec start
|
||||
API_KEY=$(cscli bouncers add testbouncer -o raw)
|
||||
export API_KEY
|
||||
CROWDSEC_API_URL="http://localhost:8080"
|
||||
export CROWDSEC_API_URL
|
||||
}
|
||||
|
||||
teardown_file() {
|
||||
|
@ -24,11 +22,6 @@ setup() {
|
|||
|
||||
#----------
|
||||
|
||||
api() {
|
||||
URI="$1"
|
||||
curl -s -H "X-Api-Key:${API_KEY}" "${CROWDSEC_API_URL}${URI}"
|
||||
}
|
||||
|
||||
output_new_decisions() {
|
||||
jq -c '.new | map(select(.origin!="CAPI")) | .[] | del(.id) | (.. | .duration?) |= capture("(?<d>[[:digit:]]+h[[:digit:]]+m)").d' <(output) | sort
|
||||
}
|
||||
|
@ -62,7 +55,7 @@ output_new_decisions() {
|
|||
}
|
||||
|
||||
@test "test startup" {
|
||||
rune -0 api "/v1/decisions/stream?startup=true"
|
||||
rune -0 lapi-get "/v1/decisions/stream?startup=true"
|
||||
rune -0 output_new_decisions
|
||||
assert_output - <<-EOT
|
||||
{"duration":"2h59m","origin":"test","scenario":"crowdsecurity/test","scope":"Ip","type":"ban","value":"127.0.0.2"}
|
||||
|
@ -71,7 +64,7 @@ output_new_decisions() {
|
|||
}
|
||||
|
||||
@test "test startup with scenarios containing" {
|
||||
rune -0 api "/v1/decisions/stream?startup=true&scenarios_containing=ssh_bf"
|
||||
rune -0 lapi-get "/v1/decisions/stream?startup=true&scenarios_containing=ssh_bf"
|
||||
rune -0 output_new_decisions
|
||||
assert_output - <<-EOT
|
||||
{"duration":"2h59m","origin":"another_origin","scenario":"crowdsecurity/ssh_bf","scope":"Ip","type":"ban","value":"127.0.0.1"}
|
||||
|
@ -80,7 +73,7 @@ output_new_decisions() {
|
|||
}
|
||||
|
||||
@test "test startup with multiple scenarios containing" {
|
||||
rune -0 api "/v1/decisions/stream?startup=true&scenarios_containing=ssh_bf,test"
|
||||
rune -0 lapi-get "/v1/decisions/stream?startup=true&scenarios_containing=ssh_bf,test"
|
||||
rune -0 output_new_decisions
|
||||
assert_output - <<-EOT
|
||||
{"duration":"2h59m","origin":"another_origin","scenario":"crowdsecurity/ssh_bf","scope":"Ip","type":"ban","value":"127.0.0.1"}
|
||||
|
@ -89,12 +82,12 @@ output_new_decisions() {
|
|||
}
|
||||
|
||||
@test "test startup with unknown scenarios containing" {
|
||||
rune -0 api "/v1/decisions/stream?startup=true&scenarios_containing=unknown"
|
||||
rune -0 lapi-get "/v1/decisions/stream?startup=true&scenarios_containing=unknown"
|
||||
assert_output '{"deleted":null,"new":null}'
|
||||
}
|
||||
|
||||
@test "test startup with scenarios containing and not containing" {
|
||||
rune -0 api "/v1/decisions/stream?startup=true&scenarios_containing=test&scenarios_not_containing=ssh_bf"
|
||||
rune -0 lapi-get "/v1/decisions/stream?startup=true&scenarios_containing=test&scenarios_not_containing=ssh_bf"
|
||||
rune -0 output_new_decisions
|
||||
assert_output - <<-EOT
|
||||
{"duration":"2h59m","origin":"test","scenario":"crowdsecurity/test","scope":"Ip","type":"ban","value":"127.0.0.2"}
|
||||
|
@ -103,7 +96,7 @@ output_new_decisions() {
|
|||
}
|
||||
|
||||
@test "test startup with scenarios containing and not containing 2" {
|
||||
rune -0 api "/v1/decisions/stream?startup=true&scenarios_containing=longest&scenarios_not_containing=ssh_bf,test"
|
||||
rune -0 lapi-get "/v1/decisions/stream?startup=true&scenarios_containing=longest&scenarios_not_containing=ssh_bf,test"
|
||||
rune -0 output_new_decisions
|
||||
assert_output - <<-EOT
|
||||
{"duration":"4h59m","origin":"test","scenario":"crowdsecurity/longest","scope":"Ip","type":"ban","value":"127.0.0.1"}
|
||||
|
@ -111,7 +104,7 @@ output_new_decisions() {
|
|||
}
|
||||
|
||||
@test "test startup with scenarios not containing" {
|
||||
rune -0 api "/v1/decisions/stream?startup=true&scenarios_not_containing=ssh_bf"
|
||||
rune -0 lapi-get "/v1/decisions/stream?startup=true&scenarios_not_containing=ssh_bf"
|
||||
rune -0 output_new_decisions
|
||||
assert_output - <<-EOT
|
||||
{"duration":"2h59m","origin":"test","scenario":"crowdsecurity/test","scope":"Ip","type":"ban","value":"127.0.0.2"}
|
||||
|
@ -120,7 +113,7 @@ output_new_decisions() {
|
|||
}
|
||||
|
||||
@test "test startup with multiple scenarios not containing" {
|
||||
rune -0 api "/v1/decisions/stream?startup=true&scenarios_not_containing=ssh_bf,test"
|
||||
rune -0 lapi-get "/v1/decisions/stream?startup=true&scenarios_not_containing=ssh_bf,test"
|
||||
rune -0 output_new_decisions
|
||||
assert_output - <<-EOT
|
||||
{"duration":"4h59m","origin":"test","scenario":"crowdsecurity/longest","scope":"Ip","type":"ban","value":"127.0.0.1"}
|
||||
|
@ -128,7 +121,7 @@ output_new_decisions() {
|
|||
}
|
||||
|
||||
@test "test startup with origins parameter" {
|
||||
rune -0 api "/v1/decisions/stream?startup=true&origins=another_origin"
|
||||
rune -0 lapi-get "/v1/decisions/stream?startup=true&origins=another_origin"
|
||||
rune -0 output_new_decisions
|
||||
assert_output - <<-EOT
|
||||
{"duration":"1h59m","origin":"another_origin","scenario":"crowdsecurity/test","scope":"Ip","type":"ban","value":"127.0.0.2"}
|
||||
|
@ -137,7 +130,7 @@ output_new_decisions() {
|
|||
}
|
||||
|
||||
@test "test startup with multiple origins parameter" {
|
||||
rune -0 api "/v1/decisions/stream?startup=true&origins=another_origin,test"
|
||||
rune -0 lapi-get "/v1/decisions/stream?startup=true&origins=another_origin,test"
|
||||
rune -0 output_new_decisions
|
||||
assert_output - <<-EOT
|
||||
{"duration":"2h59m","origin":"test","scenario":"crowdsecurity/test","scope":"Ip","type":"ban","value":"127.0.0.2"}
|
||||
|
@ -146,7 +139,7 @@ output_new_decisions() {
|
|||
}
|
||||
|
||||
@test "test startup with unknown origins" {
|
||||
rune -0 api "/v1/decisions/stream?startup=true&origins=unknown"
|
||||
rune -0 lapi-get "/v1/decisions/stream?startup=true&origins=unknown"
|
||||
assert_output '{"deleted":null,"new":null}'
|
||||
}
|
||||
|
||||
|
|
|
@ -9,8 +9,6 @@ setup_file() {
|
|||
./instance-crowdsec start
|
||||
API_KEY=$(cscli bouncers add testbouncer -o raw)
|
||||
export API_KEY
|
||||
CROWDSEC_API_URL="http://localhost:8080"
|
||||
export CROWDSEC_API_URL
|
||||
}
|
||||
|
||||
teardown_file() {
|
||||
|
@ -23,11 +21,6 @@ setup() {
|
|||
|
||||
#----------
|
||||
|
||||
api() {
|
||||
URI="$1"
|
||||
curl -s -H "X-Api-Key: ${API_KEY}" "${CROWDSEC_API_URL}${URI}"
|
||||
}
|
||||
|
||||
@test "adding decisions for multiple scopes" {
|
||||
rune -0 cscli decisions add -i '1.2.3.6'
|
||||
assert_stderr --partial 'Decision successfully added'
|
||||
|
@ -36,28 +29,28 @@ api() {
|
|||
}
|
||||
|
||||
@test "stream start (implicit ip scope)" {
|
||||
rune -0 api "/v1/decisions/stream?startup=true"
|
||||
rune -0 lapi-get "/v1/decisions/stream?startup=true"
|
||||
rune -0 jq -r '.new' <(output)
|
||||
assert_output --partial '1.2.3.6'
|
||||
refute_output --partial 'toto'
|
||||
}
|
||||
|
||||
@test "stream start (explicit ip scope)" {
|
||||
rune -0 api "/v1/decisions/stream?startup=true&scopes=ip"
|
||||
rune -0 lapi-get "/v1/decisions/stream?startup=true&scopes=ip"
|
||||
rune -0 jq -r '.new' <(output)
|
||||
assert_output --partial '1.2.3.6'
|
||||
refute_output --partial 'toto'
|
||||
}
|
||||
|
||||
@test "stream start (user scope)" {
|
||||
rune -0 api "/v1/decisions/stream?startup=true&scopes=user"
|
||||
rune -0 lapi-get "/v1/decisions/stream?startup=true&scopes=user"
|
||||
rune -0 jq -r '.new' <(output)
|
||||
refute_output --partial '1.2.3.6'
|
||||
assert_output --partial 'toto'
|
||||
}
|
||||
|
||||
@test "stream start (user+ip scope)" {
|
||||
rune -0 api "/v1/decisions/stream?startup=true&scopes=user,ip"
|
||||
rune -0 lapi-get "/v1/decisions/stream?startup=true&scopes=user,ip"
|
||||
rune -0 jq -r '.new' <(output)
|
||||
assert_output --partial '1.2.3.6'
|
||||
assert_output --partial 'toto'
|
||||
|
|
|
@ -9,8 +9,6 @@ setup_file() {
|
|||
./instance-crowdsec start
|
||||
API_KEY=$(cscli bouncers add testbouncer -o raw)
|
||||
export API_KEY
|
||||
CROWDSEC_API_URL="http://localhost:8080"
|
||||
export CROWDSEC_API_URL
|
||||
}
|
||||
|
||||
teardown_file() {
|
||||
|
@ -23,11 +21,6 @@ setup() {
|
|||
|
||||
#----------
|
||||
|
||||
api() {
|
||||
URI="$1"
|
||||
curl -s -H "X-Api-Key: ${API_KEY}" "${CROWDSEC_API_URL}${URI}"
|
||||
}
|
||||
|
||||
@test "adding decisions for multiple ips" {
|
||||
rune -0 cscli decisions add -i '1111:2222:3333:4444:5555:6666:7777:8888'
|
||||
assert_stderr --partial 'Decision successfully added'
|
||||
|
@ -38,7 +31,7 @@ api() {
|
|||
}
|
||||
|
||||
@test "stream start" {
|
||||
rune -0 api "/v1/decisions/stream?startup=true"
|
||||
rune -0 lapi-get "/v1/decisions/stream?startup=true"
|
||||
if is_db_mysql; then sleep 3; fi
|
||||
rune -0 jq -r '.new' <(output)
|
||||
assert_output --partial '1111:2222:3333:4444:5555:6666:7777:8888'
|
||||
|
@ -49,7 +42,7 @@ api() {
|
|||
@test "stream cont (add)" {
|
||||
rune -0 cscli decisions add -i '1.2.3.5'
|
||||
if is_db_mysql; then sleep 3; fi
|
||||
rune -0 api "/v1/decisions/stream"
|
||||
rune -0 lapi-get "/v1/decisions/stream"
|
||||
rune -0 jq -r '.new' <(output)
|
||||
assert_output --partial '1.2.3.5'
|
||||
}
|
||||
|
@ -57,13 +50,13 @@ api() {
|
|||
@test "stream cont (del)" {
|
||||
rune -0 cscli decisions delete -i '1.2.3.4'
|
||||
if is_db_mysql; then sleep 3; fi
|
||||
rune -0 api "/v1/decisions/stream"
|
||||
rune -0 lapi-get "/v1/decisions/stream"
|
||||
rune -0 jq -r '.deleted' <(output)
|
||||
assert_output --partial '1.2.3.4'
|
||||
}
|
||||
|
||||
@test "stream restart" {
|
||||
rune -0 api "/v1/decisions/stream?startup=true"
|
||||
rune -0 lapi-get "/v1/decisions/stream?startup=true"
|
||||
api_out=${output}
|
||||
rune -0 jq -r '.deleted' <(output)
|
||||
assert_output --partial '1.2.3.4'
|
||||
|
|
|
@ -276,3 +276,17 @@ rune() {
|
|||
run --separate-stderr "$@"
|
||||
}
|
||||
export -f rune
|
||||
|
||||
# call the lapi through unix socket with an API_KEY (authenticates as a bouncer)
|
||||
lapi-get() {
|
||||
[[ -z "$1" ]] && { fail "lapi-get: missing path"; }
|
||||
[[ -z "$API_KEY" ]] && { fail "lapi-get: missing API_KEY"; }
|
||||
local socket
|
||||
socket=$(config_get '.api.server.listen_socket')
|
||||
[[ -z "$socket" ]] && { fail "lapi-get: missing .api.server.listen_socket"; }
|
||||
|
||||
# curl needs a fake hostname when using a unix socket
|
||||
curl -s -f -H "X-Api-Key: $API_KEY" --unix-socket "$socket" "http://lapi$1"
|
||||
}
|
||||
export -f lapi-get
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue