logstash/ci/serverless/common.sh
github-actions[bot] baa03ab690
Update serverless tests to include product origin header (#16766) (#16797)
This commit updates the curl scripts that interact with Kibana's
`api/logstash/pipeline/*` endpoin. Additionally this adds the header to any curl
that interacts with elasticsearch API as well.

(cherry picked from commit 188d9e7ed8)

Co-authored-by: Cas Donoghue <cas.donoghue@gmail.com>
2024-12-13 10:27:08 -08:00

158 lines
4 KiB
Bash
Executable file

#!/usr/bin/env bash
set -ex
export CURRENT_DIR="$(dirname "$0")"
export INDEX_NAME="serverless_it_${BUILDKITE_BUILD_NUMBER:-`date +%s`}"
# store all error messages
export ERR_MSGS=()
# numeric values representing the results of the checks. 0: pass, >0: fail
export CHECKS=()
setup_vault() {
vault_path=secret/ci/elastic-logstash/serverless-test
set +x
export ES_ENDPOINT=$(vault read -field=es_host "${vault_path}")
export ES_USER=$(vault read -field=es_superuser "${vault_path}") # dlq test
export ES_PW=$(vault read -field=es_superuser_pw "${vault_path}")
export KB_ENDPOINT=$(vault read -field=kb_host "${vault_path}")
export MB_API_KEY=$(vault read -field=mb_api_key "${vault_path}")
export PLUGIN_API_KEY=$(vault read -field=plugin_api_key "${vault_path}")
export INTEGRATION_API_KEY_ENCODED=$(vault read -field=integration_api_key_encoded "${vault_path}")
export TESTER_API_KEY_ENCODED=$(vault read -field=tester_api_key_encoded "${vault_path}")
export CPM_API_KEY=$(vault read -field=cpm_api_key "${vault_path}")
set -x
}
build_logstash() {
./gradlew clean bootstrap assemble installDefaultGems
}
index_test_data() {
curl -X POST -H "Authorization: ApiKey $TESTER_API_KEY_ENCODED" "$ES_ENDPOINT/$INDEX_NAME/_bulk" \
-H 'x-elastic-product-origin: logstash' \
-H 'Content-Type: application/json' --data-binary @"$CURRENT_DIR/test_data/book.json"
}
# $1: check function
run_cpm_logstash() {
# copy log4j
cp "$CURRENT_DIR/../../config/log4j2.properties" "$CURRENT_DIR/config/log4j2.properties"
# run logstash
$CURRENT_DIR/../../bin/logstash --path.settings "$CURRENT_DIR/config" 2>/dev/null &
export LS_PID=$!
check_logstash_readiness
$1 # check function
kill "$LS_PID" || true
}
# $1: pipeline file
# $2: check function
# run_logstash 001_es-output.conf check_es_output
run_logstash() {
$CURRENT_DIR/../../bin/logstash -f "$1" 2>/dev/null &
export LS_PID=$!
check_logstash_readiness
$2 # check function
kill "$LS_PID" || true
}
# $1: number of try
# $n: check function with args - return non empty string as pass
count_down_check() {
count=$1
while ! [[ $("${@:2}") ]] && [[ $count -gt 0 ]]; do
count=$(( count - 1 ))
sleep 1
done
[[ $count -eq 0 ]] && echo "1" && return
echo "Passed check!"
echo "0"
}
check_logstash_readiness() {
curl_logstash() {
[[ $(curl --silent localhost:9600) ]] && echo "0"
}
check_readiness() {
count_down_check 120 curl_logstash
}
add_check check_readiness "Failed readiness check."
[[ "${CHECKS[*]: -1}" -eq "1" ]] && exit 1
echo "Logstash is Up !"
return 0
}
# $1: jq filter
# $2: expected value
# check_logstash_api '.pipelines.main.plugins.outputs[0].documents.successes' '1'
check_logstash_api() {
curl_node_stats() {
[[ $(curl --silent localhost:9600/_node/stats | jq "$1") -ge "$2" ]] && echo "0"
}
count_down_check 30 curl_node_stats "$1" "$2"
}
# add check result to CHECKS
# $1: check function - expected the last char of result to be 0 or positive number
# $2: err msg
add_check() {
FEATURE_CHECK=$($1)
FEATURE_CHECK="${FEATURE_CHECK: -1}"
ERR_MSGS+=("$2")
CHECKS+=("$FEATURE_CHECK")
}
# check log if the line contains [ERROR] or [FATAL] and does not relate to "unreachable"
check_err_log() {
LOG_FILE="$CURRENT_DIR/../../logs/logstash-plain.log"
LOG_CHECK=$(grep -E "\[ERROR\]|\[FATAL\]" "$LOG_FILE" | grep -cvE "unreachable|Connection refused") || true
ERR_MSGS+=("Found error in log")
CHECKS+=("$LOG_CHECK")
}
# if CHECKS[i] is 1, print ERR_MSGS[i]
print_result() {
for i in "${!CHECKS[@]}"; do
[[ "${CHECKS[$i]}" -gt 0 ]] && echo "${ERR_MSGS[$i]}" || true
done
}
# exit 1 if one of the checks fails
exit_with_code() {
for c in "${CHECKS[@]}"; do
[[ $c -gt 0 ]] && exit 1
done
exit 0
}
clean_up_and_get_result() {
[[ -n "$LS_PID" ]] && kill "$LS_PID" || true
check_err_log
print_result
exit_with_code
}
# common setup
setup() {
setup_vault
build_logstash
trap clean_up_and_get_result INT TERM EXIT
}