diff --git a/part1-examples/Example-1-3GPP-7.1.3.tdlan2 b/part1-examples/Example-1-3GPP-7.1.3.tdlan2 new file mode 100644 index 0000000000000000000000000000000000000000..f10efd5d5c50e5921d8b0b44b5d7b8bd1d5edbd5 --- /dev/null +++ b/part1-examples/Example-1-3GPP-7.1.3.tdlan2 @@ -0,0 +1,148 @@ +Package Layer_2_DL_SCH_Data_Transfer { + //Procedures carried out by a component of a test configuration + //or an actor during test execution + Action preCondition : "Pre-test Conditions: + RRC Connection Reconfiguration" ; + Action preamble : "Preamble: + The generic procedure to get UE in test state Loopback + Activated (State 4) according to TS 36.508 clause 4.5 + is executed, with all the parameters as specified in the + procedure except that the RLC SDU size is set to return no + data in uplink. + (reference corresponding behavior once implemented" ; + + //User-defined verdicts + //Alternatively the predefined verdicts may be used as well + Type Verdict ; + Verdict PASS; + Verdict FAIL; + + //User-defined annotation types + Annotation TITLE ; //Test description title + Annotation STEP ; //Step identifiers in source documents + Annotation PROCEDURE ; //Informal textual description of a test step + Annotation PRECONDITION ; //Identify pre-condition behaviour + Annotation PREAMBLE ; //Identify preamble behaviour. + + //Test objectives (copied verbatim from source document) + Test Objective TP1 { + from : "36523-1-a20_s07_01.doc::7.1.3.1.1 (1)" ; + description : "with { UE in E-UTRA RRC_CONNECTED state } + ensure that { + when { UE receives downlink assignment on the PDCCH + for the UE's C-RNTI and receives data in the + associated subframe and UE performs HARQ + operation } + then { UE sends a HARQ feedback on the HARQ + process } + }" ; + } + Test Objective TP2 { + from : "36523-1-a20_s07_01.doc::7.1.3.1.1 (2)" ; + description : "with { UE in E-UTRA RRC_CONNECTED state } + ensure that { + when { UE receives downlink assignment on the PDCCH + with a C-RNTI unknown by the UE and data is + available in the associated subframe } + then { UE does not send any HARQ feedback on the + HARQ process } + }" ; + } + + //Relevant data definitions + Type PDU; + PDU mac_pdu ; + + Type ACK ; + ACK harq_ack ; + + Type C_RNTI; + C_RNTI ue; + C_RNTI unknown; + + Type PDCCH (optional c_rnti of type C_RNTI); + PDCCH pdcch(); + + Type CONFIGURATION; + CONFIGURATION RRCConnectionReconfiguration ; + + //User-defined time units + Time Second; + Second five; + + //Gate type definitions + Gate Type defaultGT accepts ACK, PDU, PDCCH, C_RNTI, CONFIGURATION ; + + //Component type definitions + Component Type defaultCT having { + gate g of type defaultGT; + } + + //Test configuration definition + Test Configuration defaultTC { + create Tester SS of type defaultCT; + create SUT UE of type defaultCT ; + connect UE.g to SS.g ; + } + + //Test description definition + Test Description TD_7_1_3_1 uses configuration defaultTC { + //Pre-conditions and preamble from the source document + perform action preCondition with { PRECONDITION ; } ; + perform action preamble with { PREAMBLE ; } ; + + //Test sequence + SS.g sends pdcch (c_rnti=ue) to UE.g with { + STEP : "1" ; + PROCEDURE : "SS transmits a downlink assignment + including the C-RNTI assigned to + the UE" ; + } ; + SS.g sends mac_pdu to UE.g with { + STEP : "2" ; + PROCEDURE : "SS transmits in the indicated + downlink assignment a RLC PDU in + a MAC PDU" ; + } ; + UE.g sends harq_ack to SS.g with { + STEP : "3" ; + PROCEDURE : "Check: Does the UE transmit an + HARQ ACK on PUCCH?" ; + test objectives : TP1 ; + } ; + set verdict to PASS ; + SS.g sends pdcch (c_rnti=unknown) to UE.g with { + STEP : "4" ; + PROCEDURE : "SS transmits a downlink assignment + to including a C-RNTI different from + the assigned to the UE" ; + } ; + SS.g sends mac_pdu to UE.g with { + STEP : "5" ; + PROCEDURE : "SS transmits in the indicated + downlink assignment a RLC PDU in + a MAC PDU" ; + } ; + + //Interpolated original step 6 into an alternative behaviour, + //covering both the incorrect and the correct behaviours of the UE + alternatively { + UE.g sends harq_ack to SS.g ; + set verdict to FAIL ; + } or { + gate SS.g is quiet for five ; + set verdict to PASS ; + } with { + STEP : "6" ; + PROCEDURE : "Check: Does the UE send any HARQ ACK + on PUCCH?" ; + test objectives : TP2 ; + } + } with { + Note : "Note 1: For TDD, the timing of ACK/NACK is not + constant as FDD, see Table 10.1-1 of TS 36.213." ; + } +} with { + Note : "Taken from 3GPP TS 36.523-1 V10.2.0 (2012-09)" ; + TITLE : "Correct handling of DL assignment / Dynamic case" ; +} diff --git a/part1-examples/Example-1-3GPP-7.1.3.tdlan2.tdl b/part1-examples/Example-1-3GPP-7.1.3.tdlan2.tdl new file mode 100644 index 0000000000000000000000000000000000000000..bad18c36bdeedf2013d9bc73f1f1334ba47bb1d8 --- /dev/null +++ b/part1-examples/Example-1-3GPP-7.1.3.tdlan2.tdl @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + "36523-1-a20_s07_01.doc::7.1.3.1.1 (1)" + + + "36523-1-a20_s07_01.doc::7.1.3.1.1 (2)" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/part1-examples/Example-2-IMS-4.5.1.tdlan2 b/part1-examples/Example-2-IMS-4.5.1.tdlan2 new file mode 100644 index 0000000000000000000000000000000000000000..a79317921f0a983ff3b7fef79562675a0e6476ee --- /dev/null +++ b/part1-examples/Example-2-IMS-4.5.1.tdlan2 @@ -0,0 +1,129 @@ +//Translated from [i.6], Section 4.5.1. +Package IMS_NNI_General_Capabilities { + //Procedures carried out by a component of a test configuration + //or an actor during test execution + Action preConditions : "Pre-test conditions: + - HSS of IMS_A and of IMS B is configured according to table 1 + - UE_A and UE_B have IP bearers established to their respective + IMS networks as per clause 4.2.1 + - UE_A and IMS_A configured to use TCP for transport + - UE_A is registered in IMS_A using any user identity + - UE_B is registered user of IMS_B using any user identity + - MESSAGE request and response has to be supported at II-NNI + (ETSI TS 129 165 [16] + see tables 6.1 and 6.3)" ; + + //User-defined verdicts + //Alternatively the predefined verdicts may be used as well + Type Verdict ; + Verdict PASS ; + Verdict FAIL ; + + //User-defined annotation types + Annotation TITLE ; //Test description title + Annotation STEP ; //Step identifiers in source documents + Annotation PROCEDURE ; //Informal textual description of a test step + Annotation PRECONDITION ; //Identify pre-condition behaviour + Annotation PREAMBLE ; //Identify preamble behaviour. + Annotation SUMMARY ; //Informal textual description of test sequence + + //Test objectives (copied verbatim from source document) + Test Objective TP_IMS_4002_1 { + //Location in source document + from : "ts_18601102v030101p.pdf::4.5.1.1 (CC 1)" ; + //Further reference to another document + from : "ETSI TS 124 229 [1], clause 4.2A, paragraph 1" ; + description : "ensure that { + when { UE_A sends a MESSAGE to UE_B + containing a Message_Body greater than 1 300 + bytes } + then { IMS_B receives the MESSAGE containing the + Message_Body greater than 1 300 bytes } + }" ; + } + Test Objective UC_05_I { + //Only a reference to corresponding section in the source document + from : "ts_18601102v030101p.pdf::4.4.4.2" ; + } + + //Relevant data definitions + Type MSG (optional TCP of type CONTENT); + MSG MESSAGE() ; + MSG DING() ; + MSG DELIVERY_REPORT() ; + MSG M_200_OK() ; + + Type CONTENT ; + CONTENT tcp; + + Time SECONDS; + SECONDS default_timeout; + + //Gate type definitions. + Gate Type defaultGT accepts MSG, CONTENT ; + + //Component type definitions + //In this case they may also be reduced to a single component type + Component Type USER having { + gate g of type defaultGT ; + } + Component Type UE having { + gate g of type defaultGT ; + } + Component Type IMS having { + gate g of type defaultGT ; + } + Component Type IBCF having { + gate g of type defaultGT ; + } + + //Test configuration definition + Test Configuration CF_INT_CALL { + create Tester USER_A of type USER; + create Tester UE_A of type UE; + create Tester IMS_A of type IMS; + create Tester IBCF_A of type IBCF; + create Tester IBCF_B of type IBCF; + create SUT IMS_B of type IMS; + create Tester UE_B of type UE; + create Tester USER_B of type USER; + connect USER_A.g to UE_A.g ; + connect UE_A.g to IMS_A.g ; + connect IMS_A.g to IBCF_A.g ; + connect IBCF_A.g to IBCF_B.g ; + connect IBCF_B.g to IMS_B.g ; + connect IMS_B.g to UE_B.g ; + connect UE_B.g to USER_B.g ; + } + + //Test description definition + Test Description TD_IMS_MESS_0001 uses configuration CF_INT_CALL { + //Pre-conditions from the source document + perform action preConditions with { PRECONDITION ; }; + + //Test sequence + USER_A.g sends MESSAGE to UE_A.g with { STEP : "1" ; } ; + UE_A.g sends MESSAGE to IMS_A.g with { STEP : "2" ; } ; + IMS_A.g sends MESSAGE to IBCF_A.g with { STEP : "3" ; } ; + IBCF_A.g sends MESSAGE to IBCF_B.g with { STEP : "4" ; } ; + IBCF_B.g sends MESSAGE (TCP = tcp) to IMS_B.g with { STEP : "5" ; } ; + IMS_B.g sends MESSAGE to UE_B.g with { STEP : "6" ; } ; + UE_B.g sends DING to USER_B.g with { STEP : "7" ; } ; + UE_B.g sends M_200_OK to IMS_B.g with { STEP : "8" ; } ; + IMS_B.g sends M_200_OK to IBCF_B.g with { STEP : "9" ; } ; + IBCF_B.g sends M_200_OK to IBCF_A.g with { STEP : "10" ; } ; + IBCF_A.g sends M_200_OK to IMS_A.g with { STEP : "11" ; } ; + IMS_A.g sends M_200_OK to UE_A.g with { STEP : "12" ; } ; + alternatively { + UE_A.g sends DELIVERY_REPORT to USER_A.g with { STEP : "13" ; } ; + } or { + gate USER_A.g is quiet for default_timeout; + } + } with { + SUMMARY : "IMS network shall support SIP messages greater than + 1 500 bytes" ; + } +} with { + Note : "Taken from ETSI TS 186 011-2 [i.3] V3.1.1 (2011-06)" ; + TITLE : "SIP messages longer than 1 500 bytes" ; +} diff --git a/part1-examples/Example-2-IMS-4.5.1.tdlan2.tdl b/part1-examples/Example-2-IMS-4.5.1.tdlan2.tdl new file mode 100644 index 0000000000000000000000000000000000000000..5505f4f2b6b3bdb854f87bdaf8a8467debd93755 --- /dev/null +++ b/part1-examples/Example-2-IMS-4.5.1.tdlan2.tdl @@ -0,0 +1,187 @@ + + + + + + + + + + + + + + + + "ts_18601102v030101p.pdf::4.5.1.1 (CC 1)" + "ETSI TS 124 229 [1], clause 4.2A, paragraph 1" + + + "ts_18601102v030101p.pdf::4.4.4.2" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/part1-examples/Example-3-Data.tdlan2 b/part1-examples/Example-3-Data.tdlan2 new file mode 100644 index 0000000000000000000000000000000000000000..01a9e15da77dfd4b1501d2de94e24e852fa2b387 --- /dev/null +++ b/part1-examples/Example-3-Data.tdlan2 @@ -0,0 +1,133 @@ +//A manually constructed example illustrating the data mapping concepts +Package DataExample { + //User-defined verdicts + //Alternatively the predefined verdicts may be used as well + Type Verdict ; + Verdict PASS ; + Verdict FAIL ; + + //Test objectives + Test Objective CHECK_SESSION_ID_IS_MAINTAINED { + //Only a description + description : "Check whether the session id is maintained + after the first response." ; + } + + //Data definitions + Type SESSION_ID; + SESSION_ID SESSION_ID_1 ; + SESSION_ID SESSION_ID_2 ; + + Type MSG (optional session of type SESSION_ID); + MSG REQUEST_SESSION_ID(session = omit); + MSG RESPONSE(session = ?); + MSG MESSAGE(session = ?); + + //Data mappings + + //Load resource.ttcn3 + Use "resource.ttcn3" as TTCN_MAPPING ; + + //Map types and instances to TTCN-3 records and templates, respectively + //(located in the used TTCN-3 file) + Map MSG to "record_message" in TTCN_MAPPING as MSG_mapping with { + session mapped to "session_id"; + }; + Map REQUEST_SESSION_ID to "template_message_request" in TTCN_MAPPING as REQUEST_mapping ; + Map RESPONSE to "template_response" in TTCN_MAPPING as RESPONSE_mapping ; + Map MESSAGE to "template_message" in TTCN_MAPPING as MESSAGE_mapping ; + + //Use a runtime URI for dynamic data available at runtime, such as + //session IDs + Use "runtime://sessions/" as RUNTIME_MAPPING ; + //Map session ID data instances to locations within the runtime URI + Map SESSION_ID_1 to "id_1" in RUNTIME_MAPPING as SESSION_ID_1_mapping ; + Map SESSION_ID_2 to "id_2" in RUNTIME_MAPPING as SESSION_ID_2_mapping ; + + //Gate type definitions + Gate Type defaultGT accepts MSG , SESSION_ID; + + //Component type definitions + Component Type defaultCT having { + gate g of type defaultGT ; + } + + //Test configuration definition + Test Configuration defaultTC { + create SUT UE of type defaultCT; + create Tester SS of type defaultCT; + connect SS.g to UE.g ; + } + + //Test description definition + Test Description exampleTD uses configuration defaultTC { + //Tester requests a session id + SS.g sends REQUEST_SESSION_ID to UE.g ; + //SUT responds with a session id that is assigned to the URI + //provided by the execution environment + UE.g sends RESPONSE (session=SESSION_ID_1) to SS.g ; + //Tester sends a message with the session id + //from the runtime URI + SS.g sends MESSAGE (session=SESSION_ID_1) to UE.g ; + + alternatively { + //SUT responds with the same session id + UE.g sends RESPONSE (session=SESSION_ID_1) to SS.g ; + set verdict to PASS; + } or { + //SUT responds with a new session id + UE.g sends RESPONSE (session=SESSION_ID_2) to SS.g ; + set verdict to FAIL; + } with { + test objectives : CHECK_SESSION_ID_IS_MAINTAINED ; + } + } + + //Alternative approach with variables + + //Component type definitions + Component Type defaultCTwithVariable having { + variable v of type MSG; + gate g of type defaultGT ; + } + + //Test configuration definition + Test Configuration defaultTCwithVariables { + create SUT UE of type defaultCT; + create Tester SS of type defaultCTwithVariable; + connect SS.g to UE.g ; + } + + Test Description exampleTD uses configuration defaultTCwithVariables { + //Tester requests a session id + SS.g sends REQUEST_SESSION_ID to UE.g ; + + //SUT responds with a response message containing a session ID + //The response could contain any of the known session IDs + //The received response is stored in the variable v of the SS + UE.g sends RESPONSE to SS.g where it is assigned to v; + + //Tester sends a message with the session ID + //from the response stored in the variable v of the SS + SS.g sends MESSAGE(session=SS->v.session) to UE.g ; + + alternatively { + //SUT responds with the same session ID that is stored in + //the variable v of the SS from the previous response + UE.g sends RESPONSE(session=SS->v.session) to SS.g ; + set verdict to PASS; + } or { + //SUT responds with a any session ID, including the one from the + //previous response stored in v. The ordering of evaluation will + //always select the first alternative in that case. Alternatively + //a function can be defined and called that checks explicitly that + //a the specific session ID from the previous response stored in v + //is not received e.g. + // UE.g sends RESPONSE(session=not(SS->v.session)) to SS.g; + UE.g sends RESPONSE to SS.g ; + set verdict to FAIL; + } with { + test objectives : CHECK_SESSION_ID_IS_MAINTAINED ; + } + } +} diff --git a/part1-examples/Example-3-Data.tdlan2.tdl b/part1-examples/Example-3-Data.tdlan2.tdl new file mode 100644 index 0000000000000000000000000000000000000000..46680064e43931ffe67d0d72fd91631566f76899 --- /dev/null +++ b/part1-examples/Example-3-Data.tdlan2.tdl @@ -0,0 +1,172 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +