137 lines
3.4 KiB
Bash
Executable File
137 lines
3.4 KiB
Bash
Executable File
#!/bin/sh
|
|
# Environment variables: see README.md
|
|
# Possible test configurations:
|
|
# * v4_only: one APN with v4
|
|
# * v6_only: one APN with v6
|
|
# * v4v6_only: one APN with v4v6
|
|
# * all: multiple APNs with all of the above
|
|
TEST_CONFIGS_ALL="all v4_only v6_only v4v6_only"
|
|
TEST_CONFIGS="${TEST_CONFIGS:-$TEST_CONFIGS_ALL}"
|
|
. ../jenkins-common.sh
|
|
|
|
KERNEL_TEST="${KERNEL_TEST:-0}"
|
|
IMAGE_SUFFIX="${IMAGE_SUFFIX:-master}"
|
|
docker_images_require \
|
|
"osmo-ggsn-$IMAGE_SUFFIX" \
|
|
"ttcn3-ggsn-test"
|
|
|
|
set_clean_up_trap
|
|
set -e
|
|
|
|
clean_up() {
|
|
local i
|
|
local log
|
|
|
|
# Add a suffix to the class names in the junit-xml log
|
|
for i in $TEST_CONFIGS; do
|
|
if [ "$i" = "all" ]; then
|
|
continue
|
|
fi
|
|
|
|
for log in "$VOL_BASE_DIR"/ggsn-tester-"$i"/junit-xml-*.log; do
|
|
if ! [ -e "$log" ]; then
|
|
continue
|
|
fi
|
|
sed -i "s/classname='\([^']\+\)'/classname='\1_$i'/g" "$log"
|
|
done
|
|
done
|
|
}
|
|
|
|
# Start container with ggsn in background
|
|
start_ggsn() {
|
|
local test_config="$1"
|
|
|
|
GGSN_CMD="osmo-ggsn -c /data/osmo-ggsn.cfg"
|
|
GGSN_DOCKER_ARGS=""
|
|
if [ "$KERNEL_TEST" = "1" ]; then
|
|
cp osmo-ggsn-kernel/initrd-ggsn.sh $VOL_BASE_DIR/ggsn-"$test_config"/
|
|
network_replace_subnet_in_configs
|
|
|
|
kernel_test_prepare \
|
|
"defconfig" \
|
|
"osmo-ggsn-kernel/fragment.config" \
|
|
"$VOL_BASE_DIR/ggsn-$test_config/initrd-ggsn.sh" \
|
|
"$REPO_USER/osmo-ggsn-$IMAGE_SUFFIX" \
|
|
-v $VOL_BASE_DIR/ggsn-"$test_config":/data
|
|
|
|
GGSN_CMD="/kernel-test/run-qemu.sh"
|
|
GGSN_DOCKER_ARGS="
|
|
$(docker_network_params $SUBNET 200)
|
|
$(docker_kvm_param)
|
|
-v "$KERNEL_TEST_DIR:/kernel-test:ro"
|
|
-v "$CACHE_DIR:/cache"
|
|
"
|
|
OSMO_SUT_HOST="172.18.$SUBNET.200"
|
|
else
|
|
|
|
GGSN_DOCKER_ARGS="
|
|
$(docker_network_params $SUBNET 201)
|
|
"
|
|
OSMO_SUT_HOST="172.18.$SUBNET.201"
|
|
fi
|
|
docker run --rm \
|
|
--cap-add=NET_ADMIN \
|
|
--device /dev/net/tun:/dev/net/tun \
|
|
--sysctl net.ipv6.conf.all.disable_ipv6=0 \
|
|
--ulimit core=-1 \
|
|
-v $VOL_BASE_DIR/ggsn-"$test_config":/data \
|
|
--name ${BUILD_TAG}-ggsn -d \
|
|
$DOCKER_ARGS \
|
|
$GGSN_DOCKER_ARGS \
|
|
$REPO_USER/osmo-ggsn-$IMAGE_SUFFIX \
|
|
/bin/sh -c "$GGSN_CMD >/data/osmo-ggsn.log 2>&1"
|
|
|
|
kernel_test_wait_for_vm "$VOL_BASE_DIR/ggsn-$test_config/osmo-ggsn.log"
|
|
}
|
|
|
|
# Start docker container with testsuite in foreground
|
|
start_testsuite() {
|
|
local test_config="$1"
|
|
|
|
docker run --rm \
|
|
--sysctl net.ipv6.conf.all.disable_ipv6=0 \
|
|
$(docker_network_params $SUBNET 202) \
|
|
--ulimit core=-1 \
|
|
-v $VOL_BASE_DIR/ggsn-tester-"$test_config":/data \
|
|
-e "TTCN3_PCAP_PATH=/data" \
|
|
-e "OSMO_SUT_HOST=$OSMO_SUT_HOST" \
|
|
-e "OSMO_SUT_PORT=4260" \
|
|
--name ${BUILD_TAG}-ggsn-test \
|
|
$DOCKER_ARGS \
|
|
$REPO_USER/ttcn3-ggsn-test
|
|
}
|
|
|
|
network_create
|
|
|
|
if [ "$KERNEL_TEST" = 1 ]; then
|
|
CONFIGS_DIR="osmo-ggsn-kernel"
|
|
else
|
|
CONFIGS_DIR="osmo-ggsn"
|
|
fi
|
|
|
|
for i in $TEST_CONFIGS_ALL; do
|
|
if ! test_config_enabled "$i"; then
|
|
continue
|
|
fi
|
|
|
|
# OS#6106: Currently it is not possible to configure multiple APNs with
|
|
# gtpu-mode kernel-gtp in OsmoGGSN, because it cannot share the GTP-U
|
|
# bind socket between tunnels.
|
|
if [ "$i" = "all" ] && [ "$KERNEL_TEST" = "1" ]; then
|
|
continue
|
|
fi
|
|
|
|
mkdir $VOL_BASE_DIR/ggsn-tester-"$i"
|
|
cp ttcn3/"$i"/GGSN_Tests.cfg $VOL_BASE_DIR/ggsn-tester-"$i"/GGSN_Tests.cfg
|
|
write_mp_osmo_repo "$VOL_BASE_DIR/ggsn-tester-$i/GGSN_Tests.cfg"
|
|
|
|
mkdir $VOL_BASE_DIR/ggsn-"$i"
|
|
cp "$CONFIGS_DIR"/"$i"/osmo-ggsn.cfg "$VOL_BASE_DIR"/ggsn-"$i"/osmo-ggsn.cfg
|
|
network_replace_subnet_in_configs
|
|
|
|
start_ggsn "$i"
|
|
start_testsuite "$i"
|
|
|
|
docker_kill_wait "$BUILD_TAG"-ggsn || true
|
|
done
|