#!/bin/bash

if [ ! -e "setup.py" ]; then
  echo "The script must be executed from within the repository's root directory."
  exit 1
fi

export PYTHONPATH="$(pwd)"

mkdir -p var/cache &>/dev/null

RES_FILE=$(mktemp)
echo 0 >$RES_FILE

LOG_FILE=$(mktemp)
echo "Let's start" >$LOG_FILE

function reset() {
  AROUTESERVER="./scripts/arouteserver"
  CFG_FILE="tests/var/arouteserver.yml"
  GENERAL="config.d/general.yml"
  CLIENTS="config.d/clients.yml"
  BOGONS="config.d/bogons.yml"
  LOGGING_LEVEL="ERROR"
  TITLE=""
  SUB_TEST=""
}

function build_cmd() {
  echo "" >>${LOG_FILE}
  echo "Test case: ${TITLE} (build_cmd)" 1>&2 | tee -a ${LOG_FILE}
  echo "#####################################################" >>${LOG_FILE}
  COMMAND="$1"
  shift
  $AROUTESERVER $COMMAND --cfg $CFG_FILE --logging-level $LOGGING_LEVEL --general $GENERAL --clients $CLIENTS --bogons $BOGONS $@ 2>&1 | tee -a ${LOG_FILE}
}

function run_cmd() {
  echo "" >>${LOG_FILE}
  echo "Test case: ${TITLE} (run_cmd)" 1>&2 | tee -a ${LOG_FILE}
  echo "#####################################################" >>${LOG_FILE}
  COMMAND="$1"
  shift
  $AROUTESERVER $COMMAND --cfg $CFG_FILE $@ 2>&1 | tee -a ${LOG_FILE}
}

function validate_bird() {
  if [ "${DO_NOT_PERFORM_VALIDATION:-0}" == "1" ]; then
    echo "Validation skipped because DO_NOT_PERFORM_VALIDATION == 1"
    return
  fi

  echo "Test case: ${TITLE} (validate BIRD config)" 1>&2 | tee -a ${LOG_FILE}

  BGP_CFG_FILE="$1"
  BIRD_VER="$2"

  docker run \
    -t \
    --rm \
    -v "${BGP_CFG_FILE}":/etc/bird/bird.cfg \
    pierky/bird:${BIRD_VER} \
    bird \
      -c /etc/bird/bird.cfg \
      -d \
      -p

  if [ $? -ne 0 ]; then
    error "BIRD config validation failed (${BGP_CFG_FILE})."
  fi
}

function validate_openbgpd() {
  if [ "${DO_NOT_PERFORM_VALIDATION:-0}" == "1" ]; then
    echo "Validation skipped because DO_NOT_PERFORM_VALIDATION == 1"
    return
  fi

  echo "Test case: ${TITLE} (validate OpenBGPD config)" 1>&2 | tee -a ${LOG_FILE}

  BGP_CFG_FILE="$1"
  OPENBGPD_VER="$2"

  docker run \
    -t \
    --rm \
    -v "${BGP_CFG_FILE}":/etc/bgpd/bgpd.conf \
    pierky/openbgpd:"${OPENBGPD_VER}" \
    bgpd \
      -f /etc/bgpd/bgpd.conf \
      -d \
      -n

  if [ $? -ne 0 ]; then
    error "OpenBGPD config validation failed (${BGP_CFG_FILE})."
  fi
}

function error() {
  echo "Failure during '$TITLE' at line $SUB_TEST: $1" | tee -a ${LOG_FILE}
  echo 1 >$RES_FILE
}

function must_contain() {
  grep "$1" &>/dev/null || error "\"$1\" not found."
}

function must_not_contain() {
  grep "$1" &>/dev/null

  if [ $? -eq 0 ]; then
    error "\"$1\" found."
  fi
}

BIRD2_LATEST_VER=$(cat << EOF | python -
from pierky.arouteserver.builder import BIRDConfigBuilder
print([_ for _ in BIRDConfigBuilder.AVAILABLE_VERSION if _.startswith("2")][-1])
EOF
)
OPENBGPD_LATEST_VER=$(cat << EOF | python -
from pierky.arouteserver.builder import OpenBGPDConfigBuilder
print(OpenBGPDConfigBuilder.AVAILABLE_VERSION[-1])
EOF
)

# ---------------------------------------------
# Build and validate configs

