aboutsummaryrefslogtreecommitdiffstats
path: root/ttcn3-ggsn-test/jenkins.sh
blob: 7c9c7ac2f4a298f99ebc1b5b7de671ebe138d602 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#!/bin/sh
# Environment variables: see README.md
# Possible test configurations:
# * v4_only: one APN with v4
# * v6_only: one APN with v6
# * v4v6_only: one APN with v4v6
# * all: multiple APNs with all of the above
TEST_CONFIGS_ALL="all v4_only v6_only v4v6_only"
TEST_CONFIGS="${TEST_CONFIGS:-$TEST_CONFIGS_ALL}"
. ../jenkins-common.sh

KERNEL_TEST="${KERNEL_TEST:-0}"
IMAGE_SUFFIX="${IMAGE_SUFFIX:-master}"
docker_images_require \
	"osmo-ggsn-$IMAGE_SUFFIX" \
	"ttcn3-ggsn-test"

set_clean_up_trap
set -e

clean_up() {
	local i
	local log

	# Add a suffix to the class names in the junit-xml log
	for i in $TEST_CONFIGS; do
		if [ "$i" = "all" ]; then
			continue
		fi

		for log in "$VOL_BASE_DIR"/ggsn-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 ggsn in background
start_ggsn() {
	local test_config="$1"

	GGSN_CMD="osmo-ggsn -c /data/osmo-ggsn.cfg"
	GGSN_DOCKER_ARGS=""
	if [ "$KERNEL_TEST" = "1" ]; then
		cp osmo-ggsn-kernel/initrd-ggsn.sh $VOL_BASE_DIR/ggsn-"$test_config"/
		network_replace_subnet_in_configs

		kernel_test_prepare \
			"defconfig" \
			"osmo-ggsn-kernel/fragment.config" \
			"$VOL_BASE_DIR/ggsn-$test_config/initrd-ggsn.sh" \
			"$REPO_USER/osmo-ggsn-$IMAGE_SUFFIX" \
			-v $VOL_BASE_DIR/ggsn-"$test_config":/data

		GGSN_CMD="/kernel-test/run-qemu.sh"
		GGSN_DOCKER_ARGS="
			$(docker_network_params $SUBNET 200)
			$(docker_kvm_param)
			-v "$KERNEL_TEST_DIR:/kernel-test:ro"
			-v "$CACHE_DIR:/cache"
			"
		OSMO_SUT_HOST="172.18.$SUBNET.200"
	else

		GGSN_DOCKER_ARGS="
			$(docker_network_params $SUBNET 201)
			"
		OSMO_SUT_HOST="172.18.$SUBNET.201"
	fi
	docker run	--rm \
			--cap-add=NET_ADMIN \
			--device /dev/net/tun:/dev/net/tun \
			--sysctl net.ipv6.conf.all.disable_ipv6=0 \
			--ulimit core=-1 \
			-v $VOL_BASE_DIR/ggsn-"$test_config":/data \
			--name ${BUILD_TAG}-ggsn -d \
			$DOCKER_ARGS \
			$GGSN_DOCKER_ARGS \
			$REPO_USER/osmo-ggsn-$IMAGE_SUFFIX \
			/bin/sh -c "$GGSN_CMD >/data/osmo-ggsn.log 2>&1"

	kernel_test_wait_for_vm "$VOL_BASE_DIR/ggsn-$test_config/osmo-ggsn.log"
}

# Start docker container with testsuite in foreground
start_testsuite() {
	local test_config="$1"

	docker run	--rm \
			--sysctl net.ipv6.conf.all.disable_ipv6=0 \
			$(docker_network_params $SUBNET 202) \
			--ulimit core=-1 \
			-v $VOL_BASE_DIR/ggsn-tester-"$test_config":/data \
			-e "TTCN3_PCAP_PATH=/data" \
			-e "OSMO_SUT_HOST=$OSMO_SUT_HOST" \
			-e "OSMO_SUT_PORT=4260" \
			--name ${BUILD_TAG}-ggsn-test \
			$DOCKER_ARGS \
			$REPO_USER/ttcn3-ggsn-test
}

network_create

if [ "$KERNEL_TEST" = 1 ]; then
	CONFIGS_DIR="osmo-ggsn-kernel"
else
	CONFIGS_DIR="osmo-ggsn"
fi

for i in $TEST_CONFIGS_ALL; do
	if ! test_config_enabled "$i"; then
		continue
	fi

	# OS#6106: Currently it is not possible to configure multiple APNs with
	# gtpu-mode kernel-gtp in OsmoGGSN, because it cannot share the GTP-U
	# bind socket between tunnels.
	if [ "$i" = "all" ] && [ "$KERNEL_TEST" = "1" ]; then
		continue
	fi

	mkdir $VOL_BASE_DIR/ggsn-tester-"$i"
	cp ttcn3/"$i"/GGSN_Tests.cfg $VOL_BASE_DIR/ggsn-tester-"$i"/GGSN_Tests.cfg
	write_mp_osmo_repo "$VOL_BASE_DIR/ggsn-tester-$i/GGSN_Tests.cfg"

	mkdir $VOL_BASE_DIR/ggsn-"$i"
	cp "$CONFIGS_DIR"/"$i"/osmo-ggsn.cfg "$VOL_BASE_DIR"/ggsn-"$i"/osmo-ggsn.cfg
	network_replace_subnet_in_configs

	start_ggsn "$i"
	start_testsuite "$i"

	docker_kill_wait "$BUILD_TAG"-ggsn || true
done