module SGSN_Tests {

import from General_Types all;
import from Osmocom_Types all;
import from NS_Types all;
import from NS_Emulation all;
import from BSSGP_Types all;
import from BSSGP_Emulation all;

type component test_CT {
	var NS_CT vc_NS;

	var BSSGP_CT vc_BSSGP;
	port BSSGP_PT BSSGP;

	var boolean g_initialized := false;
};

function f_init() runs on test_CT {
	if (g_initialized == true) {
		return;
	}
	g_initialized := true;

	vc_NS := NS_CT.create;
	vc_BSSGP := BSSGP_CT.create;
	/* connect our BSSGP port to upper end of BSSGP emulation */
	connect(self:BSSGP, vc_BSSGP:BSSGP_SP);
	/* connect lower end of BSSGP emulation with NS upper port */
	connect(vc_BSSGP:BSCP, vc_NS:NS_SP);
	/* connect lower end of NS emulation to NS codec port (on top of IPL4) */
	map(vc_NS:NSCP, system:NS_CODEC_PORT);

	vc_NS.start(NSStart());
	vc_BSSGP.start(BssgpStart(false));
}

/* TODO:
   * RAU without Attach
   * Detach without Attach
   * SM procedures without attach / RAU
   * ATTACH / RAU
   ** with / without authentication
   ** with / without P-TMSI allocation
   ** timeout from HLR on SAI
   ** timeout from HLR on UL
   ** reject from HLR on SAI
   ** reject from HLR on UL
   * re-transmissions of LLC frames
   * PDP Context activation
   ** with different GGSN config in SGSN VTY
   ** with different PDP context type (v4/v6/v46)
   ** timeout from GGSN
   ** reject from GGSN
 */

testcase TC_wait_ns_up() runs on test_CT {
	f_init();
	f_sleep(20.0);
}


//control { }



}