# RFC8950
reset
GENERAL="tests/var/general.yml"
cat <<EOF >$GENERAL
cfg:
  rs_as: 99999999
  router_id: "192.0.2.2"
  rfc8950: True
EOF
TITLE="RFC8950 support, BIRD 1.x (must fail)"
EXP_ERR="RFC8950 is not supported on BIRD 1.x"

SUB_TEST="$LINENO"
build_cmd "bird" \
  --target-ver 1.6.8 \
  --ip-ver 4 | must_contain "${EXP_ERR}"

TITLE="RFC8950 support, BIRD 2.x (must succeed)"
SUB_TEST="$LINENO"
build_cmd "bird" \
  --target-ver ${BIRD2_LATEST_VER} | must_not_contain "${EXP_ERR}"

# Multiple router_id
reset
GENERAL="tests/var/general.yml"
cat examples/rich/general.yml | sed 's/  router_id:.*/  router_id: ["192.0.2.2", "192.0.2.3"]/' >$GENERAL
CLIENTS="examples/rich/clients.yml"

TITLE="Multiple router_id, BIRD"
OUTPUT_CFG="$(mktemp)"
SUB_TEST="$LINENO"
build_cmd "bird" \
  --target-ver ${BIRD2_LATEST_VER} \
  --output ${OUTPUT_CFG} \
  --ip-ver 4
file_192_0_2_2=$(cat ${OUTPUT_CFG} | grep "192.0.2.2" | cut -d ':' -f 2)
file_192_0_2_3=$(cat ${OUTPUT_CFG} | grep "192.0.2.3" | cut -d ':' -f 2)
diff="$(diff ${file_192_0_2_2} ${file_192_0_2_3})"
diff_len=$(echo "${diff}" | wc -l)
if [ ${diff_len} != 4 ]; then
  error "diff_len is not 4 but ${diff_len}\n\nDiff follows: ${diff}"
fi
cat ${file_192_0_2_2} | must_contain "router id 192.0.2.2;"
cat ${file_192_0_2_3} | must_contain "router id 192.0.2.3;"

TITLE="Multiple router_id, OpenBGPD"
OUTPUT_CFG="$(mktemp)"
SUB_TEST="$LINENO"
build_cmd "openbgpd" \
  --target-ver ${OPENBGPD_LATEST_VER} \
  --output ${OUTPUT_CFG} \
  --ignore-issues extended_communities
file_192_0_2_2=$(cat ${OUTPUT_CFG} | grep "192.0.2.2" | cut -d ':' -f 2)
file_192_0_2_3=$(cat ${OUTPUT_CFG} | grep "192.0.2.3" | cut -d ':' -f 2)
diff="$(diff ${file_192_0_2_2} ${file_192_0_2_3})"
diff_len=$(echo "${diff}" | wc -l)
if [ ${diff_len} != 4 ]; then
  error "diff_len is not 4 but ${diff_len}\n\nDiff follows: ${diff}"
fi
cat ${file_192_0_2_2} | must_contain "router-id 192.0.2.2"
cat ${file_192_0_2_3} | must_contain "router-id 192.0.2.3"

# Custom options
reset
CLIENTS="tests/var/clients.yml"
cat <<EOF >$CLIENTS
clients:
  - asn: 123
    ip:
    - "192.0.2.11"
    - "2001:db8::123:456"
    cfg:
      custom_options:
        bird:
          any:
            protocol:
              config_lines:
              - interface "eth0";
          ipv6:
            channel:
              config_lines:
              - extended next hop on;
              - aigp on;
        openbgpd:
          any:
            client:
              config_lines:
              - depend on eth0
EOF
SUB_TEST="$LINENO"
TITLE="Validate custom options"

OUTPUT_CFG="$(mktemp)"
build_cmd "bird" \
  --target-ver "${BIRD2_LATEST_VER}" \
  --output "${OUTPUT_CFG}"
validate_bird "${OUTPUT_CFG}" "${BIRD2_LATEST_VER}"

OUTPUT_CFG="$(mktemp)"
build_cmd "openbgpd" \
  --target-ver "${OPENBGPD_LATEST_VER}" \
  --output "${OUTPUT_CFG}"
validate_openbgpd "${OUTPUT_CFG}" "${OPENBGPD_LATEST_VER}"

# BGP roles
reset
GENERAL="tests/var/general.yml"
cat <<EOF >$GENERAL
cfg:
  rs_as: 99999999
  router_id: "192.0.2.2"
  filtering:
    roles:
      enabled: True
