Harald Welte
cc1620eac8
We cannot rely on every test slave always having proper IPv6 conenctivity to a public DNS server, and that DNS server to respond to ICMPv6 echo request. We're testing half of the internet instead of our GGSN. Let's use the IPv6 address of the docker container running the test sute, which is guaranteed to always exist. We have no problems with routing, as the ICMPv6 is hand-crafted and encapsulated into GTP before it's sent to the kernel IP stack - so basically on the transmit side, the kernel doesn't know anything about the destination address of the encapsulated IPv6 packet. Closes: OS#4713 Change-Id: I1377ffa2cc6980168297d5ff5c81fa5dad94d7a9 |
||
---|---|---|
alpine-build | ||
alpine-lighttpd | ||
bind9 | ||
centos-repo-install-test | ||
centos8-build | ||
cgit | ||
debian-buster-build | ||
debian-buster-erlang | ||
debian-buster-simtrace2 | ||
debian-jessie-build | ||
debian-jessie-buildslave | ||
debian-jessie-buildslave-st | ||
debian-jessie-osmocom | ||
debian-repo-install-test | ||
debian-sid-build | ||
debian-stretch-build | ||
debian-stretch-build-dist | ||
debian-stretch-jenkins | ||
debian-stretch-titan | ||
gerrit | ||
git-daemon | ||
gitolite | ||
gr-gsm-master | ||
make | ||
nplab-m3ua-test | ||
nplab-sua-test | ||
open5gs-master | ||
osmo-bsc-latest | ||
osmo-bsc-master | ||
osmo-bts-latest | ||
osmo-bts-master | ||
osmo-cn-latest | ||
osmo-dev-on-debian-sid | ||
osmo-gerrit-libosmo | ||
osmo-ggsn-latest | ||
osmo-ggsn-master | ||
osmo-gsm-tester | ||
osmo-hlr-latest | ||
osmo-hlr-master | ||
osmo-hnbgw-latest | ||
osmo-hnbgw-master | ||
osmo-mgw-latest | ||
osmo-mgw-master | ||
osmo-msc-latest | ||
osmo-msc-master | ||
osmo-nitb-latest | ||
osmo-nitb-master | ||
osmo-pcu-latest | ||
osmo-pcu-master | ||
osmo-remsim-latest | ||
osmo-remsim-master | ||
osmo-sgsn-latest | ||
osmo-sgsn-master | ||
osmo-sip-latest | ||
osmo-sip-master | ||
osmo-stp-latest | ||
osmo-stp-master | ||
osmo-uecups-master | ||
osmocom-bb-host-master | ||
patchwork | ||
public-inbox | ||
redmine | ||
scripts | ||
sctp-test | ||
sigtran-tests | ||
tmp | ||
ttcn3-bsc-test | ||
ttcn3-bsc-test-sccplite | ||
ttcn3-bscnat-test | ||
ttcn3-bts-test | ||
ttcn3-ggsn-test | ||
ttcn3-hlr-test | ||
ttcn3-mgw-test | ||
ttcn3-msc-test | ||
ttcn3-nitb-sysinfo | ||
ttcn3-pcu-test | ||
ttcn3-pcu-test-sns | ||
ttcn3-remsim-test | ||
ttcn3-sccp-test | ||
ttcn3-sgsn-test | ||
ttcn3-sip-test | ||
ttcn3-stp-test | ||
ubuntu-zesty-build | ||
.gitignore | ||
.gitreview | ||
README.md | ||
Release.key | ||
jenkins-common.sh | ||
osmo-bisect.sh |
README.md
Osmocom docker playground
This repository contains some humble attempts at creating some Docker containers + related stacks around Osmocom. So far, the main focus is test automation.
Running a testsuite
All testsuite folders start with ttcn3
or nplab
. Run the following
to build/update all required containers and start a specific testsuite:
$ cd ttcn3-mgw-test
$ ./jenkins.sh
Environment variables:
IMAGE_SUFFIX
: the version of the Osmocom stack to run the testsuite against. Default ismaster
, set this tolatest
to test the last stable releases.OSMO_TTCN3_BRANCH
: osmo-ttcn3-hacks.git branch, which will be used when building attcn3-*
docker image. Defaults tomaster
.NO_DOCKER_IMAGE_BUILD
: when set to1
, it won't try to update the containers (see "caching" below)
Building containers manually
Most folders in this repository contain a Dockerfile
. Build a docker
container with the same name as the folder like this:
$ cd debian-stretch-build
$ make
Caching
All folders named osmo-*-latest
and osmo-*-master
build the latest
stable or most recent commit from master
of the corresponding Osmocom
program's git repository. When you have built it already, running make
will only do a small HTTP request to check if the sources are outdated
and skip the build in case it is still up-to-date.
Dependencies
Folders that don't have a jenkins.sh
usually only depend on the
container that is specified in the FROM
line of their Dockerfile
.
Testsuites depend on multiple containers, they are defined on top of
each jenkins.sh
:
. ../jenkins-common.sh
IMAGE_SUFFIX="${IMAGE_SUFFIX:-master}"
docker_images_require \
"osmo-stp-$IMAGE_SUFFIX" \
"osmo-bsc-$IMAGE_SUFFIX" \
"osmo-bts-$IMAGE_SUFFIX" \
"ttcn3-bsc-test"
Reasoning for this implementation
Before having the docker_images_require
lines, there used to be a
top-level Makefile
for resolving dependencies between the containers.
But it was prone to mistakes: when new folders in the repository
were added without related targets in the Makefile
, make
would
always assume that the targets where the always existing folders and
therefore never build the containers.
In order to implement testing latest
in addition to master
(OS#3268), it would have been
necessary to add further complexity to the Makefile
. Instead it was
decided to scrap the file, and just keep the short list of dependencies
right above where they would be needed in the jenkins.sh
.
Obtaining gdb backtrace from crash
If for instance TTCN3 test is producing a crash on a program running in docker, eg. osmo-msc, it is desirable to get a full crash report. This section describes how to do so.
First, open osmo-$program/Dockerfile
and add lines to install gdb
plus
$program
dependency debug packages. For instance:
+RUN apt-get install -y --no-install-recommends \
+ gdb \
+ libosmocore-dbg libosmo-abis-dbg libosmo-netif-dbg libosmo-sigtran-dbg osmo-msc-dbg && \
+ apt-get clean
In same Dockerfile
file, modify configure to build with debug symbols enabled
and other interesting options, such as --enable-sanitize
:
- ./configure --enable-smpp --enable-iu && \
+ export CPPFLAGS="-g -O0 -fno-omit-frame-pointer" && \
+ export CFLAGS="-g -O0 -fno-omit-frame-pointer" && \
+ export CXXFLAGS="-g -O0 -fno-omit-frame-pointer" && \
+ ./configure --enable-smpp --enable-iu --enable-sanitize && \
Finally open the script you use to run the program (for instance
ttcn3-$program-master/jenkins.sh
), and modify it to launch the process using
gdb, and to print a full backtrace when control returns to gdb (when the process
crashes):
-/bin/sh -c "osmo-msc -c /data/osmo-msc.cfg >>/data/osmo-msc.log 2>&1"
+/bin/sh -c "gdb -ex 'run' -ex 'bt full' --arg osmo-msc -c /data/osmo-msc.cfg >>/data/osmo-msc.log 2>&1"
See also
- Overhyped Docker for related rambling on why this doesn't work as well as one would want.
- Osmocom wiki: Titan TTCN3 Testsuites