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