EOF
CLIENTS="tests/var/clients.yml"
EXP_ERR="RFC9234 roles are not available"
TITLE="RFC9234 roles support"

SUB_TEST="$LINENO"
build_cmd "bird" \
  --target-ver 1.6.8 \
  --ip-ver 4 | must_contain "${EXP_ERR}"

OUTPUT_CFG="$(mktemp)"
SUB_TEST="$LINENO"
build_cmd "bird" \
  --target-ver 1.6.8 \
  --ip-ver 4 \
  --ignore-issues roles_not_available \
  --output "${OUTPUT_CFG}" | must_not_contain "${EXP_ERR}"
validate_bird "${OUTPUT_CFG}" 1.6.8

SUB_TEST="$LINENO"
build_cmd "bird" \
  --target-ver ${BIRD2_LATEST_VER} | must_not_contain "${EXP_ERR}"

SUB_TEST="$LINENO"
build_cmd "openbgpd" \
  --target-ver 7.4 | must_contain "${EXP_ERR}"

OUTPUT_CFG="$(mktemp)"
SUB_TEST="$LINENO"
build_cmd "openbgpd" \
  --target-ver 7.4 \
  --ignore-issues roles_not_available \
  --output "${OUTPUT_CFG}" | must_not_contain "${EXP_ERR}"
validate_openbgpd "${OUTPUT_CFG}" 7.4

SUB_TEST="$LINENO"
build_cmd "bird" \
  --target-ver ${OPENBGPD_LATEST_VER} | must_not_contain "${EXP_ERR}"

EXP_ERR="Implementation of RFC9234 roles in OpenBGPD <= 7.7 is discouraged"
SUB_TEST="$LINENO"
build_cmd "openbgpd" \
  --target-ver 7.5 | must_contain "${EXP_ERR}"

SUB_TEST="$LINENO"
build_cmd "openbgpd" \
  --target-ver ${OPENBGPD_LATEST_VER} | must_not_contain "${EXP_ERR}"

# BGP Extended Communities and 32bit ASNs
reset
GENERAL="tests/var/general.yml"
cat <<EOF >$GENERAL
cfg:
  rs_as: 99999999
  router_id: "192.0.2.2"
  communities:
    announce_to_peer:
      ext: "rt:rs_as:peer_as"
EOF
CLIENTS="tests/var/clients.yml"
cat <<EOF >$CLIENTS
clients:
  - asn: 88888888
    ip:
    - "192.0.2.11"
    - "2001:db8:1:1::11"
EOF
SUB_TEST="$LINENO"
TITLE="Validate BIRD BGP Extended Communities and 32bit ASNs"
OUTPUT_CFG="$(mktemp)"
build_cmd "bird" \
  --ip-ver 4 \
  --ignore-issues ext-comms-32bit-asn \
  --output "${OUTPUT_CFG}"
validate_bird "${OUTPUT_CFG}" "${BIRD2_LATEST_VER}"
SUB_TEST="$LINENO"
TITLE="Validate BIRD BGP Extended Communities and 32bit ASNs (1.6.8)"
OUTPUT_CFG="$(mktemp)"
build_cmd "bird" \
  --target-ver 1.6.8 \
  --ip-ver 4 \
  --ignore-issues ext-comms-32bit-asn \
  --output "${OUTPUT_CFG}"
validate_bird "${OUTPUT_CFG}" 1.6.8

SUB_TEST="$LINENO"
TITLE="Validate OpenBGPD BGP Extended Communities and 32bit ASNs"
OUTPUT_CFG="$(mktemp)"
build_cmd "openbgpd" \
  --ignore-issues ext-comms-32bit-asn extended_communities \
  --target-ver "${OPENBGPD_LATEST_VER}" \
  --output "${OUTPUT_CFG}"
validate_openbgpd "${OUTPUT_CFG}" "${OPENBGPD_LATEST_VER}"

# ---------------------------------------------
# ARIN OriginAS deprecation
reset
TITLE="ARIN OriginAS deprecation (missing source)"
SUB_TEST="$LINENO"
GENERAL="tests/var/general.yml"
cat <<EOF >$GENERAL
cfg:
  rs_as: 999
  router_id: "192.0.2.2"
  filtering:
    irrdb:
      use_arin_bulk_whois_data:
        enabled: True
