aboutsummaryrefslogtreecommitdiffstats
path: root/stp/STP_Tests.ttcn
blob: 990518c3fddd6d8ca73481a2d55ee879d9d38743 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
module STP_Tests {

/* Osmocom STP test suite in in TTCN-3
 * (C) 2019 Harald Welte <laforge@gnumonks.org>
 * All rights reserved.
 *
 * Released under the terms of GNU General Public License, Version 2 or
 * (at your option) any later version.
 *
 * SPDX-License-Identifier: GPL-2.0-or-later
 */

import from General_Types all;
import from Osmocom_Types all;
import from IPL4asp_Types all;

import from Osmocom_VTY_Functions all;

import from M3UA_Types all;
import from M3UA_Templates all;
import from M3UA_CodecPort all;
import from M3UA_CodecPort_CtrlFunct all;

import from M3UA_Emulation all;
import from MTP3asp_Types all;
import from MTP3asp_PortType all;

import from SCCP_Types all;
import from SCCP_Templates all;
import from SCCPasp_Types all;
import from SCCP_Emulation all;

import from IPA_Emulation all;

import from STP_Tests_Common all;
import from STP_Tests_IPA all;
import from STP_Tests_M3UA all;


type component IPA_M3UA_CT extends RAW_M3UA_CT, IPA_CT {
};

const OCT1 c_M3UA_SI_SCCP := '03'O;

template (value) PDU_SCCP ts_SCCP_UDT(SCCP_PAR_Address called, SCCP_PAR_Address calling,
					template (value) octetstring data,
					template (value) BIT4 msg_hdl := '0000'B) := {
	unitdata := {
		messageType := udt,
		protClass := {'0000'B, msg_hdl},
		pointer1 := 0,
		pointer2 := 0,
		pointer3 := 0,
		calledPAddress := ConvertASPAddressToEncodedAddress_itu(called),
		callingPAddress := ConvertASPAddressToEncodedAddress_itu(calling),
		data := {
			paramLength := 0,
			data := data
		}
	}
}

/* Test routing of SCCP between an M3UA and an IPA ASP */
testcase TC_m3ua_to_ipa() runs on IPA_M3UA_CT {
	var OCT4 rctx_sender := int2oct(1023, 4);
	var OCT4 pc_sender := int2oct(23, 4);
	var OCT4 pc_receiver := int2oct(5, 4);

	f_init_m3ua();
	f_init_ipa();

	f_connect_ipa(3);
	f_M3UA_asp_up_act(0, omit, omit); // TODO: rctx

	/* send a well-formed, encoded SCCP message via M3UA */
	var octetstring data := f_rnd_octstring(f_rnd_int(100));
	var SCCP_PAR_Address called := valueof(ts_SccpAddr_GT('1234'H));
	var SCCP_PAR_Address calling := valueof(ts_SccpAddr_GT('5678'H));
	var PDU_SCCP sccp := valueof(ts_SCCP_UDT(called, calling, data));
	var octetstring sccp_enc := enc_PDU_SCCP(sccp);
	var template (value) M3UA_Protocol_Data tx_pd;
	tx_pd := ts_M3UA_protocol_data(pc_sender, pc_receiver, c_M3UA_SI_SCCP, '00'O, '00'O, '00'O, sccp_enc);
	f_M3UA_send(0, ts_M3UA_DATA(rctx_sender, tx_pd), 1);

	/* expect to receive it via IPA */
	f_IPA_exp(3, sccp_enc);

	f_clear_m3ua();
}

/* test routing an SCCP message from IPA ASP to M3UA ASP */
testcase TC_ipa_to_m3ua() runs on IPA_M3UA_CT {
	var OCT4 pc_sender := int2oct(5, 4);
	var OCT4 rctx_receiver := int2oct(1023, 4);
	var OCT4 pc_receiver := int2oct(23, 4);

	f_init_common();
	f_vty_config2(VTY, {"cs7 instance 0", "as ipa-as-dynamic-asp ipa"},
		      "point-code override patch-sccp disabled");

	f_init_m3ua();
	f_init_ipa();

	f_connect_ipa(3);
	f_M3UA_asp_up_act(0, omit, omit); // TODO: rctx

	/* send a well-formed, encoded SCCP message via IPA */
	var octetstring data := f_rnd_octstring(f_rnd_int(100));
	var SCCP_PAR_Address called := valueof(ts_SccpAddr_GT('1234'H));
	var SCCP_PAR_Address calling := valueof(ts_SccpAddr_GT('5678'H));
	var PDU_SCCP sccp := valueof(ts_SCCP_UDT(called, calling, data));
	var octetstring sccp_enc := enc_PDU_SCCP(sccp);
	f_IPA_send(3, sccp_enc);

	/* expect to receive it via M3UA */
	var template (present) M3UA_Protocol_Data rx_pd;
	rx_pd := tr_M3UA_protocol_data(pc_sender, pc_receiver, c_M3UA_SI_SCCP, '00'O, '00'O, '00'O, sccp_enc);
	f_M3UA_exp(0, tr_M3UA_DATA(rctx_receiver, rx_pd));

	f_clear_m3ua();
}

/* test routing an SCCP message from IPA ASP to M3UA ASP while patching PC into SCCP addresses */
testcase TC_ipa_to_m3ua_patch_sccp() runs on IPA_M3UA_CT {
	var OCT4 pc_sender := int2oct(5, 4);
	var OCT4 rctx_receiver := int2oct(1023, 4);
	var OCT4 pc_receiver := int2oct(23, 4);

	f_init_common();
	f_vty_config2(VTY, {"cs7 instance 0", "as ipa-as-dynamic-asp ipa"},
			"point-code override patch-sccp both");

	f_init_m3ua();
	f_init_ipa();

	f_connect_ipa(3);
	f_M3UA_asp_up_act(0, omit, omit); // TODO: rctx

	/* send a well-formed, encoded SCCP message via IPA */
	var octetstring data := f_rnd_octstring(f_rnd_int(100));
	var SCCP_PAR_Address called := valueof(ts_SccpAddr_GT('1234'H));
	var SCCP_PAR_Address calling := valueof(ts_SccpAddr_GT('5678'H));
	var PDU_SCCP sccp := valueof(ts_SCCP_UDT(called, calling, data));
	f_IPA_send(3, enc_PDU_SCCP(sccp));

	/* patch point codes into addresses */
	called := valueof(ts_SccpAddr_PC_GT(oct2int(pc_receiver), '83'O, "mtp3_itu", '1234'H));
	calling := valueof(ts_SccpAddr_PC_GT(oct2int(pc_sender), '83'O, "mtp3_itu", '5678'H));
	var PDU_SCCP sccp_exp := valueof(ts_SCCP_UDT(called, calling, data));

	/* expect to receive it via M3UA */
	var template (present) M3UA_Protocol_Data rx_pd;
	rx_pd := tr_M3UA_protocol_data(pc_sender, pc_receiver, c_M3UA_SI_SCCP, '00'O, '00'O, '00'O,
					enc_PDU_SCCP(sccp_exp));
	f_M3UA_exp(0, tr_M3UA_DATA(rctx_receiver, rx_pd));

	f_clear_m3ua();
}



control {
	/* M3UA <-> IPA Tests */
	execute( TC_m3ua_to_ipa() );
	execute( TC_ipa_to_m3ua() );
	execute( TC_ipa_to_m3ua_patch_sccp() );
}



}