minor bugfixes

Signed-off-by: Antal Wu-Hen-Chang <antal.wu-hen-chang@ericsson.com>
diff --git a/src/LoadGen/EPTF_MBT_LGen_Definitions.ttcn b/src/LoadGen/EPTF_MBT_LGen_Definitions.ttcn
index 92ffacd..10ad297 100755
--- a/src/LoadGen/EPTF_MBT_LGen_Definitions.ttcn
+++ b/src/LoadGen/EPTF_MBT_LGen_Definitions.ttcn
@@ -108,6 +108,13 @@
 ///////////////////////////////////////////////////////////////////////////////
 const charstring c_EPTF_MBT_inputName_incomingTestStepRequest := "EPTF_MBT_inputName_incomingTestStepRequest";
 
+const integer    c_EPTF_MBT_inputIdx_reportedVerdict := 2;
+const charstring c_EPTF_MBT_inputName_reportedVerdict := "EPTF_MBT_inputName_reportedVerdict";
+
+const integer c_EPTF_MBT_reportedVerdict_pass := 0;
+const integer c_EPTF_MBT_reportedVerdict_fail := 1;
+const integer c_EPTF_MBT_reportedVerdict_inconc := 2;
+
 
 
 //*******************************************************************************************************
@@ -168,6 +175,12 @@
 ///////////////////////////////////////////////////////////////////////////////
 const charstring c_EPTF_MBT_stepName_invokeUserFunction :="EPTF_MBT_stepName_invokeUserFunction";
 
+const integer c_EPTF_MBT_stepIdx_setMainFSM := 2;
+const charstring c_EPTF_MBT_stepName_setMainFSM := "EPTF_MBT_stepName_setMainFSM";
+
+const integer c_EPTF_MBT_stepIdx_reportVerdict := 3;
+const charstring c_EPTF_MBT_stepName_reportVerdict := "EPTF_MBT_stepName_reportVerdict";
+
 
 //*******************************************************************************************************
 //                                                 Component Type                         
@@ -459,9 +472,10 @@
 ///////////////////////////////////////////////////////////////////////////////
 type record EPTF_MBT_TestStepResponse 
 {
-  charstring bName,
-  charstring iName,
-  FsmAddr    addr optional
+  charstring    bName,
+  charstring    iName,
+  FsmAddr       addr optional,
+  EPTF_IntegerList  args optional
 }
 
 ///////////////////////////////////////////////////////////////////////////////
diff --git a/src/LoadGen/EPTF_MBT_LGen_Functions.ttcn b/src/LoadGen/EPTF_MBT_LGen_Functions.ttcn
index 843025d..37cc14a 100644
--- a/src/LoadGen/EPTF_MBT_LGen_Functions.ttcn
+++ b/src/LoadGen/EPTF_MBT_LGen_Functions.ttcn
@@ -106,7 +106,7 @@
   
   activate(as_EPTF_MBT_PCO_Handler());
   
-  map(self:EPTF_MBT_PCO, system:EPTF_MBT_PCO);
+  //map(self:EPTF_MBT_PCO, system:EPTF_MBT_PCO);
   
   v_EPTF_MBT_initialized := true;
 }
@@ -136,7 +136,7 @@
   
   if (v_EPTF_MBT_initialized)
   {
-    unmap(self:EPTF_MBT_PCO, system:EPTF_MBT_PCO);
+    //unmap(self:EPTF_MBT_PCO, system:EPTF_MBT_PCO);
     
     v_EPTF_MBT_initialized := false;
   }
@@ -165,11 +165,13 @@
 {
   f_EPTF_Logging_debug(tsp_EPTF_MBT_LGen_debug, "### " & %definitionId);
   var integer vl_temp := -1;
-  
+
   vl_temp := f_EPTF_LGenBase_declareFsmEvent(c_EPTF_MBT_myBName,c_EPTF_MBT_inputName_incomingUserRequest);
   f_EPTF_Base_assert(%definitionId&": Error during registration of "&c_EPTF_MBT_inputName_incomingUserRequest, vl_temp == c_EPTF_MBT_inputIdx_incomingUserRequest);
   vl_temp := f_EPTF_LGenBase_declareFsmEvent(c_EPTF_MBT_myBName,c_EPTF_MBT_inputName_incomingTestStepRequest);
   f_EPTF_Base_assert(%definitionId&": Error during registration of "&c_EPTF_MBT_inputName_incomingTestStepRequest, vl_temp == c_EPTF_MBT_inputIdx_incomingTestStepRequest);
+  vl_temp := f_EPTF_LGenBase_declareFsmEvent(c_EPTF_MBT_myBName,c_EPTF_MBT_inputName_reportedVerdict);
+  f_EPTF_Base_assert(%definitionId&": Error during registration of "&c_EPTF_MBT_inputName_reportedVerdict, vl_temp == c_EPTF_MBT_inputIdx_reportedVerdict);
   
 }
 ///////////////////////////////////////////////////////////////////////////////