EOF
build_cmd "openbgpd" | must_contain "A source must be set when 'filtering.irrdb.use_arin_bulk_whois_data.enabled' is set to True"

reset
TITLE="ARIN OriginAS deprecation (warning)"
SUB_TEST="$LINENO"
GENERAL="tests/var/general.yml"
LOGGING_LEVEL="WARNING"
cat <<EOF >$GENERAL
cfg:
  rs_as: 999
  router_id: "192.0.2.2"
  filtering:
    irrdb:
      use_arin_bulk_whois_data:
        enabled: True
        source: http://127.0.0.1/
EOF
build_cmd "openbgpd" | must_contain "Please note that the 'filtering.irrdb.use_arin_bulk_whois_data' feature is deprecated"

# ---------------------------------------------
# IPv6 link-local NEXT_HOP
reset
TITLE="IPv6 link-local NEXT_HOP"
SUB_TEST="$LINENO"
CLIENTS="tests/var/clients.yml"
cat <<EOF >$CLIENTS
clients:
  - asn: 1
    ip:
    - "fe80::1"
EOF
build_cmd "bird" --target-ver "${BIRD2_LATEST_VER}" | must_contain "ERROR Compatibility issue ID 'ipv6_link_local_next_hop'"
build_cmd "bird" --target-ver "${BIRD2_LATEST_VER}" --ignore-issues ipv6_link_local_next_hop | must_contain "IPv6 link-local one; we can't check it"

# ---------------------------------------------
# BGP Extended Communities and 32bit ASNs
reset
TITLE="BGP Extended Communities and 32bit ASNs"
SUB_TEST="$LINENO"
GENERAL="tests/var/general.yml"
cat <<EOF >$GENERAL
cfg:
  rs_as: 99999999
  router_id: "192.0.2.2"
  communities:
    prepend_once_to_peer:
      ext: "rt:rs_as:peer_as"
EOF
CLIENTS="tests/var/clients.yml"
cat <<EOF >$CLIENTS
clients:
  - asn: 88888888
    ip:
    - "192.0.2.11"
    - "2001:db8:1:1::11"
EOF
build_cmd "openbgpd" | must_contain "One or more BGP extended communities are defined"

# ---------------------------------------------
# MaxPrefix limit when PeeringDB record not present
reset
TITLE="MaxPrefix limit when PeeringDB record not present"
GENERAL="tests/var/general.yml"
cat <<EOF >$GENERAL
cfg:
  rs_as: 999
  router_id: "192.0.2.2"
  filtering:
    max_prefix:
      action: "shutdown"
      restart_after: 5
      general_limit_ipv4: 1000
      general_limit_ipv6: 100
      count_rejected_routes: false
      peering_db:
        enabled: true
EOF
CLIENTS="tests/var/clients.yml"
cat <<EOF >$CLIENTS
clients:
  - asn: 136127
    ip:
    - "192.0.2.11"
    - "2001:db8:1:1::11"
EOF
SUB_TEST="$LINENO"
build_cmd "bird" --ip-ver 4 | must_contain "import limit 1000 action disable;"

# ---------------------------------------------
# Environment variables expansion in general.yml
reset
TITLE="Environment variables expansion in general.yml"
SUB_TEST="$LINENO"
GENERAL="tests/var/general-env-vars-and-reject-reasons.yml"
export RS_ASN=9999
export ROUTER_ID="192.0.2.200"
build_cmd "bird" --ip-ver 4 | must_contain "router id 192.0.2.200"
unset RS_ASN
unset ROUTER_ID

# ---------------------------------------------
# YAML include files
reset
TITLE="Configuration !include"
GENERAL_RS1="tests/var/general-rs1.yml"
cat <<EOF >$GENERAL_RS1
cfg:
  router_id: "192.0.2.1"
  !include general-shared.yml
EOF
GENERAL_RS2="tests/var/general-rs2.yml"
cat <<EOF >$GENERAL_RS2
cfg:
  router_id: "192.0.2.2"
  !include general-shared.yml
EOF
GENERAL_SHARED="tests/var/general-shared.yml"
cat <<EOF >$GENERAL_SHARED
  rs_as: 999
  passive: True
  gtsm: True
EOF
SUB_TEST="$LINENO"
GENERAL="$GENERAL_RS1"
build_cmd "bird" --ip-ver 4 | must_contain "router id 192.0.2.1"
SUB_TEST="$LINENO"
GENERAL="$GENERAL_RS2"
build_cmd "bird" --ip-ver 4 | must_contain "router id 192.0.2.2"

