module STP_Tests_Common {

/* 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
 */

friend module STP_Tests;
friend module STP_Tests_M3UA;
friend module STP_Tests_IPA;

import from TELNETasp_PortType all;
import from Osmocom_VTY_Functions all;

import from IPL4asp_Types all;

modulepar {
	charstring mp_stp_ip := "127.0.0.1";
	charstring mp_local_ip := "127.0.0.1";
}

friend template (value) SctpTuple ts_SCTP(template (omit) integer ppid := 3,
					   template (omit) integer stream := 0) := {
	sinfo_stream := stream,
	sinfo_ppid := ppid,
	remSocks := omit,
	assocId := omit
}

type component Test_CT {
	port TELNETasp_PT VTY;
	timer g_Tguard := 30.0;
	var boolean g_test_initialized := false;
}

private altstep as_gTguard() runs on Test_CT {
	[] g_Tguard.timeout {
		setverdict(fail, "Global guard timer timed out");
		mtc.stop;
		}
}

friend function f_init_common() runs on Test_CT {
	if (g_test_initialized) {
		return;
	}
	g_test_initialized := true;

	map(self:VTY, system:VTY);
	f_vty_set_prompts(VTY);
	f_vty_transceive(VTY, "enable");

	activate(as_gTguard());
	g_Tguard.start;
}



}
