github.com/crowdsecurity/crowdsec@v1.6.1/test/lib/config/config-global (about)

     1  #!/usr/bin/env bash
     2  
     3  set -eu
     4  script_name=$0
     5  
     6  die() {
     7      echo >&2 "$@"
     8      exit 1
     9  }
    10  
    11  about() {
    12      die "usage: ${script_name} [make | load | clean]"
    13  }
    14  
    15  #shellcheck disable=SC1007
    16  THIS_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
    17  cd "${THIS_DIR}"/../../
    18  #shellcheck disable=SC1091
    19  . ./.environment.sh
    20  
    21  # you have not removed set -u above, have you?
    22  
    23  [[ -z "${TEST_DIR-}" ]] && die "\$TEST_DIR must be defined."
    24  [[ -z "${LOCAL_DIR-}" ]] && die "\$LOCAL_DIR must be defined."
    25  [[ -z "${CSCLI-}" ]] && die "\$CSCLI must be defined."
    26  [[ -z "${LOCAL_INIT_DIR-}" ]] && die "\$LOCAL_INIT_DIR must be defined."
    27  [[ -z "${PLUGIN_DIR-}" ]] && die "\$PLUGIN_DIR must be defined."
    28  [[ -z "${DB_BACKEND-}" ]] && die "\$DB_BACKEND must be defined."
    29  
    30  if [[ ! -f "${CSCLI}" ]]; then
    31      die "${CSCLI} is missing. Please build (with 'make bats-build') or install it."
    32  fi
    33  
    34  REL_CONFIG_DIR="etc/crowdsec"
    35  REL_DATA_DIR="var/lib/crowdsec/data"
    36  
    37  DATA_DIR="${LOCAL_DIR}/${REL_DATA_DIR}"
    38  export DATA_DIR
    39  CONFIG_DIR="${LOCAL_DIR}/${REL_CONFIG_DIR}"
    40  export CONFIG_DIR
    41  HUB_DIR="${CONFIG_DIR}/hub"
    42  export HUB_DIR
    43  
    44  if [[ $(uname) == "OpenBSD" ]]; then
    45      TAR=gtar
    46  else
    47      TAR=tar
    48  fi
    49  
    50  remove_init_data() {
    51      ./bin/assert-crowdsec-not-running || die "Cannot remove fixture data."
    52      rm -rf -- "${LOCAL_DIR:?}/${REL_CONFIG_DIR}"/* "${LOCAL_DIR:?}/${REL_DATA_DIR:?}"/*
    53  }
    54  
    55  # we need a separate function for initializing config when testing package
    56  # because we want to test the configuration as well
    57  config_prepare() {
    58      # remove trailing slash from CONFIG_DIR
    59      # since it's assumed to be missing during the tests
    60      yq e -i '
    61          .api.server.listen_socket="/run/crowdsec.sock" |
    62          .config_paths.config_dir |= sub("/$", "")
    63      ' "${CONFIG_DIR}/config.yaml"
    64  }
    65  
    66  make_init_data() {
    67      ./bin/assert-crowdsec-not-running || die "Cannot create fixture data."
    68  
    69      config_prepare
    70      ./instance-db config-yaml
    71      ./instance-db setup
    72  
    73      ./bin/preload-hub-items
    74  
    75      # when installed packages are always using sqlite, so no need to regenerate
    76      # local credz for sqlite
    77  
    78      [[ "${DB_BACKEND}" == "sqlite" ]] || ${CSCLI} machines add githubciXXXXXXXXXXXXXXXXXXXXXXXX --auto --force
    79  
    80      mkdir -p "$LOCAL_INIT_DIR"
    81  
    82      ./instance-db dump "${LOCAL_INIT_DIR}/database"
    83  
    84      echo "${DB_BACKEND}" > "${LOCAL_INIT_DIR}/.backend"
    85  
    86      # disable CAPI by default
    87      yq e 'del(.api.server.online_client)' -i "${CONFIG_DIR}/config.yaml"
    88  
    89      "${TAR}" -C "${LOCAL_DIR}" --create \
    90          --exclude "${REL_DATA_DIR}"/crowdsec.db \
    91          --file "${LOCAL_INIT_DIR}/init-config-data.tar" "${REL_CONFIG_DIR}" "${REL_DATA_DIR}"
    92  }
    93  
    94  load_init_data() {
    95      ./bin/assert-crowdsec-not-running || die "Cannot load fixture data."
    96  
    97      if [[ ! -f "${LOCAL_INIT_DIR}/init-config-data.tar" ]]; then
    98          die "Initial data not found; did you run 'make bats-fixture' ?"
    99      fi
   100  
   101      dump_backend="$(cat "${LOCAL_INIT_DIR}/.backend")"
   102      if [[ "${DB_BACKEND}" != "${dump_backend}" ]]; then
   103          die "Can't run with backend '${DB_BACKEND}' because the test data was built with '${dump_backend}'"
   104      fi
   105  
   106      remove_init_data
   107  
   108      "${TAR}" -C "${LOCAL_DIR}" --extract --file "${LOCAL_INIT_DIR}/init-config-data.tar"
   109  
   110      ./instance-db restore "${LOCAL_INIT_DIR}/database"
   111  }
   112  
   113  # ---------------------------
   114  
   115  [[ $# -lt 1 ]] && about
   116  
   117  case "$1" in
   118      make)
   119          "${TEST_DIR}/instance-crowdsec" stop
   120          make_init_data
   121          ;;
   122      load)
   123          load_init_data
   124          ;;
   125      clean)
   126          remove_init_data
   127          ;;
   128      *)
   129          about
   130          ;;
   131  esac;
   132