Commit Graph

65 Commits

Author SHA1 Message Date
Pau Espin c8b0f9359e Initial srsLTE support
2 tests (iperf3, ping) working against a full srs{UE,ENB,EPC} network
using ZeroMQ backend for RF (so no real RF support yet, that will come
next).

Related: OS##4295, OS#4296

Change-Id: I290c0d79258a9f94f00c7ff2e1c6c5579c0e32f4
2020-02-13 18:07:18 +01:00
Pau Espin 116a2c45fe Inroduce RunNode class
This class will be used to hold information for a run node, that is, a
target system or environment were a process or task is run.
It superseeds in functionality the old ip_address resource, which will
eventually be droped in favor of RunNode.

Change-Id: I647bedf116aa9a570d925a5281c9491c9032e343
2020-02-11 17:45:50 +01:00
Pau Espin c18c5b82ca bts_osmotrx: Allow Setting Rx/TX paths through resources.conf
Change-Id: Iddb0f20366c3242098bdf869f39fc3e2244c13e7
2019-11-26 14:24:24 +01:00
Pau Espin 7e1ee5044b Revert "resources.conf.prod: Use different ARFCN for sysmocell-5k"
This reverts commit 91199a3137.

Since we now support powercycling the SC5, we don't longer need to use a
different ARFCN for it.

Change-Id: Ie8b49c556c90b4a97a73695a93ac4108660a217f
2019-09-10 16:45:35 +02:00
Pau Espin 91199a3137 resources.conf.prod: Use different ARFCN for sysmocell-5k
Due to a bug in sysmocell-5K's TRX implementation, it may keep polluting
the air transmitting after the BTS is disconnected. This could cause
interferences with other tests. Correct fix would be to RF lock it after
test finishes (through ccli), but let's simply use a different ARFCN for
now.

Related: OS#4129
Change-Id: I6d5555aa8740b262ee92110987189c076db44f76
2019-07-26 11:47:43 +00:00
Pau Espin 0cde25f1d9 Introduce and use osmo-bts-trx VTY cmd max_trxd_version on sysmocell-5K
Force TRXDv0 when using sysmocell-5k as a TRX, since its implementation
(different than osmo-trx) doesn't support higher versions. Furthermore,
it will crash upon receival of SETFORMAT string. By forcing maximum TRXD
version to 0, osmo-bts-trx won't sent any SETFORMAT message since 0 is
the initial version to use.

Depends: osmo-bts.git I5eb1fdc002f9d7f4acf475356d8fc998dc8f6326
Related: OS#4006
Change-Id: Ic95c38d91dba354ae64c5edbfcea3fbbf34a7de3
2019-07-24 20:53:03 +02:00
Pau Espin feb66e714a Integrate osmo-{bts,pcu}-oc2g
Change-Id: I446e27039f75e63c2870d751c190a4fd76947000
2019-03-27 13:50:41 +01:00
Holger Hans Peter Freyther 10501ccc8e resource: Add a mobile resource for the virtual test
Add a new resource and make a reservation in the suite.

Change-Id: Ic26aa63cad62323bb85f952640672eb28af0eadc
2019-03-07 09:39:39 +00:00
Holger Hans Peter Freyther 7424301034 resource: Use a factory to initiate a modem
Change-Id: I4baa791c92196cda477b2d969d4f67dfbe1152af
2019-03-05 09:46:57 +00:00
Holger Hans Peter Freyther 93a89424d0 resource: Introduce a type attribute to the resource definition
Change-Id: Ie1fd10ec878311b7347118badb1b9dce5b49e976
2019-03-05 02:52:44 +00:00
Holger Hans Peter Freyther 1ea4e52f9f pyflakes: Remove occurrences of using undefined variables
Mention the attribute right away and remove a method that looks
to have been broken (more vs. more_rules).

Change-Id: Iba18a96ff804780e66c69b459e112f9d42b7b2ff
2019-02-27 08:09:21 +00:00
Holger Hans Peter Freyther 91067239c1 pyflakes: Remove imports of unused modules
Change-Id: I7496030e5857078cd66a36a5e46c9a50217ce6e3
2019-02-27 08:09:17 +00:00
Holger Hans Peter Freyther d2db10d80e ms_driver: Add a virtual bts and make use of it
It's very close to the osmo-bts-trx but without osmo-trx. Modify
the suite to make use of this BTS.

