conformance_test/positive_tests added
[deliverable/titan.core.git] / conformance_test / positive_tests / 22_communication_operations / 2203_procedure_based_communication / 220302_getcall_operation / Sem_220302_GetcallOperation_004.ttcn
1 /******************************************************************************
2 * Copyright (c) 2000-2016 Ericsson Telecom AB
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Eclipse Public License v1.0
5 * which accompanies this distribution, and is available at
6 * http://www.eclipse.org/legal/epl-v10.html
7 *
8 * Contributors:
9 * Adrien Kirjak – initial implementation
10 *
11 ** @version 0.0.1
12 ** @purpose 1:22.3.2, Ensure that the getcall operation can be correctly restricted to a certain client
13 ** @verdict pass accept, ttcn3verdict:pass
14 *****************************************************************/
15
16 module Sem_220302_GetcallOperation_004 {
17
18 type charstring address;
19 const address c_client1Addr := "client1Addr";
20 const address c_client2Addr := "client2Addr";
21
22 /**
23 * @desc testing of inline return template for remote procedure call
24 * @param p_par1 only input parameter
25 * @param p_par2 must have value 4 at return
26 * @param p_par3 must have value 5 at return
27 * @return must return value 1
28 */
29 signature p_Sem_220302_GetcallOperation_004(in integer p_par1, out integer p_par2, inout integer p_par3) return integer;
30
31
32 template p_Sem_220302_GetcallOperation_004 s_returnTemplate := {
33 p_par1 := 0, // p_par1 := - causes core dump
34 p_par2 := 4,
35 p_par3 := 5
36 }
37
38 template p_Sem_220302_GetcallOperation_004 s_wrongTemplate := {
39 p_par1 := 0, // p_par1 := - causes core dump
40 p_par2 := 2,
41 p_par3 := 3
42 }
43
44 template p_Sem_220302_GetcallOperation_004 s_callTemplate := {
45 p_par1 := 1,
46 p_par2 := 0, // p_par2 := - causes core dump
47 p_par3 := 3
48 }
49
50 type port remotePort procedure {
51 inout p_Sem_220302_GetcallOperation_004;
52 } with {extension "internal"}
53
54 type component GeneralComp {
55 port remotePort PCO;
56 var GeneralComp v_myAddress;
57 }
58
59 function f_ClientQuery(GeneralComp p_myAddress) runs on GeneralComp {
60 var integer v_zero:=0;
61 var integer v_one:=1;
62 var boolean first:=true;
63 v_myAddress := p_myAddress;
64
65 PCO.call(p_Sem_220302_GetcallOperation_004:s_callTemplate, 3.0) {
66
67 [first] PCO.getreply(p_Sem_220302_GetcallOperation_004:s_returnTemplate value 1) {
68 first:=false;
69 setverdict(fail); //receiving a reply is not expected for client2 query
70 }
71 [] PCO.catch (timeout) {
72 setverdict(pass);
73 }
74 }
75 }
76
77 function f_ServerResponses(GeneralComp p_clientAddress) runs on GeneralComp {
78 var GeneralComp v_clientAddress;
79 var integer v_par1;
80 var integer v_par3;
81 timer t_timeout:=30.0;
82
83 template p_Sem_220302_GetcallOperation_004 s_acceptTemplate := {
84 p_par1 := ?,
85 p_par2 := ?,
86 p_par3 := ?
87 };
88
89
90 t_timeout.start;
91
92 alt {
93 [] PCO.getcall(p_Sem_220302_GetcallOperation_004:s_acceptTemplate) from p_clientAddress -> param(v_par1, v_par3) sender v_clientAddress {
94 PCO.reply(p_Sem_220302_GetcallOperation_004:{p_par1 := 0, p_par2 := v_par1+v_par3, p_par3 := v_par1+v_par3+1} value v_par1) to v_clientAddress; //procedure return values are sent
95 // p_par1 := - causes core dump
96 repeat;
97 }
98 [] t_timeout.timeout {
99 setverdict(fail);
100 }
101 }
102
103 }
104
105
106 function f_setAddress(GeneralComp p_myAddress) runs on GeneralComp {
107 v_myAddress := p_myAddress;
108 }
109
110 testcase TC_Sem_220302_GetcallOperation_004() runs on GeneralComp system GeneralComp {
111 var GeneralComp server := GeneralComp.create("RemoteProcedure Service");
112 var GeneralComp client := GeneralComp.create("RemoteProcedure Client");
113 var GeneralComp client2 := GeneralComp.create("RemoteProcedure Client");
114
115 connect(server:PCO, client:PCO);
116 connect(server:PCO, client2:PCO);
117
118 server.start(f_ServerResponses(client));
119 client.start(f_setAddress(client));
120 client2.start(f_ClientQuery(client));
121
122 interleave {
123 [] client.done {}
124 [] client2.done {}
125 }
126 server.stop;
127
128 all component.done;
129
130 disconnect(server:PCO, client:PCO);
131 disconnect(server:PCO, client2:PCO);
132 }
133
134 control{
135 execute(TC_Sem_220302_GetcallOperation_004());
136 }
137
138 }
This page took 0.04285 seconds and 5 git commands to generate.