/******************************************************************************
- * Copyright (c) 2000-2016 Ericsson Telecom AB
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Balasko, Jeno
- * Baranyi, Botond
- * Forstner, Matyas
- * Raduly, Csaba
- * Szabados, Kristof
- * Szabo, Janos Zoltan – initial implementation
- * Tatarka, Gabor
- *
- ******************************************************************************/
+* Copyright (c) 2000-2016 Ericsson Telecom AB
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v1.0
+* which accompanies this distribution, and is available at
+* http://www.eclipse.org/legal/epl-v10.html
+*
+* Contributors:
+* Balasko, Jeno
+* Baranyi, Botond
+* Forstner, Matyas
+* Raduly, Csaba
+* Szabados, Kristof
+* Szabo, Janos Zoltan – initial implementation
+* Tatarka, Gabor
+*
+******************************************************************************/
module ProcPort {
- type record MyRecord { }
+type record MyRecord { }
+
+signature MyProc(in integer Par1,inout charstring Par2,out float Par3)
+return boolean
+exception(integer);
+signature MyProc2();
+type MyProc2 MyProc2Alias; // testing type alias
+signature MyProc3(in integer I) return float exception(integer);
+signature MyProc4(in float F) noblock;
+signature MyProc5(in integer A, in integer B)
+return float exception(charstring, MyRecord);
+signature s_StopPTC();
+signature MyProc6(inout integer I);
+
+template s_StopPTC StopPTC := { }
+
+template MyProc5 MyProc5Template_any := {
+ A:=?,
+ B:=?
+}
- signature MyProc(in integer Par1,inout charstring Par2,out float Par3)
- return boolean
- exception(integer);
- signature MyProc2();
- type MyProc2 MyProc2Alias; // testing type alias
- signature MyProc3(in integer I) return float exception(integer);
- signature MyProc4(in float F) noblock;
- signature MyProc5(in integer A, in integer B)
- return float exception(charstring, MyRecord);
- signature s_StopPTC();
- signature MyProc6(inout integer I);
+template MyProc5 MyProc5TemplateP(integer pA,integer pB) := {
+ A:=pA,
+ B:=pB
+}
- template s_StopPTC StopPTC := { }
+template MyProc3 MyProc3Template:={
+ I:=2003
+}
- template MyProc5 MyProc5Template_any := {
- A:=?,
- B:=?
- }
+template MyProc3 MyProc3Template_any:={I:=?}
+
+template MyProc3 MyProc3TemplateP (integer P) := {
+ I:=P
+}
+
+template MyProc MyProcTemplateP (integer i,charstring c,float f) := {
+ Par1:=i,
+ Par2:=c,
+ Par3:=f
+}
+
+template MyProc MyProcTemplate:= {
+ Par1:=44,
+ Par2:="Q",
+ Par3:=324.664
+}
+
+template MyProc MyProcTemplate2:= {
+ Par1:=4200,
+ Par2:="T",
+ Par3:=170.01
+}
+
+template MyProc MyProcTemplate_any:= {
+ Par1:=?,
+ Par2:=?,
+ Par3:=?
+}
+
+template MyProc2 MyProc2Template := { }
- template MyProc5 MyProc5TemplateP(integer pA,integer pB) := {
- A:=pA,
- B:=pB
+type record address {
+ integer a1,
+ integer a2
+}
+
+template address MyAddress(integer p1,integer p2) := {
+ a1:=p1,
+ a2:=p2
+}
+
+type port PortAddress procedure {
+ inout MyProc,s_StopPTC;
+ in MyProc2;
+} with { extension "address" }
+
+type port ProcPort1 procedure
+{
+ inout MyProc,s_StopPTC;
+ in MyProc2;
+ out MyProc3;
+} with {extension "internal"}
+
+type port ProcPort2 procedure
+{
+ inout MyProc,s_StopPTC;
+ out MyProc2;
+ in MyProc3;
+} with {extension "internal"}
+
+type port ExtProcPort procedure
+{
+ inout MyProc5;
+}
+
+type port CompileOnlyPort procedure
+{
+ in MyProc;
+ inout MyProc2;
+ out MyProc3;
+ in MyProc4;
+ inout MyProc5;
+}
+
+type port CompileOnlyPortAddress procedure {
+ out MyProc;
+ in MyProc2;
+ inout MyProc3;
+ out MyProc4;
+ in MyProc5;
+} with { extension "address" }
+
+type port ProcPort3 procedure {
+ inout MyProc6;
+} with { extension "internal" }
+
+type component ProcComponent
+{
+ port ProcPort1 Port0;
+}
+
+type component ProcComponent2
+{
+ port ProcPort2 Port1;
+}
+
+type component ProcComponentMultiPort
+{
+ port ProcPort1 Port0;
+ port ProcPort2 Port1[4];
+ port ExtProcPort Port2;
+ port CompileOnlyPort Port3;
+ port PortAddress Port4;
+}
+
+type component eComponent
+{
+ port ExtProcPort ePort;
+}
+
+type component addressComponent
+{
+ port PortAddress P;
+}
+
+type component ProcComponent3 {
+ port ProcPort3 pt;
+}
+
+function GetCall_behav1() runs on ProcComponent2 {
+ while(true) {
+ alt {
+ []Port1.getcall(MyProcTemplate_any) {
+ Port1.reply(MyProcTemplate2 value true);
+ }
+ []Port1.getcall(MyProc3Template_any) {
+ Port1.reply(MyProc3Template value 3.1415);
+ }
+ []Port1.getcall(StopPTC) {
+ Port1.reply(StopPTC);
+ stop;
+ }
}
+ }
+}
- template MyProc3 MyProc3Template:={
- I:=2003
+function GetCall_behav2() runs on ProcComponent {
+ while(true) {
+ alt {
+ []Port0.getcall(MyProcTemplate2) {
+ Port0.raise(MyProc,integer:555);
+ }
+ []Port0.getcall(MyProcTemplate_any) {
+ Port0.reply(MyProcTemplate value false);
+ }
+ []Port0.getcall(MyProc2Template) {
+ Port0.reply(MyProc2Template);
+ }
+ []Port0.getcall(StopPTC) {
+ Port0.reply(StopPTC);
+ stop;
+ }
}
+ }
+}
- template MyProc3 MyProc3Template_any:={I:=?}
+function GetCall_behav3() runs on ProcComponent2 {
+ while(true) {
+ alt {
+ []Port1.getcall(MyProcTemplate2) {
+ Port1.raise(MyProc,integer:272869);
+ }
+ []Port1.getcall(MyProcTemplate_any) {
+ Port1.reply(MyProcTemplateP(22,"G",199.99) value false);
+ }
+ []Port1.getcall(MyProc3Template_any) {
+ Port1.reply(MyProc3Template value 2.78);
+ }
+ []Port1.getcall(StopPTC) {
+ Port1.reply(StopPTC);
+ stop;
+ }
+ }
+ }
+}
- template MyProc3 MyProc3TemplateP (integer P) := {
- I:=P
+function Check_getcall_behav() runs on ProcComponent2 {
+ while(true) {
+ alt {
+ []Port1.check(getcall(MyProcTemplate2)) {
+ Port1.getcall;
+ Port1.reply(MyProcTemplate value true);
+ }
+ []Port1.getcall(StopPTC) {
+ Port1.reply(StopPTC);
+ stop;
+ }
+ []Port1.check(getcall) {
+ Port1.getcall;
+ Port1.reply(MyProcTemplate2 value false);
+ }
}
+ }
+}
- template MyProc MyProcTemplateP (integer i,charstring c,float f) := {
- Par1:=i,
- Par2:=c,
- Par3:=f
+// parameters values
+const integer c_CallParam := 10;
+const integer c_ReplyParam := 19;
+
+// error codes
+template integer t_getCall_invalidValue := -1;
+template integer t_getCall_timeout := -2;
+
+function GetCallParameters_behav() runs on ProcComponent3 {
+ var integer x := 0;
+ timer t := 1.0;
+ t.start;
+ alt {
+ [] pt.getcall(MyProc6:{?}) -> param (x) {
+ if (c_CallParam == x) { pt.reply(MyProc6:{c_ReplyParam}); }
+ else { pt.reply(MyProc6:{t_getCall_invalidValue}); }
+ }
+ [] t.timeout { pt.reply(MyProc6:{t_getCall_timeout}); }
+ }
+}
+
+testcase tc1_Call() runs on ProcComponent {
+ /* Non-blocking calls */
+ var ProcComponent2 PC2;
+ var integer i:=0;
+ var boolean b:=false;
+ var float f:=0.0;
+ timer T:=1.0;
+ PC2:=ProcComponent2.create;
+ PC2.start(GetCall_behav1());
+ connect(self:Port0,PC2:Port1);
+ T.start;
+ Port0.call(MyProcTemplate,nowait);
+ Port0.call(MyProc3Template,nowait);
+ while(i<2) {
+ alt {
+ []Port0.getreply(MyProcTemplate2) -> value b {
+ if(i==0) {
+ if(b==true) {i:=1;}
+ else {setverdict(fail);stop;}
+ } else {
+ setverdict(inconc);stop;
+ }
+ }
+ []Port0.getreply(MyProc3Template) -> value f {
+ if((i==1)and(f==3.1415)) {i:=2;}
+ else {log(f);setverdict(inconc);stop;}
+ }
+ []T.timeout {
+ setverdict(fail);
+ stop;
+ }
}
+ }
+ if(i==2) {setverdict(pass);}
+ Port0.call(StopPTC,0.5) {
+ []Port0.getreply(StopPTC) { }
+ []Port0.catch(timeout) { }
+ }
+ disconnect(self:Port0,PC2:Port1);
+}
- template MyProc MyProcTemplate:= {
- Par1:=44,
- Par2:="Q",
- Par3:=324.664
+testcase tc2_Call() runs on ProcComponent2 {
+ /* Blocking calls */
+ var ProcComponent PC;
+ var boolean b:=true;
+ PC:=ProcComponent.create;
+ PC.start(GetCall_behav2());
+ connect(self:Port1,PC:Port0);
+ Port1.call(MyProcTemplate,1.0) {
+ []Port1.getreply(MyProcTemplate value ?) -> value b{
+ Port1.call(MyProc2Template,0.7) {
+ []Port1.getreply(MyProc2Template) {
+ Port1.call(MyProcTemplate2,0.4) {
+ []Port1.catch(MyProc,integer:555) {
+ if(b==false) {setverdict(pass);}
+ else {setverdict(inconc);}
+ }
+ []Port1.catch(timeout) {
+ setverdict(fail);
+ stop;
+ }
+ }
+ }
+ []Port1.catch(timeout) {
+ setverdict(fail);
+ stop;
+ }
+ }
+ }
+ []Port1.catch(timeout) {
+ setverdict(fail);
+ stop;
}
+ }
+ Port1.call(StopPTC,0.5) {
+ []Port1.getreply(StopPTC) { }
+ []Port1.catch(timeout) { }
+ }
+}
- template MyProc MyProcTemplate2:= {
- Par1:=4200,
- Par2:="T",
- Par3:=170.01
+testcase tc_extCall() runs on eComponent system eComponent {
+ map(self:ePort,system:ePort);
+ ePort.call(MyProc5TemplateP(128,32),0.5) {
+ []ePort.getreply(MyProc5Template_any value 4.0) {
+ setverdict(pass);
+ }
+ []ePort.catch(timeout) {
+ setverdict(fail);stop;
}
+ }
+ unmap(self:ePort,system:ePort);
+}
- template MyProc MyProcTemplate_any:= {
- Par1:=?,
- Par2:=?,
- Par3:=?
+testcase tc_extCall_2() runs on eComponent system eComponent {
+ map(self:ePort,system:ePort);
+ ePort.call(MyProc5TemplateP(32,128),0.5) {
+ []ePort.getreply(MyProc5Template_any value 0.25) {
+ setverdict(pass);
+ }
+ []ePort.catch(timeout) {
+ setverdict(fail);stop;
}
+ }
+ unmap(self:ePort,system:ePort);
+}
- template MyProc2 MyProc2Template := { }
+testcase tc_extCall_3() runs on eComponent system eComponent {
+ map(self:ePort,system:ePort);
+ ePort.call(MyProc5TemplateP(128,0),0.5) {
+ []ePort.catch(MyProc5,charstring:"Divide by 0.") {
+ setverdict(pass);
+ }
+ []ePort.catch(timeout) {
+ setverdict(fail);stop;
+ }
+ }
+ unmap(self:ePort,system:ePort);
+}
- type record address {
- integer a1,
- integer a2
+testcase tc_Call_MultiPTC() runs on ProcComponent {
+ /* procedure based communication with multiple PTCs */
+ var ProcComponent2 PC1,PC2;
+ var integer i:=0;
+ timer T:=1.0;
+ PC1:=ProcComponent2.create;
+ PC1.start(GetCall_behav1());
+ connect(self:Port0,PC1:Port1);
+ PC2:=ProcComponent2.create;
+ PC2.start(GetCall_behav3());
+ connect(self:Port0,PC2:Port1);
+ T.start;
+ Port0.call(MyProcTemplate,nowait) to PC1;
+ Port0.call(MyProc3Template,nowait) to PC2;
+ while(i<2) {
+ alt {
+ []Port0.getreply(MyProcTemplate2 value true) from PC1 {
+ i:=i+1;
+ }
+ []Port0.getreply(MyProc3Template value 2.78) from PC2 {
+ i:=i+1;
+ }
+ []T.timeout {
+ setverdict(fail);stop;
+ }
}
+ }
+ setverdict(pass);
+ Port0.call(StopPTC,0.5) to PC1 {
+ []Port0.getreply(StopPTC) from PC1 { }
+ []Port0.catch(timeout) { setverdict(fail);stop; }
+ }
+ Port0.call(StopPTC,0.5) to PC2 {
+ []Port0.getreply(StopPTC) from PC2 { }
+ []Port0.catch(timeout) { setverdict(fail);stop; }
+ }
+ disconnect(self:Port0,PC1:Port1);
+ disconnect(self:Port0,PC2:Port1);
+}
- template address MyAddress(integer p1,integer p2) := {
- a1:=p1,
- a2:=p2
+testcase tc_Call_MultiPTC_anyport() runs on ProcComponentMultiPort {
+ /* testing any-port operations with multiple PTCs */
+ var ProcComponent2 PC1,PC2;
+ var ProcComponent2 sndr;
+ var integer i:=0;
+ var boolean chk1:=true,chk2:=true;
+ timer T:=1.5;
+ PC1:=ProcComponent2.create;
+ PC1.start(GetCall_behav1());
+ connect(self:Port0,PC1:Port1);
+ PC2:=ProcComponent2.create;
+ PC2.start(GetCall_behav3());
+ connect(self:Port0,PC2:Port1);
+ T.start;
+ Port0.call(MyProcTemplate,nowait) to PC1;
+ Port0.call(MyProc3Template,nowait) to PC2;
+ while(i<4) {
+ alt {
+ [chk1]any port.check {
+ i:=i+1;
+ chk1:=false;
+ log("any port.check OK");
+ }
+ [chk2]any port.check(getreply -> sender sndr) {
+ i:=i+1;
+ chk2:=false;
+ log("any port.check(getreply) OK, sender: ",sndr);
+ }
+ []any port.check(catch) {
+ log("any port.check(catch) matched --> fail");
+ setverdict(fail);stop;
+ }
+ []any port.getcall {
+ log("any port.getcall matched --> fail");
+ setverdict(fail);stop;
+ }
+ []any port.getreply from PC1 {
+ log("any port.getreply from PC1 OK");
+ i:=i+1;
+ }
+ []any port.getreply from PC2 {
+ log("any port.getreply from PC2 OK");
+ i:=i+1;
+ }
+ []T.timeout {
+ setverdict(fail);stop;
+ }
}
+ }
+ setverdict(pass);
+ Port0.call(StopPTC,0.5) to PC1 {
+ []Port0.getreply(StopPTC) from PC1 { }
+ []Port0.catch(timeout) { setverdict(fail);stop; }
+ }
+ Port0.call(StopPTC,0.5) to PC2 {
+ []Port0.getreply(StopPTC) from PC2 { }
+ []Port0.catch(timeout) { setverdict(fail);stop; }
+ }
+ disconnect(self:Port0,PC1:Port1);
+ disconnect(self:Port0,PC2:Port1);
+}
- type port PortAddress procedure {
- inout MyProc,s_StopPTC;
- in MyProc2;
- } with { extension "address" }
+testcase tc_Check_1() runs on ProcComponent {
+ var ProcComponent2 PC2;
+ timer T:=1.5;
+ PC2:=ProcComponent2.create;
+ PC2.start(GetCall_behav3());
+ connect(self:Port0,PC2:Port1);
+ Port0.call(MyProcTemplate2,nowait);
+ T.start;
+ alt {
+ []Port0.check(catch) { }
+ []T.timeout {
+ setverdict(fail);
+ stop;
+ }
+ }
+ alt {
+ []any port.check(catch) {
+ log("any port.check(catch) OK");
+ }
+ []T.timeout {
+ setverdict(fail);
+ stop;
+ }
+ }
+ alt {
+ []Port0.check(catch(MyProc,integer:272869)) {
+ Port0.catch;
+ }
+ []T.timeout {
+ setverdict(fail);
+ stop;
+ }
+ }
+ Port0.call(MyProcTemplate,nowait);
+ alt {
+ []Port0.check(getreply) { }
+ []T.timeout {
+ setverdict(fail);
+ stop;
+ }
+ }
+ alt {
+ []Port0.check(getreply(MyProcTemplateP(22,"G",199.99) value false)){
+ Port0.getreply;
+ setverdict(pass);
+ }
+ []T.timeout {
+ setverdict(fail);
+ stop;
+ }
+ }
+ Port0.call(StopPTC,0.5) {
+ []Port0.getreply(StopPTC) { }
+ []Port0.catch(timeout) { }
+ }
+}
- type port ProcPort1 procedure
- {
- inout MyProc,s_StopPTC;
- in MyProc2;
- out MyProc3;
- } with {extension "internal"}
+testcase tc_Check_2() runs on ProcComponent {
+ var ProcComponent2 PC2;
+ PC2:=ProcComponent2.create;
+ PC2.start(Check_getcall_behav());
+ connect(self:Port0,PC2:Port1);
+ Port0.call(MyProcTemplate2,1.0) {
+ []Port0.getreply(MyProcTemplate value true) { }
+ []Port0.catch(timeout) {
+ setverdict(fail);
+ stop;
+ }
+ }
+ Port0.call(MyProcTemplate,1.0) {
+ []Port0.getreply(MyProcTemplate2 value false) {
+ setverdict(pass);
+ }
+ []Port0.catch(timeout) {
+ setverdict(fail);
+ stop;
+ }
+ }
+ Port0.call(StopPTC,0.5) {
+ []Port0.getreply(StopPTC) { }
+ []Port0.catch(timeout) { }
+ }
+}
- type port ProcPort2 procedure
- {
- inout MyProc,s_StopPTC;
- out MyProc2;
- in MyProc3;
- } with {extension "internal"}
+testcase tc_PortAddress_internal_usage() runs on ProcComponentMultiPort {
+ /* procedure based internal communication with address-supporting port */
+ var ProcComponent2 PC2;
+ var integer i:=0;
+ PC2:=ProcComponent2.create;
+ PC2.start(GetCall_behav3());
+ connect(self:Port4,PC2:Port1);
+ Port4.call(MyProcTemplateP(11,"T",99.012),1.0) {
+ []Port4.getreply(MyProcTemplateP(22,"G",199.99) value false) {
+ i:=i+1;
+ }
+ []Port4.catch(timeout) {
+ setverdict(fail);stop;
+ }
+ }
+ Port4.call(MyProcTemplate2,1.0) {
+ []Port4.catch(MyProc,integer:272869) {
+ i:=i+1;
+ }
+ []Port4.catch(timeout) {
+ setverdict(fail);stop;
+ }
+ }
+ if(i==2){setverdict(pass);}
+ Port4.call(StopPTC,1.0) {
+ []Port4.getreply(StopPTC) { }
+ []Port4.catch(timeout) {
+ setverdict(fail);
+ }
+ }
+}
- type port ExtProcPort procedure
- {
- inout MyProc5;
+testcase tc_PortAddress_external_usage1() runs on addressComponent
+system addressComponent {
+ map(self:P,system:P);
+ P.call(MyProcTemplate,1.0) to valueof(MyAddress(321,67)) {
+ []P.getreply(MyProcTemplate_any value true) from MyAddress(67,321) {
+ setverdict(pass);
}
-
- type port CompileOnlyPort procedure
- {
- in MyProc;
- inout MyProc2;
- out MyProc3;
- in MyProc4;
- inout MyProc5;
- }
-
- type port CompileOnlyPortAddress procedure {
- out MyProc;
- in MyProc2;
- inout MyProc3;
- out MyProc4;
- in MyProc5;
- } with { extension "address" }
-
- type port ProcPort3 procedure {
- inout MyProc6;
- } with { extension "internal" }
-
- type component ProcComponent
- {
- port ProcPort1 Port0;
- }
-
- type component ProcComponent2
- {
- port ProcPort2 Port1;
- }
-
- type component ProcComponentMultiPort
- {
- port ProcPort1 Port0;
- port ProcPort2 Port1[4];
- port ExtProcPort Port2;
- port CompileOnlyPort Port3;
- port PortAddress Port4;
- }
-
- type component eComponent
- {
- port ExtProcPort ePort;
- }
-
- type component addressComponent
- {
- port PortAddress P;
- }
-
- type component ProcComponent3 {
- port ProcPort3 pt;
- }
-
- function GetCall_behav1() runs on ProcComponent2 {
- while(true) {
- alt {
- []Port1.getcall(MyProcTemplate_any) {
- Port1.reply(MyProcTemplate2 value true);
- }
- []Port1.getcall(MyProc3Template_any) {
- Port1.reply(MyProc3Template value 3.1415);
- }
- []Port1.getcall(StopPTC) {
- Port1.reply(StopPTC);
- stop;
- }
- }
- }
- }
-
- function GetCall_behav2() runs on ProcComponent {
- while(true) {
- alt {
- []Port0.getcall(MyProcTemplate2) {
- Port0.raise(MyProc,integer:555);
- }
- []Port0.getcall(MyProcTemplate_any) {
- Port0.reply(MyProcTemplate value false);
- }
- []Port0.getcall(MyProc2Template) {
- Port0.reply(MyProc2Template);
- }
- []Port0.getcall(StopPTC) {
- Port0.reply(StopPTC);
- stop;
- }
- }
- }
- }
-
- function GetCall_behav3() runs on ProcComponent2 {
- while(true) {
- alt {
- []Port1.getcall(MyProcTemplate2) {
- Port1.raise(MyProc,integer:272869);
- }
- []Port1.getcall(MyProcTemplate_any) {
- Port1.reply(MyProcTemplateP(22,"G",199.99) value false);
- }
- []Port1.getcall(MyProc3Template_any) {
- Port1.reply(MyProc3Template value 2.78);
- }
- []Port1.getcall(StopPTC) {
- Port1.reply(StopPTC);
- stop;
- }
- }
- }
- }
-
- function Check_getcall_behav() runs on ProcComponent2 {
- while(true) {
- alt {
- []Port1.check(getcall(MyProcTemplate2)) {
- Port1.getcall;
- Port1.reply(MyProcTemplate value true);
- }
- []Port1.getcall(StopPTC) {
- Port1.reply(StopPTC);
- stop;
- }
- []Port1.check(getcall) {
- Port1.getcall;
- Port1.reply(MyProcTemplate2 value false);
- }
- }
- }
- }
-
- // parameters values
- const integer c_CallParam := 10;
- const integer c_ReplyParam := 19;
-
- // error codes
- template integer t_getCall_invalidValue := -1;
- template integer t_getCall_timeout := -2;
-
- function GetCallParameters_behav() runs on ProcComponent3 {
- var integer x := 0;
- timer t := 1.0;
- t.start;
- alt {
- [] pt.getcall(MyProc6:{?}) -> param (x) {
- if (c_CallParam == x) { pt.reply(MyProc6:{c_ReplyParam}); }
- else { pt.reply(MyProc6:{t_getCall_invalidValue}); }
- }
- [] t.timeout { pt.reply(MyProc6:{t_getCall_timeout}); }
- }
+ []P.catch(timeout) {
+ setverdict(fail);
}
+ }
+ unmap(self:P,system:P);
+}
- testcase Call_tc1() runs on ProcComponent {
- /* Non-blocking calls */
- var ProcComponent2 PC2;
- var integer i:=0;
- var boolean b:=false;
- var float f:=0.0;
- timer T:=1.0;
- PC2:=ProcComponent2.create;
- PC2.start(GetCall_behav1());
- connect(self:Port0,PC2:Port1);
- T.start;
- Port0.call(MyProcTemplate,nowait);
- Port0.call(MyProc3Template,nowait);
- while(i<2) {
- alt {
- []Port0.getreply(MyProcTemplate2) -> value b {
- if(i==0) {
- if(b==true) {i:=1;}
- else {setverdict(fail);stop;}
- } else {
- setverdict(inconc);stop;
- }
- }
- []Port0.getreply(MyProc3Template) -> value f {
- if((i==1)and(f==3.1415)) {i:=2;}
- else {log(f);setverdict(inconc);stop;}
- }
- []T.timeout {
- setverdict(fail);
- stop;
- }
- }
- }
- if(i==2) {setverdict(pass);}
- Port0.call(StopPTC,0.5) {
- []Port0.getreply(StopPTC) { }
- []Port0.catch(timeout) { }
- }
- disconnect(self:Port0,PC2:Port1);
- }
-
- testcase Call_tc2() runs on ProcComponent2 {
- /* Blocking calls */
- var ProcComponent PC;
- var boolean b:=true;
- PC:=ProcComponent.create;
- PC.start(GetCall_behav2());
- connect(self:Port1,PC:Port0);
- Port1.call(MyProcTemplate,1.0) {
- []Port1.getreply(MyProcTemplate value ?) -> value b{
- Port1.call(MyProc2Template,0.7) {
- []Port1.getreply(MyProc2Template) {
- Port1.call(MyProcTemplate2,0.4) {
- []Port1.catch(MyProc,integer:555) {
- if(b==false) {setverdict(pass);}
- else {setverdict(inconc);}
- }
- []Port1.catch(timeout) {
- setverdict(fail);
- stop;
- }
- }
- }
- []Port1.catch(timeout) {
- setverdict(fail);
- stop;
- }
- }
- }
- []Port1.catch(timeout) {
- setverdict(fail);
- stop;
- }
- }
- Port1.call(StopPTC,0.5) {
- []Port1.getreply(StopPTC) { }
- []Port1.catch(timeout) { }
- }
- }
-
- testcase extCall_tc1() runs on eComponent system eComponent {
- map(self:ePort,system:ePort);
- ePort.call(MyProc5TemplateP(128,32),0.5) {
- []ePort.getreply(MyProc5Template_any value 4.0) {
- setverdict(pass);
- }
- []ePort.catch(timeout) {
- setverdict(fail);stop;
- }
- }
- unmap(self:ePort,system:ePort);
- }
-
- testcase extCall_tc2() runs on eComponent system eComponent {
- map(self:ePort,system:ePort);
- ePort.call(MyProc5TemplateP(32,128),0.5) {
- []ePort.getreply(MyProc5Template_any value 0.25) {
- setverdict(pass);
- }
- []ePort.catch(timeout) {
- setverdict(fail);stop;
- }
- }
- unmap(self:ePort,system:ePort);
- }
-
- testcase extCall_tc3() runs on eComponent system eComponent {
- map(self:ePort,system:ePort);
- ePort.call(MyProc5TemplateP(128,0),0.5) {
- []ePort.catch(MyProc5,charstring:"Divide by 0.") {
- setverdict(pass);
- }
- []ePort.catch(timeout) {
- setverdict(fail);stop;
- }
- }
- unmap(self:ePort,system:ePort);
- }
-
- testcase Call_MultiPTC_tc() runs on ProcComponent {
- /* procedure based communication with multiple PTCs */
- var ProcComponent2 PC1,PC2;
- var integer i:=0;
- timer T:=1.0;
- PC1:=ProcComponent2.create;
- PC1.start(GetCall_behav1());
- connect(self:Port0,PC1:Port1);
- PC2:=ProcComponent2.create;
- PC2.start(GetCall_behav3());
- connect(self:Port0,PC2:Port1);
- T.start;
- Port0.call(MyProcTemplate,nowait) to PC1;
- Port0.call(MyProc3Template,nowait) to PC2;
- while(i<2) {
- alt {
- []Port0.getreply(MyProcTemplate2 value true) from PC1 {
- i:=i+1;
- }
- []Port0.getreply(MyProc3Template value 2.78) from PC2 {
- i:=i+1;
- }
- []T.timeout {
- setverdict(fail);stop;
- }
- }
- }
- setverdict(pass);
- Port0.call(StopPTC,0.5) to PC1 {
- []Port0.getreply(StopPTC) from PC1 { }
- []Port0.catch(timeout) { setverdict(fail);stop; }
- }
- Port0.call(StopPTC,0.5) to PC2 {
- []Port0.getreply(StopPTC) from PC2 { }
- []Port0.catch(timeout) { setverdict(fail);stop; }
- }
- disconnect(self:Port0,PC1:Port1);
- disconnect(self:Port0,PC2:Port1);
- }
-
- testcase Call_MultiPTC_anyport_tc() runs on ProcComponentMultiPort {
- /* testing any-port operations with multiple PTCs */
- var ProcComponent2 PC1,PC2;
- var ProcComponent2 sndr;
- var integer i:=0;
- var boolean chk1:=true,chk2:=true;
- timer T:=1.5;
- PC1:=ProcComponent2.create;
- PC1.start(GetCall_behav1());
- connect(self:Port0,PC1:Port1);
- PC2:=ProcComponent2.create;
- PC2.start(GetCall_behav3());
- connect(self:Port0,PC2:Port1);
- T.start;
- Port0.call(MyProcTemplate,nowait) to PC1;
- Port0.call(MyProc3Template,nowait) to PC2;
- while(i<4) {
- alt {
- [chk1]any port.check {
- i:=i+1;
- chk1:=false;
- log("any port.check OK");
- }
- [chk2]any port.check(getreply -> sender sndr) {
- i:=i+1;
- chk2:=false;
- log("any port.check(getreply) OK, sender: ",sndr);
- }
- []any port.check(catch) {
- log("any port.check(catch) matched --> fail");
- setverdict(fail);stop;
- }
- []any port.getcall {
- log("any port.getcall matched --> fail");
- setverdict(fail);stop;
- }
- []any port.getreply from PC1 {
- log("any port.getreply from PC1 OK");
- i:=i+1;
- }
- []any port.getreply from PC2 {
- log("any port.getreply from PC2 OK");
- i:=i+1;
- }
- []T.timeout {
- setverdict(fail);stop;
- }
- }
- }
- setverdict(pass);
- Port0.call(StopPTC,0.5) to PC1 {
- []Port0.getreply(StopPTC) from PC1 { }
- []Port0.catch(timeout) { setverdict(fail);stop; }
- }
- Port0.call(StopPTC,0.5) to PC2 {
- []Port0.getreply(StopPTC) from PC2 { }
- []Port0.catch(timeout) { setverdict(fail);stop; }
- }
- disconnect(self:Port0,PC1:Port1);
- disconnect(self:Port0,PC2:Port1);
- }
-
- testcase Check_tc1() runs on ProcComponent {
- var ProcComponent2 PC2;
- timer T:=1.5;
- PC2:=ProcComponent2.create;
- PC2.start(GetCall_behav3());
- connect(self:Port0,PC2:Port1);
- Port0.call(MyProcTemplate2,nowait);
- T.start;
- alt {
- []Port0.check(catch) { }
- []T.timeout {
- setverdict(fail);
- stop;
- }
- }
- alt {
- []any port.check(catch) {
- log("any port.check(catch) OK");
- }
- []T.timeout {
- setverdict(fail);
- stop;
- }
- }
- alt {
- []Port0.check(catch(MyProc,integer:272869)) {
- Port0.catch;
- }
- []T.timeout {
- setverdict(fail);
- stop;
- }
- }
- Port0.call(MyProcTemplate,nowait);
- alt {
- []Port0.check(getreply) { }
- []T.timeout {
- setverdict(fail);
- stop;
- }
- }
- alt {
- []Port0.check(getreply(MyProcTemplateP(22,"G",199.99) value false)){
- Port0.getreply;
- setverdict(pass);
- }
- []T.timeout {
- setverdict(fail);
- stop;
- }
- }
- Port0.call(StopPTC,0.5) {
- []Port0.getreply(StopPTC) { }
- []Port0.catch(timeout) { }
- }
- }
-
- testcase Check_tc2() runs on ProcComponent {
- var ProcComponent2 PC2;
- PC2:=ProcComponent2.create;
- PC2.start(Check_getcall_behav());
- connect(self:Port0,PC2:Port1);
- Port0.call(MyProcTemplate2,1.0) {
- []Port0.getreply(MyProcTemplate value true) { }
- []Port0.catch(timeout) {
- setverdict(fail);
- stop;
- }
- }
- Port0.call(MyProcTemplate,1.0) {
- []Port0.getreply(MyProcTemplate2 value false) {
- setverdict(pass);
- }
- []Port0.catch(timeout) {
- setverdict(fail);
- stop;
- }
- }
- Port0.call(StopPTC,0.5) {
- []Port0.getreply(StopPTC) { }
- []Port0.catch(timeout) { }
- }
- }
-
- testcase PortAddress_internal_usage() runs on ProcComponentMultiPort {
- /* procedure based internal communication with address-supporting port */
- var ProcComponent2 PC2;
- var integer i:=0;
- PC2:=ProcComponent2.create;
- PC2.start(GetCall_behav3());
- connect(self:Port4,PC2:Port1);
- Port4.call(MyProcTemplateP(11,"T",99.012),1.0) {
- []Port4.getreply(MyProcTemplateP(22,"G",199.99) value false) {
- i:=i+1;
- }
- []Port4.catch(timeout) {
- setverdict(fail);stop;
- }
- }
- Port4.call(MyProcTemplate2,1.0) {
- []Port4.catch(MyProc,integer:272869) {
- i:=i+1;
- }
- []Port4.catch(timeout) {
- setverdict(fail);stop;
- }
- }
- if(i==2){setverdict(pass);}
- Port4.call(StopPTC,1.0) {
- []Port4.getreply(StopPTC) { }
- []Port4.catch(timeout) {
- setverdict(fail);
- }
- }
- }
-
- testcase PortAddress_external_usage1() runs on addressComponent
- system addressComponent {
- map(self:P,system:P);
- P.call(MyProcTemplate,1.0) to valueof(MyAddress(321,67)) {
- []P.getreply(MyProcTemplate_any value true) from MyAddress(67,321) {
- setverdict(pass);
- }
- []P.catch(timeout) {
- setverdict(fail);
- }
- }
- unmap(self:P,system:P);
- }
-
- testcase PortAddress_external_usage2() runs on addressComponent
- system addressComponent {
- map(self:P,system:P);
- P.call(MyProcTemplate,1.0) to valueof(MyAddress(321,68)) {
- []P.catch(MyProc,integer:389) from MyAddress(68,321) {
- setverdict(pass);
- }
- []P.catch(timeout) {
- setverdict(fail);
- }
- }
- unmap(self:P,system:P);
+testcase tc_PortAddress_external_usage2() runs on addressComponent
+system addressComponent {
+ map(self:P,system:P);
+ P.call(MyProcTemplate,1.0) to valueof(MyAddress(321,68)) {
+ []P.catch(MyProc,integer:389) from MyAddress(68,321) {
+ setverdict(pass);
+ }
+ []P.catch(timeout) {
+ setverdict(fail);
}
+ }
+ unmap(self:P,system:P);
+}
function signatureEncode(template MyProc par1, template MyProc par2) runs on addressComponent
{
log(par1, par2);
}
- // tests the 'param' directive in functions 'getcall' and 'getreply',
- // specificly with signatures containing 'inout' parameters (HT93096)
- testcase GetReplyParameters_tc() runs on ProcComponent3 {
- var ProcComponent3 c := ProcComponent3.create;
- connect(c:pt, self:pt);
- c.start(GetCallParameters_behav());
-
- var integer x := 0;
- pt.call(MyProc6:{c_CallParam}, 1.0) {
- [] pt.getreply(MyProc6:{t_getCall_invalidValue}) { setverdict(fail, "invalid getcall parameter"); }
- [] pt.getreply(MyProc6:{t_getCall_timeout}) { setverdict(fail, "getcall timed out"); }
- [] pt.getreply(MyProc6:{?}) -> param (x) {
- if (c_ReplyParam == x) { setverdict(pass); }
- else { setverdict(fail, "invalid getreply parameter"); }
- }
- [] pt.catch(timeout) { setverdict(fail, "getreply timed out"); }
- }
-
- c.done;
- }
-
- control {
- execute(Call_tc1());
- execute(Call_tc2());
- execute(extCall_tc1());
- execute(extCall_tc2());
- execute(extCall_tc3());
- execute(Call_MultiPTC_tc());
- execute(Call_MultiPTC_anyport_tc());
- execute(Check_tc1());
- execute(Check_tc2());
- execute(PortAddress_internal_usage());
- execute(PortAddress_external_usage1());
- execute(PortAddress_external_usage2());
- execute(GetReplyParameters_tc());
- }
+// tests the 'param' directive in functions 'getcall' and 'getreply',
+// specificly with signatures containing 'inout' parameters (HT93096)
+testcase tc_GetReplyParameters() runs on ProcComponent3 {
+ var ProcComponent3 c := ProcComponent3.create;
+ connect(c:pt, self:pt);
+ c.start(GetCallParameters_behav());
+
+ var integer x := 0;
+ pt.call(MyProc6:{c_CallParam}, 1.0) {
+ [] pt.getreply(MyProc6:{t_getCall_invalidValue}) { setverdict(fail, "invalid getcall parameter"); }
+ [] pt.getreply(MyProc6:{t_getCall_timeout}) { setverdict(fail, "getcall timed out"); }
+ [] pt.getreply(MyProc6:{?}) -> param (x) {
+ if (c_ReplyParam == x) { setverdict(pass); }
+ else { setverdict(fail, "invalid getreply parameter"); }
+ }
+ [] pt.catch(timeout) { setverdict(fail, "getreply timed out"); }
+ }
+
+ c.done;
+}
+
+control {
+ execute(tc1_Call());
+ execute(tc2_Call());
+ execute(tc_extCall());
+ execute(tc_extCall_2());
+ execute(tc_extCall_3());
+ execute(tc_Call_MultiPTC());
+ execute(tc_Call_MultiPTC_anyport());
+ execute(tc_Check_1());
+ execute(tc_Check_2());
+ execute(tc_PortAddress_internal_usage());
+ execute(tc_PortAddress_external_usage1());
+ execute(tc_PortAddress_external_usage2());
+ execute(tc_GetReplyParameters());
+}
}