261 lines
6.9 KiB
Bash
261 lines
6.9 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
# to run this test locally do the following:
|
|
# > docker pull kong:latest
|
|
# > docker tag kong:latest kong-alpine
|
|
# > BASE=alpine tests/02-customize.test.sh
|
|
|
|
|
|
function build_custom_image {
|
|
# arg1: plugins; eg. "kong-http-to-https,kong-upstream-jwt"
|
|
# arg2: template; eg. "/mykong/nginx.conf"
|
|
# arg3: path to local rockserver dir; eg. "/some/dir/rockserver"
|
|
local plugins
|
|
local template
|
|
local rockserver
|
|
if [[ ! "$1" == "" ]]; then
|
|
plugins="--build-arg PLUGINS=$1"
|
|
fi
|
|
if [[ ! "$2" == "" ]]; then
|
|
cp $2 ./custom.conf
|
|
template="--build-arg TEMPLATE=./custom.conf"
|
|
fi
|
|
if [[ ! "$3" == "" ]]; then
|
|
# rockserver must be within docker build context, so copy files there
|
|
mkdir rockserver
|
|
ls $3
|
|
cp -r -v "$3" .
|
|
rockserver="--build-arg ROCKS_DIR=./rockserver"
|
|
fi
|
|
#export BUILDKIT_PROGRESS=plain
|
|
docker build --build-arg KONG_BASE="kong-$BASE" \
|
|
--build-arg "KONG_LICENSE_DATA=$KONG_LICENSE_DATA" \
|
|
$plugins \
|
|
$template \
|
|
$rockserver \
|
|
--tag "kong-$BASE-customize" \
|
|
.
|
|
local result=$?
|
|
# cleanup the temporary files/directories
|
|
if [ -d rockserver ]; then
|
|
rm -rf rockserver
|
|
fi
|
|
if [ -f custom.conf ]; then
|
|
rm custom.conf
|
|
fi
|
|
return $result
|
|
}
|
|
|
|
function delete_custom_image {
|
|
docker rmi "kong-$BASE-customize" > /dev/null 2>&1
|
|
}
|
|
|
|
unset TEST_CMD_OPTS
|
|
function run_kong_cmd {
|
|
docker run -ti --rm $TEST_CMD_OPTS "kong-$BASE-customize" $1
|
|
}
|
|
|
|
|
|
|
|
function run_test {
|
|
# the suite name below will only be used when rtunning this file directly, when
|
|
# running through "test.sh" it must be provided using the "--suite" option.
|
|
tinitialize "Docker-Kong test suite" "${BASH_SOURCE[0]}"
|
|
|
|
local mypath
|
|
mypath=$(dirname "$(realpath "$0")")
|
|
pushd "$mypath/../customize"
|
|
|
|
|
|
|
|
tchapter "Customize $BASE"
|
|
|
|
ttest "injects a plugin, pure-Lua"
|
|
local test_plugin_name="kong-upstream-jwt"
|
|
build_custom_image "$test_plugin_name"
|
|
if [ ! $? -eq 0 ]; then
|
|
tfailure
|
|
else
|
|
run_kong_cmd "luarocks list --porcelain" | grep $test_plugin_name
|
|
if [ ! $? -eq 0 ]; then
|
|
tmessage "injected plugin '$test_plugin_name' was not found"
|
|
tfailure
|
|
else
|
|
tsuccess
|
|
fi
|
|
fi
|
|
delete_custom_image
|
|
|
|
|
|
|
|
ttest "injects a plugin, with self-contained C code (no binding)"
|
|
local test_plugin_name="lua-protobuf"
|
|
build_custom_image "$test_plugin_name"
|
|
if [ ! $? -eq 0 ]; then
|
|
tfailure
|
|
else
|
|
run_kong_cmd "luarocks list --porcelain" | grep $test_plugin_name
|
|
if [ ! $? -eq 0 ]; then
|
|
tmessage "injected plugin '$test_plugin_name' was not found"
|
|
tfailure
|
|
else
|
|
tsuccess
|
|
fi
|
|
fi
|
|
delete_custom_image
|
|
|
|
|
|
|
|
ttest "injects a plugin with local rockserver"
|
|
local test_plugin_name="kong-plugin-myplugin"
|
|
build_custom_image "$test_plugin_name" "" "$mypath/rockserver"
|
|
if [ ! $? -eq 0 ]; then
|
|
tfailure
|
|
else
|
|
run_kong_cmd "luarocks list --porcelain" | grep $test_plugin_name
|
|
if [ ! $? -eq 0 ]; then
|
|
tmessage "injected plugin '$test_plugin_name' was not found"
|
|
tfailure
|
|
else
|
|
tsuccess
|
|
fi
|
|
fi
|
|
delete_custom_image
|
|
|
|
|
|
|
|
ttest "build image to test KONG_PLUGINS settings"
|
|
local test_plugin_name="kong-plugin-myplugin"
|
|
build_custom_image "$test_plugin_name" "" "$mypath/rockserver"
|
|
if [ ! $? -eq 0 ]; then
|
|
tfailure
|
|
else
|
|
tsuccess
|
|
fi
|
|
|
|
ttest "injected plugin are added to KONG_PLUGINS if not set"
|
|
unset TEST_CMD_OPTS
|
|
run_kong_cmd "printenv" | grep "bundled,myplugin"
|
|
if [ ! $? -eq 0 ]; then
|
|
tmessage "injected plugin '$test_plugin_name' was not found in KONG_PLUGIN"
|
|
tfailure
|
|
else
|
|
tsuccess
|
|
fi
|
|
|
|
ttest "injected plugin are added to KONG_PLUGINS if set with 'bundled'"
|
|
TEST_CMD_OPTS="-e KONG_PLUGINS=bundled,custom-one"
|
|
run_kong_cmd "printenv" | grep "bundled,myplugin,custom-one"
|
|
if [ ! $? -eq 0 ]; then
|
|
tmessage "injected plugin '$test_plugin_name' was not found in KONG_PLUGIN"
|
|
tfailure
|
|
else
|
|
tsuccess
|
|
fi
|
|
|
|
ttest "injected plugin are NOT added to KONG_PLUGINS if set without 'bundled'"
|
|
TEST_CMD_OPTS="-e KONG_PLUGINS=custom-one,custom-two"
|
|
run_kong_cmd "printenv" | grep "$test_plugin_name"
|
|
if [ $? -eq 0 ]; then
|
|
tmessage "injected plugin '$test_plugin_name' was found in KONG_PLUGIN, but was not expected"
|
|
tfailure
|
|
else
|
|
tsuccess
|
|
fi
|
|
|
|
# cleanup
|
|
unset TEST_CMD_OPTS
|
|
delete_custom_image
|
|
|
|
|
|
|
|
ttest "fails injecting an unavailable plugin with local rockserver"
|
|
# the plugin is PUBLICLY available, but NOT on our local one, so should fail
|
|
local test_plugin_name="kong-upstream-jwt"
|
|
build_custom_image "$test_plugin_name" "" "$mypath/rockserver"
|
|
if [ ! $? -eq 0 ]; then
|
|
tsuccess
|
|
else
|
|
tmessage "injected plugin '$test_plugin_name' which was not on the local rockserver"
|
|
tfailure
|
|
fi
|
|
delete_custom_image
|
|
|
|
|
|
|
|
ttest "injects a custom template"
|
|
build_custom_image "" "$mypath/bad_file.conf"
|
|
if [ ! $? -eq 0 ]; then
|
|
tfailure
|
|
else
|
|
docker run -it -d \
|
|
-e "KONG_DATABASE=off" \
|
|
--name "kong-testsuite-container" \
|
|
"kong-$BASE-customize:latest" kong start
|
|
|
|
sleep 3
|
|
OUTPUT=$(docker logs kong-testsuite-container)
|
|
echo "$OUTPUT"
|
|
echo "$OUTPUT" | grep "nginx configuration is invalid"
|
|
|
|
if [ $? -eq 0 ]; then
|
|
tmessage "container failed to start because of invalid config, as expected"
|
|
tsuccess
|
|
else
|
|
tmessage "container is running, while it should have failed to start"
|
|
tfailure
|
|
fi
|
|
docker rm --force kong-testsuite-container
|
|
fi
|
|
delete_custom_image
|
|
|
|
|
|
|
|
ttest "injects a custom template and a plugin"
|
|
local test_plugin_name="kong-plugin-myplugin"
|
|
build_custom_image "$test_plugin_name" "$mypath/bad_file.conf" "$mypath/rockserver"
|
|
if [ ! $? -eq 0 ]; then
|
|
tfailure
|
|
else
|
|
# check if plugin was injected
|
|
run_kong_cmd "luarocks list --porcelain" | grep $test_plugin_name
|
|
if [ ! $? -eq 0 ]; then
|
|
tmessage "injected plugin '$test_plugin_name' was not found"
|
|
tfailure
|
|
else
|
|
# now check if the template was added
|
|
docker run -it -d \
|
|
-e "KONG_DATABASE=off" \
|
|
--name "kong-testsuite-container" \
|
|
"kong-$BASE-customize:latest" kong start
|
|
|
|
sleep 3
|
|
OUTPUT=$(docker logs kong-testsuite-container)
|
|
echo "$OUTPUT"
|
|
echo "$OUTPUT" | grep "nginx configuration is invalid"
|
|
|
|
if [ $? -eq 0 ]; then
|
|
tmessage "container failed to start because of invalid config, as expected"
|
|
tsuccess
|
|
else
|
|
tmessage "container is running, while it should have failed to start"
|
|
tfailure
|
|
fi
|
|
docker rm --force kong-testsuite-container
|
|
fi
|
|
fi
|
|
delete_custom_image
|
|
|
|
|
|
|
|
popd
|
|
tfinish
|
|
}
|
|
|
|
|
|
# No need to modify anything below this comment
|
|
|
|
# shellcheck disable=SC1090 # do not follow source
|
|
[[ "$T_PROJECT_NAME" == "" ]] && set -e && if [[ -f "${1:-$(dirname "$(realpath "$0")")/test.sh}" ]]; then source "${1:-$(dirname "$(realpath "$0")")/test.sh}"; else source "${1:-$(dirname "$(realpath "$0")")/run.sh}"; fi && set +e
|
|
run_test
|