module Misc_Helpers { modulepar { charstring mp_osmo_repo := "nightly"; } /* Test the Osmocom repository (nightly, latest, 2021q4, ...), from which the * SUT is running (OS#4878). Usage examples: * if (Misc_Helpers.f_osmo_repo_is("nightly")) { * ... * } * if (Misc_Helpers.f_osmo_repo_is(("nightly", "2021q4"))) { * ... * } */ function f_osmo_repo_is(template charstring ver) return boolean { return match(mp_osmo_repo, ver); } /* Try to properly shutdown a testcase. * The reliable method to stop a testcase without running into dynamic * testcase errors due to unconnected ports receiving messages is to call * all component.stop before terminating. However, this can only be called * from the mtc! So in case we want to terminate from a component that is not * the mtc we try to do the next best thing which is calling mtc.stop and * hoping for the best. */ function f_shutdown(charstring file, integer line, verdicttype verdict := none, charstring text := "") { if (verdict != none) { text := file & ":" & int2str(line) & " : " & text setverdict(verdict, text); } log("Stopping testcase execution from ", file, ":", line) if (self == mtc) { /* Properly stop all ports before disconnecting them. This avoids * running into the dynamic testcase error due to messages arriving on * unconnected ports. */ all component.stop; } mtc.stop } function f_addr_is_ipv6(charstring addr) return boolean { for (var integer i := 0; i < lengthof(addr); i := i + 1) { if (addr[i] == ":") { return true; } } return false; } }