Harald Welte | afec471 | 2018-03-19 22:52:17 +0100 | [diff] [blame^] | 1 | module SIP_Tests { |
| 2 | |
| 3 | import from General_Types all; |
| 4 | import from Osmocom_Types all; |
| 5 | |
| 6 | import from Osmocom_CTRL_Functions all; |
| 7 | import from Osmocom_CTRL_Types all; |
| 8 | import from Osmocom_CTRL_Adapter all; |
| 9 | |
| 10 | import from TELNETasp_PortType all; |
| 11 | import from Osmocom_VTY_Functions all; |
| 12 | |
| 13 | import from MNCC_Emulation all; |
| 14 | import from MNCC_Types all; |
| 15 | |
| 16 | import from SDP_Types all; |
| 17 | |
| 18 | import from SIP_Emulation all; |
| 19 | import from SIPmsg_Types all; |
| 20 | |
| 21 | modulepar { |
| 22 | //charstring mp_local_host := "127.0.0.2; |
| 23 | charstring mp_osmosip_host := "127.0.0.1"; |
| 24 | integer mp_osmosip_port_ctrl := -1; /* RFU */ |
| 25 | charstring mp_mncc := "/tmp/mncc"; |
| 26 | } |
| 27 | |
| 28 | type component test_CT extends CTRL_Adapter_CT { |
| 29 | var MNCC_Emulation_CT vc_MNCC; |
| 30 | var SIP_Emulation_CT vc_SIP; |
| 31 | |
| 32 | port TELNETasp_PT SIPVTY; |
| 33 | } |
| 34 | |
| 35 | type component ConnHdlr extends SIP_ConnHdlr, MNCC_ConnHdlr { |
| 36 | var ConnHdlrPars g_pars; |
| 37 | timer g_Tguard; |
| 38 | } |
| 39 | |
| 40 | type record ConnHdlrPars { |
| 41 | float t_guard |
| 42 | } |
| 43 | |
| 44 | |
| 45 | function f_init_mncc(charstring id) runs on test_CT { |
| 46 | id := id & "-MNCC"; |
| 47 | var MnccOps ops := { |
| 48 | create_cb := refers(MNCC_Emulation.ExpectedCreateCallback), |
| 49 | unitdata_cb := refers(MNCC_Emulation.DummyUnitdataCallback) |
| 50 | }; |
| 51 | |
| 52 | vc_MNCC := MNCC_Emulation_CT.create(id); |
| 53 | map(vc_MNCC:MNCC, system:MNCC_CODEC_PT); |
| 54 | vc_MNCC.start(MNCC_Emulation.main(ops, id, mp_mncc, true)); |
| 55 | } |
| 56 | |
| 57 | function f_init() runs on test_CT { |
| 58 | //f_ipa_ctrl_start(mp_osmosip_host, mp_osmosip_port_ctrl); |
| 59 | f_init_mncc("SIP_Test"); |
| 60 | log("end of f_init_mncc"); |
| 61 | f_init_sip(vc_SIP, "SIP_Test"); |
| 62 | log("end of f_init_sip"); |
| 63 | |
| 64 | map(self:SIPVTY, system:SIPVTY); |
| 65 | f_vty_set_prompts(SIPVTY); |
| 66 | f_vty_transceive(SIPVTY, "enable"); |
| 67 | log("end of f_init"); |
| 68 | } |
| 69 | |
| 70 | type function void_fn(charstring id) runs on ConnHdlr; |
| 71 | |
| 72 | function f_start_handler(void_fn fn, ConnHdlrPars pars) |
| 73 | runs on test_CT return ConnHdlr { |
| 74 | var ConnHdlr vc_conn; |
| 75 | var charstring id := testcasename(); |
| 76 | |
| 77 | vc_conn := ConnHdlr.create(id); |
| 78 | |
| 79 | connect(vc_conn:SIP, vc_SIP:CLIENT); |
| 80 | connect(vc_conn:SIP_PROC, vc_SIP:CLIENT_PROC); |
| 81 | |
| 82 | connect(vc_conn:MNCC, vc_MNCC:MNCC_CLIENT); |
| 83 | connect(vc_conn:MNCC_PROC, vc_MNCC:MNCC_PROC); |
| 84 | |
| 85 | vc_conn.start(f_handler_init(fn, id, pars)); |
| 86 | return vc_conn; |
| 87 | } |
| 88 | |
| 89 | private altstep as_Tguard() runs on ConnHdlr { |
| 90 | [] g_Tguard.timeout { |
| 91 | setverdict(fail, "Tguard timeout"); |
| 92 | self.stop; |
| 93 | } |
| 94 | } |
| 95 | |
| 96 | private function f_handler_init(void_fn fn, charstring id, ConnHdlrPars pars) |
| 97 | runs on ConnHdlr { |
| 98 | g_pars := pars; |
| 99 | g_Tguard.start(pars.t_guard); |
| 100 | activate(as_Tguard()); |
| 101 | |
| 102 | /* call the user-supied test case function */ |
| 103 | fn.apply(id); |
| 104 | } |
| 105 | |
| 106 | |
| 107 | template (value) ConnHdlrPars t_Pars := { |
| 108 | t_guard := 30.0 |
| 109 | } |
| 110 | |
| 111 | private function f_TC_mo_setup(charstring id) runs on ConnHdlr { |
| 112 | var PDU_SIP_Request sip_req; |
| 113 | |
| 114 | var MNCC_number dst := valueof(ts_MNCC_number("01234567")); |
| 115 | var MNCC_number src := valueof(ts_MNCC_number("112")); |
| 116 | |
| 117 | f_create_sip_expect(valueof(ts_SIP_Url("+01234567"))); |
| 118 | |
| 119 | log("sending mncc setup"); |
| 120 | MNCC.send(ts_MNCC_SETUP_ind(2342, dst, src, "262420123456789")); |
| 121 | |
| 122 | MNCC.receive(tr_MNCC_RTP_CREATE(2342)); |
| 123 | MNCC.send(ts_MNCC_RTP_CREATE(2342)); |
| 124 | |
| 125 | SIP.receive(PDU_SIP_Request:?) -> value sip_req { |
| 126 | log(sip_req); |
| 127 | } |
| 128 | } |
| 129 | |
| 130 | testcase TC_mo_setup() runs on test_CT { |
| 131 | var ConnHdlrPars pars; |
| 132 | var ConnHdlr vc_conn; |
| 133 | |
| 134 | f_init(); |
| 135 | |
| 136 | pars := valueof(t_Pars); |
| 137 | vc_conn := f_start_handler(refers(f_TC_mo_setup), pars); |
| 138 | vc_conn.done; |
| 139 | } |
| 140 | |
| 141 | |
| 142 | |
| 143 | |
| 144 | |
| 145 | /* SIP specifics */ |
| 146 | |
| 147 | const integer c_SIP_PORT := 5060; |
| 148 | |
| 149 | template (value) SIP_comm_adress ts_SipAddr(charstring rhost, |
| 150 | template (omit) charstring lhost := omit, |
| 151 | integer rport := c_SIP_PORT, |
| 152 | integer lport := c_SIP_PORT, |
| 153 | SIP_com_prot prot := UDP_E) := { |
| 154 | remote_host := rhost, |
| 155 | remote_port := rport, |
| 156 | local_host := lhost, |
| 157 | local_port := lport, |
| 158 | protocol := prot |
| 159 | } |
| 160 | |
| 161 | template (value) ASP_SIP_open ts_SIP_open(SIP_comm_adress addr) := { |
| 162 | addr := addr |
| 163 | } |
| 164 | |
| 165 | |
| 166 | |
| 167 | control { |
| 168 | execute( TC_mo_setup() ); |
| 169 | } |
| 170 | |
| 171 | |
| 172 | |
| 173 | } |