| == Introduction |
| |
| {app-name} is a software to run automated tests on real GSM hardware, |
| foremost to verify that ongoing Osmocom software development continues to work |
| with various BTS models, while being flexibly configurable and extendable to |
| work for other technologies, setups and projects. It can be used for instance to |
| test a 3G or 4G network. |
| |
| {app-name} (python3 process) runs on a host (general purpose computer) named |
| the 'main unit'. It may optionally be connected to any number of 'slave units', |
| which {app-name} may use to orchestrate processes remotely, usually through SSH. |
| |
| Hardware devices such as BTS, SDRs, modems, smart plugs, etc. are then connected |
| to either the main unit or slaves units via IP, raw ethernet, USB or any other |
| meansĀ· |
| |
| The modems and BTS instances' RF transceivers are typically wired directly to |
| each other via RF distribution chambers to bypass the air medium and avoid |
| disturbing real production cellular networks. Furthermore, the setup may include |
| adjustable RF attenuators to model various distances between modems and base |
| stations. |
| |
| Each of these devices, having each a different physical setup and configuration, |
| supported features, attributes, etc., is referred in {app-name} terminology as a |
| _resource_. Each _resource_ is an instance of _resource class_. A |
| _resource_class_ may be for instance a _modem_ or a _bts_. For instance, an |
| {app-name} setup may have 2 _modem_ instances and 1 _bts_ instances. Each of |
| these _resources_ are listed and described in configuration files passed to |
| {app-name}, which maintains a pool of _resources_ (available, in use, etc.). |
| |
| {app-name} typically receives from a jenkins build service the software or |
| firmware binary packages to be used and tested. {app-name} then launches a |
| specific set of testsuites which, in turn, contain each a set of python test |
| scripts. Each test uses the _testenv_ API provided by {app-name} to configure, |
| launch and manage the different nodes and processes from the provided binary |
| packages to form a complete ad-hoc GSM network. |
| |
| Testsuites themselves contain configuration files to list how many resources it |
| requires to run its tests. It also provides means to _filter_ which kind of |
| _resources_ will be needed based on their attributes. This allows, for instance, |
| asking {app-name} to provide a _modem_ supporting GPRS, or to provide a specific |
| model of _bts_ such as a nanoBTS. Testsuites also allow receiving _modifiers_, |
| which overwrite some of the default values that {app-name} itself or different |
| _resources_ use. |
| |
| Moreover, one may want to run the same testsuite several tiems, each with |
| different set of _resources_. For instance, one may want to run a testsuite with |
| a sysmoBTS and later with a nanoBTS. This is supported by leaving the testsuite |
| configuration generic enough and then passing _scenarios_ to it, which allow |
| applying extra _filters_ or _modifiers_. Scenarios can also be combined to |
| filter further or to apply further modifications. |
| |
| .Sample osmo-gsm-tester node 2G setup |
| [graphviz] |
| ---- |
| digraph G { |
| rankdir=LR; |
| jenkins |
| subgraph cluster_gsm_hardware { |
| label = "GSM Hardware"; |
| style=dotted |
| |
| modem0 [shape=box label="Modem (Quectel EC20)"] |
| modem1 [shape=box label="Modems (SierraWireless MC7455)"] |
| osmo_bts_sysmo [label="sysmocom sysmoBTS\nrunning osmo-bts-sysmo" shape=box] |
| B200 [label="Ettus B200" shape=box] |
| sysmoCell5K [label="sysmocom sysmoCell5000" shape=box] |
| octphy [label="Octasic octphy BTS" shape=box] |
| nanoBTS [label="ip.access nanoBTS" shape=box] |
| rf_distribution [label="RF distribution"] |
| |
| {modem0 modem1 osmo_bts_sysmo B200 octphy nanoBTS sysmoCell5K}->rf_distribution [dir=both arrowhead="curve" arrowtail="curve"] |
| } |
| subgraph cluster_slave_unit { |
| label = "Slave Unit" |
| osmo_trx [label="osmo-trx"] |
| } |
| subgraph cluster_main_unit { |
| label = "Main Unit" |
| osmo_gsm_tester [label="Osmo-GSM-Tester\ntest suites\n& scenarios"] |
| subgraph { |
| rank=same |
| ofono [label="ofono daemon"] |
| osmo_bts_trx [label="osmo-bts-trx"] |
| osmo_bts_octphy [label="osmo-bts-octphy"] |
| OsmoNITB [label="BSC + Core Network\n(Osmo{NITB,MSC,BSC,HLR,...})"] |
| } |
| } |
| |
| |
| jenkins->osmo_gsm_tester [label="trial\n(binaries)"] |
| osmo_gsm_tester->jenkins [label="results"] |
| ofono->{modem0 modem1} [label="QMI/USB"] |
| osmo_gsm_tester->{OsmoNITB osmo_bts_trx osmo_bts_octphy} |
| osmo_gsm_tester->{osmo_trx, osmo_bts_sysmo} [taillabel="SSH"] |
| osmo_gsm_tester->ofono [taillabel="DBus"] |
| osmo_trx->B200 [label="UHD/USB"] |
| osmo_bts_trx->{osmo_trx sysmoCell5K} [dir=both label="TRXC+TRXD/UDP"] |
| osmo_bts_octphy->octphy [label="raw eth"] |
| {osmo_bts_sysmo nanoBTS}->OsmoNITB [label="IP"] |
| {B200 octphy}->OsmoNITB [label="eth" style=invis] |
| {osmo_bts_trx osmo_bts_octphy}->OsmoNITB |
| } |
| ---- |