aboutsummaryrefslogtreecommitdiffstats
path: root/docs/3_Launch_the_tests.md
blob: b577acb299608dd216c892d5feb31d9a8a280664 (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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
# How to launch the tests ?

## Natively during the development

It could be convenient to be able to test the software that you are currently
developing. Then you can ensure that your modifications haven't introduced
regressions, bugs, etc. This depends upon your tests of course.

As previously saw, you need the `test widget` to be able to launch the tests and
you need also to have the `afb-test` binding installed and the `application
framework binder` to be able to execute your tests.

Assuming you already installed those components on your development host, then
proceed as the following from the project root directory:

```bash
cd build
cmake -DBUILD_TEST_WGT=TRUE ..
make
make widget
```

To prepare all files needed for the test launch then use the `afm-test` script:

```bash
# Usage of afm-test command line utility
afm-test --help
Usage: /opt/AGL/bin/afm-test <binding-wgt-rootdir> <test-wgt-rootdir> [-m|--mode <SOLO|SERVICE>] [-t|--timeout <X>] [-l|--lavaoutput]
binding-wgt-rootdir: path to the test wgt file
test-wgt-rootdir: path to the test folder file
-m|--mode: SOLO (1 binder) or SERVICE (2 binders) (Default: SOLO)
-t|--timeout: timeout in second. (Default 3 seconds)
-l|--lavaoutput: Flags indicating the binding to add Lava special test markers.
Error: Test launch failed. Code: 1
# Launching the test from your build project directory
afm-test package package-test
```

### Example with the afb-test selftest suite

Prepare the launch building the `test widget`:

```bash
$ cd build
# Cleaning the previous build files
$ rm -rf *
# Configuration step
$ cmake -DBUILD_TEST_WGT=TRUE ..
-- The C compiler identification is GNU 8.2.1
-- The CXX compiler identification is GNU 8.2.1
-- Check for working C compiler: /usr/lib64/ccache/cc
-- Check for working C compiler: /usr/lib64/ccache/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/lib64/ccache/c++
-- Check for working CXX compiler: /usr/lib64/ccache/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
Distribution detected (separated by ';' choose one of them) fedora
Include: /home/claneys/.config/app-templates/cmake.d/00-common-var.cmake
Include: /home/claneys/Workspace/Sources/IOTbzh/gerrit.automotivelinux.org/apps/app-afb-test/conf.d/cmake/00-default-osconfig.cmake
Include: /usr/share/cmake/Modules/CMakeAfbTemplates/cmake/cmake.d/01-build_options.cmake
-- Found PkgConfig: /usr/bin/pkg-config (found version "1.4.2")
-- Checking for module 'json-c'
--   Found json-c, version 0.13.1
-- Checking for module 'libsystemd>=222'
--   Found libsystemd, version 238
-- Checking for module 'afb-daemon>=4.0'
--   Found afb-daemon, version 6.90.0
-- Checking for module 'lua>=5.3'
--   Found lua, version 5.3.4
Include: /usr/share/cmake/Modules/CMakeAfbTemplates/cmake/cmake.d/02-variables.cmake
-- Check gcc_minimal_version (found gcc version 8.2.1)  (found g++ version 8.2.1)
Include: /usr/share/cmake/Modules/CMakeAfbTemplates/cmake/cmake.d/03-macros.cmake
Include: /usr/share/cmake/Modules/CMakeAfbTemplates/cmake/cmake.d/04-extra_targets.cmake
-- Overwrite the CMAKE default install prefix with /opt/AGL
-- Found CURL: /usr/lib64/libcurl.so (found version "7.59.0")
-- Qt's WebSocket AFB Client: Disabled!
-- CURL wrapping helpers: Enabled!
-- Notice: LUA Controler Support Selected
-- Notice: Using default test widget configuration's file.
-- If you want to use a customized test-config.xml template then specify TEST_WIDGET_CONFIG_TEMPLATE in your config.cmake file.
-- Configuring done
-- Generating done
-- Build files have been written to: /home/claneys/Workspace/Sources/IOTbzh/gerrit.automotivelinux.org/apps/app-afb-test/build
# Build the binding
$ make
Scanning dependencies of target test-files
[  3%] Generating test-files
[  3%] Built target test-files
Scanning dependencies of target project_populate_test-files
[  6%] Generating package-test/var/test-files
[  6%] Built target project_populate_test-files
Scanning dependencies of target afb-test-config
[  9%] Generating afb-test-config
Warning: JSON_CHECKER not found. Not verification made on files !
[  9%] Built target afb-test-config
Scanning dependencies of target project_populate_afb-test-config
[ 12%] Generating package-test/etc/afb-test-config
[ 12%] Built target project_populate_afb-test-config
Scanning dependencies of target aftest-config
[ 16%] Generating aftest-config
Warning: JSON_CHECKER not found. Not verification made on files !
[ 16%] Built target aftest-config
Scanning dependencies of target project_populate_aftest-config
[ 19%] Generating package/etc/aftest-config
[ 19%] Built target project_populate_aftest-config
Scanning dependencies of target fixture-files
[ 22%] Generating fixture-files
[ 22%] Built target fixture-files
Scanning dependencies of target project_populate_fixture-files
[ 25%] Generating package-test/var/fixture-files
[ 25%] Built target project_populate_fixture-files
Scanning dependencies of target afTest-lua
[ 29%] Generating afTest-lua
[ 29%] Built target afTest-lua
Scanning dependencies of target project_populate_afTest-lua
[ 32%] Generating package/var/afTest-lua
[ 32%] Built target project_populate_afTest-lua
Scanning dependencies of target afb-helpers
[ 35%] Building C object afb-helpers/CMakeFiles/afb-helpers.dir/wrap-json.c.o
[ 38%] Building C object afb-helpers/CMakeFiles/afb-helpers.dir/filescan-utils.c.o
[ 41%] Building C object afb-helpers/CMakeFiles/afb-helpers.dir/escape.c.o
[ 45%] Building C object afb-helpers/CMakeFiles/afb-helpers.dir/curl-wrap.c.o
[ 48%] Linking C static library libafb-helpers.a
[ 48%] Built target afb-helpers
Scanning dependencies of target ctl-utilities
[ 51%] Building C object app-controller-submodule/ctl-lib/CMakeFiles/ctl-utilities.dir/ctl-action.c.o
[ 54%] Building C object app-controller-submodule/ctl-lib/CMakeFiles/ctl-utilities.dir/ctl-config.c.o
[ 58%] Building C object app-controller-submodule/ctl-lib/CMakeFiles/ctl-utilities.dir/ctl-onload.c.o
[ 61%] Building C object app-controller-submodule/ctl-lib/CMakeFiles/ctl-utilities.dir/ctl-plugin.c.o
[ 64%] Building C object app-controller-submodule/ctl-lib/CMakeFiles/ctl-utilities.dir/ctl-control.c.o
[ 67%] Building C object app-controller-submodule/ctl-lib/CMakeFiles/ctl-utilities.dir/ctl-event.c.o
[ 70%] Building C object app-controller-submodule/ctl-lib/CMakeFiles/ctl-utilities.dir/ctl-lua.c.o
[ 74%] Building C object app-controller-submodule/ctl-lib/CMakeFiles/ctl-utilities.dir/ctl-timer.c.o
[ 77%] Building C object app-controller-submodule/ctl-lib/CMakeFiles/ctl-utilities.dir/ctl-lua-utils.c.o
[ 80%] Linking C static library libctl-utilities.a
[ 80%] Built target ctl-utilities
Scanning dependencies of target aft
[ 83%] Building C object src/CMakeFiles/aft.dir/aft.c.o
[ 87%] Building C object src/CMakeFiles/aft.dir/mapis.c.o
[ 90%] Linking C shared module aft.so
[ 90%] Built target aft
Scanning dependencies of target project_populate_aft
[ 93%] Generating package/lib/aft.so
[ 93%] Built target project_populate_aft
Scanning dependencies of target populate
[ 96%] Generating package/bin, package/etc, package/lib, package/htdocs, package/var, package-test/bin, package-test/etc, package-test/lib, package-test/htdocs, package-test/var
[ 96%] Built target populate
Scanning dependencies of target afTest_build_done
++ Typical binding launch: afb-daemon --name afTest --port=1234 --workdir=package-test --ldpaths=/opt/AGL/lib64/afb:../package/lib --token=
[ 96%] Built target afTest_build_done
Scanning dependencies of target autobuild
[100%] Built target autobuild
# Build both widgets classic and test
$ make widget
[  2%] Built target test-files
Scanning dependencies of target packaging_wgt
[  5%] Generating package/config.xml
[  8%] Generating package-test/config.xml, package-test/bin/launcher
[  8%] Built target packaging_wgt
[ 11%] Generating package-test/var/test-files
[ 11%] Built target project_populate_test-files
Warning: JSON_CHECKER not found. Not verification made on files !
[ 14%] Built target afb-test-config
[ 17%] Generating package-test/etc/afb-test-config
[ 17%] Built target project_populate_afb-test-config
Warning: JSON_CHECKER not found. Not verification made on files !
[ 20%] Built target aftest-config
[ 23%] Generating package/etc/aftest-config
[ 23%] Built target project_populate_aftest-config
[ 26%] Built target fixture-files
[ 29%] Generating package-test/var/fixture-files
[ 29%] Built target project_populate_fixture-files
[ 32%] Built target afTest-lua
[ 35%] Generating package/var/afTest-lua
[ 35%] Built target project_populate_afTest-lua
[ 50%] Built target afb-helpers
[ 79%] Built target ctl-utilities
[ 88%] Built target aft
[ 91%] Built target project_populate_aft
[ 94%] Built target populate
Scanning dependencies of target widget
[ 97%] Generating aftest.wgt
NOTICE: -- PACKING widget aftest.wgt from directory /home/claneys/Workspace/Sources/IOTbzh/gerrit.automotivelinux.org/apps/app-afb-test/build/package
[100%] Generating aftest-test.wgt
NOTICE: -- PACKING widget aftest-test.wgt from directory /home/claneys/Workspace/Sources/IOTbzh/gerrit.automotivelinux.org/apps/app-afb-test/build/package-test
++ Install widget file using in the target : afm-util install afTest.wgt
[100%] Built target widget
```

Launch the test using the mode SERVICE for the `afb-test` because of a recursion
problem which loads 2 times the same binding and causes conflict. So it is
needed to uses 2 binders then each ones loads its binding properly:

```bash
$ afm-test package package-test/ -m SERVICE
1..4
# Started on Tue Oct 30 10:32:46 2018
# Starting class: TestListverb
ok     1        TestListverb.testFunction
# Starting class: TestGetVerb
ok     2        TestGetVerb.testFunction
# Starting class: Test_turning_on
ok     3        Test_turning_on.testFunction
# Starting class: testLockWait
ok     4        testLockWait.testFunction
# Ran 4 tests in 0.001 seconds, 4 successes, 0 failures
~~~~~~~~~~ BEGIN ALL TESTS ~~~~~~~~~~
1..59
# Started on Tue Oct 30 10:32:48 2018
# Starting class: testAssertEquals
~~~~~ Begin Test ~~~~~
~~~~~ Begin Test Assert Equals ~~~~~
~~~~~ End Test Assert Equals ~~~~~
~~~~~ End Test ~~~~~
ok     1        testAssertEquals.testFunction
# Starting class: testAssertNotEquals
~~~~~ Begin Test ~~~~~
~~~~~ End Test ~~~~~
ok     2        testAssertNotEquals.testFunction
# Starting class: testAssertItemsEquals
~~~~~ Begin Test ~~~~~
[...]
~~~~~ End Test ~~~~~
ok     57       testAssertVerbStatusError.testFunction
# Starting class: testAssertVerbResponseEqualsError
~~~~~ Begin Test ~~~~~
~~~~~ End Test ~~~~~
ok     58       testAssertVerbResponseEqualsError.testFunction
# Starting class: testAssertVerbCbError
~~~~~ Begin Test ~~~~~
~~~~~ End Test ~~~~~
ok     59       testAssertVerbCbError.testFunction
# Ran 59 tests in 0.003 seconds, 59 successes, 0 failures
~~~~~~~~~~ END ALL TESTS ~~~~~~~~~~
Tests correctly launched.
```

## Launch test on a target board

If you are trying to launch your test on a target you'll have to use
a test widget which contains test files, fixture and configuration.
Then use **afm-test**:

```bash
# afm-test -h
Usage: /usr/bin/afm-test [-l|--lava] [-v|--verb <verb>] <path>
-l|--lavaoutput: flag that enable Lava test marker to the output. (Default: disabled)
-v|--verb: select a specific verb to launch from the test API. (Default: all)
path: path to the test wgt file
```

By default, the test widgets should be located in /usr/AGL/apps/testwgt. This
will install the widget, launch the tests then display the result on standard
output. After that it will kill test binding and remove it.

### Example on a target

Here is an example:

```bash
qemux86-64:~# afm-test /usr/AGL/apps/testwgt/aftest-test.wgt
afm-test /tmp/aftest-test.wgt
PASS: aftest-test@6.90 started with pid=1649
1..59
~~~~~ Begin Test ~~~~~
~~~~~ Begin Test Assert Equals ~~~~~
~~~~~ End Test Assert Equals ~~~~~
~~~~~ End Test ~~~~~
PASS: 1 testAssertEquals.testFunction
~~~~~ Begin Test ~~~~~
~~~~~ End Test ~~~~~
PASS: 2 testAssertNotEquals.testFunction
~~~~~ Begin Test ~~~~~
~~~~~ End Test ~~~~~
PASS: 3 testAssertItemsEquals.testFunction
~~~~~ Begin Test ~~~~~
~~~~~ End Test ~~~~~
[...]
PASS: 58 testAssertVerbResponseEqualsError.testFunction
~~~~~ Begin Test ~~~~~
~~~~~ End Test ~~~~~
PASS: 59 testAssertVerbCbError.testFunction
# Ran 59 tests in 0.003 seconds, 59 successes, 0 failures
~~~~~~~~~~ END ALL TESTS ~~~~~~~~~~
1..63
~~~~~ Begin Test ~~~~~
~~~~~ Begin Test Assert Equals ~~~~~
~~~~~ End Test Assert Equals ~~~~~
~~~~~ End Test ~~~~~
PASS: 1 testAssertEquals.testFunction
~~~~~ Begin Test ~~~~~
~~~~~ End Test ~~~~~
PASS: 2 testAssertNotEquals.testFunction
~~~~~ Begin Test ~~~~~
~~~~~ End Test ~~~~~
PASS: 3 testAssertItemsEquals.testFunction
~~~~~ Begin Test ~~~~~
~~~~~ End Test ~~~~~
[...]
~~~~~ Begin Test ~~~~~
~~~~~ End Test ~~~~~
PASS: 61 TestGetVerb.testFunction
~~~~~ Begin Test ~~~~~
~~~~~ End Test ~~~~~
PASS: 62 Test_turning_on.testFunction
~~~~~ Begin Test ~~~~~
~~~~~ End Test ~~~~~
PASS: 63 testLockWait.testFunction
# Ran 63 tests in 0.003 seconds, 63 successes, 0 failures
~~~~~~~~~~ END ALL TESTS ~~~~~~~~~~
PASS: aftest-test@6.90 killed and removed
```

The command being : ```afm-test /usr/AGL/apps/testwgt/aftest-test.wgt```

You can see here that everything ran as on your pc terminal.
**Begin Test**  and **End Test** are the
beforeEach and afterEach functions and
**END ALL TESTS**  is the after all functions.

 **PASS :** shows the function that is or was running.