mirror of
https://github.com/project-zot/zot.git
synced 2026-06-17 21:17:58 +08:00
636a6b1820
Changes in this PR ================== - Replaces the get_free_port bash function in BATS tests with get_free_port_for_service that returns a random free port in a given range for a test file and service defined in a ports.json file. - Updates all get_free_port calls to use the new function. - A new README file for details on the ports.json file. - Updates some tests using fixed ports to use dynamic ports. - Adds a ports.json file with all the allocations. - Adds a new common helper for port fetching. Signed-off-by: Vishwas Rajashekar <30438425+vrajashkr@users.noreply.github.com>
97 lines
3.0 KiB
Bash
97 lines
3.0 KiB
Bash
# note: intended to be run as "make run-cloud-scale-out-redis-high-scale-tests"
|
|
# makefile target installs & checks all necessary tooling
|
|
# extra tools that are not covered in Makefile target needs to be added in verify_prerequisites()
|
|
|
|
NUM_ZOT_INSTANCES=6
|
|
ZOT_LOG_DIR=/tmp/zot-ft-logs/redis-scale
|
|
|
|
load helpers_zot
|
|
load helpers_cloud
|
|
load helpers_haproxy
|
|
load helpers_redis
|
|
load ../port_helper
|
|
|
|
function verify_prerequisites() {
|
|
if [ ! $(command -v docker) ]; then
|
|
echo "you need to install docker as a prerequisite to running the tests" >&3
|
|
return 1
|
|
fi
|
|
|
|
return 0
|
|
}
|
|
|
|
function launch_zot_server() {
|
|
local zot_server_address=${1}
|
|
local zot_server_port=${2}
|
|
local zot_root_dir=${ZOT_ROOT_DIR}
|
|
local redis_url=${3}
|
|
|
|
mkdir -p ${zot_root_dir}
|
|
mkdir -p ${ZOT_LOG_DIR}
|
|
|
|
local zot_config_file="${BATS_FILE_TMPDIR}/zot_config_${zot_server_address}_${zot_server_port}.json"
|
|
local zot_log_file="${ZOT_LOG_DIR}/zot-${zot_server_address}-${zot_server_port}.log"
|
|
|
|
create_zot_cloud_redis_config_file ${zot_server_address} ${zot_server_port} ${zot_root_dir} ${zot_config_file} ${zot_log_file} ${redis_url}
|
|
|
|
echo "launching zot server ${zot_server_address}:${zot_server_port}" >&3
|
|
echo "config file: ${zot_config_file}" >&3
|
|
echo "log file: ${zot_log_file}" >&3
|
|
|
|
zot_serve ${zot_config_file}
|
|
wait_zot_reachable ${zot_server_port}
|
|
}
|
|
|
|
function setup() {
|
|
# verify prerequisites are available
|
|
if ! $(verify_prerequisites); then
|
|
exit 1
|
|
fi
|
|
|
|
# setup Redis server
|
|
redis_port=$(get_free_port_for_service "redis")
|
|
redis_start redis_server ${redis_port}
|
|
local redis_url="redis://127.0.0.1:${redis_port}"
|
|
|
|
# setup S3 bucket and DynamoDB tables
|
|
setup_cloud_services
|
|
|
|
# generate the free ports list
|
|
zot_srv_ports=()
|
|
for ((i=0;i<${NUM_ZOT_INSTANCES};i++)); do
|
|
port=$(get_free_port_for_service "zot${i}")
|
|
zot_srv_ports+=("${port}")
|
|
done
|
|
|
|
for inst in "${zot_srv_ports[@]}"; do
|
|
launch_zot_server 127.0.0.1 ${inst} ${redis_url}
|
|
done
|
|
|
|
# list all zot processes that were started
|
|
ps -ef | grep ".*zot.*serve.*" | grep -v grep >&3
|
|
|
|
haproxy_port=$(get_free_port_for_service "haproxy")
|
|
echo ${haproxy_port} > ${BATS_FILE_TMPDIR}/haproxy.port
|
|
|
|
generate_haproxy_config ${HAPROXY_CFG_FILE} "http" ${haproxy_port} "${zot_srv_ports[@]}"
|
|
haproxy_start ${HAPROXY_CFG_FILE}
|
|
|
|
# list HAproxy processes that were started
|
|
ps -ef | grep "haproxy" | grep -v grep >&3
|
|
}
|
|
|
|
function teardown() {
|
|
local zot_root_dir=${ZOT_ROOT_DIR}
|
|
haproxy_stop_all
|
|
zot_stop_all
|
|
redis_stop redis_server
|
|
rm -rf ${zot_root_dir}
|
|
teardown_cloud_services
|
|
}
|
|
|
|
@test "Check for successful zb run on haproxy frontend with Redis cache (high scale)" {
|
|
haproxy_port=`cat ${BATS_FILE_TMPDIR}/haproxy.port`
|
|
|
|
# zb_run <test_name> <zot_address> <concurrency> <num_requests> <credentials (optional)>
|
|
zb_run "cloud-scale-out-redis-scale-bats" "http://127.0.0.1:${haproxy_port}" 10 100
|
|
} |