module SGSN_Tests_NS { /* Osmocom SGSN test suite in TTCN-3 * (C) 2020 sysmocom - s.f.m.c. GmbH * 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 Osmocom_Types all; import from Osmocom_Gb_Types all; import from Osmocom_VTY_Functions all; import from NS_Types all; import from RAW_NS all; import from SGSN_Tests all; type component RAW_Test_CT extends RAW_NS_CT, test_CT { } testcase TC_NS_connect_reset() runs on RAW_Test_CT { f_init_vty(); f_init_ns_codec(mp_nsconfig[0], guard_secs := 10.0); /* Send a NS-ALIVE */ f_outgoing_ns_reset(); f_sleep(1.0); f_clean_ns_codec(); } testcase TC_NS_connect_alive() runs on RAW_Test_CT { f_init_vty(); f_init_ns_codec(mp_nsconfig[0], guard_secs := 10.0); /* Send a NS-ALIVE */ NSCP[0].send(t_NS_ALIVE); alt { [] NSCP[0].receive(t_NS_ALIVE_ACK); [] NSCP[0].receive(tr_NS_STATUS(*)) { setverdict(fail); } [] NSCP[0].receive { repeat; } } f_sleep(1.0); f_clean_ns_codec(); } /* perform outgoing SNS-SIZE procedure */ testcase TC_SNS_size() runs on RAW_Test_CT { f_init_vty(); f_init_ns_codec(mp_nsconfig[0], guard_secs := 10.0); g_handle_rx_alive := true; f_outgoing_sns_size(); setverdict(pass); } /* outgoing SNS-SIZE procedure with more BSS side IPs than SGSN can handle */ testcase TC_SNS_size_too_big() runs on RAW_Test_CT { f_init_vty(); f_init_ns_codec(mp_nsconfig[0], guard_secs := 10.0); g_handle_rx_alive := true; f_outgoing_sns_size(cause := NS_CAUSE_INVALID_NR_OF_NSVCS, num_ip := 100); setverdict(pass); } /* perform outgoing SNS-CONFIG procedure (for BSS) */ testcase TC_SNS_config_bss() runs on RAW_Test_CT { f_init_vty(); f_init_ns_codec(mp_nsconfig[0], guard_secs := 10.0); g_handle_rx_alive := true; f_outgoing_sns_size(); f_outgoing_sns_config(); setverdict(pass); } /* perform incoming SNS-CONFIG procedure (for SGSN) */ testcase TC_SNS_config_sgsn() runs on RAW_Test_CT { f_init_vty(); f_init_ns_codec(mp_nsconfig[0], guard_secs := 10.0); g_handle_rx_alive := true; f_outgoing_sns_size(); f_outgoing_sns_config(); f_incoming_sns_config(); setverdict(pass); } /* perform full SNS handshake and then outbound NS-ALIVE */ testcase TC_SNS_and_alive() runs on RAW_Test_CT { f_init_vty(); f_init_ns_codec(mp_nsconfig[0], guard_secs := 120.0); g_handle_rx_alive := true; f_outgoing_sns_size(); f_outgoing_sns_config(); f_incoming_sns_config(); f_outgoing_ns_alive(); setverdict(pass); } control { if (mp_nsconfig[0].handle_sns) { execute( TC_SNS_size() ); execute( TC_SNS_size_too_big() ); execute( TC_SNS_config_bss() ); execute( TC_SNS_config_sgsn() ); execute( TC_SNS_and_alive() ); } else { execute( TC_NS_connect_alive() ); execute( TC_NS_connect_reset() ); } } }