Change-Id: I9f5a2501eb4473ccf2287c902ee207c6a45a1bc5
2018-12-13 10:17:02 +00:00
Pau Espin 8cfa10f01d osmo-trx: Add support for dev-args cfg parameter
Change-Id: I3cff225e378e187779bf2b0c7d65bd6b97217104
2018-11-09 13:34:18 +00:00
Pau Espin 4f23ab58ad Add support to enable EGPRS
Change-Id: I682f0c1b4cb97b704d646f18f54e748baaefd677
2018-10-31 09:59:45 +01:00
Pau Espin a9006dffd9 osmotrx: Allow running osmo-trx from remote host
Change-Id: Ia31ac8eb41e02eda28d9f6f56774679300244ee8
2018-10-02 13:10:36 +02:00
Pau Espin 94eab26bf3 osmo-trx: Add multi_arfcn support
2nd TRX arfcn is changed in defaults.conf because multi_arfcn requires
them to be alocated in steps of 4 starting from TRX0.

It is not enabled by default yet on B200 (it must use it to support
several TRX) because current host running osmo-gsm-tester is not
performant enough and cannot keep up with timers due to multi-arfcn CPU
overhead.

Change-Id: I096df82ad1f4cbb41dfbd6a78466a845f34be385
2018-09-18 11:29:12 +00:00
Pau Espin 0d45504267 osmo-bts-trx: Big refactor and cleanup of osmo-trx related code
* This commit is a preparation for future commits to add support for
different osmo-trx devices and backends like osmo-trx-lms.

* Drop deprecated osmo-trx-* cmd line params and use VTY cfg to set them.

* As number of osmo-trx related osmo-gsm-tester attributes grow, group
them togther in an "osmo_trx" dictionary.

Change-Id: I77d29413c9e3b600b796627ba366f80c3281b7e1
2018-08-29 12:30:48 +02:00
Pau Espin 5dc245938b osmo-bsc: Parametrize codec-list VTY cfg
Change-Id: I1678aba43e8d399ecad192cbc416698373e3c0a0
2018-08-29 10:18:05 +00:00
Pau Espin 722e94e833 Add channel_allocator cfg attr to bts resources
Change-Id: I682809d4aeb91a36e3a35fc481e8d40d0b084fa0
2018-08-22 11:59:09 +02:00
Pau Espin aab56921f1 Introduce scenario modifiers
Before this patch, scenarios were only used to select resources with
specific attributes. This commit introduces "modifiers" in scenarios,
which allows setting or modifing config attributes of resources once
they have been reserved. This way same test can be run selecting same
resources but modifying its configuration, allowing for instance running
different number of TRX, different timeslot configuration, etc.

Modifiers are described by placing a "modifiers" dictionary in any
scenario file, similar to the current "resources" one used to select
requird resources. The "modifiers" dictionary is overlaid on top of the
"resources" one resulting from combining all the "resources" dictionary
of all scenario files.

Change-Id: If8c422c67d9a971d9ce2c72594f55cde2db7550d
2018-08-21 16:48:02 +02:00
Pau Espin f6a0712282 nanobts: Support multiTRX
num_trx is left for now by default to 1, but it has been tested to work
properly (current tests pass and both trx are configured) with
num_trx=2.

Change-Id: Ib3962f824a804e2aa582601475a8514c6cb0d8e7
2018-07-27 16:24:31 +02:00
Pau Espin bc1ed88304 Add ttcn3-bts-test env
Change-Id: I3251a49503dc823f0ef1fe8ef5d68236a584dad4
2018-07-25 16:38:30 +02:00
Pau Espin 39df7f4668 bts: Allow setting amount of TRX and timeslot in cfg and from test at runtime
The num_trx attribute for a given BTS states the number of TRX to be
used by that BTS. If more than num_trx are configured in trx_list in the
cfg file, then only up to num_trx are taken into account. If a num_trx
value higher than max_trx is specified throuygh config file or at
runtime by the test, an exception is raised explaining the issue.

The num/max_trx attributes are overlayed along the config levels
(generic -> bsc_bts -> specific bts-type -> specific resource object).
This way we can specify a long list of trx+timeslot config in the
generic config (bsc_bts), and tune for each model and specific BTS which
is the desired default number of TRX, as well as the maximum supported
per type.

