github.com/crowdsecurity/crowdsec@v1.6.1/test/bats/98_ipv4_range.bats (about) 1 #!/usr/bin/env bats 2 # vim: ft=bats:list:ts=8:sts=4:sw=4:et:ai:si: 3 4 set -u 5 6 setup_file() { 7 load "../lib/setup_file.sh" 8 ./instance-data load 9 ./instance-crowdsec start 10 API_KEY=$(cscli bouncers add testbouncer -o raw) 11 export API_KEY 12 CROWDSEC_API_URL="http://localhost:8080" 13 export CROWDSEC_API_URL 14 } 15 16 teardown_file() { 17 load "../lib/teardown_file.sh" 18 } 19 20 setup() { 21 load "../lib/setup.sh" 22 if is_db_mysql; then sleep 0.3; fi 23 } 24 25 api() { 26 URI="$1" 27 curl -s -H "X-Api-Key: ${API_KEY}" "${CROWDSEC_API_URL}${URI}" 28 } 29 30 #---------- 31 32 @test "cli - first decisions list: must be empty" { 33 # delete community pull 34 rune -0 cscli decisions delete --all 35 rune -0 cscli decisions list -o json 36 assert_json '[]' 37 } 38 39 @test "adding decision for range 4.4.4.0/24" { 40 rune -0 cscli decisions add -r '4.4.4.0/24' 41 assert_stderr --partial 'Decision successfully added' 42 } 43 44 @test "CLI - all decisions" { 45 rune -0 cscli decisions list -o json 46 rune -0 jq -r '.[0].decisions[0].value' <(output) 47 assert_output '4.4.4.0/24' 48 } 49 50 @test "API - all decisions" { 51 rune -0 api '/v1/decisions' 52 rune -0 jq -r '.[0].value' <(output) 53 assert_output '4.4.4.0/24' 54 } 55 56 # check ip within/outside of range 57 58 @test "CLI - decisions for ip 4.4.4." { 59 rune -0 cscli decisions list -i '4.4.4.3' -o json 60 rune -0 jq -r '.[0].decisions[0].value' <(output) 61 assert_output '4.4.4.0/24' 62 } 63 64 @test "API - decisions for ip 4.4.4." { 65 rune -0 api '/v1/decisions?ip=4.4.4.3' 66 rune -0 jq -r '.[0].value' <(output) 67 assert_output '4.4.4.0/24' 68 } 69 70 @test "CLI - decisions for ip contained in 4.4.4." { 71 rune -0 cscli decisions list -i '4.4.4.4' -o json --contained 72 assert_json '[]' 73 } 74 75 @test "API - decisions for ip contained in 4.4.4." { 76 rune -0 api '/v1/decisions?ip=4.4.4.4&contains=false' 77 assert_output 'null' 78 } 79 80 @test "CLI - decisions for ip 5.4.4." { 81 rune -0 cscli decisions list -i '5.4.4.3' -o json 82 assert_json '[]' 83 } 84 85 @test "API - decisions for ip 5.4.4." { 86 rune -0 api '/v1/decisions?ip=5.4.4.3' 87 assert_output 'null' 88 } 89 90 @test "CLI - decisions for range 4.4.0.0/1" { 91 rune -0 cscli decisions list -r '4.4.0.0/16' -o json 92 assert_json '[]' 93 } 94 95 @test "API - decisions for range 4.4.0.0/1" { 96 rune -0 api '/v1/decisions?range=4.4.0.0/16' 97 assert_output 'null' 98 } 99 100 @test "CLI - decisions for ip/range in 4.4.0.0/1" { 101 rune -0 cscli decisions list -r '4.4.0.0/16' -o json --contained 102 rune -0 jq -r '.[0].decisions[0].value' <(output) 103 assert_output '4.4.4.0/24' 104 } 105 106 @test "API - decisions for ip/range in 4.4.0.0/1" { 107 rune -0 api '/v1/decisions?range=4.4.0.0/16&contains=false' 108 rune -0 jq -r '.[0].value' <(output) 109 assert_output '4.4.4.0/24' 110 } 111 112 # check subrange 113 114 @test "CLI - decisions for range 4.4.4.2/2" { 115 rune -0 cscli decisions list -r '4.4.4.2/28' -o json 116 rune -0 jq -r '.[].decisions[0].value' <(output) 117 assert_output '4.4.4.0/24' 118 } 119 120 @test "API - decisions for range 4.4.4.2/2" { 121 rune -0 api '/v1/decisions?range=4.4.4.2/28' 122 rune -0 jq -r '.[].value' <(output) 123 assert_output '4.4.4.0/24' 124 } 125 126 @test "CLI - decisions for range 4.4.3.2/2" { 127 rune -0 cscli decisions list -r '4.4.3.2/28' -o json 128 assert_json '[]' 129 } 130 131 @test "API - decisions for range 4.4.3.2/2" { 132 rune -0 api '/v1/decisions?range=4.4.3.2/28' 133 assert_output 'null' 134 }