github.com/crowdsecurity/crowdsec@v1.6.1/test/bats/98_ipv6_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 aaaa:2222:3333:4444::/64" { 40 rune -0 cscli decisions add -r 'aaaa:2222:3333:4444::/64' 41 assert_stderr --partial 'Decision successfully added' 42 } 43 44 @test "CLI - all decisions (2)" { 45 rune -0 cscli decisions list -o json 46 rune -0 jq -r '.[].decisions[0].value' <(output) 47 assert_output 'aaaa:2222:3333:4444::/64' 48 } 49 50 @test "API - all decisions (2)" { 51 rune -0 api '/v1/decisions' 52 rune -0 jq -r '.[].value' <(output) 53 assert_output 'aaaa:2222:3333:4444::/64' 54 } 55 56 # check ip within/out of range 57 58 @test "CLI - decisions for ip aaaa:2222:3333:4444:5555:6666:7777:8888" { 59 rune -0 cscli decisions list -i 'aaaa:2222:3333:4444:5555:6666:7777:8888' -o json 60 rune -0 jq -r '.[].decisions[0].value' <(output) 61 assert_output 'aaaa:2222:3333:4444::/64' 62 } 63 64 @test "API - decisions for ip aaaa:2222:3333:4444:5555:6666:7777:8888" { 65 rune -0 api '/v1/decisions?ip=aaaa:2222:3333:4444:5555:6666:7777:8888' 66 rune -0 jq -r '.[].value' <(output) 67 assert_output 'aaaa:2222:3333:4444::/64' 68 } 69 70 @test "CLI - decisions for ip aaaa:2222:3333:4445:5555:6666:7777:8888" { 71 rune -0 cscli decisions list -i 'aaaa:2222:3333:4445:5555:6666:7777:8888' -o json 72 assert_json '[]' 73 } 74 75 @test "API - decisions for ip aaaa:2222:3333:4445:5555:6666:7777:8888" { 76 rune -0 api '/v1/decisions?ip=aaaa:2222:3333:4445:5555:6666:7777:8888' 77 assert_output 'null' 78 } 79 80 @test "CLI - decisions for ip aaa1:2222:3333:4444:5555:6666:7777:8887" { 81 rune -0 cscli decisions list -i 'aaa1:2222:3333:4444:5555:6666:7777:8887' -o json 82 assert_json '[]' 83 } 84 85 @test "API - decisions for ip aaa1:2222:3333:4444:5555:6666:7777:8887" { 86 rune -0 api '/v1/decisions?ip=aaa1:2222:3333:4444:5555:6666:7777:8887' 87 assert_output 'null' 88 } 89 90 # check subrange within/out of range 91 92 @test "CLI - decisions for range aaaa:2222:3333:4444:5555::/80" { 93 rune -0 cscli decisions list -r 'aaaa:2222:3333:4444:5555::/80' -o json 94 rune -0 jq -r '.[].decisions[0].value' <(output) 95 assert_output 'aaaa:2222:3333:4444::/64' 96 } 97 98 @test "API - decisions for range aaaa:2222:3333:4444:5555::/80" { 99 rune -0 api '/v1/decisions?range=aaaa:2222:3333:4444:5555::/80' 100 rune -0 jq -r '.[].value' <(output) 101 assert_output 'aaaa:2222:3333:4444::/64' 102 } 103 104 @test "CLI - decisions for range aaaa:2222:3333:4441:5555::/80" { 105 rune -0 cscli decisions list -r 'aaaa:2222:3333:4441:5555::/80' -o json 106 assert_json '[]' 107 108 } 109 110 @test "API - decisions for range aaaa:2222:3333:4441:5555::/80" { 111 rune -0 api '/v1/decisions?range=aaaa:2222:3333:4441:5555::/80' 112 assert_output 'null' 113 } 114 115 @test "CLI - decisions for range aaa1:2222:3333:4444:5555::/80" { 116 rune -0 cscli decisions list -r 'aaa1:2222:3333:4444:5555::/80' -o json 117 assert_json '[]' 118 } 119 120 @test "API - decisions for range aaa1:2222:3333:4444:5555::/80" { 121 rune -0 api '/v1/decisions?range=aaa1:2222:3333:4444:5555::/80' 122 assert_output 'null' 123 } 124 125 # check outer range 126 127 @test "CLI - decisions for range aaaa:2222:3333:4444:5555:6666:7777:8888/48" { 128 rune -0 cscli decisions list -r 'aaaa:2222:3333:4444:5555:6666:7777:8888/48' -o json 129 assert_json '[]' 130 } 131 132 @test "API - decisions for range aaaa:2222:3333:4444:5555:6666:7777:8888/48" { 133 rune -0 api '/v1/decisions?range=aaaa:2222:3333:4444:5555:6666:7777:8888/48' 134 assert_output 'null' 135 } 136 137 @test "CLI - decisions for ip/range in aaaa:2222:3333:4444:5555:6666:7777:8888/48" { 138 rune -0 cscli decisions list -r 'aaaa:2222:3333:4444:5555:6666:7777:8888/48' -o json --contained 139 rune -0 jq -r '.[].decisions[0].value' <(output) 140 assert_output 'aaaa:2222:3333:4444::/64' 141 } 142 143 @test "API - decisions for ip/range in aaaa:2222:3333:4444:5555:6666:7777:8888/48" { 144 rune -0 api '/v1/decisions?range=aaaa:2222:3333:4444:5555:6666:7777:8888/48&contains=false' 145 rune -0 jq -r '.[].value' <(output) 146 assert_output 'aaaa:2222:3333:4444::/64' 147 } 148 149 @test "CLI - decisions for ip/range in aaaa:2222:3333:4445:5555:6666:7777:8888/48" { 150 rune -0 cscli decisions list -r 'aaaa:2222:3333:4445:5555:6666:7777:8888/48' -o json 151 assert_json '[]' 152 } 153 154 @test "API - decisions for ip/range in aaaa:2222:3333:4445:5555:6666:7777:8888/48" { 155 rune -0 api '/v1/decisions?range=aaaa:2222:3333:4445:5555:6666:7777:8888/48' 156 assert_output 'null' 157 } 158 159 # bbbb:db8:: -> bbbb:db8:0000:0000:0000:7fff:ffff:ffff 160 161 @test "adding decision for range bbbb:db8::/81" { 162 rune -0 cscli decisions add -r 'bbbb:db8::/81' 163 assert_stderr --partial 'Decision successfully added' 164 } 165 166 @test "CLI - decisions for ip bbbb:db8:0000:0000:0000:6fff:ffff:ffff" { 167 rune -0 cscli decisions list -o json -i 'bbbb:db8:0000:0000:0000:6fff:ffff:ffff' 168 rune -0 jq -r '.[].decisions[0].value' <(output) 169 assert_output 'bbbb:db8::/81' 170 } 171 172 @test "API - decisions for ip in bbbb:db8:0000:0000:0000:6fff:ffff:ffff" { 173 rune -0 api '/v1/decisions?ip=bbbb:db8:0000:0000:0000:6fff:ffff:ffff' 174 rune -0 jq -r '.[].value' <(output) 175 assert_output 'bbbb:db8::/81' 176 } 177 178 @test "CLI - decisions for ip bbbb:db8:0000:0000:0000:8fff:ffff:ffff" { 179 rune -0 cscli decisions list -o json -i 'bbbb:db8:0000:0000:0000:8fff:ffff:ffff' 180 assert_json '[]' 181 } 182 183 @test "API - decisions for ip in bbbb:db8:0000:0000:0000:8fff:ffff:ffff" { 184 rune -0 api '/v1/decisions?ip=bbbb:db8:0000:0000:0000:8fff:ffff:ffff' 185 assert_output 'null' 186 } 187 188 @test "deleting decision for range aaaa:2222:3333:4444:5555:6666:7777:8888/48" { 189 rune -0 cscli decisions delete -r 'aaaa:2222:3333:4444:5555:6666:7777:8888/48' --contained 190 assert_stderr --partial '1 decision(s) deleted' 191 } 192 193 @test "CLI - decisions for range aaaa:2222:3333:4444::/64 after delete" { 194 rune -0 cscli decisions list -o json -r 'aaaa:2222:3333:4444::/64' 195 assert_json '[]' 196 } 197 198 @test "adding decision for ip bbbb:db8:0000:0000:0000:8fff:ffff:ffff" { 199 rune -0 cscli decisions add -i 'bbbb:db8:0000:0000:0000:8fff:ffff:ffff' 200 assert_stderr --partial 'Decision successfully added' 201 } 202 203 @test "adding decision for ip bbbb:db8:0000:0000:0000:6fff:ffff:ffff" { 204 rune -0 cscli decisions add -i 'bbbb:db8:0000:0000:0000:6fff:ffff:ffff' 205 assert_stderr --partial 'Decision successfully added' 206 } 207 208 @test "deleting decisions for range bbbb:db8::/81" { 209 rune -0 cscli decisions delete -r 'bbbb:db8::/81' --contained 210 assert_stderr --partial '2 decision(s) deleted' 211 } 212 213 @test "CLI - all decisions (3)" { 214 rune -0 cscli decisions list -o json 215 rune -0 jq -r '.[].decisions[0].value' <(output) 216 assert_output 'bbbb:db8:0000:0000:0000:8fff:ffff:ffff' 217 }