blob: c1a1bc11bdebfc779318c9dfde52e60b55edfc75 [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 Pedrol143365d2020-03-02 16:12:19 +01004def print_result_node(result, node_str):
5 sent = result['end']['sum_sent']
6 recv = result['end']['sum_received']
7 print("Result %s:" % node_str)
8 print("\tSEND: %d KB, %d kbps, %d seconds (%s retrans)" % (sent['bytes']/1000, sent['bits_per_second']/1000, sent['seconds'], str(sent.get('retransmits', 'unknown'))))
9 print("\tRECV: %d KB, %d kbps, %d seconds" % (recv['bytes']/1000, recv['bits_per_second']/1000, recv['seconds']))
10
Pau Espin Pedrol0fc74372018-11-14 16:44:57 +010011def print_results(cli_res, srv_res):
Pau Espin Pedrol143365d2020-03-02 16:12:19 +010012 print_result_node(cli_res, 'client')
13 print_result_node(srv_res, 'server')
Pau Espin Pedrol0fc74372018-11-14 16:44:57 +010014
Pau Espin Pedrolffe1b082018-12-05 17:46:21 +010015def run_iperf3_cli_parallel(iperf3clients, ms_li, ready_cb):
Pau Espin Pedrol0fc74372018-11-14 16:44:57 +010016 assert len(iperf3clients) == len(ms_li)
17 procs = []
18 for i in range(len(iperf3clients)):
19 print("Running iperf3 client to %s through %r" % (str(iperf3clients[i]), repr(ms_li[i].tmp_ctx_id)))
Pau Espin Pedrol905e5032020-03-02 15:35:33 +010020 procs.append(iperf3clients[i].prepare_test_proc(False, ms_li[i].netns()))
Pau Espin Pedrol0fc74372018-11-14 16:44:57 +010021 try:
22 for proc in procs:
23 proc.launch()
Pau Espin Pedrolffe1b082018-12-05 17:46:21 +010024 if ready_cb:
25 ready_cb(ms_li)
Pau Espin Pedrol0fc74372018-11-14 16:44:57 +010026 for proc in procs:
27 proc.wait()
28 except Exception as e:
29 for proc in procs:
Pau Espin Pedrola3534572019-04-05 12:44:57 +020030 try:
31 proc.terminate()
32 except Exception:
33 print("Exception while terminating process %r" % repr(process))
Pau Espin Pedrol0fc74372018-11-14 16:44:57 +010034 raise e
35
36
Pau Espin Pedrolffe1b082018-12-05 17:46:21 +010037def setup_run_iperf3_test_parallel(num_ms, ready_cb=None):
Pau Espin Pedrol0fc74372018-11-14 16:44:57 +010038 hlr = suite.hlr()
39 bts = suite.bts()
40 pcu = bts.pcu()
41 mgw_msc = suite.mgw()
42 mgw_bsc = suite.mgw()
43 stp = suite.stp()
44 ggsn = suite.ggsn()
45 sgsn = suite.sgsn(hlr, ggsn)
46 msc = suite.msc(hlr, mgw_msc, stp)
47 bsc = suite.bsc(msc, mgw_bsc, stp)
48
49 iperf3srv_addr = suite.ip_address()
50 servers = []
51 clients = []
52 ms_li = []
53 for i in range(num_ms):
54 iperf3srv = suite.iperf3srv(iperf3srv_addr)
55 iperf3srv.set_port(iperf3srv.DEFAULT_SRV_PORT + i)
56 servers.append(iperf3srv)
57
58 iperf3cli = iperf3srv.create_client()
59 clients.append(iperf3cli)
60
61 ms = suite.modem()
62 ms_li.append(ms)
63
64 bsc.bts_add(bts)
65 sgsn.bts_add(bts)
66
67 for iperf3srv in servers:
68 print('start iperfv3 server %s...' % str(iperf3srv) )
69 iperf3srv.start()
70
71 print('start network...')
72 hlr.start()
73 stp.start()
74 ggsn.start()
75 sgsn.start()
76 msc.start()
77 mgw_msc.start()
78 mgw_bsc.start()
79 bsc.start()
80
81 bts.start()
82 wait(bsc.bts_is_connected, bts)
83 print('Waiting for bts to be ready...')
84 wait(bts.ready_for_pcu)
85 pcu.start()
86
87 for ms in ms_li:
88 hlr.subscriber_add(ms)
89 ms.connect(msc.mcc_mnc())
90 ms.attach()
91 ms.log_info()
92
93 print('waiting for modems to attach...')
94 for ms in ms_li:
95 wait(ms.is_connected, msc.mcc_mnc())
96 wait(msc.subscriber_attached, *ms_li)
97
98 print('waiting for modems to attach to data services...')
99 for ms in ms_li:
100 wait(ms.is_attached)
101 # We need to use inet46 since ofono qmi only uses ipv4v6 eua (OS#2713)
102 ctx_id_v4 = ms.activate_context(apn='inet46', protocol=ms.CTX_PROT_IPv4)
103 print("Setting up data plan for %r" % repr(ctx_id_v4))
104 ms.setup_context_data_plane(ctx_id_v4)
105 setattr(ms, 'tmp_ctx_id', ctx_id_v4)
106
Pau Espin Pedrolffe1b082018-12-05 17:46:21 +0100107 run_iperf3_cli_parallel(clients, ms_li, ready_cb)
Pau Espin Pedrol0fc74372018-11-14 16:44:57 +0100108
109 for i in range(num_ms):
110 servers[i].stop()
111 print("Results for %s through %r" % (str(servers[i]), repr(ms_li[i].tmp_ctx_id)))
112 print_results(clients[i].get_results(), servers[i].get_results())
113
114 for ms in ms_li:
115 ms.deactivate_context(ms.tmp_ctx_id)
116 delattr(ms, 'tmp_ctx_id')