osmo-ttcn3-hacks/library/Osmocom_CTRL_Functions.ttcn

98 lines
2.9 KiB
Plaintext

module Osmocom_CTRL_Functions {
import from Osmocom_CTRL_Types all;
import from IPA_Emulation all;
private function f_gen_rand_id() return CtrlId {
return int2str(float2int(rnd()*999999999.0));
}
/* perform a given GET Operation */
function f_ctrl_get(IPA_CTRL_PT pt, CtrlVariable variable) return CtrlValue {
timer T := 2.0;
var CtrlMessage rx;
var CtrlId id := f_gen_rand_id();
pt.send(ts_CtrlMsgGet(id, variable));
T.start;
alt {
[] pt.receive(tr_CtrlMsgGetRepl(id, variable)) -> value rx {
}
[] pt.receive(tr_CtrlMsgTrap) { repeat; }
[] pt.receive(tr_CtrlMsgError) -> value rx {
setverdict(fail, "Error in CTRL GET ", variable, ": ", rx.err.reason);
return "FAIL";
}
[] T.timeout {
setverdict(fail, "Timeout waiting for CTRL GET REPLY ", variable);
return "TIMEOUT";
}
}
return rx.resp.val;
}
/* perform a given SET Operation */
function f_ctrl_set(IPA_CTRL_PT pt, CtrlVariable variable, CtrlValue val) {
timer T := 2.0;
var CtrlMessage rx;
var CtrlId id := f_gen_rand_id();
pt.send(ts_CtrlMsgSet(id, variable, val));
T.start;
alt {
[] pt.receive(tr_CtrlMsgSetRepl(id, variable, val)) { }
[] pt.receive(tr_CtrlMsgTrap) { repeat; }
[] pt.receive(tr_CtrlMsgError) -> value rx {
setverdict(fail, "Error in CTRL GET ", variable, ": ", rx.err.reason);
}
[] T.timeout {
setverdict(fail, "Timeout waiting for CTRL SET REPLY ", variable);
}
}
}
/* Expect a matching TRAP */
function f_ctrl_exp_trap(IPA_CTRL_PT pt, template CtrlVariable variable,
template CtrlValue val := ?) return CtrlValue {
timer T := 2.0;
var CtrlMessage rx;
T.start;
alt {
[] pt.receive(tr_CtrlMsgTrap(variable, val)) -> value rx {
}
[] T.timeout {
setverdict(fail, "Timeout waiting for TRAP ", variable);
return "TIMEOUT";
}
}
return rx.trap.val;
}
/* Expect a matching GET result */
function f_ctrl_get_exp(IPA_CTRL_PT pt, CtrlVariable variable, template CtrlValue exp) {
var charstring ctrl_resp;
ctrl_resp := f_ctrl_get(pt, variable);
if (not match(ctrl_resp, exp)) {
setverdict(fail, "Unexpected " & variable & ":" & ctrl_resp);
}
}
template charstring ts_ctrl_ratectr(CtrlVariable grp, integer instance, CtrlVariable name,
CtrlVariable kind := "abs") :=
"rate_ctr." & kind & "." & grp & "." & int2str(instance) & "." & name;
function f_ctrl_get_ratectr_abs(IPA_CTRL_PT pt, CtrlVariable grp, integer instance,
CtrlVariable name) return integer {
return str2int(f_ctrl_get(pt, valueof(ts_ctrl_ratectr(grp, instance, name))));
}
function f_ctrl_get_exp_ratectr_abs(IPA_CTRL_PT pt, CtrlVariable grp, integer instance,
CtrlVariable name, template integer exp) {
var charstring ctrl_resp;
var CtrlVariable variable := valueof(ts_ctrl_ratectr(grp, instance, name));
ctrl_resp := f_ctrl_get(pt, variable);
if (not match(str2int(ctrl_resp), exp)) {
setverdict(fail, variable & " value " & ctrl_resp & " didn't match ", exp);
}
}
}