blob: 510dc72082919505fca81760a7fa7761ef78deac [file] [log] [blame]
Pau Espin Pedrol0fc74372018-11-14 16:44:57 +01001#!/usr/bin/env python3
2from osmo_gsm_tester.testenv import *
3
Pau Espin Pedrol3a0dea62020-05-21 14:54:46 +02004def print_results(cli, srv):
5 cli.print_results()
6 srv.print_results(cli.proto() == cli.PROTO_UDP)
Pau Espin Pedrol0fc74372018-11-14 16:44:57 +01007
Pau Espin Pedrolffe1b082018-12-05 17:46:21 +01008def run_iperf3_cli_parallel(iperf3clients, ms_li, ready_cb):
Pau Espin Pedrol0fc74372018-11-14 16:44:57 +01009 assert len(iperf3clients) == len(ms_li)
10 procs = []
11 for i in range(len(iperf3clients)):
12 print("Running iperf3 client to %s through %r" % (str(iperf3clients[i]), repr(ms_li[i].tmp_ctx_id)))
Pau Espin Pedrolf4ab97f2020-05-25 13:54:30 +020013 procs.append(iperf3clients[i].prepare_test_proc(iperf3clients[i].DIR_UL, ms_li[i].netns()))
Pau Espin Pedrol0fc74372018-11-14 16:44:57 +010014 try:
15 for proc in procs:
16 proc.launch()
Pau Espin Pedrolffe1b082018-12-05 17:46:21 +010017 if ready_cb:
18 ready_cb(ms_li)
Pau Espin Pedrol0fc74372018-11-14 16:44:57 +010019 for proc in procs:
20 proc.wait()
21 except Exception as e:
22 for proc in procs:
Pau Espin Pedrola3534572019-04-05 12:44:57 +020023 try:
24 proc.terminate()
25 except Exception:
26 print("Exception while terminating process %r" % repr(process))
Pau Espin Pedrol0fc74372018-11-14 16:44:57 +010027 raise e
28
29
Pau Espin Pedrolffe1b082018-12-05 17:46:21 +010030def setup_run_iperf3_test_parallel(num_ms, ready_cb=None):
Pau Espin Pedrol40c7bc72020-05-05 13:41:42 +020031 hlr = tenv.hlr()
32 bts = tenv.bts()
Pau Espin Pedrol0fc74372018-11-14 16:44:57 +010033 pcu = bts.pcu()
Pau Espin Pedrol40c7bc72020-05-05 13:41:42 +020034 mgw_msc = tenv.mgw()
35 mgw_bsc = tenv.mgw()
36 stp = tenv.stp()
37 ggsn = tenv.ggsn()
38 sgsn = tenv.sgsn(hlr, ggsn)
39 msc = tenv.msc(hlr, mgw_msc, stp)
40 bsc = tenv.bsc(msc, mgw_bsc, stp)
Pau Espin Pedrol0fc74372018-11-14 16:44:57 +010041
Pau Espin Pedrol40c7bc72020-05-05 13:41:42 +020042 iperf3srv_addr = tenv.ip_address()
Pau Espin Pedrol0fc74372018-11-14 16:44:57 +010043 servers = []
44 clients = []
45 ms_li = []
46 for i in range(num_ms):
Pau Espin Pedrol40c7bc72020-05-05 13:41:42 +020047 iperf3srv = tenv.iperf3srv(iperf3srv_addr)
Pau Espin Pedrol0fc74372018-11-14 16:44:57 +010048 iperf3srv.set_port(iperf3srv.DEFAULT_SRV_PORT + i)
49 servers.append(iperf3srv)
50
51 iperf3cli = iperf3srv.create_client()
52 clients.append(iperf3cli)
53
Pau Espin Pedrol40c7bc72020-05-05 13:41:42 +020054 ms = tenv.modem()
Pau Espin Pedrol0fc74372018-11-14 16:44:57 +010055 ms_li.append(ms)
56
57 bsc.bts_add(bts)
58 sgsn.bts_add(bts)
59
60 for iperf3srv in servers:
61 print('start iperfv3 server %s...' % str(iperf3srv) )
62 iperf3srv.start()
63
64 print('start network...')
65 hlr.start()
66 stp.start()
67 ggsn.start()
68 sgsn.start()
69 msc.start()
70 mgw_msc.start()
71 mgw_bsc.start()
72 bsc.start()
73
74 bts.start()
75 wait(bsc.bts_is_connected, bts)
76 print('Waiting for bts to be ready...')
77 wait(bts.ready_for_pcu)
78 pcu.start()
79
80 for ms in ms_li:
81 hlr.subscriber_add(ms)
82 ms.connect(msc.mcc_mnc())
83 ms.attach()
84 ms.log_info()
85
86 print('waiting for modems to attach...')
87 for ms in ms_li:
Pau Espin Pedrol3a81a7e2020-06-10 16:52:53 +020088 wait(ms.is_registered, msc.mcc_mnc())
Pau Espin Pedrol0fc74372018-11-14 16:44:57 +010089 wait(msc.subscriber_attached, *ms_li)
90
91 print('waiting for modems to attach to data services...')
92 for ms in ms_li:
93 wait(ms.is_attached)
94 # We need to use inet46 since ofono qmi only uses ipv4v6 eua (OS#2713)
95 ctx_id_v4 = ms.activate_context(apn='inet46', protocol=ms.CTX_PROT_IPv4)
96 print("Setting up data plan for %r" % repr(ctx_id_v4))
97 ms.setup_context_data_plane(ctx_id_v4)
98 setattr(ms, 'tmp_ctx_id', ctx_id_v4)
99
Pau Espin Pedrolffe1b082018-12-05 17:46:21 +0100100 run_iperf3_cli_parallel(clients, ms_li, ready_cb)
Pau Espin Pedrol0fc74372018-11-14 16:44:57 +0100101
102 for i in range(num_ms):
103 servers[i].stop()
104 print("Results for %s through %r" % (str(servers[i]), repr(ms_li[i].tmp_ctx_id)))
Pau Espin Pedrol3a0dea62020-05-21 14:54:46 +0200105 print_results(clients[i], servers[i])
Pau Espin Pedrol0fc74372018-11-14 16:44:57 +0100106
107 for ms in ms_li:
108 ms.deactivate_context(ms.tmp_ctx_id)
109 delattr(ms, 'tmp_ctx_id')