Change-Id: I7f46eaf7a16f03268653299c93600c0443f691ac
2018-05-08 14:55:12 +02:00
Pau Espin c9b6376796 Check physical channel configs
Change-Id: I5894678e0d6f306173cc550dd6806a7d6f8a4c11
2018-05-07 11:20:22 +02:00
Pau Espin a238ed9931 nanobts: Bind to specific addr instead of specific iface
This way root access is not required.

Change-Id: I02f6fc9e1cb1ea1e1d950eafe22c231a18100f98
2018-03-27 14:51:51 +02:00
Pau Espin 1b28a584ed Introduce ip.access nanobts support
Change-Id: Ibaea025b3a503dfe897d36701234445de6d49f82
2018-03-15 19:54:42 +01:00
Pau Espin 8a3a7b5146 bts_*: Add incrementing bvci and rac values
Change-Id: Ie65d7d33322c775a1040b5c81f367d882a7c2c5b
2017-12-05 15:06:52 +01:00
Pau Espin ce35d91592 OsmoPcuSysmo: Integrate with Sysmobts and OsmoSgsn
Change-Id: I01485c5d74e5fe62d0ffea9eb1fad29041426eef
2017-12-05 13:36:46 +00:00
Pau Espin f7f0636f4d resource: next_lac: Avoid using LAC 0
Change-Id: I6c1bef81040e2c6210177f04743e7acf3eb9ad8f
2017-12-05 11:09:10 +00:00
Pau Espin 6cdd2fdf61 Rename module ofono_client as modem
Change-Id: I43b51ae937d87d6d4e18caea59f9366e2e28c9f2
2017-11-08 10:12:07 +00:00
Pau Espin 4ccce7c963 Use unique incrementing value for BTS CellId
Change-Id: If4559b945a3e71f3a36fd7ac760cb094278f6b39
2017-11-08 10:05:41 +00:00
Pau Espin 5e0c251c6c Use unique incrementing value for BTS LAC
Change-Id: I9f864bac05e39ec2fc305f774194799c3d8fe1b0
2017-11-08 10:05:41 +00:00
Pau Espin 96d6b6ce22 resource: Refactor next_msisdn to be more generic
The logic in next_msisdn can be later re-used for other purposes, such
as getting different location area codes for BTS.

Change-Id: Ib04a34892aacd7e71f8f5961e7339add583f73f2
2017-11-08 10:05:40 +00:00
Pau Espin daed4471ba Add support for osmo-bts-octphy
Specific parts for this class:
- Runs osmo-bts-octphy binary, that requires CAP_NET_RAW capability
because it uses an AF_PACKET socket.
- As a consequence, it must use the previously added APIs to set the
capability and modify the RPATH of the binary before launching it. These
APIs require extra host setup and installed dependencies that will be
documented soon in osmo-gsm-tester manual.
- A num_trx() helper method is added because the binary requires that
parameter.
- A allocate_phy_instances() is added to help build/fill the conf
dictionary to be used in the tmpl to be able to easily set up trx, phy
and insances.

A config to use a osmo-bts-octphy at full power is used (4 trx) is added
in this commit to show how can it be configured. However our
current license only has support to use 1 TRX, and so next commit drops
most configurations to simplify the setup to use only 1 TRX.

Change-Id: Ia350964fa539083bb68d439cad0caa8fdf85d297
2017-11-06 17:43:01 +00:00
Pau Espin 4676cbd782 resource: Allow passing keyword args to NoResourceExn
Same code is already being used by log.Error exception.

This way we can use:
raise resource.NoResourceExn("No free arfcns in any of bands", bands=supported_bands)

And get:
osmo_gsm_tester.resource.NoResourceExn: No free arfcns in any of bands {bands=['GSM-850', 'GSM-900', 'GSM-1800', 'GSM-1900']}

Change-Id: Ic960ae8db5372b0a4640356f0b4820ed42477b46
2017-09-16 21:59:44 +02:00
Pau Espin ac18fd31e7 Add features attribute to modems
The idea behind this attribute is similar to the Features one in ofono:
To provide an easy-to-use list of features that a modem supports.

In osmo-gsm-tester this feature list can be used to create scenarios to
act as a filter for modems. For instance, if an sms related feature must
be tested, then a modem supporting sms features is required. This way
only modems supporting that feature are going to be selected for that
test when that scenario is used.

