From 468580a0a5333d71692d41bbc07bcd0610c5da45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20=C3=81lvaro?= Date: Wed, 9 Nov 2022 17:20:24 +0100 Subject: [PATCH] feat(tests): Install salt-minion for integration tests --- .github/workflows/build-and-test.yml | 9 +++ CHANGELOG.md | 1 + tests/basic/test.sh | 7 +++ tests/config-reloader/test.sh | 1 - tests/gitfs/test.sh | 1 - tests/lib/common.sh | 86 +++++++++++++++++++++++++++- tests/salt-api/test.sh | 7 +-- 7 files changed, 103 insertions(+), 9 deletions(-) diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index d22e5a4..3d1e3d8 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -130,6 +130,15 @@ jobs: with: python-version: '3.10' + - name: Install and configure salt-minion + run: | + # Install salt-minion from salt repos + curl -o bootstrap-salt.sh -L https://bootstrap.saltproject.io + chmod +x bootstrap-salt.sh + sudo ./bootstrap-salt.sh -dXP stable $(cat VERSION) + sudo systemctl stop salt-minion + sudo systemctl disable salt-minion + - name: Execute basic tests if: always() run: tests/basic/test.sh diff --git a/CHANGELOG.md b/CHANGELOG.md index c711f67..a961167 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ for the list of changes in SaltStack. **3005.1_2** +- CI(tests): Install `salt-minion` for integration tests. - CI(tests): Improve log support. - CI(tests): Always run tests. - CI: Always perform cleanup tasks. diff --git a/tests/basic/test.sh b/tests/basic/test.sh index 3f03a96..90f4e22 100755 --- a/tests/basic/test.sh +++ b/tests/basic/test.sh @@ -25,3 +25,10 @@ ok "salt-master version" echo "==> Executing healthcheck ..." docker-exec /usr/local/sbin/healthcheck | grep -i true || error "healthcheck" ok "healthcheck" + +# Test minion connection +setup_and_start_salt_minion || error "salt-minion started" +ok "salt-minion started" + +salt "${TEST_MINION_ID}" test.ping || error "${TEST_MINION_ID} ping" +ok "${TEST_MINION_ID} ping" diff --git a/tests/config-reloader/test.sh b/tests/config-reloader/test.sh index c8f6a41..6b80a30 100755 --- a/tests/config-reloader/test.sh +++ b/tests/config-reloader/test.sh @@ -14,7 +14,6 @@ trap cleanup EXIT echo "==> Starting docker-salt-master (${PLATFORM}) ..." start_container_and_wait \ --env SALT_RESTART_MASTER_ON_CONFIG_CHANGE=True \ - --volume "${SCRIPT_PATH}/config":/home/salt/data/config:ro \ || error "container started" ok "container started" diff --git a/tests/gitfs/test.sh b/tests/gitfs/test.sh index c20f560..3791cc3 100755 --- a/tests/gitfs/test.sh +++ b/tests/gitfs/test.sh @@ -22,7 +22,6 @@ ok "gitfs keys" # Run test instance echo "==> Starting docker-salt-master (${PLATFORM}) with ed25519 ssh key ..." start_container_and_wait \ - --volume "${SCRIPT_PATH}/config":/home/salt/data/config:ro \ --volume "$(pwd)/${GITFS_KEYS_DIR%%/gitfs}":/home/salt/data/keys \ || error "container started" ok "container started" diff --git a/tests/lib/common.sh b/tests/lib/common.sh index 80b4146..de81ac4 100644 --- a/tests/lib/common.sh +++ b/tests/lib/common.sh @@ -20,6 +20,12 @@ export IMAGE_NAME=${IMAGE_NAME:-'cdalvaro/docker-salt-master:latest'} #---------------------------------------------------------------------------------------------------------------------- export CONTAINER_NAME=salt-master +#--- ENV VARIABLE --------------------------------------------------------------------------------------------------- +# NAME: TEST_MINION_ID +# DESCRIPTION: The id of the salt-minion for testing. Default: 'test.minion'. +#---------------------------------------------------------------------------------------------------------------------- +export TEST_MINION_ID=test.minion + #--- ENV VARIABLE --------------------------------------------------------------------------------------------------- # NAME: PLATFORM # DESCRIPTION: The platform to run the tests on. Default: the current platform. @@ -38,8 +44,21 @@ export BOOTUP_WAIT_SECONDS=${BOOTUP_WAIT_SECONDS:-60} #---------------------------------------------------------------------------------------------------------------------- function cleanup() { - echo "๐Ÿงน Removing ${CONTAINER_NAME} ..." - docker container rm --force "${CONTAINER_NAME}" + echo "๐Ÿงน Running cleanup tasks ..." + + local salt_master_container="$(docker container ls --filter NAME="${CONTAINER_NAME}" --quiet)" + if [ -n "${salt_master_container}" ]; then + echo " - Removing ${CONTAINER_NAME} docker container ..." + docker container rm --force --volumes "${salt_master_container}" > /dev/null + fi + + if [ -n "$(pgrep -f salt-minion)" ]; then + echo " - Stopping salt-minion ..." + sudo killall salt-minion + sudo rm -f /var/log/salt/minion + fi + + echo "๐Ÿงน All cleanup tasks done!" } #--- FUNCTION ------------------------------------------------------------------------------------------------------- @@ -78,6 +97,15 @@ function salt-call() docker-exec salt-call "$@" } +#--- FUNCTION ------------------------------------------------------------------------------------------------------- +# NAME: salt +# DESCRIPTION: Execute the salt command inside the container. +#---------------------------------------------------------------------------------------------------------------------- +function salt() +{ + docker-exec salt "$@" +} + #--- FUNCTION ------------------------------------------------------------------------------------------------------- # NAME: container_log # DESCRIPTION: Print container log. @@ -105,6 +133,19 @@ function master_log() sudo cat "${SALT_MASTER_LOG}" } +#--- FUNCTION ------------------------------------------------------------------------------------------------------- +# NAME: minion_log +# DESCRIPTION: Print salt-minion log. +#---------------------------------------------------------------------------------------------------------------------- +function minion_log() +{ + local SALT_MINION_LOG='/var/log/salt/minion' + + [ -f "${SALT_MINION_LOG}" ] || return 0 + echo "๐Ÿ“ salt-minion log (${SALT_MINION_LOG})" + sudo cat "${SALT_MINION_LOG}" +} + #--- FUNCTION ------------------------------------------------------------------------------------------------------- # NAME: wait_container # DESCRIPTION: Wait for the container to boot up. @@ -116,18 +157,58 @@ function start_container_and_wait() local LOGS_DIR="${SCRIPT_PATH}/logs" mkdir -p "${LOGS_DIR}" + # Common config + mkdir -p "${SCRIPT_PATH}/config/autosign_grains" + cat > "${SCRIPT_PATH}"/config/autosign_grains.conf < "${SCRIPT_PATH}"/config/autosign_grains/id < Waiting ${BOOTUP_WAIT_SECONDS} seconds for the container to be ready ..." sleep "${BOOTUP_WAIT_SECONDS}" } +#--- FUNCTION ------------------------------------------------------------------------------------------------------- +# NAME: setup_and_start_salt_minion +# DESCRIPTION: Setup and start salt-minion. +#---------------------------------------------------------------------------------------------------------------------- +function setup_and_start_salt_minion() +{ + local SALT_MINION_CONF_DIR=/etc/salt/minion.d + + sudo rm -rf "${SALT_MINION_CONF_DIR}" + sudo mkdir -p "${SALT_MINION_CONF_DIR}" + + sudo tee "${SALT_MINION_CONF_DIR}/minion.conf" > /dev/null < Starting salt-minion ..." + sudo salt-minion --log-file-level=info --daemon & + sleep 40 + + test -n "$(pgrep -f salt-minion)" +} + #--- FUNCTION ------------------------------------------------------------------------------------------------------- # NAME: ok # DESCRIPTION: Print a success message. @@ -146,6 +227,7 @@ function error() echo "๐Ÿ”ฅ $*" >&2 container_log >&2 master_log >&2 + minion_log >&2 return 1 } diff --git a/tests/salt-api/test.sh b/tests/salt-api/test.sh index 31f01a9..ec6a622 100755 --- a/tests/salt-api/test.sh +++ b/tests/salt-api/test.sh @@ -14,12 +14,11 @@ export SALTAPI_URL="https://localhost:8000/" export SALTAPI_USER=salt_api export SALTAPI_PASS=4wesome-Pass0rd export SALTAPI_EAUTH=pam -export SALTAPI_TMP_DIR=${SALTAPI_TMP_DIR:-/tmp/salt-api} # Create configuration files echo "==> Creating salt-api configuration file ..." -mkdir -p "${SALTAPI_TMP_DIR}/config/" -cat > "${SALTAPI_TMP_DIR}/config/salt-api.conf" < "${SCRIPT_PATH}/config/salt-api.conf" <