blob: 9b7131d1ab1a9428c2282a12e529ddc61941009d [file] [log] [blame]
Pau Espin Pedrol7e0b2dd2020-03-10 11:46:39 +01001== Introduction
Neels Hofmeyrc0827c42017-04-23 15:04:19 +02002
Pau Espin Pedrol7e0b2dd2020-03-10 11:46:39 +01003{app-name} is a software to run automated tests on real GSM hardware,
Neels Hofmeyrc0827c42017-04-23 15:04:19 +02004foremost to verify that ongoing Osmocom software development continues to work
Pau Espin Pedrol7e0b2dd2020-03-10 11:46:39 +01005with various BTS models, while being flexibly configurable and extendable to
6work for other technologies, setups and projects. It can be used for instance to
7test a 3G or 4G network.
Neels Hofmeyrc0827c42017-04-23 15:04:19 +02008
Pau Espin Pedrol7e0b2dd2020-03-10 11:46:39 +01009{app-name} (python3 process) runs on a host (general purpose computer) named
10the 'main unit'. It may optionally be connected to any number of 'slave units',
11which {app-name} may use to orchestrate processes remotely, usually through SSH.
Neels Hofmeyrc0827c42017-04-23 15:04:19 +020012
Pau Espin Pedrol7e0b2dd2020-03-10 11:46:39 +010013Hardware devices such as BTS, SDRs, modems, smart plugs, etc. are then connected
14to either the main unit or slaves units via IP, raw ethernet, USB or any other
15meansĀ·
Neels Hofmeyrc0827c42017-04-23 15:04:19 +020016
Pau Espin Pedrol7e0b2dd2020-03-10 11:46:39 +010017The modems and BTS instances' RF transceivers are typically wired directly to
18each other via RF distribution chambers to bypass the air medium and avoid
19disturbing real production cellular networks. Furthermore, the setup may include
20adjustable RF attenuators to model various distances between modems and base
21stations.
Neels Hofmeyrc0827c42017-04-23 15:04:19 +020022
Pau Espin Pedrol7e0b2dd2020-03-10 11:46:39 +010023Each of these devices, having each a different physical setup and configuration,
24supported features, attributes, etc., is referred in {app-name} terminology as a
25_resource_. Each _resource_ is an instance of _resource class_. A
26_resource_class_ may be for instance a _modem_ or a _bts_. For instance, an
27{app-name} setup may have 2 _modem_ instances and 1 _bts_ instances. Each of
28these _resources_ are listed and described in configuration files passed to
29{app-name}, which maintains a pool of _resources_ (available, in use, etc.).
30
31{app-name} typically receives from a jenkins build service the software or
32firmware binary packages to be used and tested. {app-name} then launches a
33specific set of testsuites which, in turn, contain each a set of python test
34scripts. Each test uses the _testenv_ API provided by {app-name} to configure,
35launch and manage the different nodes and processes from the provided binary
36packages to form a complete ad-hoc GSM network.
37
38Testsuites themselves contain configuration files to list how many resources it
39requires to run its tests. It also provides means to _filter_ which kind of
40_resources_ will be needed based on their attributes. This allows, for instance,
41asking {app-name} to provide a _modem_ supporting GPRS, or to provide a specific
42model of _bts_ such as a nanoBTS. Testsuites also allow receiving _modifiers_,
43which overwrite some of the default values that {app-name} itself or different
44_resources_ use.
45
46Moreover, one may want to run the same testsuite several tiems, each with
47different set of _resources_. For instance, one may want to run a testsuite with
48a sysmoBTS and later with a nanoBTS. This is supported by leaving the testsuite
49configuration generic enough and then passing _scenarios_ to it, which allow
50applying extra _filters_ or _modifiers_. Scenarios can also be combined to
51filter further or to apply further modifications.
52
53.Sample osmo-gsm-tester node 2G setup
Neels Hofmeyrc0827c42017-04-23 15:04:19 +020054[graphviz]
55----
56digraph G {
57 rankdir=LR;
58 jenkins
59 subgraph cluster_gsm_hardware {
60 label = "GSM Hardware";
61 style=dotted
62
Pau Espin Pedrol7e0b2dd2020-03-10 11:46:39 +010063 modem0 [shape=box label="Modem (Quectel EC20)"]
64 modem1 [shape=box label="Modems (SierraWireless MC7455)"]
Neels Hofmeyrc0827c42017-04-23 15:04:19 +020065 osmo_bts_sysmo [label="sysmocom sysmoBTS\nrunning osmo-bts-sysmo" shape=box]
66 B200 [label="Ettus B200" shape=box]
Pau Espin Pedrol48d25642017-11-02 14:03:58 +010067 sysmoCell5K [label="sysmocom sysmoCell5000" shape=box]
Neels Hofmeyrc0827c42017-04-23 15:04:19 +020068 octphy [label="Octasic octphy BTS" shape=box]
69 nanoBTS [label="ip.access nanoBTS" shape=box]
70 rf_distribution [label="RF distribution"]
71
Pau Espin Pedrol48d25642017-11-02 14:03:58 +010072 {modem0 modem1 osmo_bts_sysmo B200 octphy nanoBTS sysmoCell5K}->rf_distribution [dir=both arrowhead="curve" arrowtail="curve"]
Neels Hofmeyrc0827c42017-04-23 15:04:19 +020073 }
Pau Espin Pedrol7e0b2dd2020-03-10 11:46:39 +010074 subgraph cluster_slave_unit {
75 label = "Slave Unit"
76 osmo_trx [label="osmo-trx"]
77 }
Neels Hofmeyrc0827c42017-04-23 15:04:19 +020078 subgraph cluster_main_unit {
79 label = "Main Unit"
80 osmo_gsm_tester [label="Osmo-GSM-Tester\ntest suites\n& scenarios"]
Neels Hofmeyr73207e12017-05-05 02:50:45 +020081 subgraph {
82 rank=same
83 ofono [label="ofono daemon"]
Pau Espin Pedrol48d25642017-11-02 14:03:58 +010084 osmo_bts_trx [label="osmo-bts-trx"]
Neels Hofmeyr73207e12017-05-05 02:50:45 +020085 osmo_bts_octphy [label="osmo-bts-octphy"]
Pau Espin Pedrol48d25642017-11-02 14:03:58 +010086 OsmoNITB [label="BSC + Core Network\n(Osmo{NITB,MSC,BSC,HLR,...})"]
Neels Hofmeyr73207e12017-05-05 02:50:45 +020087 }
Neels Hofmeyrc0827c42017-04-23 15:04:19 +020088 }
89
90
91 jenkins->osmo_gsm_tester [label="trial\n(binaries)"]
92 osmo_gsm_tester->jenkins [label="results"]
Pau Espin Pedrol7e0b2dd2020-03-10 11:46:39 +010093 ofono->{modem0 modem1} [label="QMI/USB"]
Pau Espin Pedrol48d25642017-11-02 14:03:58 +010094 osmo_gsm_tester->{OsmoNITB osmo_bts_trx osmo_bts_octphy}
Pau Espin Pedrol7e0b2dd2020-03-10 11:46:39 +010095 osmo_gsm_tester->{osmo_trx, osmo_bts_sysmo} [taillabel="SSH"]
Pau Espin Pedrol48d25642017-11-02 14:03:58 +010096 osmo_gsm_tester->ofono [taillabel="DBus"]
Pau Espin Pedrol7e0b2dd2020-03-10 11:46:39 +010097 osmo_trx->B200 [label="UHD/USB"]
98 osmo_bts_trx->{osmo_trx sysmoCell5K} [dir=both label="TRXC+TRXD/UDP"]
Neels Hofmeyrc0827c42017-04-23 15:04:19 +020099 osmo_bts_octphy->octphy [label="raw eth"]
Pau Espin Pedrol48d25642017-11-02 14:03:58 +0100100 {osmo_bts_sysmo nanoBTS}->OsmoNITB [label="IP"]
Neels Hofmeyr73207e12017-05-05 02:50:45 +0200101 {B200 octphy}->OsmoNITB [label="eth" style=invis]
102 {osmo_bts_trx osmo_bts_octphy}->OsmoNITB
103}
104----