github.com/crowdsecurity/crowdsec@v1.6.1/test/bats/97_ipv4_single.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 "API - first decisions list: must be empty" {
    40      rune -0 api '/v1/decisions'
    41      assert_output 'null'
    42  }
    43  
    44  @test "adding decision for 1.2.3.4" {
    45      rune -0 cscli decisions add -i '1.2.3.4'
    46      assert_stderr --partial 'Decision successfully added'
    47  }
    48  
    49  @test "CLI - all decisions" {
    50      rune -0 cscli decisions list -o json
    51      rune -0 jq -r '.[0].decisions[0].value' <(output)
    52      assert_output '1.2.3.4'
    53  }
    54  
    55  @test "API - all decisions" {
    56      rune -0 api '/v1/decisions'
    57      rune -0 jq -c '[ . | length, .[0].value ]' <(output)
    58      assert_output '[1,"1.2.3.4"]'
    59  }
    60  
    61  # check ip match
    62  
    63  @test "CLI - decision for 1.2.3.4" {
    64      rune -0 cscli decisions list -i '1.2.3.4' -o json
    65      rune -0 jq -r '.[0].decisions[0].value' <(output)
    66      assert_output '1.2.3.4'
    67  }
    68  
    69  @test "API - decision for 1.2.3.4" {
    70      rune -0 api '/v1/decisions?ip=1.2.3.4'
    71      rune -0 jq -r '.[0].value' <(output)
    72      assert_output '1.2.3.4'
    73  }
    74  
    75  @test "CLI - decision for 1.2.3.5" {
    76      rune -0 cscli decisions list -i '1.2.3.5' -o json
    77      assert_json '[]'
    78  }
    79  
    80  @test "API - decision for 1.2.3.5" {
    81      rune -0 api '/v1/decisions?ip=1.2.3.5'
    82      assert_output 'null'
    83  }
    84  
    85  ## check outer range match
    86  
    87  @test "CLI - decision for 1.2.3.0/24" {
    88      rune -0 cscli decisions list -r '1.2.3.0/24' -o json
    89      assert_json '[]'
    90  }
    91  
    92  @test "API - decision for 1.2.3.0/24" {
    93      rune -0 api '/v1/decisions?range=1.2.3.0/24'
    94      assert_output 'null'
    95  }
    96  
    97  @test "CLI - decisions where IP in 1.2.3.0/24" {
    98      rune -0 cscli decisions list -r '1.2.3.0/24' --contained -o json
    99      rune -0 jq -r '.[0].decisions[0].value' <(output)
   100      assert_output '1.2.3.4'
   101  }
   102  
   103  @test "API - decisions where IP in 1.2.3.0/24" {
   104      rune -0 api '/v1/decisions?range=1.2.3.0/24&contains=false'
   105      rune -0 jq -r '.[0].value' <(output)
   106      assert_output '1.2.3.4'
   107  }