[wip] bats changes for modular fixtures (#1371)
* target: tests/.environment.sh * don't pass BIN_DIR around * manage db backup/restore separately * don't export CONFIG_DIR, DATA_DIR (derive path locations from CONFIG_YAML); redirect stdout, stderr to &3 by default in setup_file, teardown_file
This commit is contained in:
parent
c5566e92f3
commit
af8c55330d
|
@ -1,9 +1,14 @@
|
||||||
|
|
||||||
|
# contains scripts, bats submodules, local instances and functional test suite
|
||||||
TEST_DIR = $(CURDIR)/tests
|
TEST_DIR = $(CURDIR)/tests
|
||||||
|
|
||||||
|
# contains a local instance of crowdsec, complete with configuration and data
|
||||||
LOCAL_DIR = $(TEST_DIR)/local
|
LOCAL_DIR = $(TEST_DIR)/local
|
||||||
|
|
||||||
BIN_DIR = $(LOCAL_DIR)/bin
|
BIN_DIR = $(LOCAL_DIR)/bin
|
||||||
CONFIG_DIR = $(LOCAL_DIR)/etc/crowdsec
|
CONFIG_DIR = $(LOCAL_DIR)/etc/crowdsec
|
||||||
DATA_DIR = $(LOCAL_DIR)/var/lib/crowdsec/data
|
DATA_DIR = $(LOCAL_DIR)/var/lib/crowdsec/data
|
||||||
|
|
||||||
LOCAL_INIT_DIR = $(TEST_DIR)/local-init
|
LOCAL_INIT_DIR = $(TEST_DIR)/local-init
|
||||||
LOG_DIR = $(LOCAL_DIR)/var/log
|
LOG_DIR = $(LOCAL_DIR)/var/log
|
||||||
PID_DIR = $(LOCAL_DIR)/var/run
|
PID_DIR = $(LOCAL_DIR)/var/run
|
||||||
|
@ -12,9 +17,9 @@ PLUGIN_DIR = $(LOCAL_DIR)/lib/crowdsec/plugins
|
||||||
define ENV :=
|
define ENV :=
|
||||||
export TEST_DIR="$(TEST_DIR)"
|
export TEST_DIR="$(TEST_DIR)"
|
||||||
export LOCAL_DIR="$(LOCAL_DIR)"
|
export LOCAL_DIR="$(LOCAL_DIR)"
|
||||||
export BIN_DIR="$(BIN_DIR)"
|
export CROWDSEC="$(BIN_DIR)/crowdsec"
|
||||||
export CONFIG_DIR="$(CONFIG_DIR)"
|
export CSCLI="$(BIN_DIR)/cscli"
|
||||||
export DATA_DIR="$(DATA_DIR)"
|
export CONFIG_YAML="$(CONFIG_DIR)/config.yaml"
|
||||||
export LOCAL_INIT_DIR="$(LOCAL_INIT_DIR)"
|
export LOCAL_INIT_DIR="$(LOCAL_INIT_DIR)"
|
||||||
export LOG_DIR="$(LOG_DIR)"
|
export LOG_DIR="$(LOG_DIR)"
|
||||||
export PID_DIR="$(PID_DIR)"
|
export PID_DIR="$(PID_DIR)"
|
||||||
|
@ -24,32 +29,29 @@ endef
|
||||||
bats-all: bats-clean bats-build bats-test
|
bats-all: bats-clean bats-build bats-test
|
||||||
|
|
||||||
# Source this to run the scripts outside of the Makefile
|
# Source this to run the scripts outside of the Makefile
|
||||||
bats-environment:
|
tests/.environment.sh:
|
||||||
$(file >$(TEST_DIR)/.environment.sh,$(ENV))
|
$(file >$(TEST_DIR)/.environment.sh,$(ENV))
|
||||||
|
|
||||||
|
bats-environment: tests/.environment.sh
|
||||||
|
|
||||||
# Verify dependencies and submodules
|
# Verify dependencies and submodules
|
||||||
bats-check-requirements:
|
bats-check-requirements:
|
||||||
@$(TEST_DIR)/check-requirements
|
@$(TEST_DIR)/check-requirements
|
||||||
|
|
||||||
# Builds and installs crowdsec in a local directory
|
# Build and installs crowdsec in a local directory
|
||||||
|
# Create a reusable package with initial configuration + data
|
||||||
|
# Generate dynamic tests
|
||||||
bats-build: bats-environment bats-check-requirements
|
bats-build: bats-environment bats-check-requirements
|
||||||
@DEFAULT_CONFIGDIR=$(CONFIG_DIR) DEFAULT_DATADIR=$(DATA_DIR) $(MAKE) build
|
@DEFAULT_CONFIGDIR=$(CONFIG_DIR) DEFAULT_DATADIR=$(DATA_DIR) $(MAKE) build
|
||||||
@mkdir -p $(BIN_DIR) $(CONFIG_DIR) $(DATA_DIR) $(LOG_DIR) $(PID_DIR) $(LOCAL_INIT_DIR) $(PLUGIN_DIR)
|
@mkdir -p $(BIN_DIR) $(LOG_DIR) $(PID_DIR) $(PLUGIN_DIR)
|
||||||
@install -m 0755 cmd/crowdsec/crowdsec $(BIN_DIR)/
|
@install -m 0755 cmd/crowdsec/crowdsec cmd/crowdsec-cli/cscli $(BIN_DIR)/
|
||||||
@install -m 0755 cmd/crowdsec-cli/cscli $(BIN_DIR)/
|
@install -m 0755 plugins/notifications/*/notification-* $(PLUGIN_DIR)/
|
||||||
@install -m 0755 plugins/notifications/email/notification-email $(PLUGIN_DIR)/
|
|
||||||
@install -m 0755 plugins/notifications/http/notification-http $(PLUGIN_DIR)/
|
|
||||||
@install -m 0755 plugins/notifications/slack/notification-slack $(PLUGIN_DIR)/
|
|
||||||
@install -m 0755 plugins/notifications/splunk/notification-splunk $(PLUGIN_DIR)/
|
|
||||||
@install -m 0755 plugins/notifications/dummy/notification-dummy $(PLUGIN_DIR)/
|
|
||||||
# Create a reusable package with initial configuration + data
|
|
||||||
@$(TEST_DIR)/instance-data make
|
@$(TEST_DIR)/instance-data make
|
||||||
# Generate dynamic tests
|
|
||||||
@$(TEST_DIR)/generate-hub-tests
|
@$(TEST_DIR)/generate-hub-tests
|
||||||
|
|
||||||
# Removes the local crowdsec installation and the fixture config + data
|
# Remove the local crowdsec installation and the fixture config + data
|
||||||
bats-clean:
|
bats-clean:
|
||||||
@$(RM) -r $(LOCAL_DIR) $(LOCAL_INIT_DIR) $(TEST_DIR)/dyn-bats/*.bats
|
@$(RM) -r $(LOCAL_DIR) $(LOCAL_INIT_DIR) $(TEST_DIR)/dyn-bats/*.bats tests/.environment.sh
|
||||||
|
|
||||||
# Run the test suite
|
# Run the test suite
|
||||||
bats-test: bats-environment bats-check-requirements
|
bats-test: bats-environment bats-check-requirements
|
||||||
|
|
|
@ -4,11 +4,11 @@
|
||||||
set -u
|
set -u
|
||||||
|
|
||||||
setup_file() {
|
setup_file() {
|
||||||
load "../lib/setup_file.sh" >&3 2>&1
|
load "../lib/setup_file.sh"
|
||||||
}
|
}
|
||||||
|
|
||||||
teardown_file() {
|
teardown_file() {
|
||||||
load "../lib/teardown_file.sh" >&3 2>&1
|
load "../lib/teardown_file.sh"
|
||||||
}
|
}
|
||||||
|
|
||||||
setup() {
|
setup() {
|
||||||
|
@ -133,7 +133,8 @@ declare stderr
|
||||||
assert_output --partial "# bash completion for cscli"
|
assert_output --partial "# bash completion for cscli"
|
||||||
run -0 cscli completion zsh
|
run -0 cscli completion zsh
|
||||||
assert_output --partial "# zsh completion for cscli"
|
assert_output --partial "# zsh completion for cscli"
|
||||||
rm "${CONFIG_DIR}/config.yaml"
|
|
||||||
|
rm "${CONFIG_YAML}"
|
||||||
run -0 cscli completion bash
|
run -0 cscli completion bash
|
||||||
assert_output --partial "# bash completion for cscli"
|
assert_output --partial "# bash completion for cscli"
|
||||||
run -0 cscli completion zsh
|
run -0 cscli completion zsh
|
||||||
|
|
|
@ -4,11 +4,11 @@
|
||||||
set -u
|
set -u
|
||||||
|
|
||||||
setup_file() {
|
setup_file() {
|
||||||
load "../lib/setup_file.sh" >&3 2>&1
|
load "../lib/setup_file.sh"
|
||||||
}
|
}
|
||||||
|
|
||||||
teardown_file() {
|
teardown_file() {
|
||||||
load "../lib/teardown_file.sh" >&3 2>&1
|
load "../lib/teardown_file.sh"
|
||||||
}
|
}
|
||||||
|
|
||||||
setup() {
|
setup() {
|
||||||
|
@ -35,7 +35,7 @@ declare stderr
|
||||||
}
|
}
|
||||||
|
|
||||||
@test "$FILE crowdsec should not run without LAPI (no api.server in configuration file)" {
|
@test "$FILE crowdsec should not run without LAPI (no api.server in configuration file)" {
|
||||||
yq 'del(.api.server)' -i "${CONFIG_DIR}/config.yaml"
|
yq 'del(.api.server)' -i "${CONFIG_YAML}"
|
||||||
run -1 --separate-stderr timeout 1s "${CROWDSEC}"
|
run -1 --separate-stderr timeout 1s "${CROWDSEC}"
|
||||||
|
|
||||||
run -0 echo "$stderr"
|
run -0 echo "$stderr"
|
||||||
|
@ -43,7 +43,7 @@ declare stderr
|
||||||
}
|
}
|
||||||
|
|
||||||
@test "$FILE capi status shouldn't be ok without api.server" {
|
@test "$FILE capi status shouldn't be ok without api.server" {
|
||||||
yq 'del(.api.server)' -i "${CONFIG_DIR}/config.yaml"
|
yq 'del(.api.server)' -i "${CONFIG_YAML}"
|
||||||
run -1 --separate-stderr cscli capi status
|
run -1 --separate-stderr cscli capi status
|
||||||
|
|
||||||
run -0 echo "$stderr"
|
run -0 echo "$stderr"
|
||||||
|
@ -51,7 +51,7 @@ declare stderr
|
||||||
}
|
}
|
||||||
|
|
||||||
@test "$FILE cscli config show -o human" {
|
@test "$FILE cscli config show -o human" {
|
||||||
yq 'del(.api.server)' -i "${CONFIG_DIR}/config.yaml"
|
yq 'del(.api.server)' -i "${CONFIG_YAML}"
|
||||||
run -0 cscli config show -o human
|
run -0 cscli config show -o human
|
||||||
assert_output --partial "Global:"
|
assert_output --partial "Global:"
|
||||||
assert_output --partial "Crowdsec:"
|
assert_output --partial "Crowdsec:"
|
||||||
|
@ -60,7 +60,7 @@ declare stderr
|
||||||
}
|
}
|
||||||
|
|
||||||
@test "$FILE cscli config backup" {
|
@test "$FILE cscli config backup" {
|
||||||
yq 'del(.api.server)' -i "${CONFIG_DIR}/config.yaml"
|
yq 'del(.api.server)' -i "${CONFIG_YAML}"
|
||||||
backupdir=$(TMPDIR="${BATS_TEST_TMPDIR}" mktemp -u)
|
backupdir=$(TMPDIR="${BATS_TEST_TMPDIR}" mktemp -u)
|
||||||
run -0 cscli config backup "${backupdir}"
|
run -0 cscli config backup "${backupdir}"
|
||||||
assert_output --partial "Starting configuration backup"
|
assert_output --partial "Starting configuration backup"
|
||||||
|
@ -73,7 +73,7 @@ declare stderr
|
||||||
}
|
}
|
||||||
|
|
||||||
@test "$FILE lapi status shouldn't be ok without api.server" {
|
@test "$FILE lapi status shouldn't be ok without api.server" {
|
||||||
yq 'del(.api.server)' -i "${CONFIG_DIR}/config.yaml"
|
yq 'del(.api.server)' -i "${CONFIG_YAML}"
|
||||||
./instance-crowdsec start
|
./instance-crowdsec start
|
||||||
run -1 --separate-stderr cscli machines list
|
run -1 --separate-stderr cscli machines list
|
||||||
run -0 echo "$stderr"
|
run -0 echo "$stderr"
|
||||||
|
@ -82,7 +82,7 @@ declare stderr
|
||||||
|
|
||||||
@test "$FILE cscli metrics" {
|
@test "$FILE cscli metrics" {
|
||||||
skip 'need to trigger metrics with a live parse'
|
skip 'need to trigger metrics with a live parse'
|
||||||
yq 'del(.api.server)' -i "${CONFIG_DIR}/config.yaml"
|
yq 'del(.api.server)' -i "${CONFIG_YAML}"
|
||||||
./instance-crowdsec start
|
./instance-crowdsec start
|
||||||
run -0 --separate-stderr cscli metrics
|
run -0 --separate-stderr cscli metrics
|
||||||
assert_output --partial "ROUTE"
|
assert_output --partial "ROUTE"
|
||||||
|
|
|
@ -4,11 +4,11 @@
|
||||||
set -u
|
set -u
|
||||||
|
|
||||||
setup_file() {
|
setup_file() {
|
||||||
load "../lib/setup_file.sh" >&3 2>&1
|
load "../lib/setup_file.sh"
|
||||||
}
|
}
|
||||||
|
|
||||||
teardown_file() {
|
teardown_file() {
|
||||||
load "../lib/teardown_file.sh" >&3 2>&1
|
load "../lib/teardown_file.sh"
|
||||||
}
|
}
|
||||||
|
|
||||||
setup() {
|
setup() {
|
||||||
|
@ -25,7 +25,7 @@ declare stderr
|
||||||
#----------
|
#----------
|
||||||
|
|
||||||
config_disable_agent() {
|
config_disable_agent() {
|
||||||
yq 'del(.crowdsec_service)' -i "${CONFIG_DIR}/config.yaml"
|
yq 'del(.crowdsec_service)' -i "${CONFIG_YAML}"
|
||||||
}
|
}
|
||||||
|
|
||||||
@test "$FILE with agent: test without -no-cs flag" {
|
@test "$FILE with agent: test without -no-cs flag" {
|
||||||
|
|
|
@ -4,11 +4,11 @@
|
||||||
set -u
|
set -u
|
||||||
|
|
||||||
setup_file() {
|
setup_file() {
|
||||||
load "../lib/setup_file.sh" >&3 2>&1
|
load "../lib/setup_file.sh"
|
||||||
}
|
}
|
||||||
|
|
||||||
teardown_file() {
|
teardown_file() {
|
||||||
load "../lib/teardown_file.sh" >&3 2>&1
|
load "../lib/teardown_file.sh"
|
||||||
}
|
}
|
||||||
|
|
||||||
setup() {
|
setup() {
|
||||||
|
@ -25,7 +25,7 @@ declare stderr
|
||||||
#----------
|
#----------
|
||||||
|
|
||||||
config_disable_capi() {
|
config_disable_capi() {
|
||||||
yq 'del(.api.server.online_client)' -i "${CONFIG_DIR}/config.yaml"
|
yq 'del(.api.server.online_client)' -i "${CONFIG_YAML}"
|
||||||
}
|
}
|
||||||
|
|
||||||
@test "$FILE without capi: crowdsec LAPI should still work" {
|
@test "$FILE without capi: crowdsec LAPI should still work" {
|
||||||
|
|
|
@ -4,11 +4,11 @@
|
||||||
set -u
|
set -u
|
||||||
|
|
||||||
setup_file() {
|
setup_file() {
|
||||||
load "../lib/setup_file.sh" >&3 2>&1
|
load "../lib/setup_file.sh"
|
||||||
}
|
}
|
||||||
|
|
||||||
teardown_file() {
|
teardown_file() {
|
||||||
load "../lib/teardown_file.sh" >&3 2>&1
|
load "../lib/teardown_file.sh"
|
||||||
}
|
}
|
||||||
|
|
||||||
setup() {
|
setup() {
|
||||||
|
|
|
@ -4,11 +4,11 @@
|
||||||
set -u
|
set -u
|
||||||
|
|
||||||
setup_file() {
|
setup_file() {
|
||||||
load "../lib/setup_file.sh" >&3 2>&1
|
load "../lib/setup_file.sh"
|
||||||
}
|
}
|
||||||
|
|
||||||
teardown_file() {
|
teardown_file() {
|
||||||
load "../lib/teardown_file.sh" >&3 2>&1
|
load "../lib/teardown_file.sh"
|
||||||
}
|
}
|
||||||
|
|
||||||
setup() {
|
setup() {
|
||||||
|
|
|
@ -4,11 +4,11 @@
|
||||||
set -u
|
set -u
|
||||||
|
|
||||||
setup_file() {
|
setup_file() {
|
||||||
load "../lib/setup_file.sh" >&3 2>&1
|
load "../lib/setup_file.sh"
|
||||||
}
|
}
|
||||||
|
|
||||||
teardown_file() {
|
teardown_file() {
|
||||||
load "../lib/teardown_file.sh" >&3 2>&1
|
load "../lib/teardown_file.sh"
|
||||||
}
|
}
|
||||||
|
|
||||||
setup() {
|
setup() {
|
||||||
|
|
|
@ -10,16 +10,16 @@ fake_log() {
|
||||||
}
|
}
|
||||||
|
|
||||||
setup_file() {
|
setup_file() {
|
||||||
load "../lib/setup_file.sh" >&3 2>&1
|
load "../lib/setup_file.sh"
|
||||||
|
|
||||||
# we reset config and data, and only run the daemon once for all the tests in this file
|
# we reset config and data, and only run the daemon once for all the tests in this file
|
||||||
./instance-data load
|
./instance-data load
|
||||||
./instance-crowdsec start
|
./instance-crowdsec start
|
||||||
fake_log | "${CROWDSEC}" -dsn file:///dev/fd/0 -type syslog -no-api
|
fake_log | "${CROWDSEC}" -dsn file:///dev/fd/0 -type syslog -no-api 2>/dev/null
|
||||||
}
|
}
|
||||||
|
|
||||||
teardown_file() {
|
teardown_file() {
|
||||||
load "../lib/teardown_file.sh" >&3 2>&1
|
load "../lib/teardown_file.sh"
|
||||||
}
|
}
|
||||||
|
|
||||||
setup() {
|
setup() {
|
||||||
|
|
|
@ -10,13 +10,13 @@ fake_log() {
|
||||||
}
|
}
|
||||||
|
|
||||||
setup_file() {
|
setup_file() {
|
||||||
load "../lib/setup_file.sh" >&3 2>&1
|
load "../lib/setup_file.sh"
|
||||||
# we reset config and data, but run the daemon only in the tests that need it
|
# we reset config and data, but run the daemon only in the tests that need it
|
||||||
./instance-data load
|
./instance-data load
|
||||||
}
|
}
|
||||||
|
|
||||||
teardown_file() {
|
teardown_file() {
|
||||||
load "../lib/teardown_file.sh" >&3 2>&1
|
load "../lib/teardown_file.sh"
|
||||||
}
|
}
|
||||||
|
|
||||||
setup() {
|
setup() {
|
||||||
|
@ -32,7 +32,8 @@ teardown() {
|
||||||
@test "$FILE 1.1.1.172 has been banned" {
|
@test "$FILE 1.1.1.172 has been banned" {
|
||||||
tmpfile=$(TMPDIR="${BATS_TEST_TMPDIR}" mktemp)
|
tmpfile=$(TMPDIR="${BATS_TEST_TMPDIR}" mktemp)
|
||||||
touch "${tmpfile}"
|
touch "${tmpfile}"
|
||||||
echo -e "---\nfilename: $tmpfile\nlabels:\n type: syslog\n" >>"${CONFIG_DIR}/acquis.yaml"
|
ACQUIS_YAML=$(config_yq '.crowdsec_service.acquisition_path')
|
||||||
|
echo -e "---\nfilename: $tmpfile\nlabels:\n type: syslog\n" >>"${ACQUIS_YAML}"
|
||||||
|
|
||||||
./instance-crowdsec start
|
./instance-crowdsec start
|
||||||
sleep 2
|
sleep 2
|
||||||
|
|
|
@ -10,13 +10,13 @@ fake_log() {
|
||||||
}
|
}
|
||||||
|
|
||||||
setup_file() {
|
setup_file() {
|
||||||
load "../lib/setup_file.sh" >&3 2>&1
|
load "../lib/setup_file.sh"
|
||||||
./instance-data load
|
./instance-data load
|
||||||
./instance-crowdsec start
|
./instance-crowdsec start
|
||||||
}
|
}
|
||||||
|
|
||||||
teardown_file() {
|
teardown_file() {
|
||||||
load "../lib/teardown_file.sh" >&3 2>&1
|
load "../lib/teardown_file.sh"
|
||||||
}
|
}
|
||||||
|
|
||||||
setup() {
|
setup() {
|
||||||
|
|
|
@ -4,7 +4,8 @@
|
||||||
set -u
|
set -u
|
||||||
|
|
||||||
setup_file() {
|
setup_file() {
|
||||||
load "../lib/setup_file.sh" >&3 2>&1
|
load "../lib/setup_file.sh"
|
||||||
|
# eval "$(debug)"
|
||||||
./instance-data load
|
./instance-data load
|
||||||
|
|
||||||
MOCK_OUT="${LOG_DIR}/mock-http.out"
|
MOCK_OUT="${LOG_DIR}/mock-http.out"
|
||||||
|
@ -18,17 +19,17 @@ setup_file() {
|
||||||
.url=strenv(MOCK_URL) |
|
.url=strenv(MOCK_URL) |
|
||||||
.group_wait="5s" |
|
.group_wait="5s" |
|
||||||
.group_threshold=2
|
.group_threshold=2
|
||||||
' -i "${CONFIG_DIR}/notifications/http.yaml"
|
' -i "$(config_yq '.config_paths.notification_dir')/http.yaml"
|
||||||
|
|
||||||
yq '
|
yq '
|
||||||
.notifications=["http_default"] |
|
.notifications=["http_default"] |
|
||||||
.filters=["Alert.GetScope() == \"Ip\""]
|
.filters=["Alert.GetScope() == \"Ip\""]
|
||||||
' -i "${CONFIG_DIR}/profiles.yaml"
|
' -i "$(config_yq '.api.server.profiles_path')"
|
||||||
|
|
||||||
yq '
|
yq '
|
||||||
.plugin_config.user="" |
|
.plugin_config.user="" |
|
||||||
.plugin_config.group=""
|
.plugin_config.group=""
|
||||||
' -i "${CONFIG_DIR}/config.yaml"
|
' -i "${CONFIG_YAML}"
|
||||||
|
|
||||||
rm -f -- "${MOCK_OUT}"
|
rm -f -- "${MOCK_OUT}"
|
||||||
|
|
||||||
|
@ -37,7 +38,7 @@ setup_file() {
|
||||||
}
|
}
|
||||||
|
|
||||||
teardown_file() {
|
teardown_file() {
|
||||||
load "../lib/teardown_file.sh" >&3 2>&1
|
load "../lib/teardown_file.sh"
|
||||||
./instance-mock-http stop
|
./instance-mock-http stop
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,33 +4,34 @@
|
||||||
set -u
|
set -u
|
||||||
|
|
||||||
setup_file() {
|
setup_file() {
|
||||||
load "../lib/setup_file.sh" >&3 2>&1
|
load "../lib/setup_file.sh"
|
||||||
|
eval "$(debug)"
|
||||||
./instance-data load
|
./instance-data load
|
||||||
|
|
||||||
tempfile=$(TMPDIR="${BATS_FILE_TMPDIR}" mktemp)
|
tempfile=$(TMPDIR="${BATS_FILE_TMPDIR}" mktemp)
|
||||||
export tempfile
|
export tempfile
|
||||||
|
|
||||||
yq "
|
yq '
|
||||||
.group_wait=\"5s\" |
|
.group_wait="5s" |
|
||||||
.group_threshold=2 |
|
.group_threshold=2 |
|
||||||
.output_file=\"${tempfile}\"
|
.output_file=strenv(tempfile)
|
||||||
" -i "${CONFIG_DIR}/notifications/dummy.yaml"
|
' -i "$(config_yq '.config_paths.notification_dir')/dummy.yaml"
|
||||||
|
|
||||||
yq '
|
yq '
|
||||||
.notifications=["dummy_default"] |
|
.notifications=["dummy_default"] |
|
||||||
.filters=["Alert.GetScope() == \"Ip\""]
|
.filters=["Alert.GetScope() == \"Ip\""]
|
||||||
' -i "${CONFIG_DIR}/profiles.yaml"
|
' -i "$(config_yq '.api.server.profiles_path')"
|
||||||
|
|
||||||
yq '
|
yq '
|
||||||
.plugin_config.user="" |
|
.plugin_config.user="" |
|
||||||
.plugin_config.group=""
|
.plugin_config.group=""
|
||||||
' -i "${CONFIG_DIR}/config.yaml"
|
' -i "${CONFIG_YAML}"
|
||||||
|
|
||||||
./instance-crowdsec start
|
./instance-crowdsec start
|
||||||
}
|
}
|
||||||
|
|
||||||
teardown_file() {
|
teardown_file() {
|
||||||
load "../lib/teardown_file.sh" >&3 2>&1
|
load "../lib/teardown_file.sh"
|
||||||
}
|
}
|
||||||
|
|
||||||
setup() {
|
setup() {
|
||||||
|
|
|
@ -4,11 +4,11 @@
|
||||||
set -u
|
set -u
|
||||||
|
|
||||||
setup_file() {
|
setup_file() {
|
||||||
load "../lib/setup_file.sh" >&3 2>&1
|
load "../lib/setup_file.sh"
|
||||||
}
|
}
|
||||||
|
|
||||||
teardown_file() {
|
teardown_file() {
|
||||||
load "../lib/teardown_file.sh" >&3 2>&1
|
load "../lib/teardown_file.sh"
|
||||||
}
|
}
|
||||||
|
|
||||||
setup() {
|
setup() {
|
||||||
|
|
|
@ -4,11 +4,11 @@
|
||||||
set -u
|
set -u
|
||||||
|
|
||||||
setup_file() {
|
setup_file() {
|
||||||
load "../lib/setup_file.sh" >&3 2>&1
|
load "../lib/setup_file.sh"
|
||||||
}
|
}
|
||||||
|
|
||||||
teardown_file() {
|
teardown_file() {
|
||||||
load "../lib/teardown_file.sh" >&3 2>&1
|
load "../lib/teardown_file.sh"
|
||||||
}
|
}
|
||||||
|
|
||||||
setup() {
|
setup() {
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
set -u
|
set -u
|
||||||
|
|
||||||
setup_file() {
|
setup_file() {
|
||||||
load "../lib/setup_file.sh" >&3 2>&1
|
load "../lib/setup_file.sh"
|
||||||
./instance-data load
|
./instance-data load
|
||||||
./instance-crowdsec start
|
./instance-crowdsec start
|
||||||
API_KEY=$(cscli bouncers add testbouncer -o raw)
|
API_KEY=$(cscli bouncers add testbouncer -o raw)
|
||||||
|
@ -14,7 +14,7 @@ setup_file() {
|
||||||
}
|
}
|
||||||
|
|
||||||
teardown_file() {
|
teardown_file() {
|
||||||
load "../lib/teardown_file.sh" >&3 2>&1
|
load "../lib/teardown_file.sh"
|
||||||
}
|
}
|
||||||
|
|
||||||
setup() {
|
setup() {
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
set -u
|
set -u
|
||||||
|
|
||||||
setup_file() {
|
setup_file() {
|
||||||
load "../lib/setup_file.sh" >&3 2>&1
|
load "../lib/setup_file.sh"
|
||||||
./instance-data load
|
./instance-data load
|
||||||
./instance-crowdsec start
|
./instance-crowdsec start
|
||||||
API_KEY=$(cscli bouncers add testbouncer -o raw)
|
API_KEY=$(cscli bouncers add testbouncer -o raw)
|
||||||
|
@ -14,7 +14,7 @@ setup_file() {
|
||||||
}
|
}
|
||||||
|
|
||||||
teardown_file() {
|
teardown_file() {
|
||||||
load "../lib/teardown_file.sh" >&3 2>&1
|
load "../lib/teardown_file.sh"
|
||||||
}
|
}
|
||||||
|
|
||||||
setup() {
|
setup() {
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
set -u
|
set -u
|
||||||
|
|
||||||
setup_file() {
|
setup_file() {
|
||||||
load "../lib/setup_file.sh" >&3 2>&1
|
load "../lib/setup_file.sh"
|
||||||
./instance-data load
|
./instance-data load
|
||||||
./instance-crowdsec start
|
./instance-crowdsec start
|
||||||
API_KEY=$(cscli bouncers add testbouncer -o raw)
|
API_KEY=$(cscli bouncers add testbouncer -o raw)
|
||||||
|
@ -14,7 +14,7 @@ setup_file() {
|
||||||
}
|
}
|
||||||
|
|
||||||
teardown_file() {
|
teardown_file() {
|
||||||
load "../lib/teardown_file.sh" >&3 2>&1
|
load "../lib/teardown_file.sh"
|
||||||
}
|
}
|
||||||
|
|
||||||
setup() {
|
setup() {
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
set -u
|
set -u
|
||||||
|
|
||||||
setup_file() {
|
setup_file() {
|
||||||
load "../lib/setup_file.sh" >&3 2>&1
|
load "../lib/setup_file.sh"
|
||||||
./instance-data load
|
./instance-data load
|
||||||
./instance-crowdsec start
|
./instance-crowdsec start
|
||||||
API_KEY=$(cscli bouncers add testbouncer -o raw)
|
API_KEY=$(cscli bouncers add testbouncer -o raw)
|
||||||
|
@ -14,7 +14,7 @@ setup_file() {
|
||||||
}
|
}
|
||||||
|
|
||||||
teardown_file() {
|
teardown_file() {
|
||||||
load "../lib/teardown_file.sh" >&3 2>&1
|
load "../lib/teardown_file.sh"
|
||||||
}
|
}
|
||||||
|
|
||||||
setup() {
|
setup() {
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
set -u
|
set -u
|
||||||
|
|
||||||
setup_file() {
|
setup_file() {
|
||||||
load "../lib/setup_file.sh" >&3 2>&1
|
load "../lib/setup_file.sh"
|
||||||
./instance-data load
|
./instance-data load
|
||||||
./instance-crowdsec start
|
./instance-crowdsec start
|
||||||
API_KEY=$(cscli bouncers add testbouncer -o raw)
|
API_KEY=$(cscli bouncers add testbouncer -o raw)
|
||||||
|
@ -14,7 +14,7 @@ setup_file() {
|
||||||
}
|
}
|
||||||
|
|
||||||
teardown_file() {
|
teardown_file() {
|
||||||
load "../lib/teardown_file.sh" >&3 2>&1
|
load "../lib/teardown_file.sh"
|
||||||
}
|
}
|
||||||
|
|
||||||
setup() {
|
setup() {
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
set -u
|
set -u
|
||||||
|
|
||||||
setup_file() {
|
setup_file() {
|
||||||
load "../lib/setup_file.sh" >&3 2>&1
|
load "../lib/setup_file.sh"
|
||||||
./instance-data load
|
./instance-data load
|
||||||
./instance-crowdsec start
|
./instance-crowdsec start
|
||||||
API_KEY=$(cscli bouncers add testbouncer -o raw)
|
API_KEY=$(cscli bouncers add testbouncer -o raw)
|
||||||
|
@ -14,7 +14,7 @@ setup_file() {
|
||||||
}
|
}
|
||||||
|
|
||||||
teardown_file() {
|
teardown_file() {
|
||||||
load "../lib/teardown_file.sh" >&3 2>&1
|
load "../lib/teardown_file.sh"
|
||||||
}
|
}
|
||||||
|
|
||||||
setup() {
|
setup() {
|
||||||
|
@ -71,4 +71,4 @@ api() {
|
||||||
assert_output --partial '1111:2222:3333:4444:5555:6666:7777:8888'
|
assert_output --partial '1111:2222:3333:4444:5555:6666:7777:8888'
|
||||||
assert_output --partial '1.2.3.5'
|
assert_output --partial '1.2.3.5'
|
||||||
assert_output --partial '1.2.4.0/24'
|
assert_output --partial '1.2.4.0/24'
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,7 +15,7 @@ TEST_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
|
||||||
hubdir="${LOCAL_DIR}/hub-tests"
|
hubdir="${LOCAL_DIR}/hub-tests"
|
||||||
|
|
||||||
coverage() {
|
coverage() {
|
||||||
"${BIN_DIR}/cscli" --crowdsec "${BIN_DIR}/crowdsec" --cscli "${BIN_DIR}/cscli" hubtest coverage --"$1" --percent
|
"${CSCLI}" --crowdsec "${CROWDSEC}" --cscli "${CSCLI}" hubtest coverage --"$1" --percent
|
||||||
}
|
}
|
||||||
|
|
||||||
cd "$hubdir" || die "Could not find hub test results"
|
cd "$hubdir" || die "Could not find hub test results"
|
||||||
|
|
|
@ -7,13 +7,10 @@ TEST_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
|
||||||
# shellcheck source=./.environment.sh
|
# shellcheck source=./.environment.sh
|
||||||
. "${TEST_DIR}/.environment.sh"
|
. "${TEST_DIR}/.environment.sh"
|
||||||
|
|
||||||
CSCLI="${BIN_DIR}/cscli"
|
|
||||||
cscli() {
|
cscli() {
|
||||||
"${BIN_DIR}/cscli" "$@"
|
"${CSCLI}" "$@"
|
||||||
}
|
}
|
||||||
|
|
||||||
CROWDSEC="${BIN_DIR}/crowdsec"
|
|
||||||
|
|
||||||
"${TEST_DIR}/instance-data" load
|
"${TEST_DIR}/instance-data" load
|
||||||
|
|
||||||
hubdir="${LOCAL_DIR}/hub-tests"
|
hubdir="${LOCAL_DIR}/hub-tests"
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
set -eu
|
set -eu
|
||||||
|
script_name=$0
|
||||||
|
|
||||||
die() {
|
die() {
|
||||||
echo >&2 "$@"
|
echo >&2 "$@"
|
||||||
|
@ -8,7 +9,7 @@ die() {
|
||||||
}
|
}
|
||||||
|
|
||||||
about() {
|
about() {
|
||||||
die "usage: $0 [ start | stop ]"
|
die "usage: $script_name [ start | stop ]"
|
||||||
}
|
}
|
||||||
|
|
||||||
#shellcheck disable=SC1007
|
#shellcheck disable=SC1007
|
||||||
|
@ -18,12 +19,12 @@ THIS_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
|
||||||
|
|
||||||
# you have not removed set -u above, have you?
|
# you have not removed set -u above, have you?
|
||||||
|
|
||||||
[ -z "${BIN_DIR-}" ] && die "\$BIN_DIR must be defined."
|
[ -z "${CROWDSEC-}" ] && die "\$CROWDSEC must be defined."
|
||||||
[ -z "${LOG_DIR-}" ] && die "\$LOG_DIR must be defined."
|
[ -z "${LOG_DIR-}" ] && die "\$LOG_DIR must be defined."
|
||||||
[ -z "${PID_DIR-}" ] && die "\$PID_DIR must be defined."
|
[ -z "${PID_DIR-}" ] && die "\$PID_DIR must be defined."
|
||||||
|
|
||||||
if [ ! -e "${BIN_DIR}/crowdsec" ]; then
|
if [ ! -f "${CROWDSEC}" ]; then
|
||||||
die "${BIN_DIR}/crowdsec is missing. Please run 'make bats-build' to create it."
|
die "${CROWDSEC} is missing. Please build (with 'make bats-build') or install it."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
wait_for_port() {
|
wait_for_port() {
|
||||||
|
@ -51,7 +52,7 @@ DAEMON_PID=${PID_DIR}/crowdsec.pid
|
||||||
start_instance() {
|
start_instance() {
|
||||||
OUT_FILE="${LOG_DIR}/crowdsec.out" \
|
OUT_FILE="${LOG_DIR}/crowdsec.out" \
|
||||||
DAEMON_PID="${DAEMON_PID}" \
|
DAEMON_PID="${DAEMON_PID}" \
|
||||||
"${TEST_DIR}/run-as-daemon" "${BIN_DIR}/crowdsec"
|
"${TEST_DIR}/run-as-daemon" "${CROWDSEC}"
|
||||||
wait_for_port 6060
|
wait_for_port 6060
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ die() {
|
||||||
}
|
}
|
||||||
|
|
||||||
about() {
|
about() {
|
||||||
die "usage: $0 [make | load | clean]"
|
die "usage: $script_name [make | load | clean]"
|
||||||
}
|
}
|
||||||
|
|
||||||
#shellcheck disable=SC1007
|
#shellcheck disable=SC1007
|
||||||
|
@ -22,38 +22,38 @@ cd "${THIS_DIR}"
|
||||||
|
|
||||||
[ -z "${TEST_DIR-}" ] && die "\$TEST_DIR must be defined."
|
[ -z "${TEST_DIR-}" ] && die "\$TEST_DIR must be defined."
|
||||||
[ -z "${LOCAL_DIR-}" ] && die "\$LOCAL_DIR must be defined."
|
[ -z "${LOCAL_DIR-}" ] && die "\$LOCAL_DIR must be defined."
|
||||||
[ -z "${BIN_DIR-}" ] && die "\$BIN_DIR must be defined."
|
[ -z "${CSCLI-}" ] && die "\$CSCLI must be defined."
|
||||||
[ -z "${CONFIG_DIR-}" ] && die "\$CONFIG_DIR must be defined."
|
|
||||||
[ -z "${DATA_DIR-}" ] && die "\$DATA_DIR must be defined."
|
|
||||||
[ -z "${LOCAL_INIT_DIR-}" ] && die "\$LOCAL_INIT_DIR must be defined."
|
[ -z "${LOCAL_INIT_DIR-}" ] && die "\$LOCAL_INIT_DIR must be defined."
|
||||||
[ -z "${PLUGIN_DIR-}" ] && die "\$PLUGIN_DIR must be defined."
|
[ -z "${PLUGIN_DIR-}" ] && die "\$PLUGIN_DIR must be defined."
|
||||||
|
|
||||||
if [ ! -e "${BIN_DIR}/cscli" ]; then
|
if [ ! -f "${CSCLI}" ]; then
|
||||||
die "${BIN_DIR}/cscli is missing. Please run 'make bats-build' to create it."
|
die "${CSCLI} is missing. Please build (with 'make bats-build') or install it."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# fails if config_dir or data_dir are not subpaths of local_dir
|
REL_CONFIG_DIR="etc/crowdsec"
|
||||||
REL_CONFIG_DIR=${CONFIG_DIR#$LOCAL_DIR}
|
REL_DATA_DIR="var/lib/crowdsec/data"
|
||||||
REL_CONFIG_DIR=${REL_CONFIG_DIR#/}
|
|
||||||
REL_DATA_DIR=${DATA_DIR#$LOCAL_DIR}
|
DATA_DIR="${LOCAL_DIR}/${REL_DATA_DIR}"
|
||||||
REL_DATA_DIR=${REL_DATA_DIR#/}
|
export DATA_DIR
|
||||||
|
CONFIG_DIR="${LOCAL_DIR}/${REL_CONFIG_DIR}"
|
||||||
|
export CONFIG_DIR
|
||||||
|
|
||||||
remove_init_data() {
|
remove_init_data() {
|
||||||
rm -rf -- "${CONFIG_DIR:?}"/* "${DATA_DIR:?}"/*
|
rm -rf -- "${LOCAL_DIR:?}/${REL_CONFIG_DIR}"/* "${LOCAL_DIR:?}/${REL_DATA_DIR:?}"/*
|
||||||
}
|
}
|
||||||
|
|
||||||
config_generate() {
|
config_generate() {
|
||||||
cp ../config/acquis.yaml "${CONFIG_DIR}/"
|
mkdir -p "${CONFIG_DIR}"
|
||||||
cp ../config/profiles.yaml "${CONFIG_DIR}/"
|
|
||||||
cp ../config/simulation.yaml "${CONFIG_DIR}/"
|
|
||||||
cp ../config/local_api_credentials.yaml "${CONFIG_DIR}/"
|
|
||||||
cp ../config/online_api_credentials.yaml "${CONFIG_DIR}/"
|
|
||||||
|
|
||||||
cp ../plugins/notifications/http/http.yaml "${CONFIG_DIR}/notifications/"
|
cp ../config/acquis.yaml \
|
||||||
cp ../plugins/notifications/email/email.yaml "${CONFIG_DIR}/notifications/"
|
../config/profiles.yaml \
|
||||||
cp ../plugins/notifications/slack/slack.yaml "${CONFIG_DIR}/notifications/"
|
../config/simulation.yaml \
|
||||||
cp ../plugins/notifications/splunk/splunk.yaml "${CONFIG_DIR}/notifications/"
|
../config/local_api_credentials.yaml \
|
||||||
cp ../plugins/notifications/dummy/dummy.yaml "${CONFIG_DIR}/notifications/"
|
../config/online_api_credentials.yaml \
|
||||||
|
"${CONFIG_DIR}/"
|
||||||
|
|
||||||
|
cp ../plugins/notifications/*/{http,email,slack,splunk,dummy}.yaml \
|
||||||
|
"${CONFIG_DIR}/notifications/"
|
||||||
|
|
||||||
yq '
|
yq '
|
||||||
.common.daemonize=false |
|
.common.daemonize=false |
|
||||||
|
@ -78,23 +78,32 @@ config_generate() {
|
||||||
make_init_data() {
|
make_init_data() {
|
||||||
remove_init_data
|
remove_init_data
|
||||||
|
|
||||||
|
mkdir -p "${DATA_DIR}"
|
||||||
mkdir -p "${CONFIG_DIR}/notifications"
|
mkdir -p "${CONFIG_DIR}/notifications"
|
||||||
|
|
||||||
config_generate
|
config_generate
|
||||||
|
|
||||||
mkdir -p "${CONFIG_DIR}/hub"
|
mkdir -p "${CONFIG_DIR}/hub"
|
||||||
"${BIN_DIR}/cscli" machines add githubciXXXXXXXXXXXXXXXXXXXXXXXX --auto
|
"${CSCLI}" machines add githubciXXXXXXXXXXXXXXXXXXXXXXXX --auto
|
||||||
"${BIN_DIR}/cscli" capi register
|
"${CSCLI}" capi register
|
||||||
"${BIN_DIR}/cscli" hub update
|
"${CSCLI}" hub update
|
||||||
"${BIN_DIR}/cscli" collections install crowdsecurity/linux
|
"${CSCLI}" collections install crowdsecurity/linux
|
||||||
mkdir -p "${CONFIG_DIR}/patterns"
|
mkdir -p "${CONFIG_DIR}/patterns"
|
||||||
cp -ax "../config/patterns" "${CONFIG_DIR}/"
|
cp -ax "../config/patterns" "${CONFIG_DIR}/"
|
||||||
|
|
||||||
"${TEST_DIR}/instance-crowdsec" start
|
"${TEST_DIR}/instance-crowdsec" start
|
||||||
"${BIN_DIR}/cscli" lapi status
|
"${CSCLI}" lapi status
|
||||||
"${TEST_DIR}/instance-crowdsec" stop
|
"${TEST_DIR}/instance-crowdsec" stop
|
||||||
|
|
||||||
tar -C "${LOCAL_DIR}" --create --file "${LOCAL_INIT_DIR}/init-config-data.tar" "$REL_CONFIG_DIR" "$REL_DATA_DIR"
|
# we deal with the database separately (might be mysql, postgres)
|
||||||
|
|
||||||
|
mkdir -p "${LOCAL_INIT_DIR}"
|
||||||
|
|
||||||
|
./instance-db backup "${LOCAL_INIT_DIR}/database"
|
||||||
|
|
||||||
|
tar -C "${LOCAL_DIR}" --create \
|
||||||
|
--exclude "$REL_DATA_DIR"/crowdsec.db \
|
||||||
|
--file "${LOCAL_INIT_DIR}/init-config-data.tar" "$REL_CONFIG_DIR" "$REL_DATA_DIR"
|
||||||
|
|
||||||
remove_init_data
|
remove_init_data
|
||||||
}
|
}
|
||||||
|
@ -107,6 +116,7 @@ load_init_data() {
|
||||||
remove_init_data
|
remove_init_data
|
||||||
|
|
||||||
tar -C "${LOCAL_DIR}" --extract --file "${LOCAL_INIT_DIR}/init-config-data.tar"
|
tar -C "${LOCAL_DIR}" --extract --file "${LOCAL_INIT_DIR}/init-config-data.tar"
|
||||||
|
./instance-db restore "${LOCAL_INIT_DIR}/database"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
7
tests/instance-db
Executable file
7
tests/instance-db
Executable file
|
@ -0,0 +1,7 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
#shellcheck disable=SC1007
|
||||||
|
THIS_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
|
||||||
|
cd "${THIS_DIR}"
|
||||||
|
|
||||||
|
./instance-sqlite "$@"
|
|
@ -51,7 +51,7 @@ start_instance() {
|
||||||
DAEMON_PID="${DAEMON_PID}" \
|
DAEMON_PID="${DAEMON_PID}" \
|
||||||
"${TEST_DIR}/run-as-daemon" /usr/bin/env python3 -u "${THIS_DIR}/mock-http.py" "$1"
|
"${TEST_DIR}/run-as-daemon" /usr/bin/env python3 -u "${THIS_DIR}/mock-http.py" "$1"
|
||||||
wait_for_port "$1"
|
wait_for_port "$1"
|
||||||
echo "mock http started on port $1"
|
# echo "mock http started on port $1"
|
||||||
}
|
}
|
||||||
|
|
||||||
stop_instance() {
|
stop_instance() {
|
||||||
|
|
52
tests/instance-sqlite
Executable file
52
tests/instance-sqlite
Executable file
|
@ -0,0 +1,52 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -eu
|
||||||
|
script_name=$0
|
||||||
|
|
||||||
|
die() {
|
||||||
|
echo >&2 "$@"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
about() {
|
||||||
|
die "usage: $script_name [backup | restore] <backup_file>"
|
||||||
|
}
|
||||||
|
|
||||||
|
#shellcheck disable=SC1007
|
||||||
|
THIS_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
|
||||||
|
cd "${THIS_DIR}"
|
||||||
|
#shellcheck disable=SC1090
|
||||||
|
. ./.environment.sh
|
||||||
|
|
||||||
|
# you have not removed set -u above, have you?
|
||||||
|
|
||||||
|
[ -z "${CONFIG_YAML-}" ] && die "\$CONFIG_YAML must be defined."
|
||||||
|
|
||||||
|
# ---------------------------
|
||||||
|
|
||||||
|
[ $# -lt 1 ] && about
|
||||||
|
|
||||||
|
./assert-crowdsec-not-running
|
||||||
|
|
||||||
|
DATA_DIR=$(yq <"${CONFIG_YAML}" '.config_paths.data_dir')
|
||||||
|
DB_FILE="${DATA_DIR}/crowdsec.db"
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
backup)
|
||||||
|
[ $# -lt 2 ] && about
|
||||||
|
backup_file="$2"
|
||||||
|
# dirty fast cp. nothing should be accessing it right now, anyway.
|
||||||
|
[ -f "${DB_FILE}" ] || die "missing file ${DB_FILE}"
|
||||||
|
cp "${DB_FILE}" "$backup_file"
|
||||||
|
;;
|
||||||
|
restore)
|
||||||
|
[ $# -lt 2 ] && about
|
||||||
|
backup_file="$2"
|
||||||
|
[ -f "$backup_file" ] || die "missing file $backup_file"
|
||||||
|
cp "$backup_file" "${DB_FILE}"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
about
|
||||||
|
;;
|
||||||
|
esac;
|
||||||
|
|
|
@ -1,9 +1,20 @@
|
||||||
|
|
||||||
|
debug() {
|
||||||
|
echo 'exec 1<&-; exec 2<&-; exec 1>&3; exec 2>&1'
|
||||||
|
}
|
||||||
|
export -f debug
|
||||||
|
|
||||||
|
# redirects stdout and stderr to &3 otherwise the errors in setup, teardown would
|
||||||
|
# go unreported.
|
||||||
|
# BUT - don't do this in test functions. Everything written to stdout and
|
||||||
|
# stderr after this line will go to the terminal, but in the tests, these
|
||||||
|
# are supposed to be collected and shown only in case of test failure
|
||||||
|
# (see options --print-output-on-failure and --show-output-of-passing-tests)
|
||||||
|
eval "$(debug)"
|
||||||
|
|
||||||
# Allow tests to use relative paths for helper scripts.
|
# Allow tests to use relative paths for helper scripts.
|
||||||
# Must redirect output to &3 otherwise errors in setup_file, teardown_file go unreported
|
|
||||||
|
|
||||||
# shellcheck disable=SC2164
|
# shellcheck disable=SC2164
|
||||||
cd "${TEST_DIR}" >&3 2>&1
|
cd "${TEST_DIR}"
|
||||||
|
|
||||||
# complain if there's a crowdsec running system-wide or leftover from a previous test
|
# complain if there's a crowdsec running system-wide or leftover from a previous test
|
||||||
./assert-crowdsec-not-running
|
./assert-crowdsec-not-running
|
||||||
|
@ -13,10 +24,8 @@ FILE="$(basename "${BATS_TEST_FILENAME}" .bats):"
|
||||||
export FILE
|
export FILE
|
||||||
|
|
||||||
# the variables exported here can be seen in other setup/teardown/test functions
|
# the variables exported here can be seen in other setup/teardown/test functions
|
||||||
CROWDSEC="${BIN_DIR}/crowdsec"
|
# MYVAR=something
|
||||||
export CROWDSEC
|
# export MYVAR
|
||||||
CSCLI="${BIN_DIR}/cscli"
|
|
||||||
export CSCLI
|
|
||||||
|
|
||||||
# functions too
|
# functions too
|
||||||
cscli() {
|
cscli() {
|
||||||
|
@ -24,6 +33,11 @@ cscli() {
|
||||||
}
|
}
|
||||||
export -f cscli
|
export -f cscli
|
||||||
|
|
||||||
|
config_yq() {
|
||||||
|
yq <"${CONFIG_YAML}" "$@"
|
||||||
|
}
|
||||||
|
export -f config_yq
|
||||||
|
|
||||||
# We use these functions like this:
|
# We use these functions like this:
|
||||||
# somecommand <(stderr)
|
# somecommand <(stderr)
|
||||||
# to provide a standard input to "somecommand".
|
# to provide a standard input to "somecommand".
|
||||||
|
@ -43,3 +57,4 @@ output() {
|
||||||
printf '%s' "$output"
|
printf '%s' "$output"
|
||||||
}
|
}
|
||||||
export -f output
|
export -f output
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,7 @@
|
||||||
|
|
||||||
|
# any stdout, stderr from now on will go to &3
|
||||||
|
eval "$(debug)"
|
||||||
|
|
||||||
# ensure we don't leave crowdsec running if tests are broken or interrupted
|
# ensure we don't leave crowdsec running if tests are broken or interrupted
|
||||||
./instance-crowdsec stop
|
./instance-crowdsec stop
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue