blob: fa53cc88e85c457f52ca2cf5ffbc522514237fd0 [file] [log] [blame]
Neels Hofmeyr67cea222017-05-06 15:06:04 +02001#!/usr/bin/env python3
Pau Espin Pedroldfe38ad2017-11-09 13:57:39 +01002from osmo_gsm_tester.testenv import *
Pau Espin Pedrol40c7bc72020-05-05 13:41:42 +02003hlr = tenv.hlr()
4bts = tenv.bts()
Pau Espin Pedrol43857802018-09-13 15:07:27 +02005pcu = bts.pcu()
Pau Espin Pedrol40c7bc72020-05-05 13:41:42 +02006mgw_msc = tenv.mgw()
7mgw_bsc = tenv.mgw()
8stp = tenv.stp()
9ggsn = tenv.ggsn()
10sgsn = tenv.sgsn(hlr, ggsn)
11msc = tenv.msc(hlr, mgw_msc, stp)
12bsc = tenv.bsc(msc, mgw_bsc, stp)
Pau Espin Pedrol43857802018-09-13 15:07:27 +020013
Pau Espin Pedrol40c7bc72020-05-05 13:41:42 +020014modems = tenv.modems(int(prompt('How many modems?')))
Neels Hofmeyr67cea222017-05-06 15:06:04 +020015
Pau Espin Pedrol43857802018-09-13 15:07:27 +020016bsc.bts_add(bts)
17sgsn.bts_add(bts)
18
19hlr.start()
20stp.start()
21ggsn.start()
22sgsn.start()
23msc.start()
24mgw_msc.start()
25mgw_bsc.start()
26bsc.start()
27
Neels Hofmeyr67cea222017-05-06 15:06:04 +020028bts.start()
Pau Espin Pedrol43857802018-09-13 15:07:27 +020029print('Waiting for bts to connect to bsc...')
30wait(bsc.bts_is_connected, bts)
31print('Waiting for bts to be ready...')
32wait(bts.ready_for_pcu)
33pcu.start()
Neels Hofmeyr67cea222017-05-06 15:06:04 +020034
35for m in modems:
Pau Espin Pedrol43857802018-09-13 15:07:27 +020036 hlr.subscriber_add(m)
37 m.connect(msc.mcc_mnc())
Neels Hofmeyr67cea222017-05-06 15:06:04 +020038
39while True:
Pau Espin Pedrold12b84c2020-02-18 12:56:21 +010040 cmd = prompt('Enter command: (q)uit (d)ebug (s)ms (g)et-registered (w)ait-registered, call-list [<ms_msisdn>], call-dial <src_msisdn> <dst_msisdn>, call-wait-incoming <src_msisdn> <dst_msisdn>, call-answer <mt_msisdn> <call_id>, call-hangup <ms_msisdn> <call_id>, ussd <command>, data-attach, data-wait, data-detach, data-activate')
Neels Hofmeyr67cea222017-05-06 15:06:04 +020041 cmd = cmd.strip().lower()
42
43 if not cmd:
44 continue
Pau Espin Pedrol4897e7a2017-10-06 18:41:20 +020045
46 params = cmd.split()
47
Neels Hofmeyr67cea222017-05-06 15:06:04 +020048 if 'quit'.startswith(cmd):
49 break
Pau Espin Pedrol4897e7a2017-10-06 18:41:20 +020050
Pau Espin Pedrold12b84c2020-02-18 12:56:21 +010051 elif 'debug'.startswith(cmd):
52 import pdb; pdb.set_trace()
53
Neels Hofmeyr67cea222017-05-06 15:06:04 +020054 elif 'wait-registered'.startswith(cmd):
Neels Hofmeyra88b0c72017-05-07 02:15:48 +020055 try:
Pau Espin Pedrol0e57aad2017-05-29 14:25:22 +020056 for m in modems:
Pau Espin Pedrol43857802018-09-13 15:07:27 +020057 wait(m.is_connected, msc.mcc_mnc())
58 wait(msc.subscriber_attached, *modems)
Neels Hofmeyra88b0c72017-05-07 02:15:48 +020059 except Timeout:
60 print('Timeout while waiting for registration.')
Pau Espin Pedrol4897e7a2017-10-06 18:41:20 +020061
Neels Hofmeyr67cea222017-05-06 15:06:04 +020062 elif 'get-registered'.startswith(cmd):
Pau Espin Pedrol43857802018-09-13 15:07:27 +020063 print(msc.imsi_list_attached())
Neels Hofmeyr67cea222017-05-06 15:06:04 +020064 print('RESULT: %s' %
Pau Espin Pedrol43857802018-09-13 15:07:27 +020065 ('All modems are registered.' if msc.subscriber_attached(*modems)
Neels Hofmeyr67cea222017-05-06 15:06:04 +020066 else 'Some modem(s) not registered yet.'))
Pau Espin Pedrol4897e7a2017-10-06 18:41:20 +020067
Neels Hofmeyr67cea222017-05-06 15:06:04 +020068 elif 'sms'.startswith(cmd):
69 for mo in modems:
70 for mt in modems:
71 mo.sms_send(mt.msisdn, 'to ' + mt.name())
Pau Espin Pedrol4897e7a2017-10-06 18:41:20 +020072
73 elif cmd.startswith('call-list'):
74 if len(params) != 1 and len(params) != 2:
75 print('wrong format')
76 continue
77 for ms in modems:
78 if len(params) == 1 or str(ms.msisdn) == params[1]:
79 print('call-list: %r %r' % (ms.name(), ms.call_id_list()))
80
81 elif cmd.startswith('call-dial'):
82 if len(params) != 3:
83 print('wrong format')
84 continue
85 src_msisdn, dst_msisdn = params[1:]
86 for mo in modems:
87 if str(mo.msisdn) == src_msisdn:
88 print('dialing %s->%s' % (src_msisdn, dst_msisdn))
89 call_id = mo.call_dial(dst_msisdn)
90 print('dial success: call_id=%r' % call_id)
91
92 elif cmd.startswith('call-wait-incoming'):
93 if len(params) != 3:
94 print('wrong format')
95 continue
96 src_msisdn, dst_msisdn = params[1:]
97 for mt in modems:
98 if str(mt.msisdn) == dst_msisdn:
99 print('waiting for incoming %s->%s' % (src_msisdn, dst_msisdn))
100 call_id = mt.call_wait_incoming(src_msisdn)
101 print('incoming call success: call_id=%r' % call_id)
102
103 elif cmd.startswith('call-answer'):
104 if len(params) != 3:
105 print('wrong format')
106 continue
107 mt_msisdn, call_id = params[1:]
108 for mt in modems:
109 if str(mt.msisdn) == mt_msisdn:
110 print('answering %s %r' % (mt.name(), call_id))
111 mt.call_answer(call_id)
112
113 elif cmd.startswith('call-hangup'):
114 if len(params) != 3:
115 print('wrong format')
116 continue
117 ms_msisdn, call_id = params[1:]
118 for ms in modems:
119 if str(ms.msisdn) == ms_msisdn:
120 print('hanging up %s %r' % (ms.name(), call_id))
121 ms.call_hangup(call_id)
122
Pau Espin Pedrold27de2b2017-11-06 17:42:41 +0100123 elif cmd.startswith('ussd'):
124 if len(params) != 2:
125 print('wrong format')
126 continue
127 ussd_cmd = params[1]
128 for ms in modems:
129 print('modem %s: ussd %s' % (ms.name(), ussd_cmd))
130 response = ms.ussd_send(ussd_cmd)
131 print('modem %s: response=%r' % (ms.name(), response))
132
Pau Espin Pedrol43857802018-09-13 15:07:27 +0200133 elif cmd.startswith('data-attach'):
134 if len(params) != 1:
135 print('wrong format')
136 continue
137 for ms in modems:
138 print('modem %s: attach' % ms.name())
139 ms.attach()
140 wait(ms.is_attached)
141 print('modem %s: attached' % ms.name())
142
143 elif cmd.startswith('data-detach'):
144 if len(params) != 1:
145 print('wrong format')
146 continue
147 for ms in modems:
148 print('modem %s: detach' % ms.name())
149 ms.attach()
150 wait(lambda: not ms.is_attached())
151 print('modem %s: detached' % ms.name())
152
153 elif cmd.startswith('data-activate'):
154 if len(params) != 1:
155 print('wrong format')
156 continue
157 for ms in modems:
158 print('modem %s: activate' % ms.name())
159 response = ms.activate_context()
160 print('modem %s: response=%r' % (ms.name(), response))
161
Pau Espin Pedrol4897e7a2017-10-06 18:41:20 +0200162 else:
163 print('Unknown command: %s' % cmd)