pespin has submitted this change. ( https://gerrit.osmocom.org/c/docker-playground/+/37350?usp=email )
Change subject: ttcn3-asterisk: Allow running testsuite with IPv4 and IPv6 configs ......................................................................
ttcn3-asterisk: Allow running testsuite with IPv4 and IPv6 configs
Requires [1] to be able to run SIPmsg_PT in Asterisk_Tests with IPv6 support.
[1] https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.SIPmsg/-/merge_requ...
Related: SYS#6982 Change-Id: I1de922c681fef4d308898cd592544aef25901c7b --- M ttcn3-asterisk-ims-ue-test/jenkins.sh M ttcn3-asterisk-ims-ue-test/ttcn3/ttcn3.sh 2 files changed, 141 insertions(+), 51 deletions(-)
Approvals: laforge: Looks good to me, but someone else must approve osmith: Looks good to me, approved Jenkins Builder: Verified
diff --git a/ttcn3-asterisk-ims-ue-test/jenkins.sh b/ttcn3-asterisk-ims-ue-test/jenkins.sh index 2e10f76..cad25bd 100755 --- a/ttcn3-asterisk-ims-ue-test/jenkins.sh +++ b/ttcn3-asterisk-ims-ue-test/jenkins.sh @@ -1,5 +1,8 @@ #!/bin/sh
+TEST_CONFIGS_ALL="ipv4 ipv6" +TEST_CONFIGS="${TEST_CONFIGS:-$TEST_CONFIGS_ALL}" + . ../jenkins-common.sh IMAGE_SUFFIX="${IMAGE_SUFFIX:-master}" docker_images_require \ @@ -10,62 +13,130 @@ set_clean_up_trap set -e
-mkdir $VOL_BASE_DIR/dnsmasq -cp dnsmasq/* $VOL_BASE_DIR/dnsmasq/ +clean_up() { + local i + local log
-mkdir $VOL_BASE_DIR/asterisk-ims-ue-tester -mkdir $VOL_BASE_DIR/asterisk-ims-ue-tester/unix -cp ttcn3/ttcn3.sh $VOL_BASE_DIR/asterisk-ims-ue-tester/ -cp ttcn3/Asterisk_Tests.cfg $VOL_BASE_DIR/asterisk-ims-ue-tester/ -write_mp_osmo_repo "$VOL_BASE_DIR/asterisk-ims-ue-tester/Asterisk_Tests.cfg" + # Add a suffix to the class names in the junit-xml log + for i in $TEST_CONFIGS; do + if [ "$i" = "all" ]; then + continue + fi
-mkdir $VOL_BASE_DIR/asterisk -cp asterisk/* $VOL_BASE_DIR/asterisk/ + for log in "$VOL_BASE_DIR"/asterisk-ims-ue-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 dnsmasq in background +start_dnsmasq() { + local test_config="$1" + echo Starting container with dnsmasq + docker run --rm \ + --cap-add=NET_ADMIN \ + $(docker_network_params $SUBNET $DNS_IP_SUFFIX) \ + --ulimit core=-1 \ + -v "$VOL_BASE_DIR/dnsmasq-${test_config}:/data" \ + --name ${BUILD_TAG}-dnsmasq -d \ + $DOCKER_ARGS \ + $REPO_USER/dnsmasq +} + +# Start container with Asterisk in background +start_asterisk() { + local test_config="$1" + echo Starting container with Asterisk + docker run --rm \ + --cap-add=NET_ADMIN \ + --cap-add=SYS_RESOURCE \ + $(docker_network_params $SUBNET $ASTERISK_IP_SUFFIX) \ + -e "DNS_IPADDR=${DNS_IPADDR}" \ + --ulimit core=-1 \ + -v "$VOL_BASE_DIR/asterisk-${test_config}:/data" \ + --name "${BUILD_TAG}-asterisk" -d \ + $DOCKER_ARGS \ + "$REPO_USER/asterisk-$IMAGE_SUFFIX" \ + /bin/sh -c "/data/asterisk.sh >/data/asterisk.console.log 2>&1" +} + +# Start docker container with testsuite in foreground +start_testsuite() { + local test_config="$1" + echo Starting container with Asterisk testsuite + docker run --rm \ + --cap-add=NET_ADMIN \ + --cap-add=SYS_RESOURCE \ + $(docker_network_params $SUBNET $TTCN3_IP_SUFFIX) \ + --ulimit core=-1 \ + -e "TTCN3_PCAP_PATH=/data" \ + -e "EXTRA_IPADDR=${EXTRA_IPADDR}" \ + -v "$VOL_BASE_DIR/asterisk-ims-ue-tester-${test_config}:/data" \ + --name "${BUILD_TAG}-ttcn3-asterisk-ims-ue-test" \ + $DOCKER_ARGS \ + "$REPO_USER/ttcn3-asterisk-ims-ue-test" \ + /data/ttcn3.sh +}
network_create -network_replace_subnet_in_configs -SUBNET_IP_PREFIX="$SUB4_PREFIX.$SUBNET" -ASTERISK_IP_SUFFIX="10" -TTCN3_IP_SUFFIX="103" -IMSCORE_IP_SUFFIX="104" -DNS_IP_SUFFIX="200"
-echo Starting container with dnsmasq -docker run --rm \ - --cap-add=NET_ADMIN \ - $(docker_network_params $SUBNET $DNS_IP_SUFFIX) \ - --ulimit core=-1 \ - -v $VOL_BASE_DIR/dnsmasq:/data \ - --name ${BUILD_TAG}-dnsmasq -d \ - $DOCKER_ARGS \ - $REPO_USER/dnsmasq +for i in $TEST_CONFIGS; do + if ! test_config_enabled "$i"; then + continue + fi
-echo Starting container with Asterisk -docker run --rm \ - --cap-add=NET_ADMIN \ - --cap-add=SYS_RESOURCE \ - $(docker_network_params $SUBNET $ASTERISK_IP_SUFFIX) \ - -e "DNS_IPADDR=${SUBNET_IP_PREFIX}.${DNS_IP_SUFFIX}" \ - --ulimit core=-1 \ - -v $VOL_BASE_DIR/asterisk:/data \ - --name ${BUILD_TAG}-asterisk -d \ - $DOCKER_ARGS \ - $REPO_USER/asterisk-$IMAGE_SUFFIX \ - /bin/sh -c "/data/asterisk.sh >/data/asterisk.console.log 2>&1" + mkdir "${VOL_BASE_DIR}/dnsmasq-${i}" + cp dnsmasq/* "${VOL_BASE_DIR}/dnsmasq-${i}/"
-# Leave some time for asterisk to start: -sleep 3 + mkdir "${VOL_BASE_DIR}/asterisk-ims-ue-tester-${i}" + mkdir "${VOL_BASE_DIR}/asterisk-ims-ue-tester-${i}/unix" + cp "ttcn3/ttcn3.sh" "${VOL_BASE_DIR}/asterisk-ims-ue-tester-${i}/" + cp "ttcn3/Asterisk_Tests.cfg" "${VOL_BASE_DIR}/asterisk-ims-ue-tester-${i}/" + write_mp_osmo_repo "${VOL_BASE_DIR}/asterisk-ims-ue-tester-${i}/Asterisk_Tests.cfg"
-echo Starting container with Asterisk testsuite -docker run --rm \ - --cap-add=NET_ADMIN \ - --cap-add=SYS_RESOURCE \ - $(docker_network_params $SUBNET $TTCN3_IP_SUFFIX) \ - --ulimit core=-1 \ - -e "TTCN3_PCAP_PATH=/data" \ - -e "EXTRA_IPADDR=${SUBNET_IP_PREFIX}.${IMSCORE_IP_SUFFIX}/24" \ - -v $VOL_BASE_DIR/asterisk-ims-ue-tester:/data \ - --name ${BUILD_TAG}-ttcn3-asterisk-ims-ue-test \ - $DOCKER_ARGS \ - $REPO_USER/ttcn3-asterisk-ims-ue-test \ - /data/ttcn3.sh + mkdir "$VOL_BASE_DIR/asterisk-${i}" + cp asterisk/* "$VOL_BASE_DIR/asterisk-${i}/" + + network_replace_subnet_in_configs + ASTERISK_IP_SUFFIX="10" + TTCN3_IP_SUFFIX="103" + IMSCORE_IP_SUFFIX="104" + DNS_IP_SUFFIX="200" + + if [ "$i" = "ipv4" ]; then + NETMASK_PREFIX="24" + SUBNET_IP_PREFIX="$SUB4_PREFIX.$SUBNET" + DNS_IPADDR="${SUBNET_IP_PREFIX}.${DNS_IP_SUFFIX}" + EXTRA_IPADDR="${SUBNET_IP_PREFIX}.${IMSCORE_IP_SUFFIX}/${NETMASK_PREFIX}" + elif [ "$i" = "ipv6" ]; then + NETMASK_PREFIX="64" + SUBNET_IP_PREFIX="$SUB6_PREFIX:$SUBNET" + DNS_IPADDR="${SUBNET_IP_PREFIX}::${DNS_IP_SUFFIX}" + EXTRA_IPADDR="${SUBNET_IP_PREFIX}::${IMSCORE_IP_SUFFIX}/${NETMASK_PREFIX}" + + # Replace IPv4 addresses with IPv6 ones: + REPLACE_V4_TO_V6_EXPR="s,${SUB4_PREFIX}.${SUBNET}.,${SUB6_PREFIX}:${SUBNET}::,g" + REPLACE_V4_TO_V6_PORT_EXPR="s,${SUB4_PREFIX}.${SUBNET}.${ASTERISK_IP_SUFFIX}:,[${SUB6_PREFIX}:${SUBNET}::${ASTERISK_IP_SUFFIX}]:,g" + sed -i -E -e "${REPLACE_V4_TO_V6_EXPR}" "${VOL_BASE_DIR}/dnsmasq-${i}"/*.conf + sed -i -E -e "s,${SUB4_PREFIX}.${SUBNET}.${TTCN3_IP_SUFFIX}/24,${SUB6_PREFIX}:${SUBNET}::${TTCN3_IP_SUFFIX}/${NETMASK_PREFIX},g" "${VOL_BASE_DIR}/asterisk-${i}"/manager.conf + sed -i -E -e "s,${SUB4},${SUB6},g" "${VOL_BASE_DIR}/asterisk-${i}"/*.conf + sed -i -E -e "${REPLACE_V4_TO_V6_PORT_EXPR}" "${VOL_BASE_DIR}/asterisk-${i}"/*.conf + sed -i -E -e "${REPLACE_V4_TO_V6_EXPR}" "${VOL_BASE_DIR}/asterisk-${i}"/*.conf + sed -i -E -e "${REPLACE_V4_TO_V6_EXPR}" "${VOL_BASE_DIR}/asterisk-ims-ue-tester-${i}"/*.cfg + fi + + start_dnsmasq "$i" + start_asterisk "$i" + # Leave some time for asterisk to start: + sleep 5 + start_testsuite "$i" + + docker_kill_wait "$BUILD_TAG"-asterisk || true + docker_kill_wait "$BUILD_TAG"-dnsmasq || true + # For some reason we need to wait a bit until recreating dnsmasq docker, + # otherwise it says "container name X is already in use by container Y": + sleep 1 +done diff --git a/ttcn3-asterisk-ims-ue-test/ttcn3/ttcn3.sh b/ttcn3-asterisk-ims-ue-test/ttcn3/ttcn3.sh index 6c50af0..e1d4fac 100755 --- a/ttcn3-asterisk-ims-ue-test/ttcn3/ttcn3.sh +++ b/ttcn3-asterisk-ims-ue-test/ttcn3/ttcn3.sh @@ -9,4 +9,8 @@
ip addr add "${EXTRA_IPADDR}" dev eth0
+# https://bugzilla.redhat.com/show_bug.cgi?id=782042 +# IPv6 addresses may take an extra while to be available ('tentative' state): +while [ -n "$(ip -6 addr show tentative)" ]; do sleep 1; done + ttcn3-docker-run asterisk Asterisk_Tests