# ---------------------------------------------
# RFC1997 'pass' policy and bgp comms collision
reset
TITLE="RFC1997 'pass' policy and BGP comms collision"
SUB_TEST="$LINENO"
GENERAL="tests/var/general.yml"
cat <<EOF >$GENERAL
cfg:
  rs_as: 999
  router_id: "192.0.2.2"
  communities:
    prepend_once_to_any:
      ext: "ro:65535:65281"
EOF
build_cmd "openbgpd" | must_contain "A collision has been detected with the following community: prepend_once_to_any"

## ---------------------------------------------
## custom BGP communities
#reset
#TITLE="Custom BGP communities"
#SUB_TEST="$LINENO"
#GENERAL="tests/var/general.yml"
#cat << EOF > $GENERAL
#cfg:
#  rs_as: 999
#  router_id: "192.0.2.2"
#  custom_communities:
#    city_haarlem:
#      std: "65501:1"
#    city_amsterdam:
#      std: "65501:2"
#EOF
#CLIENTS="`mktemp`"
#run_cmd "clients-from-euroix" --url https://my.ams-ix.net/api/v1/members.json 2 --vlan-id 502 --guess-custom-bgp-communities city -o $CLIENTS
#cat $CLIENTS | must_contain "city_amsterdam"
#cat $CLIENTS | must_contain "city_haarlem"
#build_cmd "bird" --ip-ver 4 | must_contain "bgp_community.add((65501, 2));"
#rm $CLIENTS

# ---------------------------------------------
reset
TITLE="OpenBGPD path-hiding latest"
SUB_TEST="$LINENO"
build_cmd "openbgpd" | must_not_contain "ERROR Compatibility issue ID 'path_hiding'"

# ---------------------------------------------
reset
TITLE="OpenBGPD large comms only"
GENERAL="tests/var/general.yml"
cat <<EOF >$GENERAL
cfg:
  rs_as: 999
  router_id: "192.0.2.2"
  communities:
    do_not_announce_to_peer:
      lrg: "rs_as:0:peer_as"
EOF

EXP_ERR="ERROR Compatibility issue ID 'large_communities'. The community 'do_not_announce_to_peer'"

SUB_TEST="$LINENO"
build_cmd "openbgpd" | must_not_contain "$EXP_ERR"

SUB_TEST="$LINENO"
build_cmd "openbgpd" --ignore-issues "blackhole_filtering_rewrite_ipv6_nh" | must_not_contain "'do_not_announce_to_peer'"

# ---------------------------------------------
reset
TITLE="OpenBGPD tag_and_reject reject policy"
GENERAL="tests/var/general.yml"
cat <<EOF >$GENERAL
cfg:
  rs_as: 999
  router_id: "192.0.2.2"
  filtering:
    reject_policy:
      policy: tag_and_reject
EOF

EXP_ERR="ERROR For OpenBGP, 'reject_policy' can't be set to 'tag_and_reject'."

SUB_TEST="$LINENO"
build_cmd "openbgpd" | must_not_contain "$EXP_ERR"

# ---------------------------------------------
reset
TITLE="OpenBGPD max_prefix_count_rejected_routes"
GENERAL="tests/var/general.yml"
cat <<EOF >$GENERAL
cfg:
  rs_as: 999
  router_id: "192.0.2.2"
  filtering:
    max_prefix:
      count_rejected_routes: False
EOF

EXP_ERR="the only available behaviour is to have the rejected routes counted towards the limit"

SUB_TEST="$LINENO"
build_cmd "openbgpd" | must_contain "$EXP_ERR"

# ---------------------------------------------
reset
TITLE="BIRD 2.0.7 max_prefix_count_rejected_routes"
GENERAL="tests/var/general.yml"
cat <<EOF >$GENERAL
cfg:
  rs_as: 999
  router_id: "192.0.2.2"
EOF

EXP_ERR="BIRD 2.0.7 is affected by an issue that prevents that statement from working"

SUB_TEST="$LINENO"
build_cmd "bird" --target-version 2.0.7 | must_contain "$EXP_ERR"
SUB_TEST="$LINENO"
build_cmd "bird" --target-version 2.0.7+b962967e | must_not_contain "$EXP_ERR"
SUB_TEST="$LINENO"
build_cmd "bird" --target-version ${BIRD2_LATEST_VER} | must_not_contain "$EXP_ERR"

