From cceba47aabe840743f3bfeea67fd2e2fde04273f Mon Sep 17 00:00:00 2001 From: balaskoa <Jeno.Balasko@ericsson.com> Date: Mon, 6 Jan 2020 08:27:34 +0100 Subject: [PATCH] OER_EncDec test speed up (script elimination) Signed-off-by: balaskoa <Jeno.Balasko@ericsson.com> Change-Id: I7ebbc43a0dc8257a1fd0efe323730e41b5a54c67 --- function_test/Makefile | 5 +- function_test/OER_EncDec/.gitignore | 7 + function_test/OER_EncDec/ETSITS103097v131.asn | 14 + ...pt => ETSI_TS_103_097_v131_Testcases.ttcn} | 167 ++--- function_test/OER_EncDec/ISOIEC8825.asn | 24 + .../OER_EncDec/ISOIEC8825_Testcases.ttcn | 138 +++++ function_test/OER_EncDec/ITSPKI.asn | 152 +++++ .../OER_EncDec/ITSPKI_Testcases.ttcn | 578 ++++++++++++++++++ function_test/OER_EncDec/Makefile | 16 +- function_test/OER_EncDec/OER_EncDec.cfg | 22 + function_test/README.txt | 4 +- 11 files changed, 989 insertions(+), 138 deletions(-) create mode 100755 function_test/OER_EncDec/.gitignore create mode 100755 function_test/OER_EncDec/ETSITS103097v131.asn rename function_test/OER_EncDec/{OER_EncDec_ETSI_TS_103_097_v131.script => ETSI_TS_103_097_v131_Testcases.ttcn} (70%) mode change 100644 => 100755 create mode 100755 function_test/OER_EncDec/ISOIEC8825.asn create mode 100755 function_test/OER_EncDec/ISOIEC8825_Testcases.ttcn create mode 100755 function_test/OER_EncDec/ITSPKI.asn create mode 100755 function_test/OER_EncDec/ITSPKI_Testcases.ttcn create mode 100755 function_test/OER_EncDec/OER_EncDec.cfg diff --git a/function_test/Makefile b/function_test/Makefile index 33d609dd7..445e01ac3 100644 --- a/function_test/Makefile +++ b/function_test/Makefile @@ -17,7 +17,7 @@ # ############################################################################## # Makefile to run the non-interactive tests -DIRS := BER_EncDec RAW_EncDec Text_EncDec XER_EncDec Semantic_Analyser Semantic_Analyser_Csaba Config_Parser +DIRS := BER_EncDec RAW_EncDec Text_EncDec XER_EncDec OER_EncDec Semantic_Analyser Semantic_Analyser_Csaba Config_Parser SCRIPTFLAGS := @@ -81,6 +81,9 @@ Text_EncDec: XER_EncDec: cd $@; make -j; make run + +OER_EncDec: + cd $@; make -j; make run Semantic_Analyser: cd $@; if [ ! -f perl ] ; then ln -s `which perl` perl; fi; ./run_test_all $(SCRIPTFLAGS) diff --git a/function_test/OER_EncDec/.gitignore b/function_test/OER_EncDec/.gitignore new file mode 100755 index 000000000..4e23998bc --- /dev/null +++ b/function_test/OER_EncDec/.gitignore @@ -0,0 +1,7 @@ +compile +*.hh +*.cc +*.o +*.gcda +*.gcno +result.txt \ No newline at end of file diff --git a/function_test/OER_EncDec/ETSITS103097v131.asn b/function_test/OER_EncDec/ETSITS103097v131.asn new file mode 100755 index 000000000..6ee0e5108 --- /dev/null +++ b/function_test/OER_EncDec/ETSITS103097v131.asn @@ -0,0 +1,14 @@ +ETSITS103097v131 DEFINITIONS ::= + +BEGIN + +IMPORTS + Certificate, Ieee1609Dot2Data FROM IEEE1609dot2 { + iso(1) identified-organization(3) ieee(111) + standards-association-numbered-series-standards(2) wave-stds(1609) + dot2(2) base(1) schema(1) major-version-2(2) + }; + + TestIeee1609Dot2Data ::= Ieee1609Dot2Data + TestCertificate ::= Certificate +END diff --git a/function_test/OER_EncDec/OER_EncDec_ETSI_TS_103_097_v131.script b/function_test/OER_EncDec/ETSI_TS_103_097_v131_Testcases.ttcn old mode 100644 new mode 100755 similarity index 70% rename from function_test/OER_EncDec/OER_EncDec_ETSI_TS_103_097_v131.script rename to function_test/OER_EncDec/ETSI_TS_103_097_v131_Testcases.ttcn index d3ae1b688..ceeb2c67d --- a/function_test/OER_EncDec/OER_EncDec_ETSI_TS_103_097_v131.script +++ b/function_test/OER_EncDec/ETSI_TS_103_097_v131_Testcases.ttcn @@ -1,128 +1,40 @@ -.****************************************************************************** -.* Copyright (c) 2000-2019 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 -.* Beres, Szabolcs -.* Delic, Adam -.* Kovacs, Ferenc -.* Szabados, Kristof -.* -.******************************************************************************/ -:text. -:lang eng. -.* -:docname.Test Description -:docno.8/152 91-CRL 113 200/5 Uen -:rev.C -:date.2015-04-27 -.* -:prep.ETH/XZR Kristof Szabados (+36 1 437 7256) -:appr.ETH/XZ (Roland Gecse) -:checked.ETHBAAT -.* -:title.Test Description - OER coder -:contents level=3. -.*---------------------------------------------------------------------* -:h1.PREREQUISITES AND PREPARATIONS -.*---------------------------------------------------------------------* -.*---------------------------------------------------------------------* -:h2.Scope of the Test Object -.*---------------------------------------------------------------------* -:xmp tab=1 nokeep. - -This TD contains unified test cases related to TTCN3 Executor's OER coder function. - -The target of these test cases are the basic data types from specification -'ISO/IEC 8825-7:2015 -- Information technology – ASN.1 encoding rules: -Specification of Octet Encoding Rules' - -The target data types are used in the following technical specification: - 'ETSI TS 103 097 V1.3.1 (2017-10)' -Intelligent Transport Systems (ITS); Security; -Security header and certificate formats and certificate formats - - 'IEEE Std 1609.2-2016 IEEE Standard' -Wireless Access in Vehicular Environments—Security Services for -Applications and Management Messages - -:exmp. - -:p.:us.Revision Information:eus. - -:xmp nokeep. -:us.History:eus. - -REV DATE PREPARED CHANGE -=== ========== ======== ====== -A 2003-10-31 ETHEKR New document -B 2007-03-06 EDMDELI Implicit message encoding -C 2007-03-21 EJNOSZA Bugfix in a testcase for implicit msg. enc. -D 2008-10-01 EFERKOV Big integers -E 2010-01-18 EKRISZA Updated for TITAN R8C -F 2011-06-18 EKRISZA Added tests for errors -A 2011-12-12 EKRISZA Updated for release -PB1 2011-01-30 ETHBAAT Editorial changes - -:exmp. - - -.*---------------------------------------------------------------------* -:h2.Test Tools -.*---------------------------------------------------------------------* -:p.:us.Software Tools:eus. -:xmp tab=2 nokeep. - - SAtester - -:exmp. -:np. -.*---------------------------------------------------------------------* -:h1.REQUIREMENT-BASED TESTS -.*---------------------------------------------------------------------* -.*---------------------------------------------------------------------* -:h2.Testing OER encoding of the basic types -.*---------------------------------------------------------------------* -.*---------------------------------------------------------------------* -:h3. OER encoding -.*---------------------------------------------------------------------* -:xmp tab=0. - -<TC - OER encoding (unified tests)> - -<STATIC:ASN> - -TempA - -DEFINITIONS ::= - -BEGIN - -IMPORTS - Certificate, Ieee1609Dot2Data FROM IEEE1609dot2 { - iso(1) identified-organization(3) ieee(111) - standards-association-numbered-series-standards(2) wave-stds(1609) - dot2(2) base(1) schema(1) major-version-2(2) - }; - - TestIeee1609Dot2Data ::= Ieee1609Dot2Data - TestCertificate ::= Certificate - -END - -<STATIC> - - +/****************************************************************************** + * Copyright (c) 2000-2019 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 + * Beres, Szabolcs + * Delic, Adam + * Kovacs, Ferenc + * Szabados, Kristof + * + ******************************************************************************/ +//The target of these test cases are the basic data types from specification +//'ISO/IEC 8825-7:2015 -- Information technology – ASN.1 encoding rules: +//Specification of Octet Encoding Rules' +// +//The target data types are used in the following technical specification: +// 'ETSI TS 103 097 V1.3.1 (2017-10)' +//Intelligent Transport Systems (ITS); Security; +//Security header and certificate formats and certificate formats +// +// 'IEEE Std 1609.2-2016 IEEE Standard' +//Wireless Access in Vehicular Environments—Security Services for +//Applications and Management Messages +module ETSI_TS_103_097_v131_Testcases { + +import from ETSITS103097v131 all; type component Test_CT {} - -<TTCN_TC:PURE_EXEC> - -import from TempA all; - +//---------------------------------------------------------------------* +// Testing OER encoding of the basic types +//---------------------------------------------------------------------* +//---------------------------------------------------------------------* +// OER encoding +//---------------------------------------------------------------------* external function enc_Ieee1609Dot2Data(in TestIeee1609Dot2Data pdu) return octetstring with { extension "prototype(convert) encode(OER)" } external function dec_Ieee1609Dot2Data(in octetstring stream) return TestIeee1609Dot2Data with { extension "prototype(convert) decode(OER)" } @@ -349,9 +261,4 @@ control { execute(tc_Ieee1609Dot2Data_SignedWithCertificate()); } -<RESULT> - -Overall verdict: pass - -<END_TC> - +} diff --git a/function_test/OER_EncDec/ISOIEC8825.asn b/function_test/OER_EncDec/ISOIEC8825.asn new file mode 100755 index 000000000..9c2e8dd61 --- /dev/null +++ b/function_test/OER_EncDec/ISOIEC8825.asn @@ -0,0 +1,24 @@ +ISOIEC8825 DEFINITIONS ::= + +BEGIN + + IMPORTS; + + Date ::= [APPLICATION 3] IMPLICIT VisibleString -- YYYYMMDD + EmployeeNumber ::= [APPLICATION 2] IMPLICIT INTEGER + Name ::= [APPLICATION 1] IMPLICIT SEQUENCE { + givenName VisibleString, + initial VisibleString, + familyName VisibleString } + ChildInformation ::= SET { + name Name, + dateOfBirth [0] Date} + Record ::= [APPLICATION 0] IMPLICIT SET { + name Name, + title [0] VisibleString, + number EmployeeNumber, + dateOfHire [1] Date, + nameOfSpouse [2] Name, + children [3] IMPLICIT SEQUENCE OF ChildInformation DEFAULT {} } +END + diff --git a/function_test/OER_EncDec/ISOIEC8825_Testcases.ttcn b/function_test/OER_EncDec/ISOIEC8825_Testcases.ttcn new file mode 100755 index 000000000..7e8fd8ab7 --- /dev/null +++ b/function_test/OER_EncDec/ISOIEC8825_Testcases.ttcn @@ -0,0 +1,138 @@ +/****************************************************************************** +* Copyright (c) 2000-2019 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 +* Beres, Szabolcs +* Delic, Adam +* Kovacs, Ferenc +* Szabados, Kristof +* Tarasov, Victor +* +******************************************************************************/ +//This file replaces ISOIEC-8825-7-2015-AnnexA-PersonnelRecord.script + +//This file contains unified test case related to TTCN3 Executor's OER coder function. +//Test case implement the OER codings example from specification ISO/IEC 8825-7:2015 +//(https://www.itu.int/rec/T-REC-X.696-201508-I) + +//--------------------------------------------------------------------- +//Testing OER encodings +//--------------------------------------------------------------------- +//ISOIEC_8825_7_2015_AnnexA_PersonnelRecord +module ISOIEC8825_Testcases { + +import from ISOIEC8825 all; +type component Test_CT {} +//import from TempA all; + +external function enc_OER_Date(in Date pdu) return octetstring with { extension "prototype(convert) encode(OER)" } +external function dec_OER_Date(in octetstring stream) return Date with { extension "prototype(convert) decode(OER)" } + +external function enc_OER_EmployeeNumber(in EmployeeNumber pdu) return octetstring with { extension "prototype(convert) encode(OER)" } +external function dec_OER_EmployeeNumber(in octetstring stream) return EmployeeNumber with { extension "prototype(convert) decode(OER)" } + +external function enc_OER_Name(in Name pdu) return octetstring with { extension "prototype(convert) encode(OER)" } +external function dec_OER_Name(in octetstring stream) return Name with { extension "prototype(convert) decode(OER)" } + +external function enc_OER_ChildInformation(in ChildInformation pdu) return octetstring with { extension "prototype(convert) encode(OER)" } +external function dec_OER_ChildInformation(in octetstring stream) return ChildInformation with { extension "prototype(convert) decode(OER)" } + +external function enc_OER_Record(in Record pdu) return octetstring with { extension "prototype(convert) encode(OER)" } +external function dec_OER_Record(in octetstring stream) return Record with { extension "prototype(convert) decode(OER)" } + +//********************************************* +// TESTCASES +//********************************************* + +testcase tc_OER_encoding_of_Date() runs on Test_CT { + const Date date := "19710917" + const octetstring raw_encoded := '083139373130393137'O; + + if (enc_OER_Date(date) == raw_encoded) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_Date(raw_encoded) == date) {setverdict(pass);} else {setverdict(fail);} +} + +testcase tc_OER_encoding_of_EmployeeNumber() runs on Test_CT { + const EmployeeNumber empl_num := 51 + if (enc_OER_EmployeeNumber(empl_num) == '0133'O) {setverdict(pass);} else {setverdict(fail);} +} + +testcase tc_OER_encoding_of_Name() runs on Test_CT { + const Name name := { + givenName := "John", + initial := "P", + familyName := "Smith" + } + const octetstring raw_encoded := '044A6F686E015005536D697468'O; + + if (enc_OER_Name(name) == raw_encoded) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_Name(raw_encoded) == name) {setverdict(pass);} else {setverdict(fail);} +} + +testcase tc_OER_ChildInformation() runs on Test_CT { + const ChildInformation child := { + name := { + givenName := "Ralph", + initial := "T", + familyName := "Smith" + }, + dateOfBirth := "19571111" + } + const octetstring raw_encoded := '0552616C7068015405536D697468083139353731313131'O; + + if (enc_OER_ChildInformation(child) == raw_encoded) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_ChildInformation(raw_encoded) == child) {setverdict(pass);} else {setverdict(fail);} +} + +testcase tc_OER_Record() runs on Test_CT { + const octetstring raw_encoded := + '80044A6F686E015005536D6974680133084469726563746F72083139373130393137044D617279015405536D69746801020552616C7068015405536D69746808313935373131313105537573616E0142054A6F6E6573083139353930373137'O; + const Record rec := { + name := { + givenName := "John", + initial := "P", + familyName := "Smith"}, + title := "Director", + number := 51, + dateOfHire := "19710917", + nameOfSpouse := { + givenName := "Mary", + initial := "T", + familyName := "Smith"}, + children := { + { name := { + givenName := "Ralph", + initial := "T", + familyName := "Smith"}, + dateOfBirth := "19571111" }, + { name := { + givenName := "Susan", + initial := "B", + familyName := "Jones"}, + dateOfBirth := "19590717"} + } + } + + if (enc_OER_Record(rec) == raw_encoded) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_Record(raw_encoded) == rec) {setverdict(pass);} else {setverdict(fail);} +} + +//********************************************* +// CONTROL PART +//********************************************* + +control { + execute(tc_OER_encoding_of_Date()); + execute(tc_OER_encoding_of_EmployeeNumber()); + execute(tc_OER_encoding_of_Name()); + execute(tc_OER_ChildInformation()); + execute(tc_OER_Record()); +} + + +} diff --git a/function_test/OER_EncDec/ITSPKI.asn b/function_test/OER_EncDec/ITSPKI.asn new file mode 100755 index 000000000..8cc693527 --- /dev/null +++ b/function_test/OER_EncDec/ITSPKI.asn @@ -0,0 +1,152 @@ +ITSPKI DEFINITIONS ::= + +BEGIN + + IMPORTS; + + Null ::= NULL + + Bool ::= BOOLEAN + + Uint ::= INTEGER (0..MAX) + Uint8 ::= INTEGER (0..255) + Uint16 ::= INTEGER (0..65535) + Uint32 ::= INTEGER (0..4294967295) + Uint64 ::= INTEGER (0..18446744073709551615) + + Int ::= INTEGER + Sint8 ::= INTEGER (-128..127) + Sint16 ::= INTEGER (-32768..32767) + Sint32 ::= INTEGER (-2147483648..2147483647) + Sint64 ::= INTEGER (-9223372036854775808..9223372036854775807) + + Enum ::= ENUMERATED {zero(0), one(1), two(2)} + EnumM ::= ENUMERATED {zero(0), one(1), two(2), numM(18)} + EnumP ::= ENUMERATED {zero(0), one(1), two(2), numP(1234)} + EnumB ::= ENUMERATED {zero(0), one(1), two(2), numB(65261)} + EnumNM ::= ENUMERATED {zero(0), one(1), two(2), numNM(-275)} + EnumNB ::= ENUMERATED {zero(0), one(1), two(2), numNB(-64302)} + + BitStr ::= BIT STRING + BitStrEmpty ::= BIT STRING (SIZE(0)) + BitStrRandom ::= BIT STRING (SIZE(54)) + BitStrAligned ::= BIT STRING (SIZE(48)) + + OctetStr ::= OCTET STRING + OctetStrEmpty ::= OCTET STRING (SIZE(0)) + OctetStrRandom ::= OCTET STRING (SIZE(6)) + + SequenceEmpty ::= SEQUENCE {} + SequenceEmptyExtendable ::= SEQUENCE { + ... + } + SequenceSimple ::= SEQUENCE { + f1 OCTET STRING (SIZE (2)), + f2 OCTET STRING (SIZE (2)), + f3 OCTET STRING (SIZE (2)) + } + SequenceSimpleExtendable ::= SEQUENCE { + f1 OCTET STRING (SIZE (2)), + f2 OCTET STRING (SIZE (2)), + f3 OCTET STRING (SIZE (2)), + ... + } + SequenceSimpleExtended ::= SEQUENCE { + f1 OCTET STRING (SIZE (2)), + f2 OCTET STRING (SIZE (2)), + f3 OCTET STRING (SIZE (2)), + ..., + e1 OCTET STRING (SIZE (2)), + e2 OCTET STRING (SIZE (2)), + e3 OCTET STRING (SIZE (2)) + + } + SequenceSomeOptional ::= SEQUENCE { + f1 OCTET STRING (SIZE (2)), + f2 [2] OCTET STRING (SIZE (2)) OPTIONAL, + f3 [3] OCTET STRING (SIZE (2)) OPTIONAL + } + SequenceAllOptional ::= SEQUENCE { + f1 OCTET STRING (SIZE (2)) OPTIONAL, + f2 [2] OCTET STRING (SIZE (2)) OPTIONAL, + f3 [3] OCTET STRING (SIZE (2)) OPTIONAL + } + SequenceOptionalExtendable ::= SEQUENCE { + f1 OCTET STRING (SIZE (2)) OPTIONAL, + f2 [2] OCTET STRING (SIZE (2)), + f3 [3] OCTET STRING (SIZE (2)) OPTIONAL, + ... + } + SequenceLongOptionalExtendable ::= SEQUENCE { + f1 OCTET STRING (SIZE (2)) OPTIONAL, + f2 [2] OCTET STRING (SIZE (2)) OPTIONAL, + f3 [3] OCTET STRING (SIZE (2)) OPTIONAL, + f4 [4] OCTET STRING (SIZE (2)) OPTIONAL, + f5 [5] OCTET STRING (SIZE (2)) OPTIONAL, + f6 [6] OCTET STRING (SIZE (2)) OPTIONAL, + f7 [7] OCTET STRING (SIZE (2)) OPTIONAL, + f8 [8] OCTET STRING (SIZE (2)) OPTIONAL, + f9 [9] OCTET STRING (SIZE (2)) OPTIONAL, + f10 [10] OCTET STRING (SIZE (2)) OPTIONAL, + ... + } + SequenceOptionalExtended ::= SEQUENCE { + f1 OCTET STRING (SIZE (2)) OPTIONAL, + f2 [2] OCTET STRING (SIZE (2)), + f3 [3] OCTET STRING (SIZE (2)) OPTIONAL, + ..., + e1 [4] OCTET STRING (SIZE (2)) OPTIONAL, + e2 [5] OCTET STRING (SIZE (2)), + e3 [6] OCTET STRING (SIZE (2)) OPTIONAL + } + SequenceLongOptionalExtended ::= SEQUENCE { + f1 OCTET STRING (SIZE (2)) OPTIONAL, + f2 [2] OCTET STRING (SIZE (2)), + f3 [3] OCTET STRING (SIZE (2)) OPTIONAL, + ..., + e1 [4] OCTET STRING (SIZE (2)) OPTIONAL, + e2 [5] OCTET STRING (SIZE (2)), + e3 [6] OCTET STRING (SIZE (2)) OPTIONAL, + e4 [7] OCTET STRING (SIZE (2)) OPTIONAL, + e5 [8] OCTET STRING (SIZE (2)), + e6 [9] OCTET STRING (SIZE (2)) OPTIONAL, + e7 [10] OCTET STRING (SIZE (2)) OPTIONAL, + e8 [11] OCTET STRING (SIZE (2)), + e9 [12] OCTET STRING (SIZE (2)) OPTIONAL + } + SequenceUnknownExtended ::= SEQUENCE { + f1 OCTET STRING (SIZE (2)) OPTIONAL, + f2 [2] OCTET STRING (SIZE (2)), + f3 [3] OCTET STRING (SIZE (2)) OPTIONAL, + ..., + e1 [4] OCTET STRING (SIZE (2)) OPTIONAL, + e2 [5] OCTET STRING (SIZE (2)), + e3 [6] OCTET STRING (SIZE (2)) OPTIONAL, + e4 [7] OCTET STRING (SIZE (2)) OPTIONAL + } + + SequenceOfOctetString ::= SEQUENCE OF OCTET STRING (SIZE (2)) + + Choice ::= CHOICE { + f [0] OCTET STRING (SIZE (2)), + s [1] NULL + } + ChoiceBis ::= CHOICE { + f [42] OCTET STRING (SIZE (2)), + s [99] NULL + } + ChoiceTer ::= CHOICE { + f [123456] OCTET STRING (SIZE (2)), + s [999999] NULL + } + ChoiceQuatro ::= CHOICE { + f [0] NULL, + ..., + s [42] OCTET STRING (SIZE (2)), + t [99] NULL + } + + Utf8 ::= UTF8String + +END + diff --git a/function_test/OER_EncDec/ITSPKI_Testcases.ttcn b/function_test/OER_EncDec/ITSPKI_Testcases.ttcn new file mode 100755 index 000000000..1411c5408 --- /dev/null +++ b/function_test/OER_EncDec/ITSPKI_Testcases.ttcn @@ -0,0 +1,578 @@ +/****************************************************************************** + * Copyright (c) 2000-2019 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 + * Beres, Szabolcs + * Delic, Adam + * Kovacs, Ferenc + * Szabados, Kristof + * Tarasov, Victor + * + ******************************************************************************/ +//This module contains unified test cases related to TTCN3 Executor's OER coder function. +// +//The target of these test cases are the basic data types from specification +//'ISO/IEC 8825-7:2015 -- Information technology – ASN.1 encoding rules: +//Specification of Octet Encoding Rules' +// +//The target data types are used in the following technical specification: +// 'ETSI TS 103 097 V1.3.1 (2017-10)' +//Intelligent Transport Systems (ITS); Security; +//Security header and certificate formats and certificate formats +// +// 'IEEE Std 1609.2-2016 IEEE Standard' +//Wireless Access in Vehicular Environments—Security Services for +//Applications and Management Messages +module ITSPKI_Testcases { + +import from ITSPKI all; +type component Test_CT {} + +external function enc_OER_Null(in Null pdu) return octetstring with { extension "prototype(convert) encode(OER)" } +external function dec_OER_Null(in octetstring stream) return Null with { extension "prototype(convert) decode(OER)" } + +external function enc_OER_Bool(in Bool pdu) return octetstring with { extension "prototype(convert) encode(OER)" } +external function dec_OER_Bool(in octetstring stream) return Bool with { extension "prototype(convert) decode(OER)" } + +external function enc_OER_Uint(in Uint pdu) return octetstring with { extension "prototype(convert) encode(OER)" } +external function dec_OER_Uint(in octetstring stream) return Uint with { extension "prototype(convert) decode(OER)" } +external function enc_OER_Uint8(in Uint8 pdu) return octetstring with { extension "prototype(convert) encode(OER)" } +external function dec_OER_Uint8(in octetstring stream) return Uint8 with { extension "prototype(convert) decode(OER)" } +external function enc_OER_Uint16(in Uint16 pdu) return octetstring with { extension "prototype(convert) encode(OER)" } +external function dec_OER_Uint16(in octetstring stream) return Uint16 with { extension "prototype(convert) decode(OER)" } +external function enc_OER_Uint32(in Uint32 pdu) return octetstring with { extension "prototype(convert) encode(OER)" } +external function dec_OER_Uint32(in octetstring stream) return Uint32 with { extension "prototype(convert) decode(OER)" } +external function enc_OER_Uint64(in Uint64 pdu) return octetstring with { extension "prototype(convert) encode(OER)" } +external function dec_OER_Uint64(in octetstring stream) return Uint64 with { extension "prototype(convert) decode(OER)" } + +external function enc_OER_Int(in Int pdu) return octetstring with { extension "prototype(convert) encode(OER)" } +external function dec_OER_Int(in octetstring stream) return Int with { extension "prototype(convert) decode(OER)" } +external function enc_OER_Sint8(in Sint8 pdu) return octetstring with { extension "prototype(convert) encode(OER)" } +external function dec_OER_Sint8(in octetstring stream) return Sint8 with { extension "prototype(convert) decode(OER)" } +external function enc_OER_Sint16(in Sint16 pdu) return octetstring with { extension "prototype(convert) encode(OER)" } +external function dec_OER_Sint16(in octetstring stream) return Sint16 with { extension "prototype(convert) decode(OER)" } +external function enc_OER_Sint32(in Sint32 pdu) return octetstring with { extension "prototype(convert) encode(OER)" } +external function dec_OER_Sint32(in octetstring stream) return Sint32 with { extension "prototype(convert) decode(OER)" } +external function enc_OER_Sint64(in Sint64 pdu) return octetstring with { extension "prototype(convert) encode(OER)" } +external function dec_OER_Sint64(in octetstring stream) return Sint64 with { extension "prototype(convert) decode(OER)" } + +external function enc_OER_Enum(in Enum pdu) return octetstring with { extension "prototype(convert) encode(OER)" } +external function dec_OER_Enum(in octetstring stream) return Enum with { extension "prototype(convert) decode(OER)" } +external function enc_OER_EnumM(in EnumM pdu) return octetstring with { extension "prototype(convert) encode(OER)" } +external function dec_OER_EnumM(in octetstring stream) return EnumM with { extension "prototype(convert) decode(OER)" } +external function enc_OER_EnumP(in EnumP pdu) return octetstring with { extension "prototype(convert) encode(OER)" } +external function dec_OER_EnumP(in octetstring stream) return EnumP with { extension "prototype(convert) decode(OER)" } +external function enc_OER_EnumB(in EnumB pdu) return octetstring with { extension "prototype(convert) encode(OER)" } +external function dec_OER_EnumB(in octetstring stream) return EnumB with { extension "prototype(convert) decode(OER)" } +external function enc_OER_EnumNM(in EnumNM pdu) return octetstring with { extension "prototype(convert) encode(OER)" } +external function dec_OER_EnumNM(in octetstring stream) return EnumNM with { extension "prototype(convert) decode(OER)" } +external function enc_OER_EnumNB(in EnumNB pdu) return octetstring with { extension "prototype(convert) encode(OER)" } +external function dec_OER_EnumNB(in octetstring stream) return EnumNB with { extension "prototype(convert) decode(OER)" } + +external function enc_OER_BitStr(in BitStr pdu) return octetstring with { extension "prototype(convert) encode(OER)" } +external function dec_OER_BitStr(in octetstring pdu) return BitStr with { extension "prototype(convert) decode(OER)" } +external function enc_OER_BitStrEmpty(in BitStrEmpty pdu) return octetstring with { extension "prototype(convert) encode(OER)" } +external function dec_OER_BitStrEmpty(in octetstring pdu) return BitStrEmpty with { extension "prototype(convert) decode(OER)" } +external function enc_OER_BitStrRandom(in BitStrRandom pdu) return octetstring with { extension "prototype(convert) encode(OER)" } +external function dec_OER_BitStrRandom(in octetstring pdu) return BitStrRandom with { extension "prototype(convert) decode(OER)" } +external function enc_OER_BitStrAligned(in BitStrAligned pdu) return octetstring with { extension "prototype(convert) encode(OER)" } +external function dec_OER_BitStrAligned(in octetstring pdu) return BitStrAligned with { extension "prototype(convert) decode(OER)" } + +external function enc_OER_OctetStr(in OctetStr pdu) return octetstring with { extension "prototype(convert) encode(OER)" } +external function dec_OER_OctetStr(in octetstring pdu) return OctetStr with { extension "prototype(convert) decode(OER)" } +external function enc_OER_OctetStrEmpty(in OctetStrEmpty pdu) return octetstring with { extension "prototype(convert) encode(OER)" } +external function dec_OER_OctetStrEmpty(in octetstring pdu) return OctetStrEmpty with { extension "prototype(convert) decode(OER)" } +external function enc_OER_OctetStrRandom(in OctetStrRandom pdu) return octetstring with { extension "prototype(convert) encode(OER)" } +external function dec_OER_OctetStrRandom(in octetstring pdu) return OctetStrRandom with { extension "prototype(convert) decode(OER)" } + +external function enc_OER_SequenceEmpty(in SequenceEmpty pdu) return octetstring with { extension "prototype(convert) encode(OER)" } +external function dec_OER_SequenceEmpty(in octetstring stream) return SequenceEmpty with { extension "prototype(convert) decode(OER)" } +external function enc_OER_SequenceEmptyExtendable(in SequenceEmptyExtendable pdu) return octetstring with { extension "prototype(convert) encode(OER)" } +external function dec_OER_SequenceEmptyExtendable(in octetstring stream) return SequenceEmptyExtendable with { extension "prototype(convert) decode(OER)" } +external function enc_OER_SequenceSimple(in SequenceSimple pdu) return octetstring with { extension "prototype(convert) encode(OER)" } +external function dec_OER_SequenceSimple(in octetstring stream) return SequenceSimple with { extension "prototype(convert) decode(OER)" } +external function enc_OER_SequenceSimpleExtendable(in SequenceSimpleExtendable pdu) return octetstring with { extension "prototype(convert) encode(OER)" } +external function dec_OER_SequenceSimpleExtendable(in octetstring stream) return SequenceSimpleExtendable with { extension "prototype(convert) decode(OER)" } +external function enc_OER_SequenceSimpleExtended(in SequenceSimpleExtended pdu) return octetstring with { extension "prototype(convert) encode(OER)" } +external function dec_OER_SequenceSimpleExtended(in octetstring stream) return SequenceSimpleExtended with { extension "prototype(convert) decode(OER)" } +external function enc_OER_SequenceSomeOptional(in SequenceSomeOptional pdu) return octetstring with { extension "prototype(convert) encode(OER)" } +external function dec_OER_SequenceSomeOptional(in octetstring stream) return SequenceSomeOptional with { extension "prototype(convert) decode(OER)" } +external function enc_OER_SequenceAllOptional(in SequenceAllOptional pdu) return octetstring with { extension "prototype(convert) encode(OER)" } +external function dec_OER_SequenceAllOptional(in octetstring stream) return SequenceAllOptional with { extension "prototype(convert) decode(OER)" } +external function enc_OER_SequenceOptionalExtendable(in SequenceOptionalExtendable pdu) return octetstring with { extension "prototype(convert) encode(OER)" } +external function dec_OER_SequenceOptionalExtendable(in octetstring stream) return SequenceOptionalExtendable with { extension "prototype(convert) decode(OER)" } +external function enc_OER_SequenceLongOptionalExtendable(in SequenceLongOptionalExtendable pdu) return octetstring with { extension "prototype(convert) encode(OER)" } +external function dec_OER_SequenceLongOptionalExtendable(in octetstring stream) return SequenceLongOptionalExtendable with { extension "prototype(convert) decode(OER)" } +external function enc_OER_SequenceOptionalExtended(in SequenceOptionalExtended pdu) return octetstring with { extension "prototype(convert) encode(OER)" } +external function dec_OER_SequenceOptionalExtended(in octetstring stream) return SequenceOptionalExtended with { extension "prototype(convert) decode(OER)" } +external function enc_OER_SequenceLongOptionalExtended(in SequenceLongOptionalExtended pdu) return octetstring with { extension "prototype(convert) encode(OER)" } +external function dec_OER_SequenceLongOptionalExtended(in octetstring stream) return SequenceLongOptionalExtended with { extension "prototype(convert) decode(OER)" } +external function enc_OER_SequenceOfOctetString(in SequenceOfOctetString pdu) return octetstring with { extension "prototype(convert) encode(OER)" } +external function dec_OER_SequenceOfOctetString(in octetstring stream) return SequenceOfOctetString with { extension "prototype(convert) decode(OER)" } + +external function enc_OER_Choice(in Choice pdu) return octetstring with { extension "prototype(convert) encode(OER)" } +external function dec_OER_Choice(in octetstring stream) return Choice with { extension "prototype(convert) decode(OER)" } +external function enc_OER_ChoiceBis(in ChoiceBis pdu) return octetstring with { extension "prototype(convert) encode(OER)" } +external function dec_OER_ChoiceBis(in octetstring stream) return ChoiceBis with { extension "prototype(convert) decode(OER)" } +external function enc_OER_ChoiceTer(in ChoiceTer pdu) return octetstring with { extension "prototype(convert) encode(OER)" } +external function dec_OER_ChoiceTer(in octetstring stream) return ChoiceTer with { extension "prototype(convert) decode(OER)" } +external function enc_OER_ChoiceQuatro(in ChoiceQuatro pdu) return octetstring with { extension "prototype(convert) encode(OER)" } +external function dec_OER_ChoiceQuatro(in octetstring stream) return ChoiceQuatro with { extension "prototype(convert) decode(OER)" } + +external function enc_OER_Utf8(in Utf8 pdu) return octetstring with { extension "prototype(convert) encode(OER)" } +external function dec_OER_Utf8(in octetstring stream) return Utf8 with { extension "prototype(convert) decode(OER)" } + +//********************************************* +// TESTCASES +//********************************************* + +testcase tc_OER_Null() runs on Test_CT { + const Null nn := NULL + + if (enc_OER_Null(nn) == ''O) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_Null(''O) == nn) {setverdict(pass);} else {setverdict(fail);} +} + +testcase tc_OER_Bool() runs on Test_CT { + const Bool b1 := true + const Bool b2 := false + + if (enc_OER_Bool(b1) == 'FF'O) {setverdict(pass);} else {setverdict(fail);} + if (enc_OER_Bool(b2) == '00'O) {setverdict(pass);} else {setverdict(fail);} + + if (dec_OER_Bool('FF'O) == b1){setverdict(pass);} else {setverdict(fail);} + if (dec_OER_Bool('42'O) == b1){setverdict(pass);} else {setverdict(fail);} + if (dec_OER_Bool('00'O) == b2){setverdict(pass);} else {setverdict(fail);} +} + +testcase tc_OER_Uint() runs on Test_CT { + const Uint u0 := 0 + const Uint u1 := 1 + const Uint u254 := 254 + const Uint uR := 8234104123542484900769178205574010627627573691361805720124810878238590820080 + const octetstring oR := '20123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0'O + const Uint uB := 115307965754428812535861235258289182183752994114051557942764040435498874699501 + const octetstring oB := '20FEEDFEEDFEEDFEEDFEEDFEEDFEEDFEEDFEEDFEEDFEEDFEEDFEEDFEEDFEEDFEED'O + const octetstring oBB := '280000000000000000FEEDFEEDFEEDFEEDFEEDFEEDFEEDFEEDFEEDFEEDFEEDFEEDFEEDFEEDFEEDFEED'O + + if (enc_OER_Uint(u0) == '0100'O) {setverdict(pass);} else {setverdict(fail);} + if (enc_OER_Uint(u1) == '0101'O) {setverdict(pass);} else {setverdict(fail);} + if (enc_OER_Uint(u254) == '01FE'O) {setverdict(pass);} else {setverdict(fail);} + if (enc_OER_Uint(uR) == oR) {setverdict(pass);} else {setverdict(fail);} + if (enc_OER_Uint(uB) == oB) {setverdict(pass);} else {setverdict(fail);} + + if (dec_OER_Uint('0100'O) == u0) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_Uint('0101'O) == u1) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_Uint('01FE'O) == u254) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_Uint(oR) == uR) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_Uint(oB) == uB) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_Uint(oBB) == uB) {setverdict(pass);} else {setverdict(fail);} +} + +testcase tc_OER_Uint8() runs on Test_CT { + const Uint8 u0 := 0 + const Uint8 u1 := 1 + const Uint8 u18 := 18 + const Uint8 u254 := 254 + + if (enc_OER_Uint8(u0) == '00'O) {setverdict(pass);} else {setverdict(fail);} + if (enc_OER_Uint8(u1) == '01'O) {setverdict(pass);} else {setverdict(fail);} + if (enc_OER_Uint8(u18) == '12'O) {setverdict(pass);} else {setverdict(fail);} + if (enc_OER_Uint8(u254) == 'FE'O) {setverdict(pass);} else {setverdict(fail);} + + if (dec_OER_Uint8('00'O) == u0) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_Uint8('01'O) == u1) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_Uint8('12'O) == u18) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_Uint8('FE'O) == u254) {setverdict(pass);} else {setverdict(fail);} +} + +testcase tc_OER_Uint16() runs on Test_CT { + const Uint16 u0 := 0 + const Uint16 u1 := 1 + const Uint16 u4660 := 4660 + const Uint16 u65261 := 65261 + + if (enc_OER_Uint16(u0) == '0000'O) {setverdict(pass);} else {setverdict(fail);} + if (enc_OER_Uint16(u1) == '0001'O) {setverdict(pass);} else {setverdict(fail);} + if (enc_OER_Uint16(u4660) == '1234'O) {setverdict(pass);} else {setverdict(fail);} + if (enc_OER_Uint16(u65261) == 'FEED'O) {setverdict(pass);} else {setverdict(fail);} + + if (dec_OER_Uint16('0000'O) == u0) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_Uint16('0001'O) == u1) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_Uint16('1234'O) == u4660) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_Uint16('FEED'O) == u65261) {setverdict(pass);} else {setverdict(fail);} +} + +testcase tc_OER_Uint32() runs on Test_CT { + const Uint32 u0 := 0 + const Uint32 u1 := 1 + const Uint32 uR := 305419896 + const Uint32 uB := 4277010157 + + if (enc_OER_Uint32(u0) == '00000000'O) {setverdict(pass);} else {setverdict(fail);} + if (enc_OER_Uint32(u1) == '00000001'O) {setverdict(pass);} else {setverdict(fail);} + if (enc_OER_Uint32(uR) == '12345678'O) {setverdict(pass);} else {setverdict(fail);} + if (enc_OER_Uint32(uB) == 'FEEDFEED'O) {setverdict(pass);} else {setverdict(fail);} + + if (dec_OER_Uint32('00000000'O) == u0) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_Uint32('00000001'O) == u1) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_Uint32('12345678'O) == uR) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_Uint32('FEEDFEED'O) == uB) {setverdict(pass);} else {setverdict(fail);} +} + +testcase tc_OER_Uint64() runs on Test_CT { + const Uint64 u0 := 0 + const Uint64 u1 := 1 + const Uint64 uR := 1311768467463790320 + const Uint64 uB := 18369618753251835629 + + if (enc_OER_Uint64(u0) == '0000000000000000'O) {setverdict(pass);} else {setverdict(fail);} + if (enc_OER_Uint64(u1) == '0000000000000001'O) {setverdict(pass);} else {setverdict(fail);} + if (enc_OER_Uint64(uR) == '123456789ABCDEF0'O) {setverdict(pass);} else {setverdict(fail);} + if (enc_OER_Uint64(uB) == 'FEEDFEEDFEEDFEED'O) {setverdict(pass);} else {setverdict(fail);} + + if (dec_OER_Uint64('0000000000000000'O) == u0) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_Uint64('0000000000000001'O) == u1) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_Uint64('123456789ABCDEF0'O) == uR) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_Uint64('FEEDFEEDFEEDFEED'O) == uB) {setverdict(pass);} else {setverdict(fail);} +} + +testcase tc_OER_Int() runs on Test_CT { + const Int i0 := 0 + const Int i1 := 1 + const Int i254 := 254 + const Int iR := 8234104123542484900769178205574010627627573691361805720124810878238590820080 + const octetstring oR := '20123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0'O + const Int iB := 115307965754428812535861235258289182183752994114051557942764040435498874699501 + const octetstring oB := '2100FEEDFEEDFEEDFEEDFEEDFEEDFEEDFEEDFEEDFEEDFEEDFEEDFEEDFEEDFEEDFEED'O + const octetstring oBB := '280000000000000000FEEDFEEDFEEDFEEDFEEDFEEDFEEDFEEDFEEDFEEDFEEDFEEDFEEDFEEDFEEDFEED'O + const Int iBn := -484123482887382887709749750398725669516990551589006096693543572414254940435 + const octetstring oBn := '20FEEDFEEDFEEDFEEDFEEDFEEDFEEDFEEDFEEDFEEDFEEDFEEDFEEDFEEDFEEDFEED'O + const Int iBBn := -107557985113773710522801806803113897225642410974278758319332773129674538819856 + const octetstring oBBn := '21FF123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0'O + const octetstring oBBnn := '28FFFFFFFFFFFFFFFF123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0'O + + if (enc_OER_Int(i0) == '0100'O) {setverdict(pass);} else {setverdict(fail);} + if (enc_OER_Int(i1) == '0101'O) {setverdict(pass);} else {setverdict(fail);} + if (enc_OER_Int(i254) == '0200FE'O) {setverdict(pass);} else {setverdict(fail);} + if (enc_OER_Int(iR) == oR) {setverdict(pass);} else {setverdict(fail);} + if (enc_OER_Int(iB) == oB) {setverdict(pass);} else {setverdict(fail);} + if (enc_OER_Int(iBn) == oBn) {setverdict(pass);} else {setverdict(fail);} + if (enc_OER_Int(iBBn) == oBBn) {setverdict(pass);} else {setverdict(fail);} + + if (dec_OER_Int('0100'O) == i0) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_Int('0101'O) == i1) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_Int('0200FE'O) == i254) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_Int(oR) == iR) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_Int(oB) == iB) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_Int(oBB) == iB) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_Int(oBBn) == iBBn) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_Int(oBBnn) == iBBn) {setverdict(pass);} else {setverdict(fail);} +} + +testcase tc_OER_Sint8() runs on Test_CT { + const Sint8 s0 := 0 + const Sint8 s18 := 18 + const Sint8 sn2 := -2 + + if (enc_OER_Sint8(s0) == '00'O) {setverdict(pass);} else {setverdict(fail);} + if (enc_OER_Sint8(s18) == '12'O) {setverdict(pass);} else {setverdict(fail);} + if (enc_OER_Sint8(sn2) == 'FE'O) {setverdict(pass);} else {setverdict(fail);} + + if (dec_OER_Sint8('00'O) == s0) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_Sint8('12'O) == s18) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_Sint8('FE'O) == sn2) {setverdict(pass);} else {setverdict(fail);} +} + +testcase tc_OER_Sint16() runs on Test_CT { + const Sint16 s0 := 0 + const Sint16 s4660 := 4660 + const Sint16 sn275 := -275 + + if (enc_OER_Sint16(s0) == '0000'O) {setverdict(pass);} else {setverdict(fail);} + if (enc_OER_Sint16(s4660) == '1234'O) {setverdict(pass);} else {setverdict(fail);} + if (enc_OER_Sint16(sn275) == 'FEED'O) {setverdict(pass);} else {setverdict(fail);} + + if (dec_OER_Sint16('0000'O) == s0) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_Sint16('1234'O) == s4660) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_Sint16('FEED'O) == sn275) {setverdict(pass);} else {setverdict(fail);} +} + +testcase tc_OER_Sint32() runs on Test_CT { + const Sint32 s0 := 0 + const Sint32 sB := 305419896 + const Sint32 sN := -17957139 + + if (enc_OER_Sint32(s0) == '00000000'O) {setverdict(pass);} else {setverdict(fail);} + if (enc_OER_Sint32(sB) == '12345678'O) {setverdict(pass);} else {setverdict(fail);} + if (enc_OER_Sint32(sN) == 'FEEDFEED'O) {setverdict(pass);} else {setverdict(fail);} + + if (dec_OER_Sint32('00000000'O) == s0) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_Sint32('12345678'O) == sB) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_Sint32('FEEDFEED'O) == sN) {setverdict(pass);} else {setverdict(fail);} +} + +testcase tc_OER_Sint64() runs on Test_CT { + const Sint64 s0 := 0 + const Sint64 sB := 1311768467463790320 + const Sint64 sN := -77125320457715987 + + if (enc_OER_Sint64(s0) == '0000000000000000'O) {setverdict(pass);} else {setverdict(fail);} + if (enc_OER_Sint64(sB) == '123456789ABCDEF0'O) {setverdict(pass);} else {setverdict(fail);} + if (enc_OER_Sint64(sN) == 'FEEDFEEDFEEDFEED'O) {setverdict(pass);} else {setverdict(fail);} + + if (dec_OER_Sint64('0000000000000000'O) == s0) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_Sint64('123456789ABCDEF0'O) == sB) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_Sint64('FEEDFEEDFEEDFEED'O) == sN) {setverdict(pass);} else {setverdict(fail);} +} + +testcase tc_OER_Enum() runs on Test_CT { + const Enum enum_zero := zero + const EnumM enumm_numM := numM + const EnumP enumm_numP := numP + const EnumB enumm_numB := numB + const EnumNM enumm_numNM := numNM + const EnumNB enumm_numNB := numNB + + if (enc_OER_Enum(enum_zero) == '00'O) {setverdict(pass);} else {setverdict(fail);} + if (enc_OER_EnumM(enumm_numM) == '12'O) {setverdict(pass);} else {setverdict(fail);} + if (enc_OER_EnumP(enumm_numP) == '8204D2'O) {setverdict(pass);} else {setverdict(fail);} + if (enc_OER_EnumB(enumm_numB) == '8300FEED'O) {setverdict(pass);} else {setverdict(fail);} + if (enc_OER_EnumNM(enumm_numNM) == '82FEED'O) {setverdict(pass);} else {setverdict(fail);} + if (enc_OER_EnumNB(enumm_numNB) == '83FF04D2'O) {setverdict(pass);} else {setverdict(fail);} + + if (dec_OER_Enum('00'O) == enum_zero) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_EnumM('12'O) == enumm_numM) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_EnumP('8204D2'O) == enumm_numP) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_EnumB('8300FEED'O) == enumm_numB) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_EnumB('840000FEED'O) == enumm_numB) {setverdict(pass);} else {setverdict(fail);} + // if (dec_OER_EnumB('85000000FEED'O) == enumm_numB) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_EnumNM('82FEED'O) == enumm_numNM) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_EnumNB('83FF04D2'O) == enumm_numNB) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_EnumNB('84FFFF04D2'O) == enumm_numNB) {setverdict(pass);} else {setverdict(fail);} + // if (dec_OER_EnumNB('85FFFFFF04D2'O) == enumm_numNB) {setverdict(pass);} else {setverdict(fail);} +} + +testcase tc_OER_BitStr() runs on Test_CT { + const BitStrEmpty empty := ''B + const BitStrRandom random := '111111101110110111111110111011011111111011101101111110'B + const BitStrAligned aligned := '111111101110110111111110111011011111111011101101'B + + if (enc_OER_BitStrEmpty(empty) == ''O) {setverdict(pass);} else {setverdict(fail);} + if (enc_OER_BitStrRandom(random) == 'FEEDFEEDFEEDF8'O) {setverdict(pass);} else {setverdict(fail);} + if (enc_OER_BitStrAligned(aligned) == 'FEEDFEEDFEED'O) {setverdict(pass);} else {setverdict(fail);} + + if (enc_OER_BitStr(empty) == '0100'O) {setverdict(pass);} else {setverdict(fail);} + if (enc_OER_BitStr(random) == '0802FEEDFEEDFEEDF8'O) {setverdict(pass);} else {setverdict(fail);} + if (enc_OER_BitStr(aligned) == '0700FEEDFEEDFEED'O) {setverdict(pass);} else {setverdict(fail);} + + if (dec_OER_BitStrEmpty(''O) == empty) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_BitStrRandom('FEEDFEEDFEEDF8'O) == random) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_BitStrAligned('FEEDFEEDFEED'O) == aligned) {setverdict(pass);} else {setverdict(fail);} + + if (dec_OER_BitStr('0100'O) == empty) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_BitStr('0802FEEDFEEDFEEDF8'O) == random) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_BitStr('0700FEEDFEEDFEED'O) == aligned) {setverdict(pass);} else {setverdict(fail);} +} + +testcase tc_OER_OctetStr() runs on Test_CT { + const OctetStrEmpty empty := ''O + const OctetStrRandom random := 'FEEDFEEDFEED'O + + if (enc_OER_OctetStrEmpty(empty) == ''O) {setverdict(pass);} else {setverdict(fail);} + if (enc_OER_OctetStrRandom(random) == 'FEEDFEEDFEED'O) {setverdict(pass);} else {setverdict(fail);} + + if (enc_OER_OctetStr(empty) == '00'O) {setverdict(pass);} else {setverdict(fail);} + if (enc_OER_OctetStr(random) == '06FEEDFEEDFEED'O) {setverdict(pass);} else {setverdict(fail);} + + if (dec_OER_OctetStrEmpty(''O) == empty) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_OctetStrRandom('FEEDFEEDFEED'O) == random) {setverdict(pass);} else {setverdict(fail);} + + if (dec_OER_OctetStr('00'O) == empty) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_OctetStr('06FEEDFEEDFEED'O) == random) {setverdict(pass);} else {setverdict(fail);} +} + +testcase tc_OER_SequenceEmpty() runs on Test_CT { + const SequenceEmpty empty := {} + const SequenceEmptyExtendable empty_extendable := {} + + if (enc_OER_SequenceEmpty(empty) == ''O) {setverdict(pass);} else {setverdict(fail);} + if (enc_OER_SequenceEmptyExtendable(empty_extendable) == '00'O) {setverdict(pass);} else {setverdict(fail);} + + if (dec_OER_SequenceEmpty(''O) == empty) {setverdict(pass);} else {setverdict(fail);} +} + +testcase tc_OER_SequenceSimple() runs on Test_CT { + const SequenceSimple s := {f1 := 'AAAA'O,f2 := 'BBBB'O,f3 := 'CCCC'O} + const SequenceSimpleExtendable s_ee := {f1:='AAAA'O,f2:='BBBB'O,f3:='CCCC'O} + const SequenceSimpleExtended s_ed := {f1:='AAAA'O,f2:='BBBB'O,f3:='CCCC'O,e1:='9999'O,e2:='8888'O,e3:='7777'O} + const SequenceSimpleExtended s_ed100 := {f1:='AAAA'O,f2:='BBBB'O,f3:='CCCC'O,e1:='9999'O} + const SequenceSimpleExtended s_ed010 := {f1:='AAAA'O,f2:='BBBB'O,f3:='CCCC'O,e2:='8888'O} + + if (enc_OER_SequenceSimple(s) == 'AAAABBBBCCCC'O) {setverdict(pass);} else {setverdict(fail);} + if (enc_OER_SequenceSimpleExtendable(s_ee) == '00AAAABBBBCCCC'O) {setverdict(pass);} else {setverdict(fail);} + if (enc_OER_SequenceSimpleExtended(s_ed) == '80AAAABBBBCCCC0205E0029999028888027777'O) {setverdict(pass);} else {setverdict(fail);} + if (enc_OER_SequenceSimpleExtended(s_ed100) == '80AAAABBBBCCCC020580029999'O) {setverdict(pass);} else {setverdict(fail);} + if (enc_OER_SequenceSimpleExtended(s_ed010) == '80AAAABBBBCCCC020540028888'O) {setverdict(pass);} else {setverdict(fail);} + + if (dec_OER_SequenceSimple('AAAABBBBCCCC'O) == s) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_SequenceSimpleExtendable('00AAAABBBBCCCC'O) == s_ee) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_SequenceSimpleExtended('80AAAABBBBCCCC0205E0029999028888027777'O) == s_ed) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_SequenceSimpleExtended('80AAAABBBBCCCC020540028888'O).e2 == '8888'O) {setverdict(pass);} else {setverdict(fail);} +} + +testcase tc_OER_SequenceSomeOptional() runs on Test_CT { + const SequenceSomeOptional seqSO111 := {f1 := 'AAAA'O,f2 := 'BBBB'O,f3 := 'CCCC'O} + const SequenceSomeOptional seqSO110 := {f1 := 'AAAA'O,f2 := 'BBBB'O,f3 := omit} + const SequenceSomeOptional seqSO101 := {f1 := 'AAAA'O,f2 := omit, f3 := 'CCCC'O} + const SequenceSomeOptional seqSO100 := {f1 := 'AAAA'O,f2 := omit, f3 := omit} + + if (enc_OER_SequenceSomeOptional(seqSO111) == 'C0AAAABBBBCCCC'O) {setverdict(pass);} else {setverdict(fail);} + if (enc_OER_SequenceSomeOptional(seqSO110) == '80AAAABBBB'O) {setverdict(pass);} else {setverdict(fail);} + if (enc_OER_SequenceSomeOptional(seqSO101) == '40AAAACCCC'O) {setverdict(pass);} else {setverdict(fail);} + if (enc_OER_SequenceSomeOptional(seqSO100) == '00AAAA'O) {setverdict(pass);} else {setverdict(fail);} + + if (dec_OER_SequenceSomeOptional('C0AAAABBBBCCCC'O) == seqSO111) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_SequenceSomeOptional('80AAAABBBB'O) == seqSO110) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_SequenceSomeOptional('00AAAA'O) == seqSO100) {setverdict(pass);} else {setverdict(fail);} +} + +testcase tc_OER_SequenceAllOptional() runs on Test_CT { + const SequenceAllOptional seqSAO000 := {f1:=omit,f2:=omit,f3:=omit} + + if (enc_OER_SequenceAllOptional(seqSAO000) == '00'O) {setverdict(pass);} else {setverdict(fail);} + + if (dec_OER_SequenceAllOptional('00'O) == seqSAO000) {setverdict(pass);} else {setverdict(fail);} +} + +testcase tc_OER_SequenceOptionalExtendable() runs on Test_CT { + const SequenceOptionalExtendable seqSOE110 := {f1:='FEED'O,f2:='FEED'O,f3:=omit} + const SequenceOptionalExtendable seqSOE011 := {f1:=omit,f2:='FEED'O,f3:='FEED'O} + + if (enc_OER_SequenceOptionalExtendable(seqSOE110) == '40FEEDFEED'O) {setverdict(pass);} else {setverdict(fail);} + if (enc_OER_SequenceOptionalExtendable(seqSOE011) == '20FEEDFEED'O) {setverdict(pass);} else {setverdict(fail);} + + if (dec_OER_SequenceOptionalExtendable('40FEEDFEED'O) == seqSOE110) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_SequenceOptionalExtendable('20FEEDFEED'O) == seqSOE011) {setverdict(pass);} else {setverdict(fail);} +} + +testcase tc_OER_SequenceLongOptionalExtendable() runs on Test_CT { + const SequenceLongOptionalExtendable seq01 := { + f1:='FEED'O,f2:='FEED'O,f3:='FEED'O,f4:='FEED'O,f5:='FEED'O,f6:='FEED'O,f7:='FEED'O,f8:='FEED'O,f9:='FEED'O,f10:='FEED'O + } + const SequenceLongOptionalExtendable seq02 := { + f1:='FEED'O,f2:=omit,f3:='FEED'O,f4:=omit,f5:='FEED'O,f6:=omit,f7:='FEED'O,f8:=omit,f9:='FEED'O,f10:=omit + } + + if (enc_OER_SequenceLongOptionalExtendable(seq01) == '7FE0FEEDFEEDFEEDFEEDFEEDFEEDFEEDFEEDFEEDFEED'O) {setverdict(pass);} else {setverdict(fail);} + if (enc_OER_SequenceLongOptionalExtendable(seq02) == '5540FEEDFEEDFEEDFEEDFEED'O) {setverdict(pass);} else {setverdict(fail);} + + if (dec_OER_SequenceLongOptionalExtendable('7FE0FEEDFEEDFEEDFEEDFEEDFEEDFEEDFEEDFEEDFEED'O) == seq01) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_SequenceLongOptionalExtendable('5540FEEDFEEDFEEDFEEDFEED'O) == seq02) {setverdict(pass);} else {setverdict(fail);} +} + +testcase tc_OER_SequenceOptionalExtended() runs on Test_CT { + const SequenceOptionalExtended seq01_enc := {f1:='FEED'O,f2:='FEED'O,e1:='FEED'O,e2:='FEED'O} + const SequenceOptionalExtended seq01_dec := {f1:='FEED'O,f2:='FEED'O,f3:=omit,e1:='FEED'O,e2:='FEED'O,e3:=omit} + const SequenceOptionalExtended seq02_enc := {f2:='FEED'O,f3:='FEED'O,e2:='FEED'O,e3:='FEED'O} + const SequenceOptionalExtended seq02_dec := {f1:=omit,f2:='FEED'O,f3:='FEED'O,e1:=omit,e2:='FEED'O,e3:='FEED'O} + + if (enc_OER_SequenceOptionalExtended(seq01_enc) == 'C0FEEDFEED0205C002FEED02FEED'O) {setverdict(pass);} else {setverdict(fail);} + if (enc_OER_SequenceOptionalExtended(seq02_enc) == 'A0FEEDFEED02056002FEED02FEED'O) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_SequenceOptionalExtended('C0FEEDFEED0205C002FEED02FEED'O) == seq01_dec) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_SequenceOptionalExtended('A0FEEDFEED02056002FEED02FEED'O) == seq02_dec) {setverdict(pass);} else {setverdict(fail);} +} + +testcase tc_OER_SequenceLongOptionalExtended() runs on Test_CT { + const SequenceLongOptionalExtended seq01_enc := { + f1:='FEED'O,f2:='FEED'O,e1:='FEED'O,e2:='FEED'O,e4:='FEED'O,e5:='FEED'O,e7:='FEED'O,e8:='FEED'O + } + const SequenceLongOptionalExtended seq01_dec := { + f1:='FEED'O,f2:='FEED'O,f3:=omit,e1:='FEED'O,e2:='FEED'O,e3:=omit,e4:='FEED'O,e5:='FEED'O,e6:=omit,e7:='FEED'O,e8:='FEED'O,e9:=omit + } + + if (enc_OER_SequenceLongOptionalExtended(seq01_enc) == 'C0FEEDFEED0307DB0002FEED02FEED02FEED02FEED02FEED02FEED'O) {setverdict(pass);} else {setverdict(fail);} + + if (dec_OER_SequenceLongOptionalExtended('C0FEEDFEED0307DB0002FEED02FEED02FEED02FEED02FEED02FEED'O) == seq01_dec) {setverdict(pass);} else {setverdict(fail);} +} + +testcase tc_OER_SequenceOfOctetString() runs on Test_CT { + const SequenceOfOctetString seqOfEmpty := {} + const SequenceOfOctetString seqOf := {'FEED'O,'FEED'O,'FEED'O,'FEED'O,'FEED'O,'FEED'O} + + if (enc_OER_SequenceOfOctetString(seqOfEmpty) == '0100'O) {setverdict(pass);} else {setverdict(fail);} + if (enc_OER_SequenceOfOctetString(seqOf) == '0106FEEDFEEDFEEDFEEDFEEDFEED'O) {setverdict(pass);} else {setverdict(fail);} + + if (dec_OER_SequenceOfOctetString('0100'O) == seqOfEmpty) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_SequenceOfOctetString('0106FEEDFEEDFEEDFEEDFEEDFEED'O) == seqOf) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_SequenceOfOctetString('03000006FEEDFEEDFEEDFEEDFEEDFEED'O) == seqOf) {setverdict(pass);} else {setverdict(fail);} +} + +testcase tc_OER_Choice() runs on Test_CT { + const Choice choice := {f:='FEED'O} + const ChoiceBis choice_bis := {f:='FEED'O} + const ChoiceTer choice_ter := {f:='FEED'O} + const ChoiceQuatro choice_quatro := {s:='FEED'O} + + if (enc_OER_Choice(choice) == '80FEED'O) {setverdict(pass);} else {setverdict(fail);} + if (enc_OER_ChoiceBis(choice_bis) == 'AAFEED'O) {setverdict(pass);} else {setverdict(fail);} + if (enc_OER_ChoiceTer(choice_ter) == 'BF87C440FEED'O) {setverdict(pass);} else {setverdict(fail);} + if (enc_OER_ChoiceQuatro(choice_quatro) == 'AA02FEED'O) {setverdict(pass);} else {setverdict(fail);} + + if (dec_OER_Choice('80FEED'O) == choice) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_ChoiceBis('AAFEED'O) == choice_bis) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_ChoiceTer('BF87C440FEED'O) == choice_ter) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_ChoiceQuatro('AA02FEED'O) == choice_quatro) {setverdict(pass);} else {setverdict(fail);} + +} + +testcase tc_OER_Utf8() runs on Test_CT { + const Utf8 str_empty := "" + const Utf8 str := "May the force be with you." + + if (enc_OER_Utf8(str_empty) == '00'O) {setverdict(pass);} else {setverdict(fail);} + if (enc_OER_Utf8(str) == '1A4D61792074686520666F726365206265207769746820796F752E'O) {setverdict(pass);} else {setverdict(fail);} + + if (dec_OER_Utf8('00'O) == str_empty) {setverdict(pass);} else {setverdict(fail);} + if (dec_OER_Utf8('1A4D61792074686520666F726365206265207769746820796F752E'O) == str) {setverdict(pass);} else {setverdict(fail);} +} + +//********************************************* +// CONTROL PART +//********************************************* + +control { + execute(tc_OER_Null()); + execute(tc_OER_Bool()); + execute(tc_OER_Uint()); + execute(tc_OER_Uint8()); + execute(tc_OER_Uint16()); + execute(tc_OER_Uint32()); + execute(tc_OER_Uint64()); + execute(tc_OER_Int()); + execute(tc_OER_Sint8()); + execute(tc_OER_Sint16()); + execute(tc_OER_Sint32()); + execute(tc_OER_Sint64()); + execute(tc_OER_Enum()); + execute(tc_OER_BitStr()); + execute(tc_OER_OctetStr()); + execute(tc_OER_SequenceEmpty()); + execute(tc_OER_SequenceSimple()); + execute(tc_OER_SequenceSomeOptional()); + execute(tc_OER_SequenceAllOptional()); + execute(tc_OER_SequenceOptionalExtendable()); + execute(tc_OER_SequenceLongOptionalExtendable()); + execute(tc_OER_SequenceOptionalExtended()); + execute(tc_OER_SequenceLongOptionalExtended()); + execute(tc_OER_SequenceOfOctetString()); + execute(tc_OER_Choice()); + execute(tc_OER_Utf8()); +} + +} diff --git a/function_test/OER_EncDec/Makefile b/function_test/OER_EncDec/Makefile index d83f6bee6..feadfe0af 100644 --- a/function_test/OER_EncDec/Makefile +++ b/function_test/OER_EncDec/Makefile @@ -95,25 +95,24 @@ ARCHIVE_DIR = ./backup # # The TTCN-3 modules needed for this project: -TTCN3_MODULES = Temp.ttcn +TTCN3_MODULES = ISOIEC8825_Testcases.ttcn ETSI_TS_103_097_v131_Testcases.ttcn ITSPKI_Testcases.ttcn # The ASN.1 modules needed for this project: -ASN1_MODULES = TempA.asn IEEE1609dot2BaseTypes.asn IEEE1609dot2.asn EtsiTs103097Module.asn +ASN1_MODULES = ISOIEC8825.asn ETSITS103097v131.asn ITSPKI.asn IEEE1609dot2BaseTypes.asn IEEE1609dot2.asn EtsiTs103097Module.asn # C++ source & header files generated by TTCN-3 & ASN.1 compilers: -GENERATED_SOURCES = Temp.cc $(ASN1_MODULES:.asn=.cc) -GENERATED_HEADERS = Temp.hh $(ASN1_MODULES:.asn=.hh) +GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) $(ASN1_MODULES:.asn=.cc) +GENERATED_HEADERS = $(TTCN3_MODULES:.ttcn=.hh) $(ASN1_MODULES:.asn=.hh) # Source & header files of Test Ports and your other modules: USER_SOURCES = USER_HEADERS = # All object files needed for the executable test suite: -# OBJECTS = Temp.o TempA.o IEEE1609dot2BaseTypes.o IEEE1609dot2.o OBJECTS = $(GENERATED_SOURCES:.cc=.o) # The name of the executable test suite: -TARGET = Temp +TARGET = OER_EncDec.exe ifeq ($(COVERAGE), yes) CPPFLAGS += -fprofile-arcs -ftest-coverage -g @@ -150,6 +149,11 @@ compile: $(TTCN3_MODULES) $(ASN1_MODULES) $(ASN1_MODULES) $(ASN1_STATIC_MODULES) - $? touch $@ +run: $(TARGET) OER_EncDec.cfg + ./$^ 2> result.txt + cat result.txt + grep "Overall verdict: pass" result.txt + clean: -$(RM) $(TARGET) $(OBJECTS) $(GENERATED_HEADERS) \ $(GENERATED_SOURCES) compile *.log *.gcda *.gcno diff --git a/function_test/OER_EncDec/OER_EncDec.cfg b/function_test/OER_EncDec/OER_EncDec.cfg new file mode 100755 index 000000000..c19cc0cfc --- /dev/null +++ b/function_test/OER_EncDec/OER_EncDec.cfg @@ -0,0 +1,22 @@ +############################################################################### +# Copyright (c) 2000-2019 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 +# Hanko, Matyas +# +############################################################################### +[MODULE_PARAMETERS] +[LOGGING] +LogSourceInfo := Yes +Logfile := "OER_EncDec.log" +FileMask := LOG_ALL +ConsoleMask := WARNING | ERROR | TESTCASE | STATISTICS | DEBUG_ENCDEC +[EXECUTE] +ISOIEC8825_Testcases.control +ETSI_TS_103_097_v131_Testcases.control +ITSPKI_Testcases.control \ No newline at end of file diff --git a/function_test/README.txt b/function_test/README.txt index 1a14130a5..a65716815 100644 --- a/function_test/README.txt +++ b/function_test/README.txt @@ -35,10 +35,12 @@ make clean 4. Which scripts will be executed in the function test? -function_test/Tools/SAtester for: +Obsolete: function_test/Tools/SAtester for: BER_EncDec RAW_EncDec Text_EncDec +OER_EncDec +(These tests do not use any script anymore.) function_test/Tools/SAtester.pl for: Config_Parser -- GitLab