@@ -208,6 +210,14 @@
     pl_bName:=c_EPTF_MBT_myBName, 
     pl_step:={name:=c_EPTF_MBT_stepName_sendUserResponse,
       step:=refers(f_EPTF_MBT_TestStep_sendUserResponse)});
+  f_EPTF_LGenBase_declareStep(
+    pl_bName:=c_EPTF_MBT_myBName, 
+    pl_step:={name:=c_EPTF_MBT_stepName_setMainFSM,
+      step:=refers(f_EPTF_MBT_TestStep_setMainFSM)});
+  f_EPTF_LGenBase_declareStep(
+    pl_bName:=c_EPTF_MBT_myBName, 
+    pl_step:={name:=c_EPTF_MBT_stepName_reportVerdict,
+      step:=refers(f_EPTF_MBT_TestStep_reportVerdict)});
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -401,7 +411,7 @@
 
     var integer vl_grpIdx := f_EPTF_LGenBase_getEGrpOfEntity(pl_ptr.eIdx);
     var integer vl_eIdx := pl_ptr.eIdx - f_EPTF_LGenBase_getEGrpBaseOffset(vl_grpIdx);
-    
+
     var EPTF_MBT_TestStepResponse vl_resp :=
     {
       bName := f_EPTF_LGenBase_bIdx2Str(pl_ptr.reportedEvent.event.bIdx),
@@ -411,7 +421,8 @@
         entityGroupName := f_EPTF_LGenBase_entityGroupName(vl_grpIdx),
         eIdx := pl_ptr.eIdx,
         fIdx := pl_ptr.refContext.fCtxIdx
-      }
+      },
+      args := pl_ptr.reportedEvent.reportedArgs
     }
     f_EPTF_Logging_debug(tsp_EPTF_MBT_LGen_debug, log2str(%definitionId & "() user response: ", vl_resp));
     
@@ -478,7 +489,7 @@
 
   var integer vl_grpIdx := f_EPTF_LGenBase_getEGrpOfEntity(pl_ptr.eIdx);
   var integer vl_eIdx := pl_ptr.eIdx - f_EPTF_LGenBase_getEGrpBaseOffset(vl_grpIdx);
-  
+
   var EPTF_MBT_TestStepResponse vl_resp :=
   {
     bName := c_EPTF_MBT_myBName,
@@ -488,13 +499,47 @@
       entityGroupName := f_EPTF_LGenBase_entityGroupName(vl_grpIdx),
       eIdx := pl_ptr.eIdx,
       fIdx := pl_ptr.refContext.fCtxIdx
-    }
+    },
+    args := pl_ptr.reportedEvent.reportedArgs
   }
   var EPTF_IntegerList vl_ctx := f_EPTF_LGenBase_getBehaviorCtx(pl_ptr.eIdx, v_EPTF_MBT_myBIdx);
   f_EPTF_Logging_debug(tsp_EPTF_MBT_LGen_debug, log2str(%definitionId & "() user response: ", vl_resp));
   EPTF_MBT_PCO.send(vl_resp) to f_EPTF_Base_downcast(vl_ctx[0]);  
 }
 
+function f_EPTF_MBT_TestStep_setMainFSM(in EPTF_LGenBase_TestStepArgs pl_ptr) runs on EPTF_MBT_LGen_CT
+{
+  if (sizeof(pl_ptr.refContext.fRefArgs)==2)
+  {
+    var integer vl_eIdx := pl_ptr.refContext.fRefArgs[0];
+    var integer vl_fIdx := pl_ptr.refContext.fRefArgs[1];
+
+    f_EPTF_LGenBase_setBehaviorCtxItem(pl_ptr.eIdx, v_EPTF_MBT_myBIdx, 1, vl_eIdx);
+    f_EPTF_LGenBase_setBehaviorCtxItem(pl_ptr.eIdx, v_EPTF_MBT_myBIdx, 2, vl_fIdx);
+  }
+  else
+  {
+    f_EPTF_Logging_warning(true, log2str("### " & %definitionId & "(): Invalid parametrization, two parameters are required ", pl_ptr.refContext.fRefArgs));
+  }
+}
+
+function f_EPTF_MBT_TestStep_reportVerdict(in EPTF_LGenBase_TestStepArgs pl_ptr) runs on EPTF_MBT_LGen_CT
+{
+  if (sizeof(pl_ptr.refContext.fRefArgs)==1)
+  {
+    var integer vl_verdict := pl_ptr.refContext.fRefArgs[0];
+
+    var integer vl_eIdx := f_EPTF_LGenBase_getBehaviorCtxItem(pl_ptr.eIdx, v_EPTF_MBT_myBIdx, 1);
+    var integer vl_fIdx := f_EPTF_LGenBase_getBehaviorCtxItem(pl_ptr.eIdx, v_EPTF_MBT_myBIdx, 2);
+
+    f_EPTF_LGenBase_postEvent({{v_EPTF_MBT_myBIdx, c_EPTF_MBT_inputIdx_reportedVerdict,{vl_eIdx, vl_fIdx}, omit},{vl_verdict}});
+  }
+  else
+  {
+    f_EPTF_Logging_warning(true, log2str("### " & %definitionId & "(): Invalid parametrization, one parameter is required ", pl_ptr.refContext.fRefArgs));
+  }
+}
+
 ///////////////////////////////////////////////////////////////////////////////
 //  Function: f_EPTF_MBT_Listener_catchEntityEvents
 // 
