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  }