diff --git a/regression_test/templateOctetstr/Makefile b/regression_test/templateOctetstr/Makefile index 7515deda5dade45e4911a32941d737658af20d32..6afc14c34958d7e5271d91810a14731fb0422930 100644 --- a/regression_test/templateOctetstr/Makefile +++ b/regression_test/templateOctetstr/Makefile @@ -23,7 +23,7 @@ include $(TOPDIR)/Makefile.regression TTCN3_LIB = ttcn3$(RT2_SUFFIX)$(DYNAMIC_SUFFIX) -TTCN3_MODULES = TtemplateOctetstr.ttcn +TTCN3_MODULES = TtemplateOctetstr.ttcn TtemplateOctetstringDecmatch.ttcn GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh) diff --git a/regression_test/templateOctetstr/TtemplateOctetstringDecmatch.ttcn b/regression_test/templateOctetstr/TtemplateOctetstringDecmatch.ttcn new file mode 100755 index 0000000000000000000000000000000000000000..3d356942eee4844771dd9e826d9a38ef46b8b0b4 --- /dev/null +++ b/regression_test/templateOctetstr/TtemplateOctetstringDecmatch.ttcn @@ -0,0 +1,255 @@ +/****************************************************************************** + * Copyright (c) 2000-2018 Ericsson Telecom AB + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html + * + * Contributors: + * Balasko, Jeno + * + ******************************************************************************/ +module TtemplateOctetstringDecmatch { + +//Status: java: pass cpp:pass + +type component CT{} + +//See RAW_struct_test +type bitstring BS1 length(1) with { variant "FIELDLENGTH(1)" } + +type record PDU101 { + integer i, + BS1 bs, + octetstring os +} with { variant "PADDING(yes)"} + +external function enc_PDU101(in PDU101 pdu) return octetstring +with { extension "prototype(convert) encode(RAW)"} +external function dec_PDU101(in octetstring os) return PDU101 +with { extension "prototype(convert) decode(RAW)" } + +type record Message1 { + integer id, + octetstring payload +} + +template Message1 t_Message1 := { + id := ?, + payload := decmatch PDU101:{i:=1, bs:=?,os:=?} +} + +//parameterized template +template Message1 t_Message1p(template integer t_i, template bitstring t_bs, template octetstring t_os) := { + id := ?, + payload := decmatch PDU101:{i:=1, bs:=?,os:=?} +} + +//fails, because the buffer is not empty at the end and this is evaluated as unmatch +testcase tc_PDU101_1() runs on CT { + var PDU101 vl_1 := { i:= 1, bs:='1'B, os:= '01'O} //encoded: '010300'O; + var octetstring vl_encoded := enc_PDU101(vl_1); + var PDU101 vl_decoded_pdu:= dec_PDU101(vl_encoded); + var Message1 vl_msg := { id:= 1, payload := enc_PDU101(vl_1)} + log("vl_msg: ",vl_msg); + log("vl_decoded_pdu: ", vl_decoded_pdu); + //log("t_Message1:", t_Message1); + if( match(vl_msg,t_Message1)) { + setverdict(pass) + } else { + setverdict(fail, match(vl_msg,t_Message1)) + } +} + +//parametrized template +testcase tc_PDU101_1param() runs on CT { + var PDU101 vl_1 := { i:= 1, bs:='1'B, os:= '01'O} //encoded: '010300'O; + var octetstring vl_encoded := enc_PDU101(vl_1); + var PDU101 vl_decoded_pdu:= dec_PDU101(vl_encoded); + var Message1 vl_msg := { id:= 1, payload := enc_PDU101(vl_1)} + log("vl_msg: ",vl_msg); + log("vl_decoded_pdu: ", vl_decoded_pdu); + log("t_Message1p:", t_Message1p(1,?,?)); + if( match(vl_msg, t_Message1p(1, ?, ?))) { + setverdict(pass) + } else { + setverdict(fail, match(vl_msg,t_Message1)) + } +} + +//====================================================================================== +type record PDU103 { + integer i1, + integer i2, + integer i3 +} + +external function enc_PDU103(in PDU103 pdu) return octetstring +with { extension "prototype(convert) encode(RAW)"} +external function dec_PDU103(in octetstring os) return PDU103 +with { extension "prototype(convert) decode(RAW)"} + +type record Message2 { + integer id, + octetstring payload +} + +template Message2 t_Message2 := { + id := ?, + payload := decmatch PDU103:{ i1:= (1..2), i2:=(2,10), i3:= ?} +} + +template octetstring t_payload := decmatch PDU103:{ i1:= (1..2), i2:=(2,10), i3:= ?} + +template Message2 t_Message2a := { + id := ?, + payload := t_payload +} + +//static template test +testcase tc_PDU103_1()runs on CT { + var PDU103 vl_1 := {1,2,3} + var octetstring vl_expected := '010203'O; + var octetstring vl_encoded := enc_PDU103(vl_1); + var Message2 vl_msg := { id:= 100, payload := vl_expected }; + if( match(vl_msg, t_Message2)) { + setverdict(pass) + } else { + setverdict(fail, match(vl_msg, t_Message2)); + } + //just testing the logging: + log("vl_encoded: ", vl_encoded); + log("t_Message2: ", t_Message2); + log(match(vl_msg, t_Message2)) +} + +//local template const +testcase tc_PDU103_2()runs on CT { + var PDU103 vl_1 := {1,2,3} + var octetstring vl_expected := '010203'O; + var octetstring vl_encoded := enc_PDU103(vl_1); + var Message2 vl_msg := { id:= 100, payload := vl_expected }; + + template Message2 tl_Message2 := { + id := ?, + payload := decmatch PDU103:{ i1:= (1..2), i2:=(2,10), i3:= ?} + } + if( match(vl_msg, t_Message2)) { + setverdict(pass) + } else { + setverdict(fail, match(vl_msg, tl_Message2)); + } + //just testing the logging: + log("vl_encoded: ", vl_encoded); + log("t_Message2: ", t_Message2); + log(match(vl_msg, t_Message2)) +} + +//local template var +testcase tc_PDU103_3()runs on CT { + var PDU103 vl_1 := {1,2,3} + var octetstring vl_expected := '010203'O; + var octetstring vl_encoded := enc_PDU103(vl_1); + var Message2 vl_msg := { id:= 100, payload := vl_expected }; + + var template Message2 tl_Message2 := { + id := ?, + payload := decmatch PDU103:{ i1:= (1..2), i2:=(2,10), i3:= ?} + } + + if( match(vl_msg, t_Message2)) { + setverdict(pass) + } else { + setverdict(fail, match(vl_msg, tl_Message2)); + } + //just testing the logging: + log("vl_encoded: ", vl_encoded); + //log("tl_Message2: ", tl_Message2); + log(match(vl_msg, t_Message2)) +} + +//local template var with modification +testcase tc_PDU103_4()runs on CT { + var PDU103 vl_1 := {1,2,3} + var octetstring vl_expected := '010203'O; + var octetstring vl_encoded := enc_PDU103(vl_1); + var Message2 vl_msg := { id:= 100, payload := vl_expected }; + + var template Message2 tl_Message2 := { + id := ?, + payload := decmatch PDU103:{ i1:= (1..2), i2:=(2,10), i3:= ?} + } + + tl_Message2.id := 100; + + if( match(vl_msg, t_Message2)) { + setverdict(pass) + } else { + setverdict(fail, match(vl_msg, tl_Message2)); + } + //just testing the logging: + log("vl_encoded: ", vl_encoded); + log("tl_Message2: ", tl_Message2); + log(match(vl_msg, t_Message2)) +} +//local template var with modification and unmatch +testcase tc_PDU103_5()runs on CT { + var PDU103 vl_1 := {1,2,3} + var octetstring vl_expected := '010203'O; + var octetstring vl_encoded := enc_PDU103(vl_1); + var Message2 vl_msg := { id:= 100, payload := vl_expected }; + + var template Message2 tl_Message2 := { + id := ?, + payload := decmatch PDU103:{ i1:= (1..2), i2:=(2,10), i3:= ?} + } + + tl_Message2.id := 101; + + if( not match(vl_msg, tl_Message2)) { + setverdict(pass, match(vl_msg, tl_Message2)); + } else { + setverdict(fail, match(vl_msg, tl_Message2)); + } + //just testing the logging: + log("vl_encoded: ", vl_encoded); + log("tl_Message2: ", tl_Message2); + // log(match(vl_msg, t_Message2)) +} + +//local template var with modification and unmatch. Named decmatch template is applied +testcase tc_PDU103_6()runs on CT { + var PDU103 vl_1 := {1,2,3} + var octetstring vl_expected := '010203'O; + var octetstring vl_encoded := enc_PDU103(vl_1); + var Message2 vl_msg := { id:= 100, payload := vl_expected }; + + var template Message2 tl_Message2 := { + id := ?, + payload := t_payload + } + + tl_Message2.id := 101; + log(vl_msg, ":",tl_Message2); + if( not match(vl_msg, tl_Message2)) { + setverdict(pass, match(vl_msg, tl_Message2)); + } else { + setverdict(fail, match(vl_msg, tl_Message2)); + } + //just testing the logging: + log("vl_encoded: ", vl_encoded); + log("tl_Message2: ", tl_Message2); + // log(match(vl_msg, t_Message2)) +} +control { + execute( tc_PDU101_1()); + execute(tc_PDU101_1param()); + execute( tc_PDU103_1()); + execute( tc_PDU103_2()); + execute( tc_PDU103_3()); + execute( tc_PDU103_4()); + execute( tc_PDU103_5()); + execute( tc_PDU103_6()); +} + +} with { encode "RAW"} diff --git a/regression_test/templateOctetstr/config.cfg b/regression_test/templateOctetstr/config.cfg index 4590fe643c0bd91f46a503554857395e66cbf102..14cfa61d72d968106d1714e6b671bf5262a394d9 100644 --- a/regression_test/templateOctetstr/config.cfg +++ b/regression_test/templateOctetstr/config.cfg @@ -17,3 +17,4 @@ FileMask := LOG_ALL ConsoleMask := TTCN_WARNING | TTCN_ERROR | TTCN_TESTCASE | TTCN_STATISTICS [EXECUTE] TtemplateOctetstr +TtemplateOctetstringDecmatch \ No newline at end of file