@@ -724,7 +769,7 @@
 
       var integer vl_fIdx := f_EPTF_LGenBase_activateFsm(vl_entityIdx, vl_fsmTableIdx, 0, -1);
       f_EPTF_LGenBase_setBehaviorCtx(vl_entityIdx, v_EPTF_MBT_myBIdx, {vl_senderInt});
-      f_EPTF_LGenBase_addEntityIdxListener(vl_entityIdx, refers(f_EPTF_MBT_Listener_catchEntityEvents), {})
+      //f_EPTF_LGenBase_addEntityIdxListener(vl_entityIdx, refers(f_EPTF_MBT_Listener_catchEntityEvents), {}); // FIXME: only if MBT_FSM is actiavted on a new entity
 
       var EPTF_MBT_CreateFSMResponse vl_resp :=
       {
@@ -985,7 +1030,7 @@
 function f_MBT_execute(in charstring p_name, in EPTF_MBT_LGen_Definitions.FsmAddr p_addr, in EPTF_IntegerList p_params := {}, in boolean p_lock := true)
 runs on EPTF_MBT_Tester_CT
 {
-  action(%definitionId, "TestStep: ", p_name)
+  action(%definitionId, " TestStep: ", p_name)
   if (p_lock)
   {
     var integer v_lock := f_EPTF_Semaphore_new();
@@ -1022,29 +1067,26 @@
 //
 ///////////////////////////////////////////////////////////////////////////////
 function f_MBT_waitFor(
-  in charstring p_behavior, in charstring p_name, 
-  in EPTF_MBT_LGen_Definitions.FsmAddr p_addr, in float p_timeout := 3.0)
+  in charstring p_behavior, in template charstring p_name, 
+  in template EPTF_MBT_LGen_Definitions.FsmAddr p_addr, in float p_timeout := 30.0)
 runs on EPTF_MBT_Tester_CT
 return boolean
 {
+  var EPTF_MBT_TestStepResponse vl_testStepResp;
+  
   timer t_wait;
   t_wait.start(p_timeout);
   alt
   {
-    [] EPTF_MBT_TESTER_PCO.receive(EPTF_MBT_TestStepResponse:{ bName := p_behavior, iName := p_name, addr := p_addr})
+    [] EPTF_MBT_TESTER_PCO.receive(EPTF_MBT_TestStepResponse:{ bName := p_behavior, iName := p_name, addr := p_addr, args := *})
       { 
         t_wait.stop; 
-        action(%definitionId, "Received: ", p_name)
+        action(%definitionId, " Received: ", p_name)
         return true;
       }
-    [] EPTF_MBT_TESTER_PCO.receive
-      { 
-        action(%definitionId, "Dropping unexpected message!")
-        repeat;
-      }
     [] t_wait.timeout
       {
-        action(%definitionId, "Timeout!")
+        action(%definitionId, " Timeout!")
         return false;
       }
   }
@@ -1075,7 +1117,7 @@
 function f_MBT_dispatch(in charstring p_bName, in integer p_iIndex, in EPTF_MBT_LGen_Definitions.FsmAddr p_addr)
 runs on EPTF_MBT_Tester_CT
 {
-  action(%definitionId, "Dispatching: ", p_bName, ":",p_iIndex, " to ",p_addr)
+  action(%definitionId, " Dispatching: ", p_bName, ":",p_iIndex, " to ",p_addr)
   EPTF_MBT_TESTER_PCO.send(EPTF_MBT_EventDispatchRequest: {p_bName, p_iIndex, p_addr});
 }
 
@@ -1106,6 +1148,7 @@
 runs on EPTF_MBT_Tester_CT
 return integer
 {
+    action(%definitionId, " Activating: ", p_fsmName, " on entity: ",p_eIdx)
     EPTF_MBT_TESTER_PCO.send(EPTF_MBT_CreateFSMRequest:
     {
       entityGroupName := p_entityGroupName,