# ---------------------------------------------
reset
TITLE="BIRD multihop with path_hiding"
GENERAL="tests/var/general.yml"
cat <<EOF >$GENERAL
cfg:
  rs_as: 999
  router_id: "192.0.2.2"
EOF
CLIENTS="tests/var/clients.yml"
cat <<EOF >$CLIENTS
clients:
  - asn: 1
    ip:
    - "192.0.2.11"
    - "2001:db8:1:1::11"
    cfg:
      multihop: 5
EOF

EXP_ERR="multihop is not supported on BIRD configurations when path_hiding mitigation is enabled"

SUB_TEST="$LINENO"
build_cmd "bird" --ip-ver 4 | must_contain "$EXP_ERR"
SUB_TEST="$LINENO"
build_cmd "bird" --target-version ${BIRD2_LATEST_VER} | must_contain "$EXP_ERR"

GENERAL="tests/var/general.yml"
cat <<EOF >$GENERAL
cfg:
  rs_as: 999
  router_id: "192.0.2.2"
  path_hiding: False
EOF

SUB_TEST="$LINENO"
build_cmd "bird" --ip-ver 4 | must_not_contain "$EXP_ERR"
SUB_TEST="$LINENO"
build_cmd "bird" --target-version ${BIRD2_LATEST_VER} | must_not_contain "$EXP_ERR"

# ---------------------------------------------
# clients-from-euroix
reset
TITLE="clients-from-euroix"

# 0.4 schema version:
SUB_TEST="$LINENO"
run_cmd "clients-from-euroix" --url https://my.ams-ix.net/api/v1/members.json 2 | must_contain "description: Akamai"
# 0.5 schema version:
SUB_TEST="$LINENO"
run_cmd "clients-from-euroix" --url https://portal.lonap.net/apiv1/member-list/list 1 | must_contain "AS-APPLE"
# 0.6 schema version:
# TODO: skip due to TSL cert issues on Dec 13th 2023
# SUB_TEST="$LINENO"
# run_cmd "clients-from-euroix" --url https://ixp.getafix.ph/api/v4/member-export/ixf/0.6 2 | must_contain "description: GetaFIX AS112 Blackhole"

# ---------------------------------------------
# irr-as-set command
reset
TITLE="irr-as-set"
GENERAL="tests/var/general.yml"
cat <<EOF >$GENERAL
cfg:
  rs_as: 999
  router_id: "192.0.2.2"
  filtering:
    irrdb:
      peering_db: True
EOF

SUB_TEST="$LINENO"
build_cmd "irr-as-set" --template-file-name plain_rpsl.j2 | must_contain "members:  AS-RIPENCC"

reset
TITLE="irr-as-set-include-members"
GENERAL="tests/var/general.yml"
cat <<EOF >$GENERAL
cfg:
  rs_as: 999
  router_id: "192.0.2.2"
  filtering:
    irrdb:
      peering_db: True
EOF

SUB_TEST="$LINENO"
build_cmd "irr-as-set" --template-file-name plain_rpsl.j2 --include-members "AS-ASTEST1" | must_contain "members:  AS-ASTEST1"

# ---------------------------------------------
# check-config command
reset
TITLE="check-config"
SUB_TEST="$LINENO"
GENERAL="tests/var/general-broken-yaml.yml"
cat <<EOF >$GENERAL
cfg:
  rs_as: 999
  router_id: "192.0.2.2
  filtering:
    irrdb:
      peering_db: True
EOF
run_cmd "check-config" --general "${GENERAL}" --clients "${CLIENTS}" | must_contain "Can't parse YAML file"

reset
TITLE="check-config"
SUB_TEST="$LINENO"
CLIENTS="tests/var/clients-broken-yaml.yml"
cat <<EOF >$CLIENTS
clients:
  - asn: 65501
    ip: "A"
EOF
run_cmd "check-config" --general "${GENERAL}" --clients "${CLIENTS}" | must_contain "Invalid IP address: A"

# ---------------------------------------------
ERROR=$(cat $RES_FILE)
if [ $ERROR -eq 1 ]; then
  echo "Done! ERRORS FOUND"
  echo "Printing the whole output..."
  cat ${LOG_FILE}
else
  echo "Done!"
fi
rm $RES_FILE
rm $LOG_FILE

exit $ERROR
