Project

General

Profile

Titan TTCN3 Testsuites » History » Version 31

msuraev, 03/20/2019 04:42 PM

1 2 laforge
{{>toc}}
2
3 1 laforge
h1. Osmocom Titan TTCN3 Testsuites
4
5 14 osmith
In 2017, Osmocom started to create extensive tests suites for the Cellular Network Infrastructure elements.  Those suites are written in the [[TTCN-3]] programming language and use the compiler and executor of the [[Eclipse_TITAN]] project. There are special cases, but in general, the idea is to test one component (e.g. @osmo-mgw@) independently.
6 2 laforge
7
h2. Source Code / Patches
8
9
The source code of our test suites lives in the @osmo-ttcn3-hacks@ repository
10
* cgit web interface: http://git.osmocom.org/osmo-ttcn3-hacks/
11
* clone: @git clone git://git.osmocom.org/osmo-ttcn3-hacks@
12
* patch review: https://gerrit.osmocom.org/#/q/project:osmo-ttcn3-hacks
13
14
We're following the [[Gerrit]] process for patch review.
15
16
h2. Test Suites
17
18
|_.Implementation under Test|_.Testsuite|_.Jenkins|
19
|bsc-nat|http://git.osmocom.org/osmo-ttcn3-hacks/tree/bsc-nat|-|
20
|[[OsmoBSC:]]|http://git.osmocom.org/osmo-ttcn3-hacks/tree/bsc|https://jenkins.osmocom.org/jenkins/view/TTCN3/job/ttcn3-bsc-test/|
21
|[[OsmoBTS:]]|http://git.osmocom.org/osmo-ttcn3-hacks/tree/bts|https://jenkins.osmocom.org/jenkins/view/TTCN3/job/ttcn3-bts-test/|
22
|[[OpenGGSN:OsmoGGSN]]|http://git.osmocom.org/osmo-ttcn3-hacks/tree/ggsn_tests|https://jenkins.osmocom.org/jenkins/view/TTCN3/job/ttcn3-ggsn-test/|
23
|[[OsmoHLR:]]|http://git.osmocom.org/osmo-ttcn3-hacks/tree/hlr|https://jenkins.osmocom.org/jenkins/view/TTCN3/job/ttcn3-hlr-test/|
24
|[[OsmoMGW:]]|http://git.osmocom.org/osmo-ttcn3-hacks/tree/mgw|https://jenkins.osmocom.org/jenkins/view/TTCN3/job/ttcn3-mgw-test/|
25
|[[OsmoMSC:]]|http://git.osmocom.org/osmo-ttcn3-hacks/tree/msc|https://jenkins.osmocom.org/jenkins/view/TTCN3/job/ttcn3-msc-test/|
26
|[[OsmoPCU:]]|http://git.osmocom.org/osmo-ttcn3-hacks/tree/pcu|-|
27
|[[OsmoSGSN:]]|http://git.osmocom.org/osmo-ttcn3-hacks/tree/sgsn|https://jenkins.osmocom.org/jenkins/view/TTCN3/job/ttcn3-sgsn-test/|
28
|[[osmo-sip-connector:]]|http://git.osmocom.org/osmo-ttcn3-hacks/tree/sip|https://jenkins.osmocom.org/jenkins/view/TTCN3/job/ttcn3-sip-test/|
29
30
h2. Running a testsuite
31
32
You have multiple options on how to execute a test suite.
33
34
h3. Running test suite in the dockerized environment
35 1 laforge
36 4 osmith
This is the much easier way to run the test suite.  No manual configuration of Osmocom programs or the test suite are required.  Both the Osmocom program (Implementation Under Test) as well as the test suite are packaged as docker containers, which are then executed next to each other using a docker network with the "right" addresses between IUT and testsuite.
37 2 laforge
38
Also, using this setup you will be guaranteed to run in the exact same environment as the automatically-executed tests on jenkins.osmocom.org, i.e. your results should be exactly identical, without any differences introduced by your runtime environment, whether specific library versions or intentional or inadvertent configuration differences.
39
40 10 osmith
h4. Installing docker
41 1 laforge
42 10 osmith
Make sure you have "*docker-ce*":https://docs.docker.com/install/#supported-platforms installed (not to be confused with the possibly outdated version that may be shipped in your distribution's repositories). Check that the version string contains <code>-ce</code> as follows:
43
44
<pre>
45
$ docker -v
46
Docker version 18.06.1-ce, build e68fc7a
47
</pre>
48
49
50 11 osmith
Next, add yourself to the <code>docker</code> group, log off and on again, and verify that you can use docker with your user:
51 10 osmith
52
<pre>
53
$ docker info
54
</pre>
55
56
h4. Cloning docker-playground
57
58 12 osmith
Osmocom related containers are stored in the "@docker-playground@":https://git.osmocom.org/docker-playground/ git repository.
59 5 osmith
60
<pre>
61
$ git clone git://git.osmocom.org/docker-playground
62
$ cd docker-playground
63 1 laforge
</pre>
64 6 osmith
65 1 laforge
h4. Running a testsuite
66
67 25 osmith
All testsuite folders start with @ttcn3@ or @nplab@. Run the following to build/update all required containers and start a specific testsuite:
68 24 osmith
69 1 laforge
<pre>
70 24 osmith
$ cd ttcn3-mgw-test
71
$ ./jenkins.sh
72 1 laforge
</pre>
73
74 24 osmith
Environment variables:
75
* @IMAGE_SUFFIX@: the version of the Osmocom stack to run the testsuite against. Default is `master`, set this to `latest` to test the last stable releases.
76 29 osmith
* @OSMO_TTCN3_BRANCH@: "osmo-ttcn3-hacks.git":https://git.osmocom.org/osmo-ttcn3-hacks/ branch, which will be used when building a `ttcn3-*` docker image. Defaults to `master`.
77 24 osmith
* @NO_DOCKER_IMAGE_BUILD@: when set to @1@, it won't try to update the containers (see "README.md":https://git.osmocom.org/docker-playground/tree/README.md)
78
79 6 osmith
The @jenkins.sh@ script will make sure to
80 24 osmith
* create the needed docker network(s)
81 6 osmith
* run all the required containers (IUT, helpers, testsuite)
82
* shut them down after test suite execution
83
* collect the log files after execution, @/tmp/logs@ will contain them
84
85 2 laforge
h4. Running only a sub-set of the test cases
86
87 20 osmith
See running the testsuite outside of Docker for reference (below).
88
89 28 osmith
h3. Running it natively on your machine
90 2 laforge
91
This is the most complicated bit to set-up, as you will have to run the respective Osmocom Program (Implementation Under Test) in the right configuration with all the IP addresses, port numbers, config file, etc. exactly like it's expected by the test suite.
92 1 laforge
93 14 osmith
You will need a deeper understanding about how the test suite works, and what its requirement are. Oftentimes looking at how it's done in the Docker scripts is helpful.
94
95
h4. Preparation
96
97
<pre>
98
$ apt install eclipse-titan
99
$ git clone git://osmocom.org/osmo-ttcn3-hacks
100
$ cd osmo-ttc3-hacks/deps
101
$ make
102
</pre>
103
104
h4. Compile a testsuite
105
106
Let's compile the @mgw@ testsuite for example:
107
108
<pre>
109
$ cd mgw
110
$ ./gen_links.sh
111 26 msuraev
$ ./regen_makefile.sh
112 14 osmith
</pre>
113 1 laforge
114 23 osmith
The next command will transform the TTCN3 test data into C++ code. Do not use @-j@ here, that won't work (and it is pretty fast anyway).
115 14 osmith
<pre>
116
$ make compile
117
</pre>
118
119 27 msuraev
Note: if you observe errors during @make compile@, try running it from top-level as @make mgw@ which should trigger dependency update.
120
121 14 osmith
Finally compile the testsuite:
122
<pre>
123
$ make -j5
124
</pre>
125 27 msuraev
126 14 osmith
h4. Run a testsuite
127
128 18 osmith
Start the component that is about to get tested with the config that the testsuite expects. Again, with @mgw@ as example. If you don't have a suitable config file, use "the one from Jenkins":https://git.osmocom.org/docker-playground/tree/ttcn3-mgw-test/osmo-mgw.cfg and replace all IPs with @127.0.0.1@.
129 14 osmith
<pre>
130 21 osmith
$ osmo-mgw -c osmo-mgw.cfg
131 14 osmith
</pre>
132
133
Then run the testsuite:
134
<pre>
135
$ cd osmo-ttcn3-hacks/mgw
136
$ ../start-testsuite.sh ./MGCP_test MGCP_Test.cfg
137
</pre>
138
139
Afterwards you can merge and format the logs as follows:
140
<pre>
141
$ ttcn3_logmerge MGCP_test*.log > ./merged.log
142 1 laforge
$ ttcn3_logformat ./merged.log > ./result.log
143 30 msuraev
</pre>
144
or
145
<pre>
146 31 msuraev
$ ../log_merge.sh MGCP_test
147 14 osmith
</pre>
148 2 laforge
149
h4. Running only a sub-set of the test cases
150
151 17 osmith
Running whole testsuites may take a long time. If you only want to run one specific test, or a subset of tests, open up the @_*Test.cfg@ file in the folder of the testsuite and edit the @[EXECUTE]@ section. For example, in "@MGCP_Test.cfg@":https://git.osmocom.org/osmo-ttcn3-hacks/tree/mgw/MGCP_Test.cfg from the @mgw@ folder it looks like the following: 
152 16 osmith
153
<pre>
154 1 laforge
...
155 17 osmith
[EXECUTE]
156
MGCP_Test.control
157
#MGCP_Test.TC_selftest
158
#MGCP_Test.TC_crcx
159
#MGCP_Test.TC_crcx_noprefix
160
...
161
</pre>
162 1 laforge
163 17 osmith
The only line that is *not* commented out is @MGCP_Test.control@. This @*.control@ line will cause all tests to be executed. So comment this line out, and then activate one of the lines of which you would like to execute the tests (see the example below). Then execute the testsuite as usually, and it will skip all commented out tests.
164
165
<pre>
166
...
167
[EXECUTE]
168
#MGCP_Test.control
169
#MGCP_Test.TC_selftest
170
MGCP_Test.TC_crcx
171
MGCP_Test.TC_crcx_noprefix
172
...
173 16 osmith
</pre>
174 2 laforge
175 15 osmith
h2. Reading the logs
176
177
* @xfail@ means, that a test is known to fail, @FAIL@ are unexpected test failures
178
* search for @setverdict(@ to find the results of single tests. @-> fail@ should be the location where a test is failing.
179
180 2 laforge
h2. Further information
181
182 22 osmith
* April 2018 talk by Harald on "State of the Osmocom TTCN-3 Test Suites":https://media.ccc.de/v/UGHHW3
Add picture from clipboard (Maximum size: 48.8 MB)