module L1CTL_Test {
	import from GSM_Types all;
	import from Osmocom_Types all;
	import from L1CTL_Types all;
	import from L1CTL_PortType all;

	const octetstring c_ul_param_req := '1300000000000000001d0000'O;
	const octetstring c_ul_data_req := '060a0128284018001d000103490615004001c0000000000000000000000000'O;
	const octetstring c_ul_ccch_mode_req := '1000000002000000'O;
	const octetstring c_ul_reset_req := '0d00000002000000'O;
	const octetstring c_ul_dm_est_req := '050000002800000007000367000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005'O;
	const octetstring c_ul_rach_req := '040000000000000012010008'O;

	const octetstring c_dl_data_ind := '03000000900003670015f5613f3f00002d063f0328e36712ead000002b2b2b2b2b2b2b2b2b2b2b'O;

	type component dummy_CT {
		var charstring l1ctl_sock_path := "/tmp/osmocom_l2";
		port L1CTL_PT L1CTL;
	};

	template L1ctlUlMessage t_L1ctlResetReq(template L1ctlResetType rst_type) := {
		header := t_L1ctlHeader(L1CTL_RESET_REQ),
		ul_info := omit,
		payload := {
			reset_req := {
				reset_type := rst_type,
				padding := '000000'O
			}
		}
	};

	//template UD_send_data

	function f_init() runs on dummy_CT {
		map(self:L1CTL, system:L1CTL);
		L1CTL.send(L1CTL_connect:{path:=l1ctl_sock_path});
		L1CTL.receive(L1CTL_connect_result:{result_code := SUCCESS, err:=omit});
	}

	testcase TC_si1() runs on dummy_CT {
		log("L1CTL_PARAM_REQ: ", dec_L1ctlUlMessage(c_ul_param_req));
		log("L1CTL_DATA_REQ: ", dec_L1ctlUlMessage(c_ul_data_req));
		log("L1CTL_CCCH_MODE_REQ: ", dec_L1ctlUlMessage(c_ul_ccch_mode_req));
		log("L1CTL_RESET_REQ: ", dec_L1ctlUlMessage(c_ul_reset_req));
		log("L1CTL_DM_EST_REQ: ", dec_L1ctlUlMessage(c_ul_dm_est_req));
		log("L1CTL_RACH_REQ: ", dec_L1ctlUlMessage(c_ul_rach_req));
		log("L1CTL_DATA_IND: ", dec_L1ctlDlMessage(c_dl_data_ind));
		setverdict(pass);
	}

	testcase TC_l1ctl() runs on dummy_CT {
		f_init();
		L1CTL.send(t_L1ctlResetReq(L1CTL_RES_T_FULL));
	}
	control {
		execute(TC_si1());
		execute(TC_l1ctl());
	}
}
