aboutsummaryrefslogtreecommitdiffstats
path: root/ttcn3-gbproxy-test-fr
diff options
context:
space:
mode:
authorHarald Welte <laforge@osmocom.org>2020-11-30 13:56:50 +0100
committerHarald Welte <laforge@osmocom.org>2020-11-30 15:50:31 +0100
commitb83c28fc34c3cabd8ea51bf9dd7a6981b1efd56a (patch)
tree74d4ada3bdf00a728007c0c015eac69c9a273648 /ttcn3-gbproxy-test-fr
parent29f454f2f2c2296b4dcd49bac68a38ddc7deaefb (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.cfg100
-rwxr-xr-xttcn3-gbproxy-test-fr/jenkins.sh95
-rwxr-xr-xttcn3-gbproxy-test-fr/netdev-to-docker.sh33
-rw-r--r--ttcn3-gbproxy-test-fr/osmo-gbproxy.cfg43
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