echo " [--override <override-environment-filename>] [--pre-clean] [--gen-stats] [--delete-namespaces]"
echo " [--delete-containers] [--endpoint-stats] [--kubeconfig <config-file>] [--host-path-dir <local-host-dir>]"
echo " [--kubecontext <context-name>] [--docker-host <docker-host-url>] [--docker-proxy <host-or-ip>]"
+ echo " [--target-platform <platform> ]"
}
if [ $# -eq 1 ] && [ "$1" == "help" ]; then
echo "--override <file> - Override setting from the file supplied by --env-file"
echo "--pre-clean - Will clean kube resouces when running docker and vice versa"
echo "--gen-stats - Collect container/pod runtime statistics"
- echo "--delete-namespaces - Delete kubernetes namespaces before starting tests - but only those created by the test scripts. Kube mode only. Ignored if running with prestarted apps."
+ echo "--delete-namespaces - Delete kubernetes namespaces before starting tests - but only those created by the test scripts. Kube mode only. Ignored if running with pre-started apps."
echo "--delete-containers - Delete docker containers before starting tests - but only those created by the test scripts. Docker mode only."
echo "--endpoint-stats - Collect endpoint statistics"
echo "--kubeconfig - Configure kubectl to use cluster specific cluster config file"
echo "--kubecontext - Configure kubectl to use a certain context, e.g 'minikube'"
echo "--docker-host - Configure docker to use docker in e.g. a VM"
echo "--docker-proxy - Configure ip/host to docker when docker is running in a VM"
+ echo "--target-platform - Build and pull images for this target platform"
echo ""
echo "List of app short names supported: "$APP_SHORT_NAMES
exit 0
# Var to hold 'auto' in case containers shall be stopped when test case ends
AUTO_CLEAN=""
-# Var to indicate pre clean, if flag --pre-clean is set the script will clean kube resouces when running docker and vice versa
+# Var to indicate pre clean, if flag --pre-clean is set the script will clean kube resources when running docker and vice versa
PRE_CLEAN="0"
# Var to hold the app names to use local images for
STOP_AT_ERROR=0
# The default value "DEV" indicate that development image tags (SNAPSHOT) and nexus repos (nexus port 10002) are used.
-# The value "RELEASE" indicate that relase image tag and nexus repos (nexus port) are used
+# The value "RELEASE" indicate that released image tag and nexus repos (nexus port) are used
# Applies only to images defined in the test-env files with image names and tags defined as XXXX_RELEASE
IMAGE_CATEGORY="DEV"
-#Var to indicate docker-compose version, V1 or V2
+#Var to indicate docker-compose version, V1 or V2. V1 is not supported.
#V1 names replicated containers <proj-name>_<service-name>_<index>
#V2 names replicated containers <proj-name>-<service-name>-<index>
-DOCKER_COMPOSE_VERSION="V1"
+DOCKER_COMPOSE_VERSION="V2"
+
+# Name of target platform, if set by start cmd
+IMAGE_TARGET_PLATFORM=""
+IMAGE_TARGET_PLATFORM_CMD_PARAM="" # Docker cmd param for setting target platform
+IMAGE_TARGET_PLATFORM_IMG_TAG="" # Will be set to target platform if cmd parameter is set
+IMAGE_TARGET_PLATFORM_IMG_TAG=$(docker info --format '{{json . }}' | jq -r .Architecture | sed 's/\//_/g')
# Function to indent cmd output with one space
indent1() { sed 's/^/ /'; }
echo $(date) > $TESTLOGS/$ATC/endpoint_tc_start.log
echo "$TC_ONELINE_DESCR" > $TESTLOGS/$ATC/endpoint_tc_slogan.log
-echo "Test failed" > $TESTLOGS/$ATC/endpoint_tc_end.log # Will be overritten if test is ok
+echo "Test failed" > $TESTLOGS/$ATC/endpoint_tc_end.log # Will be overwritten if test is ok
#Variables for counting tests as well as passed and failed tests
RES_TEST=0
#Var to control if current stats shall be printed
PRINT_CURRENT_STATS=0
-#Var to control if container/pod runtim statistics shall be collected
+#Var to control if container/pod runtime statistics shall be collected
COLLECT_RUNTIME_STATS=0
COLLECT_RUNTIME_STATS_PID=0
#Localhost, may be set to another host/ip by cmd parameter
LOCALHOST_NAME="localhost"
-#Reseting vars related to token/keys used by kubeproxy when istio is enabled
+#Resetting vars related to token/keys used by kubeproxy when istio is enabled
#The vars are populated if istio is used in the testcase
KUBE_PROXY_CURL_JWT=""
KUBE_PROXY_ISTIO_JWKS_KEYS=""
# Function to log a test case failed due to incorrect response code
__log_test_fail_status_code() {
- echo -e $RED" FAIL. Exepected status "$1", got "$2 $3 $ERED
+ echo -e $RED" FAIL. Expected status "$1", got "$2 $3 $ERED
((RES_FAIL++))
__print_current_stats
__check_stop_at_error
# Function to log a failed configuration setup due to incorrect response code
__log_conf_fail_status_code() {
- echo -e $RED" FAIL. Exepected status "$1", got "$2 $3 $ERED
+ echo -e $RED" FAIL. Expected status "$1", got "$2 $3 $ERED
((RES_CONF_FAIL++))
__print_current_stats
__check_stop_at_error
#Vars to hold the start time and timer text for a custom timer
TC_TIMER_STARTTIME=""
TC_TIMER_TIMER_TEXT=""
-TC_TIMER_CURRENT_FAILS="" # Then numer of failed test when timer starts.
+TC_TIMER_CURRENT_FAILS="" # Then number of failed test when timer starts.
# Compared with the current number of fails at timer stop
# to judge the measurement reliability
else
if [ -z "KUBE_PRESTARTED_IMAGES" ]; then
DELETE_KUBE_NAMESPACES=0
- echo "Option ignored - Delete namespaces (ignored when using prestarted apps)"
+ echo "Option ignored - Delete namespaces (ignored when using pre-started apps)"
else
DELETE_KUBE_NAMESPACES=1
echo "Option set - Delete namespaces"
fi
fi
fi
+ if [ $paramerror -eq 0 ]; then
+ if [ "$1" == "--target-platform" ]; then
+ shift;
+ if [ -z "$1" ]; then
+ paramerror=1
+ if [ -z "$paramerror_str" ]; then
+ paramerror_str="No platform string found for : '--target-platform'"
+ fi
+ else
+ if [ "$1" != "linux/amd64" ]; then
+ paramerror=1
+ if [ -z "$paramerror_str" ]; then
+ paramerror_str="Only target platform 'linux/amd64' currently supported"
+ fi
+ else
+ export IMAGE_TARGET_PLATFORM=$1
+ export IMAGE_TARGET_PLATFORM_CMD_PARAM="--platform $1"
+ echo "Option set - Build and pull platform set to: "$1
+ IMAGE_TARGET_PLATFORM_IMG_TAG=$(echo "$1" | sed 's/\//_/g')
+ echo "Setting 'docker build' as alias for 'docker buildx'" | indent2
+ shift
+ foundparm=0
+ fi
+ fi
+ fi
+ fi
done
echo ""
fi
echo " python3 is installed and using version: $(python3 --version)"
+tmp=$(type jq)
+if [ $? -ne 0 ]; then
+ echo -e $RED"command utility jq (cmd-line json processor) is not installed"$ERED
+ exit 1
+fi
+tmp=$(type envsubst)
+if [ $? -ne 0 ]; then
+ echo -e $RED"command utility envsubst (env var substitution in files) is not installed"$ERED
+ exit 1
+fi
tmp=$(which docker)
if [ $? -ne 0 ] || [ -z "$tmp" ]; then
echo -e $RED"docker is required to run the test environment, pls install"$ERED
if [ $RUNMODE == "DOCKER" ]; then
tmp=$(which docker-compose)
if [ $? -ne 0 ] || [ -z "$tmp" ]; then
- echo -e $RED"docker-compose is required to run the test environment, pls install"$ERED
+ echo -e $RED"docker-compose (v.2+) is required to run the test environment, pls install"$ERED
exit 1
else
- tmp=$(docker-compose version)
+ tmp=$(docker-compose -v)
echo " docker-compose installed and using version $tmp"
if [[ "$tmp" == *'v2'* ]]; then
DOCKER_COMPOSE_VERSION="V2"
+ else
+ echo -e $RED"docker-compose version $tmp is not supported. Only version v2 is supported, pls install"$ERED
+ exit 1
fi
fi
fi
echo -e "Application\tApp short name\tImage\ttag\ttag-switch" > $image_list_file
# Check if image env var is set and if so export the env var with image to use (used by docker compose files)
-# arg: <app-short-name> <target-variable-name> <image-variable-name> <image-tag-variable-name> <tag-suffix> <image name>
+# arg: <app-short-name> <target-variable-name> <image-variable-name> <image-tag-variable-name> <tag-suffix> <image name> <target-platform>
__check_and_create_image_var() {
-
- if [ $# -ne 6 ]; then
- echo "Expected arg: <app-short-name> <target-variable-name> <image-variable-name> <image-tag-variable-name> <tag-suffix> <image name>"
+ if [ $# -ne 7 ]; then
+ echo "Expected arg: <app-short-name> <target-variable-name> <image-variable-name> <image-tag-variable-name> <tag-suffix> <image name> <target-platform>"
((IMAGE_ERR++))
return
fi
image="${!3}"
tmptag=$4"_"$5
tag="${!tmptag}"
-
+ if [ ! -z "$7" ]; then
+ tag=$tag-$7 # add platform to tag - for local images built by the test script
+ fi
optional_image_repo_target=""
if [ -z $image ]; then
fi
if [ -z "$tmp_im" ]; then
echo -ne " Pulling image${SAMELINE}"
- out=$(docker pull $source_image)
+ out=$(docker pull $IMAGE_TARGET_PLATFORM_CMD_PARAM $source_image)
if [ $? -ne 0 ]; then
echo ""
echo -e " Pulling image -$RED could not be pulled"$ERED
function_pointer="__"$imagename"_initial_setup"
$function_pointer
- function_pointer="__"$imagename"_statisics_setup"
+ function_pointer="__"$imagename"_statistics_setup"
LOG_STAT_ARGS=$LOG_STAT_ARGS" "$($function_pointer)
fi
done
# This function is called and is expected to exist in the imported
# file for the ricsim test functions
# The resulting function impl shall scale the resources to 0
- # For prestarted apps, the function waits until the resources are 0
+ # For pre-started apps, the function waits until the resources are 0
# For included (not prestated) apps, the scaling is just ordered
__check_prestarted_image $imagename
if [ $? -eq 0 ]; then
envsubst < $compose_file > "gen_"$compose_file
compose_file="gen_"$compose_file
- if [ $DOCKER_COMPOSE_VERSION == "V1" ]; then
- docker_compose_cmd="docker-compose"
- else
- docker_compose_cmd="docker compose"
- fi
+ docker_compose_cmd="docker compose"
if [ "$compose_args" == "NODOCKERARGS" ]; then
$docker_compose_cmd -f $compose_file up -d &> .dockererr