blob: 1c340b7d2e6cac96019d9e806fb8a2c5e512c52b [file] [log] [blame]
Harald Weltef6bd9802017-12-12 14:56:02 +01001module Selftest {
2
3import from General_Types all;
4import from Osmocom_Types all;
5import from GSM_Types all;
6import from IPL4asp_Types all;
7import from IPL4asp_PortType all;
8import from MTP3asp_PortType all;
9
10import from BSSAP_Types all;
11//import from BSSAP_Adapter all;
12import from BSSAP_CodecPort all;
13import from BSSMAP_Templates all;
14import from IPA_Emulation all;
15import from IPA_Types all;
16import from RSL_Types all;
17
18import from Osmocom_CTRL_Functions all;
19import from Osmocom_CTRL_Types all;
20
21import from MobileL3_CommonIE_Types all;
22import from L3_Templates all;
23import from GSM_RR_Types all;
24
25
26type component IPA_selftest_CT {
27 /* upper end of IPA_Emulation */
28 port MTP3asp_PT IPA_MTP3;
29 port IPA_MGCP_PT IPA_MGCP;
30 port IPA_RSL_PT IPA_RSL;
31 port IPA_CTRL_PT IPA_CTRL;
32 port IPA_SP_PT IPA_SP;
33
34 var IPA_Emulation_CT vc_IPA;
35
36 /* raw IP port */
37 port IPL4asp_PT IP;
38 var ConnectionId g_ip_conn_id := -1;
39}
40
41
42function f_ipa_srv_init() runs on IPA_selftest_CT {
43 vc_IPA := IPA_Emulation_CT.create("IPA_Emulation");
44 map(vc_IPA:IPA_PORT, system: IPA_CODEC_PT);
45 connect(vc_IPA:IPA_MGCP_PORT, self:IPA_MGCP);
46 connect(vc_IPA:IPA_RSL_PORT, self:IPA_RSL);
47 connect(vc_IPA:IPA_CTRL_PORT, self:IPA_CTRL);
48 connect(vc_IPA:MTP3_SP_PORT, self:IPA_MTP3);
49 vc_IPA.start(IPA_Emulation.main_server("127.0.0.1", 55555));
50}
51
52function f_ipa_wait_up() runs on IPA_selftest_CT {
53 interleave {
54 [] IPA_RSL.receive(t_ASP_IPA_EVT_UD(ASP_IPA_EVENT_UP));
55 [] IPA_CTRL.receive(t_ASP_IPA_EVT_UD(ASP_IPA_EVENT_UP));
56 }
57}
58
59function f_tcp_client_init() runs on IPA_selftest_CT {
60 var Result res;
61 map(self:IP, system:IP);
62 res := IPL4asp_PortType.f_IPL4_connect(IP, "127.0.0.1", 55555, "", -1,-1, {tcp:={}});
63 g_ip_conn_id := res.connId;
64}
65
66
67template ASP_Send ts_ASP_Send(ConnectionId id, template octetstring tx) := {
68 connId := id,
69 proto := omit,
70 msg := tx
71}
72
73testcase TC_ipa_fragment() runs on IPA_selftest_CT {
74 var integer i;
75 var octetstring tx_buf;
76 var RSL_Message rsl;
77
78 f_ipa_srv_init();
79 f_tcp_client_init();
80 f_ipa_wait_up();
81
82 rsl := valueof(ts_RSL_CHAN_RQD('23'O, 2342));
83 tx_buf := enc_PDU_IPA(valueof(ts_PDU_IPA(IPAC_PROTO_RSL_TRX0, enc_RSL_Message(rsl))));
84 /* send in rapid sequence to fill multiple messages in one TCP segment */
85 for (i := 0; i < 10; i := i+1) {
86 IP.send(ts_ASP_Send(g_ip_conn_id, tx_buf));
87 }
88 timer T:= 1.0;
89 T.start;
90 T.timeout;
91
92 for (i := 0; i < 10; i := i+1) {
93 IPA_RSL.receive(tr_ASP_RSL_UD(IPAC_PROTO_RSL_TRX0, rsl));
94 }
95 setverdict(pass);
96}
97
98
99control {
100 execute( TC_ipa_fragment() );
101}
102
103
104}