| #!/usr/bin/env python3 |
| """ |
| Runs a network registration with a 'massive' amount of MS |
| using the ms_driver infrastructure. |
| """ |
| from osmo_gsm_tester.testenv import * |
| from datetime import timedelta |
| |
| print('Claiming resources for the test') |
| nitb = suite.nitb() |
| bts = suite.bts() |
| ms_driver = suite.ms_driver() |
| ul = ms_driver.add_test('ul_test') |
| modems = suite.all_resources(suite.modem) |
| |
| print('Launching a simple network') |
| nitb.bts_add(bts) |
| nitb.start() |
| bts.start() |
| wait(nitb.bts_is_connected, bts) |
| |
| # Configure all MS that are available to this test. |
| for modem in modems: |
| nitb.subscriber_add(modem) |
| ms_driver.subscriber_add(modem) |
| |
| # Run the base test. |
| ms_driver.run_test() |
| |
| # Print the stats of the run. |
| ms_driver.print_stats() |
| |
| # Evaluate if this run was successful or not. Our initial acceptance criteria |
| # is quite basic but it should allow us to scale to a larger number of MS and |
| # reasons (e.g. have a full BCCH). |
| # |
| # 99% of LUs should complete |
| # 99% of successful LUs should complete within 10s. |
| stats = ul.get_stats() |
| if len(modems) > 0 and stats.num_completed < 1: |
| raise Exception("No run completed.") |
| completion_ratio = stats.num_completed / stats.num_attempted |
| |
| # Verify that 99% of LUs completed. |
| if completion_ratio < 0.99: |
| raise Exception("Completion ratio of %f%% lower than threshold." % (completion_ratio * 100.0)) |
| |
| # Check how many results are below our threshold. |
| acceptable_delay = timedelta(seconds=30) |
| quick_enough = len(ul.lus_less_than(acceptable_delay)) |
| latency_ratio = quick_enough / stats.num_attempted |
| if latency_ratio < 0.99: |
| raise Exception("Latency ratio of %f%% lower than threshold." % (latency_ratio * 100.0)) |