pespin submitted this change.
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_requests/4
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(-)
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
To view, visit change 37350. To unsubscribe, or for help writing mail filters, visit settings.