blob: ed4118638df1aacc94f02340a1fc676c4d881d5c [file] [log] [blame]
Holger Hans Peter Freyther5b841152018-08-29 04:29:56 +01001#!/usr/bin/env python3
2"""
Holger Hans Peter Freyther337141f2019-02-23 09:58:59 +00003Runs a network registration with a 'massive' amount of MS
Holger Hans Peter Freyther5b841152018-08-29 04:29:56 +01004using the ms_driver infrastructure.
5"""
6from osmo_gsm_tester.testenv import *
Holger Hans Peter Freyther337141f2019-02-23 09:58:59 +00007from datetime import timedelta
Holger Hans Peter Freyther5b841152018-08-29 04:29:56 +01008
Holger Hans Peter Freyther337141f2019-02-23 09:58:59 +00009print('Claiming resources for the test')
Pau Espin Pedrold95d4942020-12-21 18:32:43 +010010hlr = tenv.hlr()
11mgw_msc = tenv.mgw()
12mgw_bsc = tenv.mgw()
13stp = tenv.stp()
14msc = tenv.msc(hlr, mgw_msc, stp)
15bsc = tenv.bsc(msc, mgw_bsc, stp)
Pau Espin Pedrol40c7bc72020-05-05 13:41:42 +020016bts = tenv.bts()
17ms_driver = tenv.ms_driver()
Holger Hans Peter Freyther2e7e8432019-04-30 18:55:59 +010018ul = ms_driver.add_test('ul_test')
Pau Espin Pedrol40c7bc72020-05-05 13:41:42 +020019modems = tenv.all_resources(tenv.modem)
Holger Hans Peter Freyther5b841152018-08-29 04:29:56 +010020
Holger Hans Peter Freyther337141f2019-02-23 09:58:59 +000021print('Launching a simple network')
Pau Espin Pedrold95d4942020-12-21 18:32:43 +010022hlr.start()
23stp.start()
24msc.start()
25mgw_msc.start()
26mgw_bsc.start()
27
28bsc.bts_add(bts)
29bsc.start()
Holger Hans Peter Freyther5b841152018-08-29 04:29:56 +010030bts.start()
Pau Espin Pedrold95d4942020-12-21 18:32:43 +010031wait(bsc.bts_is_connected, bts)
Holger Hans Peter Freyther5b841152018-08-29 04:29:56 +010032
Holger Hans Peter Freyther5e67ed42019-02-25 09:48:50 +000033# Configure all MS that are available to this test.
34for modem in modems:
Pau Espin Pedrold95d4942020-12-21 18:32:43 +010035 hlr.subscriber_add(modem)
Holger Hans Peter Freyther5e67ed42019-02-25 09:48:50 +000036 ms_driver.subscriber_add(modem)
Holger Hans Peter Freyther5b841152018-08-29 04:29:56 +010037
38# Run the base test.
39ms_driver.run_test()
40
Holger Hans Peter Freyther337141f2019-02-23 09:58:59 +000041# Print the stats of the run.
Holger Hans Peter Freyther5b841152018-08-29 04:29:56 +010042ms_driver.print_stats()
Holger Hans Peter Freyther337141f2019-02-23 09:58:59 +000043
44# Evaluate if this run was successful or not. Our initial acceptance criteria
45# is quite basic but it should allow us to scale to a larger number of MS and
46# reasons (e.g. have a full BCCH).
47#
48# 99% of LUs should complete
49# 99% of successful LUs should complete within 10s.
Holger Hans Peter Freyther2e7e8432019-04-30 18:55:59 +010050stats = ul.get_stats()
Holger Hans Peter Freyther337141f2019-02-23 09:58:59 +000051if len(modems) > 0 and stats.num_completed < 1:
52 raise Exception("No run completed.")
Holger Hans Peter Freyther839d6fa2019-04-28 11:38:21 +010053completion_ratio = stats.num_completed / stats.num_attempted
Holger Hans Peter Freyther337141f2019-02-23 09:58:59 +000054
55# Verify that 99% of LUs completed.
56if completion_ratio < 0.99:
57 raise Exception("Completion ratio of %f%% lower than threshold." % (completion_ratio * 100.0))
58
59# Check how many results are below our threshold.
60acceptable_delay = timedelta(seconds=30)
Holger Hans Peter Freyther2e7e8432019-04-30 18:55:59 +010061quick_enough = len(ul.lus_less_than(acceptable_delay))
Holger Hans Peter Freyther61f28772019-04-27 14:25:22 +010062latency_ratio = quick_enough / stats.num_attempted
Holger Hans Peter Freyther337141f2019-02-23 09:58:59 +000063if latency_ratio < 0.99:
64 raise Exception("Latency ratio of %f%% lower than threshold." % (latency_ratio * 100.0))