We provide our own list instead of dynamically using it for two reasons:
- Accessing the list from ofono means powering on + online the modem,
which requires using the modem before resource resolution is done.
- ofono may state that it has support for feature X, but it still
doesn't have all features required by osmo-gsm-tester or there is a bug
in some part of the feature which prevents it from being used for a
specific test.

Change-Id: I1634049f01859ae0310174892a96e204bb670bc1
2017-09-16 21:59:44 +02:00
Pau Espin 57497a6be9 Add cipher cfg param for modem and bts
This parameter is contains a list of supported encryption ciphers by the
modem or bts setting it. It is so far not directly/automatically used
inside osmo-gsm-tester code, but can be useful to create scenarios for
tests that require specific ciphering modes.
For instance, aoip_encryption suite contains tests that require a BTS and
a modem that supports a5 0 and a5 1, otherwise tests will fail.

Change-Id: Ic0e368843a6e58bd3eeef36d2c0a7501296f0f3e
2017-09-16 21:59:44 +02:00
Pau Espin 5847551640 resource: Handle lists correctly in item_matches
We want to handle lists in the same way as we handle them in combine().
Without this commit, reserve()->find() failed to match objects
containing dictionaries inside lists correctly (such as trx configs).

A few attributes are added to trx_list of some resources in
suite_test/resources.conf to show a case in which resource reservation
would fail without this patch. It failed because before this patch,
dictionaries inside lists are compared to be equal instead of being
compared element by element to see if one dictionary is a subset of the
other one (for each element in the lists).

Change-Id: I8588d5b788b9f74a9cc84b8bdcb049921788bb48
2017-09-16 19:51:33 +00:00
Pau Espin 0b30279c2f Replicate resources based on times attr before combine time
As suite.conf and scenarios need to match 1-to-1 in lists, it's important to
extend the dictionaries by replicating the objects with a 'times' values
higher than 1 in order to match the objects correctly.

Since dictionanries are expanded at combine time, there's no need to
expand them during reserve() time because they are already expanded.
As a result, this commit reworks the kind of schema applied in each
place (and takes the change to start validating scenario files, which
were neglected previously).

Two unit tests are added as a show case. Unfortunately output showing
scenario dictionaries needs to be ignored while verifying because it was
encountered that different versions of python print dictionary elements
in different order.

Change-Id: I25eb639c7e3cf3b4c67a205422808bffbdd791e6
2017-09-16 19:51:33 +00:00
Pau Espin b26f32a955 nominal_power and max_power_red attrs can now be set per resource
Before this commit, only max_power_red was specified and it could only
be used as a defaults and could not be set per object. Together with
nominal_power, it can be useful to be able to set them to different
values for different objects, as for example different osmo-bts-trx
objects can require different values.

Change-Id: I472742e98052cc39686d38c945be76d7f50eeebd
2017-09-16 19:51:32 +00:00
Pau Espin 802dfe5743 Move code to replicate dicts based on times attr to its own function
Change-Id: I26ddae2124813bfb63a7c97c466e056cd2ef991a
2017-09-16 19:51:30 +00:00
Pau Espin ead79ac97c resource: times is expected to be a non-zero positive integer
Change-Id: Ie9e313727053a411cec2f698c3bd654d27e8013f
2017-09-16 19:51:30 +00:00
Pau Espin fa9a6d39ab resource: ipa_unit_id is expected to be a positive integer
Change-Id: I26d7a4351089b73716d193496d7161bf3d9988bb
2017-09-16 19:51:29 +00:00
Pau Espin 4e36f7c0c7 resource: Fix list comparison in item_matches
In following commits, cipher attribute containing a list of supported
ciphers is introdued in osmo-gsm-tester. While developing the feature,
it was found that resources containing lists are not being handled
correctly.

Previous implementation regarding lists in several ways:
- In the list coe path, both item and wanted_item are expected to be
lists. Python doesn't support to check for sublists using the "in"
operand.
- want_item basically contains the scenario dic, and item is each of the
items available as resource of a given type. Thus, we want to check that
item supports the subset of features requested by the scenario, ie. that
the list in the scenario is a subset of the ones in the3 item and not
the opposite.

The following failing scenario is going to be checked during "make check"
when the cipher attribute is added: BTS supporting cipher a50 and a51,
and scenario requesting a50 succeeds. If this commit is remove, the test
no longer passes, and it fails with:
osmo_gsm_tester.resource.NoResourceExn: No matching resource available for
bts = {'type': 'osmo-bts-sysmo', 'ciphers': ['a5 1']}

