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);
|
||||
|
||||
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 */
|
||||
type enumerated NsPduType {
|
||||
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