blob: 76c53f1bfba155a0906b99e5b36ca70f85900d86 [file] [log] [blame]
#!/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()
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 = ms_driver.get_stats()
if len(modems) > 0 and stats.num_completed < 1:
raise Exception("No run completed.")
completion_ratio = stats.num_attempted / stats.num_completed
# 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)
results = ms_driver.get_result_values()
quick_enough = 0
for result in results:
if not result.has_lu_time():
continue
if timedelta(seconds=result.lu_delay()) >= acceptable_delay:
continue
quick_enough = quick_enough + 1
latency_ratio = quick_enough / len(results)
if latency_ratio < 0.99:
raise Exception("Latency ratio of %f%% lower than threshold." % (latency_ratio * 100.0))