diff options
author | Harald Welte <laforge@osmocom.org> | 2020-11-30 13:56:50 +0100 |
---|---|---|
committer | Harald Welte <laforge@osmocom.org> | 2020-11-30 15:50:31 +0100 |
commit | b83c28fc34c3cabd8ea51bf9dd7a6981b1efd56a (patch) | |
tree | 74d4ada3bdf00a728007c0c015eac69c9a273648 /ttcn3-gbproxy-test-fr | |
parent | 29f454f2f2c2296b4dcd49bac68a38ddc7deaefb (diff) |
Add ttcn3-gbproxy-test-fr for FR related testing
Testing FR support in osmo-gbproxy is a bit more complicated
as it involves the "hdlc" net-devices privded by the hdlc_fr.ko
kernel module.
So we need to
* run on a host with actual hdlc net-devices (e.g. dahdi_dyamic_loc)
* move those net-devices into the containers after starting them
* wait for the net-devices to appear in the containers before starting
either gbproxy or the test suite
Change-Id: Id4b52877db53cb6e59f6d0d3f754aaae633949e8
Diffstat (limited to 'ttcn3-gbproxy-test-fr')
-rw-r--r-- | ttcn3-gbproxy-test-fr/GBProxy_Tests.cfg | 100 | ||||
-rwxr-xr-x | ttcn3-gbproxy-test-fr/jenkins.sh | 95 | ||||
-rwxr-xr-x | ttcn3-gbproxy-test-fr/netdev-to-docker.sh | 33 | ||||
-rw-r--r-- | ttcn3-gbproxy-test-fr/osmo-gbproxy.cfg | 43 |
4 files changed, 271 insertions, 0 deletions
diff --git a/ttcn3-gbproxy-test-fr/GBProxy_Tests.cfg b/ttcn3-gbproxy-test-fr/GBProxy_Tests.cfg new file mode 100644 index 0000000..adab61a --- /dev/null +++ b/ttcn3-gbproxy-test-fr/GBProxy_Tests.cfg @@ -0,0 +1,100 @@ +[ORDERED_INCLUDE] +# Common configuration, shared between test suites +"/osmo-ttcn3-hacks/Common.cfg" +# testsuite specific configuration, not expected to change +"/osmo-ttcn3-hacks/gbproxy/GBProxy_Tests.default" + +# Local configuration below + +[LOGGING] + +[TESTPORT_PARAMETERS] +*.GBPVTY.CTRL_HOSTNAME := "172.18.25.10" + +[MODULE_PARAMETERS] +GBProxy_Tests.mp_nsconfig_sgsn := { + { + nsvc := { + { + provider := { + ip := { + address_family := AF_INET, + local_ip := "172.18.25.103", + local_udp_port := 23000, + remote_ip := "172.18.25.10" + } + } + } + } + } +} +GBProxy_Tests.mp_nsconfig_pcu := { + { + nsei := 1, + role_sgsn := false, + handle_sns := false, + nsvc := { + { + provider := { + fr := { + netdev := "hdlc1", + dlci := 16 + } + }, + nsvci := 1 + }, { + provider := { + fr := { + netdev := "hdlc2", + dlci := 17 + } + }, + nsvci := 2 + }, { + provider := { + fr := { + netdev := "hdlc3", + dlci := 18 + } + }, + nsvci := 3 + }, { + provider := { + fr := { + netdev := "hdlc4", + dlci := 19 + } + }, + nsvci := 4 + } + } + } +} + +GBProxy_Tests.mp_gbconfigs := { + { + nsei := 1, + sgsn_role := false, + bvc := { + { + bvci := 196, + cell_id := { + ra_id := { + lai := { + mcc_mnc := '262F42'H, + lac := 13135 + }, + rac := 0 + }, + cell_id := 20960 + }, + depth := BSSGP_DECODE_DEPTH_BSSGP + } + } + } +}; + +[MAIN_CONTROLLER] + +[EXECUTE] +GBProxy_Tests.control diff --git a/ttcn3-gbproxy-test-fr/jenkins.sh b/ttcn3-gbproxy-test-fr/jenkins.sh new file mode 100755 index 0000000..dce891d --- /dev/null +++ b/ttcn3-gbproxy-test-fr/jenkins.sh @@ -0,0 +1,95 @@ +#!/bin/sh + +# WARNING: This cannot be executed on any random Linux machine or jenkins slave node! +# +# We require a kernel with HLDC net-devices, specifically eight pairs of devices named +# hdlc1 + hdlcnet1 ... hdlc8 + hdclnet8. +# +# Those pairs of netdevices can e.g. be implemented by actually physically looping back +# the related E1 interfaces, or e.g.by using DAHDI_NET + dahdi_dynamic_loc to create +# pairs of virtual E1 spans. +# +# In addition, we need to use 'sudo' permissions in order to move the hdlc +# net-devices into the docker containers. So in automatic test execution this means +# that the user will need sudo privileges without entering a password (NOPASS) + +. ../jenkins-common.sh +IMAGE_SUFFIX="${IMAGE_SUFFIX:-master}" +docker_images_require \ + "osmo-gbproxy-$IMAGE_SUFFIX" \ + "ttcn3-gbproxy-test" + +SUBNET=25 +network_create $SUBNET + +mkdir $VOL_BASE_DIR/gbproxy-tester +cp GBProxy_Tests.cfg $VOL_BASE_DIR/gbproxy-tester/ + +mkdir $VOL_BASE_DIR/gbproxy +cp osmo-gbproxy.cfg $VOL_BASE_DIR/gbproxy/ + +# Disable features not in latest yet +if [ "$IMAGE_SUFFIX" = "latest" ]; then + true; +fi + +mkdir $VOL_BASE_DIR/unix + +echo Starting container with gbproxy +docker run --rm \ + --cap-add=NET_RAW --cap-add=SYS_RAWIO \ + $(docker_network_params $SUBNET 10) \ + --ulimit core=-1 \ + -e "WAIT_FOR_NETDEV=hdlcnet8" \ + -v $VOL_BASE_DIR/gbproxy:/data \ + --name ${BUILD_TAG}-gbproxy -d \ + $DOCKER_ARGS \ + $REPO_USER/osmo-gbproxy-$IMAGE_SUFFIX + +# move all hdlcnetX net-devices into container +for i in `seq 1 8`; do + DEV="hdlcnet$i" + #sudo sethdlc ${DEV} fr lmi none + sudo ./netdev-to-docker.sh ${DEV} ${BUILD_TAG}-gbproxy +done + +echo Starting container with gbproxy testsuite +docker run --rm \ + --cap-add=NET_RAW --cap-add=SYS_RAWIO \ + $(docker_network_params $SUBNET 103) \ + --ulimit core=-1 \ + -e "TTCN3_PCAP_PATH=/data" \ + -e "WAIT_FOR_NETDEV=hdlc8" \ + -v $VOL_BASE_DIR/gbproxy-tester:/data \ + --name ${BUILD_TAG}-ttcn3-gbproxy-test -d \ + $DOCKER_ARGS \ + $REPO_USER/ttcn3-gbproxy-test $@ + +# move all hdlcnetX net-devices into container +for i in `seq 1 8`; do + DEV="hdlc$i" + #sudo sethdlc ${DEV} fr lmi none + sudo ./netdev-to-docker.sh ${DEV} ${BUILD_TAG}-ttcn3-gbproxy-test +done + +# emulate runnign container in foreground, which is no longer possible as we +# must shift the net-devices into the container _after_ it is started +docker logs -f ${BUILD_TAG}-ttcn3-gbproxy-test + + +echo Starting container to merge logs +docker run --rm \ + $(docker_network_params $SUBNET 103) \ + --ulimit core=-1 \ + -e "TTCN3_PCAP_PATH=/data" \ + -v $VOL_BASE_DIR/gbproxy-tester:/data \ + --name ${BUILD_TAG}-ttcn3-gbproxy-test-logmerge \ + --entrypoint /osmo-ttcn3-hacks/log_merge.sh GBProxy_Tests --rm \ + $DOCKER_ARGS \ + $REPO_USER/ttcn3-gbproxy-test + +echo Stopping containers +docker container kill ${BUILD_TAG}-gbproxy + +network_remove +collect_logs diff --git a/ttcn3-gbproxy-test-fr/netdev-to-docker.sh b/ttcn3-gbproxy-test-fr/netdev-to-docker.sh new file mode 100755 index 0000000..492758e --- /dev/null +++ b/ttcn3-gbproxy-test-fr/netdev-to-docker.sh @@ -0,0 +1,33 @@ +#!/bin/bash + +set -e + +NETDEV="$1" +CONTAINER="$2" + +die () { + status="$1" + shift + warn "$@" + exit "$status" +} + +DOCKER_PID=$(docker inspect --format='{{ .State.Pid }}' $2) + +[ ! -d /var/run/netns ] && mkdir -p /var/run/netns +rm -f "/var/run/netns/$DOCKER_PID" +ln -s "/proc/$DOCKER_PID/ns/net" "/var/run/netns/$DOCKER_PID" + +[ "$DOCKERPID" = 0 ] && { + die 1 "Docker inspect returned invalid PID 0" +} + +[ "$DOCKERPID" = "<no value>" ] && { + die 1 "Container $GUESTNAME not found, and unknown to Docker." +} + +ip link set "$NETDEV" netns "$DOCKER_PID" +ip netns exec "$DOCKER_PID" sethdlc "$NETDEV" fr lmi none +ip netns exec "$DOCKER_PID" ip link set "$NETDEV" up + +rm -f "/var/run/netns/$DOCKER_PID" diff --git a/ttcn3-gbproxy-test-fr/osmo-gbproxy.cfg b/ttcn3-gbproxy-test-fr/osmo-gbproxy.cfg new file mode 100644 index 0000000..7e57c0c --- /dev/null +++ b/ttcn3-gbproxy-test-fr/osmo-gbproxy.cfg @@ -0,0 +1,43 @@ +! +! Osmocom Gb Proxy (0.9.0.404-6463) configuration saved from vty +!! +! +log gsmtap 172.18.25.103 + logging level set-all debug + logging filter all 1 +! +log stderr + logging filter all 1 + logging color 1 + logging print category 1 + logging timestamp 1 + logging print extended-timestamp 1 + logging print file 1 + logging level all everything +! +line vty + no login + bind 0.0.0.0 +! +gbproxy + sgsn nsei 101 +ns + nse 101 nsvci 101 + nse 101 remote-role sgsn + nse 101 encapsulation udp + nse 101 remote-ip 172.18.25.103 + nse 101 remote-port 23000 + timer tns-block 3 + timer tns-block-retries 3 + timer tns-reset 3 + timer tns-reset-retries 3 + timer tns-test 30 + timer tns-alive 3 + timer tns-alive-retries 10 + encapsulation udp local-ip 172.18.25.10 + encapsulation udp local-port 23000 + encapsulation framerelay-gre enabled 0 + nse 1 nsvci 1 frnet hdlcnet1 dlci 16 + nse 1 nsvci 2 frnet hdlcnet2 dlci 17 + nse 1 nsvci 3 frnet hdlcnet3 dlci 18 + nse 1 nsvci 4 frnet hdlcnet4 dlci 19 |