Change-Id: I27b372aa5906feac2843f24f5cdd0d9578d44b4d
2017-09-10 12:30:35 +00:00
Pau Espin 713ce2cf86 Introduce auth_algo modem config attribute
Algorithm to use to generate response for the challenge during
authentication time is hardcoded in the sim card and cannot be easily
changed. Thus specify in the config of each modem the algorithm used by
the SIM Card. This attribute is used add subscriber_add() time, when the
IMSI, KI and algorithm to use in the MSC to authenticate a given
subscriber is stored in the database. This way we can easily set up
a specific algorithm for each SimCard/Modem, in case different SimCards
are configured with different algorithms.

This can be used to specificially test different algorithms too. For
instance, let's imagine we have 2 simcards, one configured to use comp128v1
and another one with xor, and we create a test which ckecks that XOR is
algo is working fine. We don't want to accidentally select the modem
with comp128v1 in this case. Thus we can use this attribute to create a
scenario file matching 'auth_algo: xor' to ensure always the correct
modem is picked.

Change-Id: Ifdf74630afeb05452994bbc9eb62a745a1d745ce
2017-08-24 17:09:11 +02:00
Pau Espin 404e150c69 bts_osmotrx: Support configuring bts addr, trx_remote_ip and launch_trx
We may want to support running a device which runs its own TRX
(osmo-trx or different implementation). Furthermore, this TRX may be
available in some specific hwardare rather than on the main unit.

This makes it easy to configure OsmoBtsTrx to launch it's own
osmo-trx or not. In case it is launched, all IPs are configured correctly
to ensure connection can be established.

Before this commit, osmo-trx was binding to 127.0.0.1. Now we can
support multiple osmo-trx being launched on the main unit.

Change-Id: I825ed1fc0c3fe75d196db90c1508283fbd04acf8
2017-08-23 12:56:40 +00:00
Pau Espin 1dd2955cb1 Unuse resources after every test
Fix bug in put_all(). That method was unused before this commit.

Clean the process list after the processes are stopped,
otherwise the suite eventually fails with a 'process terminated
prematurely' error. Before it was not necessary because it was not
reused (a new suite run was created).

Change-Id: Iee12866045145544076c6c18786e1a54f18fc293
2017-06-17 17:01:20 +00:00
Neels Hofmeyr 1a7a3f0e43 fix and refactor logging: drop 'with', simplify
With the recent fix of the junit report related issues, another issue arose:
the 'with log.Origin' was changed to disallow __enter__ing an object twice to
fix problems, now still code would fail because it tries to do 'with' on the
same object twice. The only reason is to ensure that logging is associated with
a given object. Instead of complicating even more, implement differently.

Refactor logging to simplify use: drop the 'with Origin' style completely, and
instead use the python stack to determine which objects are created by which,
and which object to associate a log statement with.

The new way: we rely on the convention that each class instance has a local
'self' referencing the object instance. If we need to find an origin as a new
object's parent, or to associate a log message with, we traverse each stack
frame, fetching the first local 'self' object that is a log.Origin class
instance.

How to use:

Simply call log.log() anywhere, and it finds an Origin object to log for, from
the stack. Alternatively call self.log() for any Origin() object to skip the
lookup.

Create classes as child class of log.Origin and make sure to call
super().__init__(category, name). This constructor will magically find a parent
Origin on the stack.

When an exception happens, we first escalate the exception up through call
scopes to where ever it is handled by log.log_exn(). This then finds an Origin
object in the traceback's stack frames, no need to nest in 'with' scopes.

Hence the 'with log.Origin' now "happens implicitly", we can write pure natural
python code, no more hassles with scope ordering.

Furthermore, any frame can place additional logging information in a frame by
calling log.ctx(). This is automatically inserted in the ancestry associated
with a log statement / exception.

Change-Id: I5f9b53150f2bb6fa9d63ce27f0806f0ca6a45e90
2017-06-13 13:32:01 +02:00
Neels Hofmeyr f9e86935a3 error log: clarify for using more resources than reserved
Figure out how many resources were reserved, how many of those match the
requirements, and how many are used, and log one of three matching error
messages for that situation.

For that purpose, allow find()ing reserved resources without logging anything,
using a log_label=None arg.

Change-Id: I1c67600ba69351859e46b8b2f368ee8106db0993
2017-06-09 00:11:56 +02:00