blob: 312083ac821379ca82eba68c75f7a0ccba33d9c5 [file] [log] [blame]
Neels Hofmeyraea2f2c2017-05-18 22:01:59 +02001#!/usr/bin/env python3
Pau Espin Pedroldfe38ad2017-11-09 13:57:39 +01002from osmo_gsm_tester.testenv import *
Neels Hofmeyraea2f2c2017-05-18 22:01:59 +02003hlr = suite.hlr()
4bts = suite.bts()
Pau Espin Pedrola5ed18a2017-11-23 11:03:07 +01005pcu = bts.pcu()
Neels Hofmeyraea2f2c2017-05-18 22:01:59 +02006mgcpgw = suite.mgcpgw(bts_ip=bts.remote_addr())
Pau Espin Pedrol386b78d2017-11-09 13:02:09 +01007mgw_bsc = suite.mgw()
Neels Hofmeyr38b051c2017-06-13 16:26:06 +02008stp = suite.stp()
Pau Espin Pedrola5ed18a2017-11-23 11:03:07 +01009ggsn = suite.ggsn()
10sgsn = suite.sgsn(hlr, ggsn)
Pau Espin Pedrol1e1d3812017-11-16 18:06:37 +010011msc = suite.msc(hlr, mgcpgw, stp)
12bsc = suite.bsc(msc, mgw_bsc, stp)
Pau Espin Pedrola5ed18a2017-11-23 11:03:07 +010013
Neels Hofmeyraea2f2c2017-05-18 22:01:59 +020014modems = suite.modems(int(prompt('How many modems?')))
15
Pau Espin Pedrola5ed18a2017-11-23 11:03:07 +010016bsc.bts_add(bts)
17sgsn.bts_add(bts)
18
Neels Hofmeyraea2f2c2017-05-18 22:01:59 +020019hlr.start()
Neels Hofmeyr38b051c2017-06-13 16:26:06 +020020stp.start()
Pau Espin Pedrola5ed18a2017-11-23 11:03:07 +010021ggsn.start()
22sgsn.start()
Neels Hofmeyraea2f2c2017-05-18 22:01:59 +020023msc.start()
Pau Espin Pedrol1ba2ded2017-05-30 16:39:44 +020024mgcpgw.start()
Pau Espin Pedrol386b78d2017-11-09 13:02:09 +010025mgw_bsc.start()
Neels Hofmeyraea2f2c2017-05-18 22:01:59 +020026bsc.start()
27
28bts.start()
Pau Espin Pedrola5ed18a2017-11-23 11:03:07 +010029print('Waiting for bts to be ready...')
30wait(bts.ready_for_pcu)
31pcu.start()
Neels Hofmeyraea2f2c2017-05-18 22:01:59 +020032
33for m in modems:
34 hlr.subscriber_add(m)
Pau Espin Pedrol0e57aad2017-05-29 14:25:22 +020035 m.connect(msc.mcc_mnc())
Neels Hofmeyraea2f2c2017-05-18 22:01:59 +020036
37while True:
Pau Espin Pedrola5ed18a2017-11-23 11:03:07 +010038 cmd = prompt('Enter command: (q)uit (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 Hofmeyraea2f2c2017-05-18 22:01:59 +020039 cmd = cmd.strip().lower()
40
41 if not cmd:
42 continue
Pau Espin Pedrol4897e7a2017-10-06 18:41:20 +020043
44 params = cmd.split()
45
Neels Hofmeyraea2f2c2017-05-18 22:01:59 +020046 if 'quit'.startswith(cmd):
47 break
Pau Espin Pedrol4897e7a2017-10-06 18:41:20 +020048
Neels Hofmeyraea2f2c2017-05-18 22:01:59 +020049 elif 'wait-registered'.startswith(cmd):
50 try:
Pau Espin Pedrol0e57aad2017-05-29 14:25:22 +020051 for m in modems:
52 wait(m.is_connected, msc.mcc_mnc())
Neels Hofmeyraea2f2c2017-05-18 22:01:59 +020053 wait(msc.subscriber_attached, *modems)
54 except Timeout:
55 print('Timeout while waiting for registration.')
Pau Espin Pedrol4897e7a2017-10-06 18:41:20 +020056
Neels Hofmeyraea2f2c2017-05-18 22:01:59 +020057 elif 'get-registered'.startswith(cmd):
58 print(msc.imsi_list_attached())
59 print('RESULT: %s' %
60 ('All modems are registered.' if msc.subscriber_attached(*modems)
61 else 'Some modem(s) not registered yet.'))
Pau Espin Pedrol4897e7a2017-10-06 18:41:20 +020062
Neels Hofmeyraea2f2c2017-05-18 22:01:59 +020063 elif 'sms'.startswith(cmd):
64 for mo in modems:
65 for mt in modems:
66 mo.sms_send(mt.msisdn, 'to ' + mt.name())
Pau Espin Pedrol4897e7a2017-10-06 18:41:20 +020067
68 elif cmd.startswith('call-list'):
69 if len(params) != 1 and len(params) != 2:
70 print('wrong format')
71 continue
72 for ms in modems:
73 if len(params) == 1 or str(ms.msisdn) == params[1]:
74 print('call-list: %r %r' % (ms.name(), ms.call_id_list()))
75
76 elif cmd.startswith('call-dial'):
77 if len(params) != 3:
78 print('wrong format')
79 continue
80 src_msisdn, dst_msisdn = params[1:]
81 for mo in modems:
82 if str(mo.msisdn) == src_msisdn:
83 print('dialing %s->%s' % (src_msisdn, dst_msisdn))
84 call_id = mo.call_dial(dst_msisdn)
85 print('dial success: call_id=%r' % call_id)
86
87 elif cmd.startswith('call-wait-incoming'):
88 if len(params) != 3:
89 print('wrong format')
90 continue
91 src_msisdn, dst_msisdn = params[1:]
92 for mt in modems:
93 if str(mt.msisdn) == dst_msisdn:
94 print('waiting for incoming %s->%s' % (src_msisdn, dst_msisdn))
95 call_id = mt.call_wait_incoming(src_msisdn)
96 print('incoming call success: call_id=%r' % call_id)
97
98 elif cmd.startswith('call-answer'):
99 if len(params) != 3:
100 print('wrong format')
101 continue
102 mt_msisdn, call_id = params[1:]
103 for mt in modems:
104 if str(mt.msisdn) == mt_msisdn:
105 print('answering %s %r' % (mt.name(), call_id))
106 mt.call_answer(call_id)
107
108 elif cmd.startswith('call-hangup'):
109 if len(params) != 3:
110 print('wrong format')
111 continue
112 ms_msisdn, call_id = params[1:]
113 for ms in modems:
114 if str(ms.msisdn) == ms_msisdn:
115 print('hanging up %s %r' % (ms.name(), call_id))
116 ms.call_hangup(call_id)
117
Pau Espin Pedrold27de2b2017-11-06 17:42:41 +0100118 elif cmd.startswith('ussd'):
119 if len(params) != 2:
120 print('wrong format')
121 continue
122 ussd_cmd = params[1]
123 for ms in modems:
124 print('modem %s: ussd %s' % (ms.name(), ussd_cmd))
125 response = ms.ussd_send(ussd_cmd)
126 print('modem %s: response=%r' % (ms.name(), response))
127
Pau Espin Pedrola5ed18a2017-11-23 11:03:07 +0100128 elif cmd.startswith('data-attach'):
129 if len(params) != 1:
130 print('wrong format')
131 continue
132 for ms in modems:
133 print('modem %s: attach' % ms.name())
134 ms.attach()
135 wait(ms.is_attached)
136 print('modem %s: attached' % ms.name())
137
138 elif cmd.startswith('data-detach'):
139 if len(params) != 1:
140 print('wrong format')
141 continue
142 for ms in modems:
143 print('modem %s: detach' % ms.name())
144 ms.attach()
145 wait(lambda: not ms.is_attached())
146 print('modem %s: detached' % ms.name())
147
148 elif cmd.startswith('data-activate'):
149 if len(params) != 1:
150 print('wrong format')
151 continue
152 for ms in modems:
153 print('modem %s: activate' % ms.name())
154 response = ms.activate_context()
155 print('modem %s: response=%r' % (ms.name(), response))
156
Pau Espin Pedrol4897e7a2017-10-06 18:41:20 +0200157 else:
158 print('Unknown command: %s' % cmd)