Introduce NS test cases
Related: SYS#5208 Change-Id: Ic619a374b88879d3116f8f28afb14401c3e3192b
This commit is contained in:
parent
3f82089977
commit
20cd41ec89
|
@ -16,6 +16,14 @@ module Osmocom_Gb_Types {
|
||||||
|
|
||||||
template (present) BssgpBvci t_BssgpBvciUser := complement (0);
|
template (present) BssgpBvci t_BssgpBvciUser := complement (0);
|
||||||
|
|
||||||
|
type enumerated OsmoNsDialect {
|
||||||
|
NS2_DIALECT_UNDEF ('00'H),
|
||||||
|
NS2_DIALECT_STATIC_ALIVE ('01'H),
|
||||||
|
NS2_DIALECT_STATIC_RESETBLOCK ('02'H),
|
||||||
|
NS2_DIALECT_IPACCESS ('03'H),
|
||||||
|
NS2_DIALECT_SNS ('04'H)
|
||||||
|
};
|
||||||
|
|
||||||
/* TS 48.016 10.3.7 */
|
/* TS 48.016 10.3.7 */
|
||||||
type enumerated NsPduType {
|
type enumerated NsPduType {
|
||||||
NS_PDUT_NS_UNITDATA ('00000000'B),
|
NS_PDUT_NS_UNITDATA ('00000000'B),
|
||||||
|
|
|
@ -257,4 +257,13 @@ public altstep as_rx_ns_unblock_ack(boolean oneshot := false, integer idx := 0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Receive a NS-BLOCK and ACK it */
|
||||||
|
public altstep as_rx_ns_block_ack(boolean oneshot := false, integer idx := 0, template NsCause cause := *, template Nsvci nsvci := *) runs on RAW_NS_CT {
|
||||||
|
var PDU_NS ns_rf;
|
||||||
|
[] NSCP[idx].receive(tr_NS_BLOCK(cause, nsvci)) -> value ns_rf {
|
||||||
|
NSCP[idx].send(ts_NS_BLOCK_ACK(oct2int(ns_rf.pDU_NS_Block.nS_VCI.nS_VCI)));
|
||||||
|
if (not oneshot) { repeat; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
[ORDERED_INCLUDE]
|
||||||
|
# Common configuration, shared between test suites
|
||||||
|
"../Common.cfg"
|
||||||
|
|
||||||
|
[LOGGING]
|
||||||
|
#*.FileMask := LOG_ALL
|
||||||
|
ConsoleMask := ERROR | WARNING | TESTCASE | TIMEROP_START | USER
|
||||||
|
|
||||||
|
[MODULE_PARAMETERS]
|
||||||
|
Osmocom_VTY_Functions.mp_prompt_prefix := "OsmoNSdummy";
|
||||||
|
StatsD_Checker.mp_enable_stats := true;
|
||||||
|
|
||||||
|
[TESTPORT_PARAMETERS]
|
||||||
|
*.NSVTY.CTRL_MODE := "client"
|
||||||
|
*.NSVTY.CTRL_HOSTNAME := "127.0.0.1"
|
||||||
|
*.NSVTY.CTRL_PORTNUM := "4240"
|
||||||
|
*.NSVTY.CTRL_LOGIN_SKIPPED := "yes"
|
||||||
|
*.NSVTY.CTRL_DETECT_SERVER_DISCONNECTED := "yes"
|
||||||
|
*.NSVTY.CTRL_READMODE := "buffered"
|
||||||
|
*.NSVTY.CTRL_CLIENT_CLEANUP_LINEFEED := "yes"
|
||||||
|
*.NSVTY.CTRL_DETECT_CONNECTION_ESTABLISHMENT_RESULT := "yes"
|
||||||
|
*.NSVTY.PROMPT1 := "OsmoNSdummy> "
|
||||||
|
*.STATSVTY.PROMPT1 := "OsmoNSdummy> "
|
||||||
|
|
||||||
|
[MAIN_CONTROLLER]
|
||||||
|
|
||||||
|
[EXECUTE]
|
|
@ -0,0 +1,57 @@
|
||||||
|
[ORDERED_INCLUDE]
|
||||||
|
# Common configuration, shared between test suites
|
||||||
|
"../Common.cfg"
|
||||||
|
# testsuite specific configuration, not expected to change
|
||||||
|
"./NS_Tests.default"
|
||||||
|
|
||||||
|
[LOGGING]
|
||||||
|
|
||||||
|
[MODULE_PARAMETERS]
|
||||||
|
NS_Tests.mp_dialect := NS2_DIALECT_IPACCESS
|
||||||
|
NS_Tests.mp_nsconfig := {
|
||||||
|
nsei := 2001,
|
||||||
|
role_sgsn := false,
|
||||||
|
handle_sns := false,
|
||||||
|
nsvc := {
|
||||||
|
{
|
||||||
|
provider := {
|
||||||
|
fr := {
|
||||||
|
netdev := "hdlc1",
|
||||||
|
dlci := 16
|
||||||
|
}
|
||||||
|
},
|
||||||
|
nsvci := 1
|
||||||
|
}, {
|
||||||
|
provider := {
|
||||||
|
fr := {
|
||||||
|
netdev := "hdlc2",
|
||||||
|
dlci := 17
|
||||||
|
}
|
||||||
|
},
|
||||||
|
nsvci := 2
|
||||||
|
}, {
|
||||||
|
provider := {
|
||||||
|
fr := {
|
||||||
|
netdev := "hdlc3",
|
||||||
|
dlci := 18
|
||||||
|
}
|
||||||
|
},
|
||||||
|
nsvci := 3
|
||||||
|
}, {
|
||||||
|
provider := {
|
||||||
|
fr := {
|
||||||
|
netdev := "hdlc4",
|
||||||
|
dlci := 19
|
||||||
|
}
|
||||||
|
},
|
||||||
|
nsvci := 4
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[TESTPORT_PARAMETERS]
|
||||||
|
|
||||||
|
[MAIN_CONTROLLER]
|
||||||
|
|
||||||
|
[EXECUTE]
|
||||||
|
NS_Tests.control
|
|
@ -0,0 +1,500 @@
|
||||||
|
module NS_Tests {
|
||||||
|
|
||||||
|
/* Osmocom NS test suite for NS over framerelay or udp ip.access style in TTCN-3
|
||||||
|
* (C) 2021 sysmocom s.f.m.c. GmbH <info@sysmocom.de>
|
||||||
|
* Author: Alexander Couzens <lynxis@fe80.eu>
|
||||||
|
* 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 Osmocom_Gb_Types all;
|
||||||
|
import from NS_Types all;
|
||||||
|
import from BSSGP_Types all;
|
||||||
|
import from UD_Types all;
|
||||||
|
import from NS_Emulation all;
|
||||||
|
import from Native_Functions all;
|
||||||
|
import from IPL4asp_Types all;
|
||||||
|
import from RAW_NS all;
|
||||||
|
import from Osmocom_VTY_Functions all;
|
||||||
|
import from TELNETasp_PortType all;
|
||||||
|
|
||||||
|
modulepar {
|
||||||
|
OsmoNsDialect mp_dialect := NS2_DIALECT_IPACCESS;
|
||||||
|
NSConfiguration mp_nsconfig := {
|
||||||
|
nsei := 96,
|
||||||
|
role_sgsn := false,
|
||||||
|
handle_sns := false,
|
||||||
|
nsvc := {
|
||||||
|
{
|
||||||
|
provider := {
|
||||||
|
ip := {
|
||||||
|
address_family := AF_INET,
|
||||||
|
local_udp_port := 21000,
|
||||||
|
local_ip := "127.0.0.1",
|
||||||
|
remote_udp_port := 23000,
|
||||||
|
remote_ip := "127.0.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
nsvci := 97
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
type component RAW_Test_CT extends RAW_NS_CT {
|
||||||
|
port TELNETasp_PT NSVTY;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function f_init_vty() runs on RAW_Test_CT {
|
||||||
|
map(self:NSVTY, system:NSVTY);
|
||||||
|
f_vty_set_prompts(NSVTY);
|
||||||
|
f_vty_transceive(NSVTY, "enable");
|
||||||
|
f_vty_transceive(NSVTY, "nsvc nsei " & int2str(mp_nsconfig.nsei) & " force-unconfigured");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ensure no matching message is received within 'tout' */
|
||||||
|
function f_ensure_no_ns(integer idx := 0, boolean answer_alive := false, float tout := 3.0)
|
||||||
|
runs on RAW_Test_CT {
|
||||||
|
var PDU_NS nrf;
|
||||||
|
|
||||||
|
timer T := tout;
|
||||||
|
var default d := activate(ax_rx_fail_on_any_ns(idx));
|
||||||
|
T.start;
|
||||||
|
alt {
|
||||||
|
[answer_alive] as_rx_alive_tx_ack();
|
||||||
|
[] T.timeout {
|
||||||
|
setverdict(pass);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
deactivate(d);
|
||||||
|
}
|
||||||
|
|
||||||
|
function f_fails_except_reset(integer idx := 0, float tout := 15.0)
|
||||||
|
runs on RAW_Test_CT {
|
||||||
|
var PDU_NS nrf;
|
||||||
|
timer T := 15.0;
|
||||||
|
T.start;
|
||||||
|
alt {
|
||||||
|
[] NSCP[idx].receive(tr_NS_RESET(*, *, *)) {
|
||||||
|
repeat;
|
||||||
|
}
|
||||||
|
[] NSCP[idx].receive(PDU_NS: ?) -> value nrf {
|
||||||
|
setverdict(fail, "Received unexpected NS: ", nrf);
|
||||||
|
mtc.stop;
|
||||||
|
}
|
||||||
|
[] T.timeout {
|
||||||
|
setverdict(pass);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
testcase TC_tx_reset() runs on RAW_Test_CT {
|
||||||
|
f_init_vty();
|
||||||
|
f_init_ns_codec(mp_nsconfig, guard_secs := 10.0);
|
||||||
|
|
||||||
|
/* do a NS Reset procedure */
|
||||||
|
f_outgoing_ns_reset();
|
||||||
|
|
||||||
|
setverdict(pass);
|
||||||
|
f_sleep(1.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
testcase TC_tx_reset_tx_alive() runs on RAW_Test_CT {
|
||||||
|
f_init_vty();
|
||||||
|
f_init_ns_codec(mp_nsconfig, guard_secs := 10.0);
|
||||||
|
|
||||||
|
/* do a NS Reset procedure */
|
||||||
|
f_outgoing_ns_reset();
|
||||||
|
|
||||||
|
/* check outgoing NS procedure */
|
||||||
|
f_outgoing_ns_alive();
|
||||||
|
|
||||||
|
setverdict(pass);
|
||||||
|
f_sleep(1.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
testcase TC_tx_reset_rx_alive() runs on RAW_Test_CT {
|
||||||
|
f_init_vty();
|
||||||
|
f_init_ns_codec(mp_nsconfig, guard_secs := 10.0);
|
||||||
|
|
||||||
|
/* do a NS Reset procedure */
|
||||||
|
f_outgoing_ns_reset();
|
||||||
|
|
||||||
|
activate(as_rx_ns_unblock_ack());
|
||||||
|
/* check outgoing NS procedure */
|
||||||
|
as_rx_alive_tx_ack(oneshot := true);
|
||||||
|
|
||||||
|
setverdict(pass);
|
||||||
|
f_sleep(1.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 48.016 7.2 unblock procedure
|
||||||
|
*
|
||||||
|
* TTCN -> NS: reset
|
||||||
|
* TTCN <- NS: reset ack
|
||||||
|
* TTCN -> NS: unblock
|
||||||
|
* TTCN <- NS: unblock ack
|
||||||
|
*/
|
||||||
|
testcase TC_tx_unblock() runs on RAW_Test_CT {
|
||||||
|
f_init_vty();
|
||||||
|
f_init_ns_codec(mp_nsconfig, guard_secs := 30.0);
|
||||||
|
|
||||||
|
/* do a NS Reset procedure */
|
||||||
|
f_outgoing_ns_reset();
|
||||||
|
/* send alive acks */
|
||||||
|
activate(as_rx_alive_tx_ack());
|
||||||
|
|
||||||
|
f_outgoing_ns_unblock();
|
||||||
|
setverdict(pass);
|
||||||
|
f_sleep(1.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 48.016 7.2 tx unblock retries
|
||||||
|
*
|
||||||
|
* TTCN -> NS: reset
|
||||||
|
* TTCN <- NS: reset ack
|
||||||
|
* TTCN -> NS: unblock
|
||||||
|
* TTCN <- NS: unblock ack
|
||||||
|
* TTCN -> NS: unblock
|
||||||
|
* TTCN <- NS: unblock ack
|
||||||
|
* TTCN -> NS: unblock
|
||||||
|
* TTCN <- NS: unblock ack
|
||||||
|
*/
|
||||||
|
testcase TC_tx_unblock_retries() runs on RAW_Test_CT {
|
||||||
|
f_init_vty();
|
||||||
|
f_init_ns_codec(mp_nsconfig, guard_secs := 30.0);
|
||||||
|
|
||||||
|
/* do a NS Reset procedure */
|
||||||
|
f_outgoing_ns_reset();
|
||||||
|
/* send alive acks */
|
||||||
|
activate(as_rx_alive_tx_ack());
|
||||||
|
|
||||||
|
f_outgoing_ns_unblock();
|
||||||
|
f_outgoing_ns_unblock();
|
||||||
|
f_outgoing_ns_unblock();
|
||||||
|
setverdict(pass);
|
||||||
|
f_sleep(1.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 48.016 7.2 block procedure
|
||||||
|
*
|
||||||
|
* TTCN -> NS: reset
|
||||||
|
* TTCN <- NS: reset ack
|
||||||
|
* TTCN -> NS: unblock
|
||||||
|
* TTCN <- NS: unblock ack
|
||||||
|
* TTCN -> NS: block
|
||||||
|
* TTCN <- NS: block ack
|
||||||
|
*/
|
||||||
|
testcase TC_tx_block() runs on RAW_Test_CT {
|
||||||
|
f_init_vty();
|
||||||
|
f_init_ns_codec(mp_nsconfig, guard_secs := 30.0);
|
||||||
|
|
||||||
|
/* do a NS Reset procedure */
|
||||||
|
f_outgoing_ns_reset();
|
||||||
|
activate(as_rx_alive_tx_ack());
|
||||||
|
|
||||||
|
f_outgoing_ns_unblock();
|
||||||
|
f_sleep(1.0);
|
||||||
|
|
||||||
|
f_outgoing_ns_block(NS_CAUSE_EQUIPMENT_FAILURE);
|
||||||
|
setverdict(pass);
|
||||||
|
f_sleep(1.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 48.016 7.2 block procedure by vty
|
||||||
|
*
|
||||||
|
* TTCN -> NS: reset
|
||||||
|
* TTCN <- NS: reset ack
|
||||||
|
* TTCN -> NS: unblock
|
||||||
|
* TTCN <- NS: unblock ack
|
||||||
|
* vty: block nsvc
|
||||||
|
* TTCN <- NS: block
|
||||||
|
* TTCN -> NS: block ack
|
||||||
|
*/
|
||||||
|
function tx_block_by_vty(float guard_secs := 30.0) runs on RAW_Test_CT {
|
||||||
|
f_init_vty();
|
||||||
|
f_init_ns_codec(mp_nsconfig, guard_secs := guard_secs);
|
||||||
|
|
||||||
|
/* do a NS Reset procedure */
|
||||||
|
f_outgoing_ns_reset();
|
||||||
|
activate(as_rx_alive_tx_ack());
|
||||||
|
|
||||||
|
f_outgoing_ns_unblock();
|
||||||
|
f_sleep(1.0);
|
||||||
|
|
||||||
|
f_vty_transceive(NSVTY, "nsvc " & int2str(mp_nsconfig.nsvc[0].nsvci) & " block");
|
||||||
|
|
||||||
|
alt {
|
||||||
|
[] as_rx_ns_block_ack(oneshot := true, nsvci := mp_nsconfig.nsvc[0].nsvci);
|
||||||
|
}
|
||||||
|
setverdict(pass);
|
||||||
|
}
|
||||||
|
|
||||||
|
testcase TC_tx_block_by_vty() runs on RAW_Test_CT {
|
||||||
|
tx_block_by_vty(30.0);
|
||||||
|
f_sleep(1.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 48.016 7.2 block precedure by vty and reset the NSVC.
|
||||||
|
* The NSVC should be still blocked after the reset.
|
||||||
|
*/
|
||||||
|
testcase TC_tx_block_by_vty_reset() runs on RAW_Test_CT {
|
||||||
|
timer T := 10.0;
|
||||||
|
|
||||||
|
tx_block_by_vty(60.0);
|
||||||
|
f_outgoing_ns_reset();
|
||||||
|
|
||||||
|
var default d := activate(ax_rx_fail_on_any_ns());
|
||||||
|
T.start;
|
||||||
|
alt {
|
||||||
|
[] as_rx_alive_tx_ack();
|
||||||
|
[] T.timeout { setverdict(pass); }
|
||||||
|
}
|
||||||
|
deactivate(d);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 48.016 7.4.1 ignore unexpected NS_ALIVE ACK */
|
||||||
|
testcase TC_no_reset_alive_ack() runs on RAW_Test_CT {
|
||||||
|
f_init_vty();
|
||||||
|
f_init_ns_codec(mp_nsconfig, guard_secs := 30.0);
|
||||||
|
|
||||||
|
NSCP[0].send(t_NS_ALIVE_ACK);
|
||||||
|
f_fails_except_reset();
|
||||||
|
setverdict(pass);
|
||||||
|
f_sleep(1.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 48.016 7.3.1 NS_RESET with wrong nsei */
|
||||||
|
testcase TC_reset_wrong_nsei() runs on RAW_Test_CT {
|
||||||
|
f_init_vty();
|
||||||
|
f_init_ns_codec(mp_nsconfig, guard_secs := 30.0);
|
||||||
|
|
||||||
|
NSCP[0].send(ts_NS_RESET(NS_CAUSE_EQUIPMENT_FAILURE, g_nsconfig.nsvc[0].nsvci, g_nsconfig.nsei + 20));
|
||||||
|
NSCP[0].receive(tr_NS_RESET_ACK(g_nsconfig.nsvc[0].nsvci, g_nsconfig.nsei));
|
||||||
|
f_fails_except_reset();
|
||||||
|
setverdict(pass);
|
||||||
|
f_sleep(1.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 48.016 7.3.1 NS_RESET with wrong nsvci */
|
||||||
|
testcase TC_reset_wrong_nsvci() runs on RAW_Test_CT {
|
||||||
|
f_init_vty();
|
||||||
|
f_init_ns_codec(mp_nsconfig, guard_secs := 30.0);
|
||||||
|
|
||||||
|
NSCP[0].send(ts_NS_RESET(NS_CAUSE_EQUIPMENT_FAILURE, g_nsconfig.nsvc[0].nsvci + 20, g_nsconfig.nsei));
|
||||||
|
NSCP[0].receive(tr_NS_RESET_ACK(g_nsconfig.nsvc[0].nsvci, g_nsconfig.nsei));
|
||||||
|
f_fails_except_reset();
|
||||||
|
setverdict(pass);
|
||||||
|
f_sleep(1.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 48.016 7.3.1 NS_RESET with wrong nsvci + nsei */
|
||||||
|
testcase TC_reset_wrong_nsei_nsvci() runs on RAW_Test_CT {
|
||||||
|
f_init_vty();
|
||||||
|
f_init_ns_codec(mp_nsconfig, guard_secs := 30.0);
|
||||||
|
|
||||||
|
NSCP[0].send(ts_NS_RESET(NS_CAUSE_EQUIPMENT_FAILURE, g_nsconfig.nsvc[0].nsvci + 20, g_nsconfig.nsei + 20));
|
||||||
|
NSCP[0].receive(tr_NS_RESET_ACK(g_nsconfig.nsvc[0].nsvci, g_nsconfig.nsei));
|
||||||
|
f_fails_except_reset();
|
||||||
|
setverdict(pass);
|
||||||
|
f_sleep(1.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 48.016 7.3.1 NS_RESET_ACK with wrong nsei */
|
||||||
|
testcase TC_reset_ack_wrong_nsei() runs on RAW_Test_CT {
|
||||||
|
f_init_vty();
|
||||||
|
f_init_ns_codec(mp_nsconfig, guard_secs := 30.0);
|
||||||
|
|
||||||
|
NSCP[0].receive(tr_NS_RESET(*, g_nsconfig.nsvc[0].nsvci, g_nsconfig.nsei));
|
||||||
|
NSCP[0].send(ts_NS_RESET_ACK(g_nsconfig.nsvc[0].nsvci, g_nsconfig.nsei + 20));
|
||||||
|
f_fails_except_reset();
|
||||||
|
setverdict(pass);
|
||||||
|
f_sleep(1.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 48.016 7.3.1 NS_RESET_ACK with wrong nsvci */
|
||||||
|
testcase TC_reset_ack_wrong_nsvci() runs on RAW_Test_CT {
|
||||||
|
f_init_vty();
|
||||||
|
f_init_ns_codec(mp_nsconfig, guard_secs := 30.0);
|
||||||
|
|
||||||
|
NSCP[0].receive(tr_NS_RESET(*, g_nsconfig.nsvc[0].nsvci, g_nsconfig.nsei));
|
||||||
|
NSCP[0].send(ts_NS_RESET_ACK(g_nsconfig.nsvc[0].nsvci + 20, g_nsconfig.nsei));
|
||||||
|
f_fails_except_reset();
|
||||||
|
setverdict(pass);
|
||||||
|
f_sleep(1.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 48.016 7.3.1 NS_RESET_ACK with wrong nsvci + nsei */
|
||||||
|
testcase TC_reset_ack_wrong_nsei_nsvci() runs on RAW_Test_CT {
|
||||||
|
f_init_vty();
|
||||||
|
f_init_ns_codec(mp_nsconfig, guard_secs := 30.0);
|
||||||
|
|
||||||
|
NSCP[0].receive(tr_NS_RESET(*, g_nsconfig.nsvc[0].nsvci, g_nsconfig.nsei));
|
||||||
|
NSCP[0].send(ts_NS_RESET_ACK(g_nsconfig.nsvc[0].nsvci + 20, g_nsconfig.nsei + 20));
|
||||||
|
f_fails_except_reset();
|
||||||
|
setverdict(pass);
|
||||||
|
f_sleep(1.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 48.016 7.3.1 ignore unexpected NS_RESET_ACK after NS_RESET+ALIVE */
|
||||||
|
testcase TC_ignore_reset_ack() runs on RAW_Test_CT {
|
||||||
|
f_init_vty();
|
||||||
|
f_init_ns_codec(mp_nsconfig, guard_secs := 30.0);
|
||||||
|
|
||||||
|
/* do a NS Reset procedure */
|
||||||
|
f_outgoing_ns_reset();
|
||||||
|
|
||||||
|
/* unblock and alive */
|
||||||
|
alt {
|
||||||
|
[] as_rx_ns_unblock_ack(oneshot := true);
|
||||||
|
[] as_rx_alive_tx_ack();
|
||||||
|
}
|
||||||
|
|
||||||
|
NSCP[0].send(ts_NS_RESET_ACK(g_nsconfig.nsvc[0].nsvci, g_nsconfig.nsei));
|
||||||
|
f_ensure_no_ns(answer_alive := true, tout := 15.0);
|
||||||
|
setverdict(pass);
|
||||||
|
f_sleep(1.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 48.016 7.3 NS_RESET retries */
|
||||||
|
testcase TC_reset_retries() runs on RAW_Test_CT {
|
||||||
|
var integer reset := 0;
|
||||||
|
|
||||||
|
f_init_vty();
|
||||||
|
f_init_ns_codec(mp_nsconfig, guard_secs := 30.0);
|
||||||
|
|
||||||
|
alt {
|
||||||
|
[] NSCP[0].receive(tr_NS_RESET(*, *, *)) {
|
||||||
|
reset := reset + 1;
|
||||||
|
if (reset <= 3) {
|
||||||
|
repeat;
|
||||||
|
} else {
|
||||||
|
setverdict(pass);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
f_sleep(1.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 48.016 behave RESET_ACK got dropped
|
||||||
|
* TTCN -> NS: reset
|
||||||
|
* TTCN <- NS: reset ack
|
||||||
|
* TTCN <- NS: unblock
|
||||||
|
* TTCN -> NS: reset
|
||||||
|
* TTCN <- NS: reset ack
|
||||||
|
* TTCN <- NS: unblock
|
||||||
|
*/
|
||||||
|
testcase TC_reset_on_block_reset() runs on RAW_Test_CT {
|
||||||
|
var integer i := 0;
|
||||||
|
|
||||||
|
f_init_vty();
|
||||||
|
f_init_ns_codec(mp_nsconfig, guard_secs := 30.0);
|
||||||
|
|
||||||
|
f_outgoing_ns_reset();
|
||||||
|
activate(as_rx_alive_tx_ack());
|
||||||
|
|
||||||
|
alt {
|
||||||
|
[] NSCP[0].receive(t_NS_UNBLOCK) {
|
||||||
|
NSCP[0].send(ts_NS_RESET(NS_CAUSE_EQUIPMENT_FAILURE, g_nsconfig.nsvc[0].nsvci, g_nsconfig.nsei));
|
||||||
|
i := i + 1;
|
||||||
|
if (i < 3) {
|
||||||
|
repeat;
|
||||||
|
} else {
|
||||||
|
setverdict(pass);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
[] NSCP[0].receive(tr_NS_RESET_ACK(g_nsconfig.nsvc[0].nsvci, g_nsconfig.nsei)) { repeat; }
|
||||||
|
}
|
||||||
|
|
||||||
|
f_sleep(1.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 48.016 7.4 test procedure for frame relay with a single nsvci */
|
||||||
|
function f_alive_retries_single(boolean reset := false) runs on RAW_Test_CT {
|
||||||
|
f_init_vty();
|
||||||
|
f_init_ns_codec(mp_nsconfig, guard_secs := 60.0);
|
||||||
|
|
||||||
|
/* do a NS Reset procedure */
|
||||||
|
f_outgoing_ns_reset();
|
||||||
|
|
||||||
|
alt {
|
||||||
|
[] as_rx_ns_unblock_ack(oneshot := true);
|
||||||
|
[] as_rx_alive_tx_ack();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* wait for one alive and answer it */
|
||||||
|
as_rx_alive_tx_ack(oneshot := true);
|
||||||
|
NSCP[0].receive(t_NS_ALIVE);
|
||||||
|
NSCP[0].receive(t_NS_ALIVE);
|
||||||
|
NSCP[0].receive(t_NS_ALIVE);
|
||||||
|
NSCP[0].receive(t_NS_ALIVE);
|
||||||
|
if (reset) {
|
||||||
|
NSCP[0].receive(tr_NS_RESET(*, g_nsconfig.nsvc[0].nsvci, g_nsconfig.nsei));
|
||||||
|
} else {
|
||||||
|
f_ensure_no_ns(tout := 10.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
setverdict(pass);
|
||||||
|
f_sleep(1.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
testcase TC_alive_retries_single_reset() runs on RAW_Test_CT {
|
||||||
|
f_alive_retries_single(reset := true);
|
||||||
|
}
|
||||||
|
|
||||||
|
testcase TC_alive_retries_single_no_resp() runs on RAW_Test_CT {
|
||||||
|
f_alive_retries_single(reset := false);
|
||||||
|
}
|
||||||
|
|
||||||
|
control {
|
||||||
|
execute( TC_tx_reset() );
|
||||||
|
|
||||||
|
/* 48.016 7.2 Block procedure */
|
||||||
|
execute( TC_tx_block() );
|
||||||
|
execute( TC_tx_block_by_vty() );
|
||||||
|
execute( TC_tx_block_by_vty_reset() );
|
||||||
|
// execute( TC_block_other_nsvc() ); // reset, unblock, sleep(1), block over another nsvci
|
||||||
|
/* 48.016 7.2 Unblock procedure */
|
||||||
|
execute( TC_tx_unblock() );
|
||||||
|
execute( TC_tx_unblock_retries() );
|
||||||
|
// execute( TC_rx_unblock_tx_unblock() ); // wait for an rx unblock pdu, send an unblock pdu, expect unblock ack pdu
|
||||||
|
// execute( TC_unblockable() ); // block a NS-VCI via vty, try block procedure
|
||||||
|
|
||||||
|
/* 48.016 7.2.1 Block Abnormal Condition */
|
||||||
|
/* 48.016 7.2.1 Unblock Abnormal Condition */
|
||||||
|
|
||||||
|
/* 48.016 7.3.1 Abnormal Condition */
|
||||||
|
if (mp_dialect == NS2_DIALECT_STATIC_RESETBLOCK) {
|
||||||
|
execute( TC_reset_wrong_nsei() );
|
||||||
|
execute( TC_reset_wrong_nsvci() );
|
||||||
|
execute( TC_reset_wrong_nsei_nsvci() );
|
||||||
|
execute( TC_reset_ack_wrong_nsei() );
|
||||||
|
execute( TC_reset_ack_wrong_nsvci() );
|
||||||
|
execute( TC_reset_ack_wrong_nsei_nsvci() );
|
||||||
|
execute( TC_reset_retries() );
|
||||||
|
execute( TC_reset_on_block_reset() );
|
||||||
|
}
|
||||||
|
execute( TC_ignore_reset_ack() );
|
||||||
|
|
||||||
|
/* 48.016 7.4 Test procedure on frame relay */
|
||||||
|
execute( TC_tx_reset_tx_alive() );
|
||||||
|
execute( TC_tx_reset_rx_alive() );
|
||||||
|
|
||||||
|
/* 48.016 7.4.1 Abnormal Condition */
|
||||||
|
if (mp_dialect == NS2_DIALECT_STATIC_RESETBLOCK) {
|
||||||
|
// execute( TC_alive_retries_multi() ); // check if alive retries works and block over an alive nsvc
|
||||||
|
execute( TC_alive_retries_single_reset() );
|
||||||
|
} else if (mp_dialect == NS2_DIALECT_IPACCESS) {
|
||||||
|
execute( TC_alive_retries_single_no_resp() );
|
||||||
|
}
|
||||||
|
execute( TC_no_reset_alive_ack() );
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,34 @@
|
||||||
|
[ORDERED_INCLUDE]
|
||||||
|
# Common configuration, shared between test suites
|
||||||
|
"../Common.cfg"
|
||||||
|
# testsuite specific configuration, not expected to change
|
||||||
|
"./NS_Tests.default"
|
||||||
|
|
||||||
|
[LOGGING]
|
||||||
|
|
||||||
|
[MODULE_PARAMETERS]
|
||||||
|
NS_Tests.mp_nsconfig := {
|
||||||
|
nsei := 1234,
|
||||||
|
nsvc := {
|
||||||
|
{
|
||||||
|
provider := {
|
||||||
|
ip := {
|
||||||
|
address_family := AF_INET,
|
||||||
|
local_ip := "127.0.0.1",
|
||||||
|
local_udp_port := 22000,
|
||||||
|
remote_ip := "127.0.0.1",
|
||||||
|
remote_udp_port := 23000
|
||||||
|
}
|
||||||
|
},
|
||||||
|
nsvci := 1234
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
NS_Tests.mp_dialect := NS2_DIALECT_STATIC_RESETBLOCK
|
||||||
|
|
||||||
|
[TESTPORT_PARAMETERS]
|
||||||
|
|
||||||
|
[MAIN_CONTROLLER]
|
||||||
|
|
||||||
|
[EXECUTE]
|
||||||
|
NS_Tests.control
|
|
@ -0,0 +1,4 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<testsuite name='Titan' tests='1' failures='0' errors='0' skipped='0' inconc='0' time='MASKED'>
|
||||||
|
<testcase classname='NS_Tests' name='TC_NS_connect_reset' time='MASKED'/>
|
||||||
|
</testsuite>
|
|
@ -0,0 +1,61 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
BASEDIR=../deps
|
||||||
|
|
||||||
|
. ../gen_links.sh.inc
|
||||||
|
|
||||||
|
DIR=$BASEDIR/titan.TestPorts.UNIX_DOMAIN_SOCKETasp/src
|
||||||
|
FILES="UD_PT.cc UD_PT.hh UD_PortType.ttcn UD_Types.ttcn"
|
||||||
|
gen_links $DIR $FILES
|
||||||
|
|
||||||
|
DIR=$BASEDIR/titan.Libraries.TCCUsefulFunctions/src
|
||||||
|
FILES="TCCInterface_Functions.ttcn TCCConversion_Functions.ttcn TCCConversion.cc TCCInterface.cc TCCInterface_ip.h"
|
||||||
|
gen_links $DIR $FILES
|
||||||
|
|
||||||
|
DIR=$BASEDIR/titan.TestPorts.Common_Components.Socket-API/src
|
||||||
|
FILES="Socket_API_Definitions.ttcn"
|
||||||
|
gen_links $DIR $FILES
|
||||||
|
|
||||||
|
DIR=$BASEDIR/titan.TestPorts.IPL4asp/src
|
||||||
|
FILES="IPL4asp_Functions.ttcn IPL4asp_PT.cc IPL4asp_PT.hh IPL4asp_PortType.ttcn IPL4asp_Types.ttcn IPL4asp_discovery.cc IPL4asp_protocol_L234.hh"
|
||||||
|
gen_links $DIR $FILES
|
||||||
|
|
||||||
|
DIR=$BASEDIR/titan.ProtocolModules.NS_v7.3.0/src
|
||||||
|
FILES="NS_Types.ttcn"
|
||||||
|
gen_links $DIR $FILES
|
||||||
|
|
||||||
|
DIR=$BASEDIR/titan.ProtocolModules.BSSGP_v13.0.0/src
|
||||||
|
FILES="BSSGP_EncDec.cc BSSGP_Types.ttcn"
|
||||||
|
gen_links $DIR $FILES
|
||||||
|
|
||||||
|
DIR=$BASEDIR/titan.ProtocolModules.MobileL3_v13.4.0/src
|
||||||
|
FILES="MobileL3_CC_Types.ttcn MobileL3_CommonIE_Types.ttcn MobileL3_GMM_SM_Types.ttcn MobileL3_MM_Types.ttcn MobileL3_RRM_Types.ttcn MobileL3_SMS_Types.ttcn MobileL3_SS_Types.ttcn MobileL3_Types.ttcn"
|
||||||
|
gen_links $DIR $FILES
|
||||||
|
|
||||||
|
DIR=$BASEDIR/titan.ProtocolModules.LLC_v7.1.0/src
|
||||||
|
FILES="LLC_EncDec.cc LLC_Types.ttcn"
|
||||||
|
gen_links $DIR $FILES
|
||||||
|
|
||||||
|
DIR=$BASEDIR/titan.ProtocolModules.SNDCP_v7.0.0/src
|
||||||
|
FILES="SNDCP_Types.ttcn"
|
||||||
|
gen_links $DIR $FILES
|
||||||
|
|
||||||
|
DIR=$BASEDIR/titan.TestPorts.AF_PACKET/src
|
||||||
|
FILES="AF_PACKET_PT.cc AF_PACKET_PT.hh AF_PACKET_PortType.ttcn AF_PACKET_PortTypes.ttcn "
|
||||||
|
FILES+="FrameRelay_Types.ttcn FrameRelay_CodecPort.ttcn FrameRelay_Emulation.ttcn Q931_Types.ttcn Q933_Types.ttcn "
|
||||||
|
gen_links $DIR $FILES
|
||||||
|
|
||||||
|
DIR=$BASEDIR/titan.TestPorts.TELNETasp/src
|
||||||
|
FILES="TELNETasp_PT.cc TELNETasp_PT.hh TELNETasp_PortType.ttcn"
|
||||||
|
gen_links $DIR $FILES
|
||||||
|
|
||||||
|
DIR=../library
|
||||||
|
FILES="Misc_Helpers.ttcn General_Types.ttcn Osmocom_VTY_Functions.ttcn Native_Functions.ttcn Native_FunctionDefs.cc GSM_Types.ttcn GSM_RR_Types.ttcn Osmocom_Types.ttcn RLCMAC_Templates.ttcn RLCMAC_Types.ttcn RLCMAC_CSN1_Templates.ttcn RLCMAC_CSN1_Types.ttcn RLCMAC_EncDec.cc "
|
||||||
|
FILES+="StatsD_Types.ttcn StatsD_CodecPort.ttcn StatsD_CodecPort_CtrlFunct.ttcn StatsD_CodecPort_CtrlFunctdef.cc StatsD_Checker.ttcn "
|
||||||
|
FILES+="NS_Provider_IPL4.ttcn NS_Provider_FR.ttcn NS_Emulation.ttcnpp "
|
||||||
|
FILES+="BSSGP_Emulation.ttcnpp Osmocom_Gb_Types.ttcn "
|
||||||
|
FILES+="LLC_Templates.ttcn L3_Templates.ttcn L3_Common.ttcn "
|
||||||
|
FILES+="PCUIF_Types.ttcn PCUIF_CodecPort.ttcn RAW_NS.ttcnpp "
|
||||||
|
gen_links $DIR $FILES
|
||||||
|
|
||||||
|
ignore_pp_results
|
|
@ -0,0 +1,55 @@
|
||||||
|
log gsmtap 127.0.0.1
|
||||||
|
logging level set-all debug
|
||||||
|
|
||||||
|
log stderr
|
||||||
|
logging filter all 1
|
||||||
|
logging print level 1
|
||||||
|
logging print category 1
|
||||||
|
logging print category-hex 0
|
||||||
|
logging print file basename last
|
||||||
|
logging print extended-timestamp 1
|
||||||
|
logging level set-all debug
|
||||||
|
!
|
||||||
|
stats interval 0
|
||||||
|
stats reporter statsd
|
||||||
|
prefix TTCN3
|
||||||
|
level subscriber
|
||||||
|
remote-ip 127.0.0.1
|
||||||
|
remote-port 8125
|
||||||
|
flush-period 1
|
||||||
|
mtu 1024
|
||||||
|
enable
|
||||||
|
|
||||||
|
line vty
|
||||||
|
no login
|
||||||
|
bind 127.0.0.1
|
||||||
|
|
||||||
|
ns
|
||||||
|
bind fr hdlcnet1
|
||||||
|
fr hdlcnet1 frnet
|
||||||
|
bind fr hdlcnet2
|
||||||
|
fr hdlcnet2 frnet
|
||||||
|
bind fr hdlcnet3
|
||||||
|
fr hdlcnet3 frnet
|
||||||
|
bind fr hdlcnet4
|
||||||
|
fr hdlcnet4 frnet
|
||||||
|
bind fr hdlcnet5
|
||||||
|
fr hdlcnet5 frnet
|
||||||
|
bind fr hdlcnet6
|
||||||
|
fr hdlcnet6 frnet
|
||||||
|
bind fr hdlcnet7
|
||||||
|
fr hdlcnet7 frnet
|
||||||
|
bind fr hdlcnet8
|
||||||
|
fr hdlcnet8 frnet
|
||||||
|
nse 2001
|
||||||
|
nsvc fr hdlcnet1 dlci 16 nsvci 1
|
||||||
|
nsvc fr hdlcnet2 dlci 17 nsvci 2
|
||||||
|
nsvc fr hdlcnet3 dlci 18 nsvci 3
|
||||||
|
nsvc fr hdlcnet4 dlci 19 nsvci 4
|
||||||
|
nse 2002
|
||||||
|
nsvc fr hdlcnet5 dlci 20 nsvci 5
|
||||||
|
nsvc fr hdlcnet6 dlci 21 nsvci 6
|
||||||
|
nse 2003
|
||||||
|
nsvc fr hdlcnet7 dlci 22 nsvci 7
|
||||||
|
nsvc fr hdlcnet8 dlci 23 nsvci 8
|
||||||
|
|
|
@ -0,0 +1,93 @@
|
||||||
|
!
|
||||||
|
! OsmoNSdummy (1.4.0.326-f57c-dirty) configuration saved from vty
|
||||||
|
!!
|
||||||
|
!
|
||||||
|
log stderr
|
||||||
|
logging filter all 1
|
||||||
|
logging color 0
|
||||||
|
logging print category-hex 0
|
||||||
|
logging print category 1
|
||||||
|
logging print extended-timestamp 1
|
||||||
|
logging print level 1
|
||||||
|
logging print file basename
|
||||||
|
logging level force-all info
|
||||||
|
logging level lglobal debug
|
||||||
|
logging level llapd debug
|
||||||
|
logging level linp debug
|
||||||
|
logging level lmux debug
|
||||||
|
logging level lmi debug
|
||||||
|
logging level lmib debug
|
||||||
|
logging level lsms debug
|
||||||
|
logging level lctrl debug
|
||||||
|
logging level lgtp debug
|
||||||
|
logging level lstats debug
|
||||||
|
logging level lgsup debug
|
||||||
|
logging level loap debug
|
||||||
|
logging level lss7 debug
|
||||||
|
logging level lsccp debug
|
||||||
|
logging level lsua debug
|
||||||
|
logging level lm3ua debug
|
||||||
|
logging level lmgcp debug
|
||||||
|
logging level ljibuf debug
|
||||||
|
logging level lrspro debug
|
||||||
|
logging level lns debug
|
||||||
|
logging level lbssgp debug
|
||||||
|
log gsmtap 127.0.0.1
|
||||||
|
logging filter all 0
|
||||||
|
logging color 1
|
||||||
|
logging print category-hex 1
|
||||||
|
logging print category 0
|
||||||
|
logging timestamp 0
|
||||||
|
logging print file 1
|
||||||
|
logging level lglobal debug
|
||||||
|
logging level llapd debug
|
||||||
|
logging level linp debug
|
||||||
|
logging level lmux debug
|
||||||
|
logging level lmi debug
|
||||||
|
logging level lmib debug
|
||||||
|
logging level lsms debug
|
||||||
|
logging level lctrl debug
|
||||||
|
logging level lgtp debug
|
||||||
|
logging level lstats debug
|
||||||
|
logging level lgsup debug
|
||||||
|
logging level loap debug
|
||||||
|
logging level lss7 debug
|
||||||
|
logging level lsccp debug
|
||||||
|
logging level lsua debug
|
||||||
|
logging level lm3ua debug
|
||||||
|
logging level lmgcp debug
|
||||||
|
logging level ljibuf debug
|
||||||
|
logging level lrspro debug
|
||||||
|
logging level lns debug
|
||||||
|
logging level lbssgp debug
|
||||||
|
!
|
||||||
|
stats reporter statsd
|
||||||
|
disable
|
||||||
|
remote-ip 127.0.0.1
|
||||||
|
remote-port 8125
|
||||||
|
mtu 1024
|
||||||
|
level subscriber
|
||||||
|
prefix TTCN3
|
||||||
|
flush-period 1
|
||||||
|
enable
|
||||||
|
stats interval 0
|
||||||
|
!
|
||||||
|
line vty
|
||||||
|
no login
|
||||||
|
!
|
||||||
|
ns
|
||||||
|
timer tns-block 3
|
||||||
|
timer tns-block-retries 3
|
||||||
|
timer tns-reset 3
|
||||||
|
timer tns-reset-retries 3
|
||||||
|
timer tns-test 12
|
||||||
|
timer tns-alive 3
|
||||||
|
timer tns-alive-retries 3
|
||||||
|
timer tsns-prov 3
|
||||||
|
timer tsns-size-retries 3
|
||||||
|
timer tsns-config-retries 3
|
||||||
|
bind udp local
|
||||||
|
listen 127.0.0.1 23000
|
||||||
|
accept-ipaccess
|
||||||
|
nse 1234
|
||||||
|
nsvc ipa local 127.0.0.1 22000 nsvci 1234
|
|
@ -0,0 +1,9 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
FILES="*.ttcn *.ttcnpp BSSGP_EncDec.cc IPL4asp_PT.cc IPL4asp_discovery.cc TCCConversion.cc TCCInterface.cc UD_PT.cc RLCMAC_EncDec.cc LLC_EncDec.cc TELNETasp_PT.cc Native_FunctionDefs.cc StatsD_CodecPort_CtrlFunctdef.cc "
|
||||||
|
|
||||||
|
FILES+="AF_PACKET_PT.cc AF_PACKET_PT.hh "
|
||||||
|
|
||||||
|
export CPPFLAGS_TTCN3="-DBSSGP_EM_L3 -DNS_EMULATION_FR"
|
||||||
|
|
||||||
|
../regen-makefile.sh NS_Tests.ttcn $FILES
|
Loading…
Reference in New Issue