Commit eff8023a authored by juvancic's avatar juvancic
Browse files

test configuration + init

parent eccb0e22
Loading
Loading
Loading
Loading
+471 −2
Original line number Original line Diff line number Diff line
@@ -11,7 +11,7 @@ module AtsImsIot_Functions {
 	import from AtsImsIot_TestSystem { type ImsTestCoordinator, ImsInterfaceMonitor; }
 	import from AtsImsIot_TestSystem { type ImsTestCoordinator, ImsInterfaceMonitor; }
 	import from LibIot_PIXITS { modulepar PX_MAX_MSG_WAIT, PX_PRODUCTS, PX_AVAILABLE_INTERFACES; }
 	import from LibIot_PIXITS { modulepar PX_MAX_MSG_WAIT, PX_PRODUCTS, PX_AVAILABLE_INTERFACES; }
	import from LibIot_Functions { function f_setConformanceVerdict, f_sendEquipmentCmd; }
	import from LibIot_Functions { function f_setConformanceVerdict, f_sendEquipmentCmd; }
 	import from AtsImsIot_TypesAndValues { type SipMessage, SipMessageList, NAPTRmessage, EnumMessage, SkipType; }
 	import from AtsImsIot_TypesAndValues { type SipMessage, SipMessageList, NAPTRmessage, EnumMessage, SkipType, DiameterMessageList, SkipTypeDiameter; }
    import from LibIms_UpperTester all;
    import from LibIms_UpperTester all;
 	import from LibUpperTester all;
 	import from LibUpperTester all;
	import from LibIot_TestInterface { type InterfaceMonitor, TestCoordinator, EquipmentUser; }
	import from LibIot_TestInterface { type InterfaceMonitor, TestCoordinator, EquipmentUser; }
@@ -19,6 +19,8 @@ module AtsImsIot_Functions {
	import from LibIot_TypesAndValues { type DefaultList; }
	import from LibIot_TypesAndValues { type DefaultList; }
    import from LibDiameter_TypesAndValues {type DIAMETER_MSG;}
    import from LibDiameter_TypesAndValues {type DIAMETER_MSG;}
    
    
	import from LibIot_VxLTE_Functions {function f_SipMonitorInterface_available,f_DiameterMonitorInterface_available;}
 	
 	group ue {
 	group ue {
 		
 		
 		/**
 		/**
@@ -2709,6 +2711,37 @@ module AtsImsIot_Functions {
			}
			}
		}
		}
		
		
		altstep a_default_sip(in charstring p_TP) runs on SipInterfaceMonitor {
			[] sipPort.receive(Request:?) {
				log(self, "### a_default_sip: Request default for " & p_TP );
				repeat; 
			}
			[] sipPort.receive(Response:?) {
				log(self, "### a_default_sip: Response default for " & p_TP );
				repeat; 
			}
			[] sipPort.receive {
				log(self, "*** a_default_sip: Received/ignored unexpected message when waiting for message complying to " & p_TP );
				//setverdict(fail, self, "### YANN: If execution is here, this means that the message was not properly decoded due to sip/sdp-codets exception, check MMagic logs");    
				//stop; // YANN: If execution is here, this means that the message was not properly decoded 
				repeat; 
			}
		}
		
		altstep a_default_diameter(in charstring p_TP) runs on DiameterInterfaceMonitor {
		[] diameterPort.receive(DIAMETER_MSG:?) {
			log(self, "### a_default_diameter: Request default for " & p_TP );
			repeat; 
		}
		[] diameterPort.receive {
			log(self, "*** a_default_diameter: Received/ignored unexpected message when waiting for message complying to " & p_TP );
			//setverdict(fail, self, "### YANN: If execution is here, this means that the message was not properly decoded due to sip/sdp-codets exception, check MMagic logs");    
			//stop; // YANN: If execution is here, this means that the message was not properly decoded 
			repeat; 
		}
	}
		
        
		/**
		/**
		* @desc This altstep add one alternative checking for a very specifc SIP request.
		* @desc This altstep add one alternative checking for a very specifc SIP request.
										If it matches then the conformance verdict is set to requested verdict
										If it matches then the conformance verdict is set to requested verdict
@@ -2744,6 +2777,41 @@ module AtsImsIot_Functions {
				}
				}
			}
			}
		}
		}
		/**
		* @desc This altstep add one alternative checking for a very specifc SIP request.
										If it matches then the conformance verdict is set to requested verdict
		* @param p_message The expected SIP request
		* @param p_verdict Verdict to be used in case of match
		* @param p_tpId The test purpose identifier
		* * @param p_forwardMtc indicates if the received request should be forwarded to mtc
		*/
		altstep a_receive_sip_Request(
			in template Request p_message,
			in verdicttype p_verdict,
			in charstring p_tpId,
			in boolean p_forwardMtc,
			in boolean p_checkMessage
		) runs on SipInterfaceMonitor {
			var Request v_message;
			[not p_checkMessage] sipPort.receive(p_message) -> value v_message {
				f_setConformanceVerdict(p_verdict, "***a_receive_sipRequest: Received expected SIP request complying to " & p_tpId & " on interface " & vc_interfaceName & " ***");
				if(p_forwardMtc) {
					var SipMessage v_msg;
					v_msg.request := v_message;
					log("### Forwarding message to MTC");	
					icpPort.send(v_msg);
				}
			}
			[p_checkMessage] sipPort.check(receive(p_message) -> value v_message) {
				f_setConformanceVerdict(p_verdict, "***a_receive_sipRequest: Checked expected SIP request complying to " & p_tpId & " on interface " & vc_interfaceName & " ***");
				if(p_forwardMtc) {
					var SipMessage v_msg;
					v_msg.request := v_message;
					log("### Forwarding message to MTC");
					icpPort.send(v_msg);
				}
			}
		}
		      
		      
		/**
		/**
		* @desc This altstep add one alternative checking for a very specifc SIP response.
		* @desc This altstep add one alternative checking for a very specifc SIP response.
@@ -2766,6 +2834,7 @@ module AtsImsIot_Functions {
				if(p_forwardMtc) {
				if(p_forwardMtc) {
					var SipMessage v_msg;
					var SipMessage v_msg;
					v_msg.response := v_message;
					v_msg.response := v_message;
					log("### Forwarding message to MTC");
					icpPort.send(v_msg);
					icpPort.send(v_msg);
				}
				}
			}
			}
@@ -2774,11 +2843,85 @@ module AtsImsIot_Functions {
				if(p_forwardMtc) {
				if(p_forwardMtc) {
					var SipMessage v_msg;
					var SipMessage v_msg;
					v_msg.response := v_message;
					v_msg.response := v_message;
					log("### Forwarding message to MTC");
					icpPort.send(v_msg);
				}
			}
		}
		/**
		* @desc This altstep add one alternative checking for a very specifc SIP response.
										If it matches then the conformance verdict is set to requested verdict
		* @param p_message The expected SIP response
		* @param p_verdict Verdict to be used in case of match
		* @param p_tpId The test purpose identifier
		* @param p_forwardMtc indicates if the received reponse should be forwarded to mtc
		*/
		altstep a_receive_sip_Response(
						in template Response p_message,
						in verdicttype p_verdict,
						in charstring p_tpId,
						in boolean p_forwardMtc,
						in boolean p_checkMessage
		) runs on SipInterfaceMonitor {
			var Response v_message;
			[not p_checkMessage] sipPort.receive(p_message) -> value v_message {
				f_setConformanceVerdict(p_verdict, "***a_receive_sipResponse: Received expected SIP request complying to " & p_tpId & " on interface " & vc_interfaceName & " ***");
				if(p_forwardMtc) {
					var SipMessage v_msg;
					v_msg.response := v_message;
					log("### Forwarding message to MTC");
					icpPort.send(v_msg);
				}
			}
			[p_checkMessage] sipPort.check(receive(p_message) -> value v_message) {
				f_setConformanceVerdict(p_verdict, "***a_receive_sipResponse: Checked expected SIP request complying to " & p_tpId & " on interface " & vc_interfaceName & " ***");
				if(p_forwardMtc) {
					var SipMessage v_msg;
					v_msg.response := v_message;
					log("### Forwarding message to MTC");
					icpPort.send(v_msg);
					icpPort.send(v_msg);
				}
				}
			}
			}
		}
		}
		
		
		/**
		* @desc This altstep add one alternative checking for a very specifc SIP response.
										If it matches then the conformance verdict is set to requested verdict
		* @param p_message The expected SIP response
		* @param p_verdict Verdict to be used in case of match
		* @param p_tpId The test purpose identifier
		* @param p_forwardMtc indicates if the received reponse should be forwarded to mtc
		*/
		altstep a_receive_diameter(
						in template DIAMETER_MSG p_message,
						in verdicttype p_verdict,
						in charstring p_tpId,
						in boolean p_forwardMtc,
						in boolean p_checkMessage
		) runs on DiameterInterfaceMonitor {
			var DIAMETER_MSG v_message;
			[not p_checkMessage] diameterPort.receive(p_message) -> value v_message {
				f_setConformanceVerdict(p_verdict, "***a_receive_diameter: Received expected diameter MSG complying to " & p_tpId & " on interface " & vc_interfaceName & " ***");
				if(p_forwardMtc) {
					var DIAMETER_MSG v_msg;
					v_msg := v_message;
					log("### Forwarding message to MTC");
					//icpPort.send(v_msg); //TODO: check how to sync diameter with MTC
				}
			}
			[p_checkMessage] diameterPort.check(receive(p_message) -> value v_message) {
				f_setConformanceVerdict(p_verdict, "***a_receive_diameter: Checked expected diameter_MSG complying to " & p_tpId & " on interface " & vc_interfaceName & " ***");
				if(p_forwardMtc) {
					var DIAMETER_MSG v_msg;
					v_msg := v_message;
					log("### Forwarding message to MTC");
					//icpPort.send(v_msg);//TODO: check how to sync diameter with MTC
				}
			}
		}
		
		
        
	}// end group
	}// end group
 	
 	
 	//function f_setInterfaceNameOnComponent(charstring p_name) runs on ImsInterfaceMonitor{
 	//function f_setInterfaceNameOnComponent(charstring p_name) runs on ImsInterfaceMonitor{
@@ -2900,6 +3043,70 @@ log ("### f_imsIot_receive: failCriteria=", p_failCriteria);
            
            
        }
        }
        
        
        /**
		* @desc This function implements skipping of messages as well as timeout handling.
		*       Prior to calling this function the message to be cheked for should be added
		*       as defaults.
		*       This function is independent of a specific interface component.
		* @param p_tpId The Test Purpose identifier
		* @param p_skipCount Indicate how many messages should be skipped prior to checking
		*/     
	   function f_gen_sip_receive( 
		 in charstring p_tpId,
		 in template SkipType p_skip
	   ) runs on SipInterfaceMonitor {
			   var integer skipCount := valueof(p_skip.skipCount);
			   tc_wait.start;

			   alt {
			   // preamble (consume prior messages)
			   [skipCount > 0 and ischosen(p_skip.skipMessage.request)] sipPort.receive (p_skip.skipMessage.request) {
				   skipCount := skipCount - 1;
				   log("***f_gen_sip_receive: Message skipped (intentionally) when checking for " & p_tpId & " at interface " & vc_interfaceName & " ****");
				   repeat;
			   }
			   [skipCount > 0 and ispresent(p_skip.skipMessage) and ischosen(p_skip.skipMessage.response)] sipPort.receive (p_skip.skipMessage.response) {
				   skipCount := skipCount - 1;
				   log("***f_gen_sip_receive: Message skipped (intentionally) when checking for " & p_tpId & " at interface " & vc_interfaceName & " ****");
				   repeat;
			   }
			   [] tc_wait.timeout {
				   f_setConformanceVerdict(inconc, "***f_gen_sip_receive: Timer tc_wait expired when waiting for incoming message in " & p_tpId & " at interface " & vc_interfaceName & " ****");
			   }
		   }
            
	   }
	   
	   /**
	   * @desc This function implements skipping of messages as well as timeout handling.
	   *       Prior to calling this function the message to be cheked for should be added
	   *       as defaults.
	   *       This function is independent of a specific interface component.
	   * @param p_tpId The Test Purpose identifier
	   * @param p_skipCount Indicate how many messages should be skipped prior to checking
	   */     
	  function f_gen_diameter_receive( 
		in charstring p_tpId,
		in template SkipTypeDiameter p_skip
	  ) runs on DiameterInterfaceMonitor {
			  var integer skipCount := valueof(p_skip.skipCount);
			  tc_wait.start;

			  alt {
			  // preamble (consume prior messages)
			  [skipCount > 0 and ispresent(p_skip.skipMessage)] diameterPort.receive (p_skip.skipMessage) {
				  skipCount := skipCount - 1;
				  log("***f_gen_diameter_receive: Message skipped (intentionally) when checking for " & p_tpId & " at interface " & vc_interfaceName & " ****");
				  repeat;
			  }
			  [] tc_wait.timeout {
				  f_setConformanceVerdict(inconc, "***f_gen_diameter_receive: Timer tc_wait expired when waiting for incoming message in " & p_tpId & " at interface " & vc_interfaceName & " ****");
			  }
		  }
            
	  }
        
        
		/**
		/**
		* @desc Activates for each entry in a expected IMS SIP message list a default 
		* @desc Activates for each entry in a expected IMS SIP message list a default 
		*       for receiving that message and setting the verdict as desired
		*       for receiving that message and setting the verdict as desired
@@ -2938,6 +3145,268 @@ log ("### f_imsIot_receive: failCriteria=", p_failCriteria);
//log ("### f_activateImsSipDefaults: ended");
//log ("### f_activateImsSipDefaults: ended");
		}
		}
		
		
		/**
		* @desc Activates for each entry in a expected IMS SIP message list a default 
		*       for receiving that message and setting the verdict as desired
		* @param p_default Reference to default array where deaults are to be added
		* @param p_startIdx Index into default array after which references for 
		*                   defaults created in this function should be added
		* @param p_list List of expected messages to be checked in default
		* @param p_verdict Verdict to be set in case the incoming message matches 
						   any of the expcted messages 
		* @param p_tpId Test Purpose identifir
		*/
		function f_activateSipDefaults(
			inout DefaultList p_default,
			in integer p_startIdx,
			in template SipMessageList p_list,
			in verdicttype p_verdict,
			in charstring p_tpId,
			in boolean p_forwardMtc,
			in boolean p_checkMessage
		) runs on SipInterfaceMonitor {
			var integer v_size := lengthof(p_list); 
			var integer v_idx := p_startIdx;

			for (var integer i := 0; i < v_size; i := i + 1) {
				if (ischosen(p_list[i].request)) {
					p_default[v_idx] := activate(
						a_receive_sip_Request(p_list[i].request,p_verdict, p_tpId, p_forwardMtc, p_checkMessage)
					);
				} else {
					p_default[v_idx] := activate(
						a_receive_sip_Response(p_list[i].response,p_verdict, p_tpId, p_forwardMtc, p_checkMessage)
					);
				}
				v_idx := v_idx + 1;
			}
//log ("### f_activateImsSipDefaults: ended");
		}
		
		/**
		* @desc Activates for each entry in a expected IMS SIP message list a default 
		*       for receiving that message and setting the verdict as desired
		* @param p_default Reference to default array where deaults are to be added
		* @param p_startIdx Index into default array after which references for 
		*                   defaults created in this function should be added
		* @param p_list List of expected messages to be checked in default
		* @param p_verdict Verdict to be set in case the incoming message matches 
						   any of the expcted messages 
		* @param p_tpId Test Purpose identifir
		*/
		function f_activateDiameterDefaults(
			inout DefaultList p_default,
			in integer p_startIdx,
			in template DiameterMessageList p_list,
			in verdicttype p_verdict,
			in charstring p_tpId,
			in boolean p_forwardMtc,
			in boolean p_checkMessage
		) runs on DiameterInterfaceMonitor {
			var integer v_size := lengthof(p_list); 
			var integer v_idx := p_startIdx;

			for (var integer i := 0; i < v_size; i := i + 1) {
				if (isvalue(p_list[i])) {
					p_default[v_idx] := activate(
					a_receive_diameter(p_list[i],p_verdict, p_tpId, p_forwardMtc, p_checkMessage)
					);
				} 
//				else {
//					p_default[v_idx] := activate(
//						a_receive_diameter_Response(p_list[i].response,p_verdict, p_tpId, p_forwardMtc, p_checkMessage)
//					);
//				}
				v_idx := v_idx + 1;
			}
//log ("### f_activateImsSipDefaults: ended");
		}
		
		
		/**
		* @desc
		*     Generic function for reading and verifying messages on the
		*     interface associated to the ImsInterfaceMonitor instance. This
		*     functions works as follows: First, messages are skipped according
		*     to the p_skip template. The p_skip template contains a message
		*     template and a counter indicating the number of received messages
		*     matching the message template to be skipped. If not enough
		*     messages matching the message template arrive at the interface,
		*     the function fails after timout. Next, messages are consumed from
		*     the interface and matched against the p_passCriteria template
		*     list and the p_failCriteria template list. The function
		*     terminates with pass if a message is received matching a
		*     pass-template and terminates with fail if a fail-template
		*     matches. Matching against pass-templates occurs bevor matching
		*     agains fail-templates. If neither pass-templates nor
		*     fail-templates match, then the functions continues reading from
		*     the interface until a match arises, or timeout. The timeout value
		*     is given by PX_MAX_MSG_WAIT [5.0 seconds, FFS]. Finally, if
		*     p_forwardMtc is set to true, the last received message is stored
		*     to be fetched and used later by the main test component. Some
		*     special use cases: - Set p_skip.skipCounter to 0 to avoid
		*     skipping, i.e. no skippin - Set p_skip.skipCounter to 0 and
		*     p_skip.skipMessage to ? to skip exactly one message of any type
		*     will be skipped. - If the list of fail-templates is empty, then
		*     the function will wait for the first message maching a
		*     pass-message, or fail after timeout.
		* @param p_passCriteria list of message templates which lead to pass
		* @param p_failCriteria list of message templates which lead to fail
		* @param p_skip
		*     Indicate how many messages from a specific sip template should be
		*     skipped prior to checking
		* @param p_tpId The Test Purpose identifier
		* @param p_forwardMtc
		*     indicate if the received Sip message should be forwarded to the
		*     mtc
		* @param p_checkMessage
		*     indicate if the incomming message should only be checked
		*     (port.check) or consumed (port.receive). The check operation
		*     allows read access to the top element of incoming port queues
		*     without removing the top element from the queue.
		*/     
	   function f_Iot_Sip_receive( 
		 in template SipMessageList p_passCriteria,
		 in template SipMessageList p_failCriteria,
		 in template SkipType p_skip,
		 in charstring p_tpId,
		 in boolean p_forwardMtc,
		 in boolean p_checkMessage
	   ) runs on SipInterfaceMonitor { 
		   var integer v_size := lengthof(p_failCriteria); 
		   var DefaultList v_defaultArray;
		   var integer i := 0;
		   var integer v_size_ai := lengthof(PX_AVAILABLE_INTERFACES);

		   log ("### f_Iot_Sip_receive: passCriteria=", p_passCriteria);
		   log ("### f_Iot_Sip_receive: failCriteria=", p_failCriteria);
			
		   // check if interface is available
		   if (ImsTestCoordinator.f_SipMonitorInterface_available(vc_interfaceName)==false){
			   setverdict(inconc, self, "******f_Iot_Sip_receive: Interface " & vc_interfaceName & " not available and is not evaluated******" );
		   }else{// Interface is available
			   v_defaultArray[0] := activate(a_default_sip(p_tpId));
			   f_activateSipDefaults(v_defaultArray, 1, p_failCriteria, fail, p_tpId, p_forwardMtc, p_checkMessage);
			   f_activateSipDefaults(v_defaultArray, v_size + 1, p_passCriteria, pass, p_tpId, p_forwardMtc, p_checkMessage);
			   f_gen_sip_receive(p_tpId, p_skip);
	
			   for (i := 0; i < lengthof(v_defaultArray); i := i + 1) {
				   deactivate(v_defaultArray[i]);
			   }
			
		   }			
			
//		   for(i := 0; i < v_size_ai; i := i+1) {
//			   if (PX_AVAILABLE_INTERFACES[i].interfaceName == vc_interfaceName) {
//				   if (PX_AVAILABLE_INTERFACES[i].available == false) {
//					   setverdict(inconc, self, "******f_imsIot_receive: Interface " & PX_AVAILABLE_INTERFACES[i].interfaceName & " not available and is not evaluated******" );
//				   } else { // Interface is available
//					   v_defaultArray[0] := activate(a_default(p_tpId));
//					   f_activateImsSipDefaults(v_defaultArray, 1, p_failCriteria, fail, p_tpId, p_forwardMtc, p_checkMessage);
//					   f_activateImsSipDefaults(v_defaultArray, v_size + 1, p_passCriteria, pass, p_tpId, p_forwardMtc, p_checkMessage);
//					   f_gen_receive(p_tpId, p_skip);
//	
//					   for (i := 0; i < lengthof(v_defaultArray); i := i + 1) {
//						   deactivate(v_defaultArray[i]);
//					   }
//				   }
//				   break; // Exit loop
//			   }	
//		   } // 'for' loop           
	   }
       
		/**
		 * @desc
		 *     Generic function for reading and verifying messages on the
		 *     interface associated to the ImsInterfaceMonitor instance. This
		 *     functions works as follows: First, messages are skipped according
		 *     to the p_skip template. The p_skip template contains a message
		 *     template and a counter indicating the number of received messages
		 *     matching the message template to be skipped. If not enough
		 *     messages matching the message template arrive at the interface,
		 *     the function fails after timout. Next, messages are consumed from
		 *     the interface and matched against the p_passCriteria template
		 *     list and the p_failCriteria template list. The function
		 *     terminates with pass if a message is received matching a
		 *     pass-template and terminates with fail if a fail-template
		 *     matches. Matching against pass-templates occurs bevor matching
		 *     agains fail-templates. If neither pass-templates nor
		 *     fail-templates match, then the functions continues reading from
		 *     the interface until a match arises, or timeout. The timeout value
		 *     is given by PX_MAX_MSG_WAIT [5.0 seconds, FFS]. Finally, if
		 *     p_forwardMtc is set to true, the last received message is stored
		 *     to be fetched and used later by the main test component. Some
		 *     special use cases: - Set p_skip.skipCounter to 0 to avoid
		 *     skipping, i.e. no skippin - Set p_skip.skipCounter to 0 and
		 *     p_skip.skipMessage to ? to skip exactly one message of any type
		 *     will be skipped. - If the list of fail-templates is empty, then
		 *     the function will wait for the first message maching a
		 *     pass-message, or fail after timeout.
		 * @param p_passCriteria list of message templates which lead to pass
		 * @param p_failCriteria list of message templates which lead to fail
		 * @param p_skip
		 *     Indicate how many messages from a specific sip template should be
		 *     skipped prior to checking
		 * @param p_tpId The Test Purpose identifier
		 * @param p_forwardMtc
		 *     indicate if the received Sip message should be forwarded to the
		 *     mtc
		 * @param p_checkMessage
		 *     indicate if the incomming message should only be checked
		 *     (port.check) or consumed (port.receive). The check operation
		 *     allows read access to the top element of incoming port queues
		 *     without removing the top element from the queue.
		 */     
		function f_Iot_Diameter_receive( 
		  in template DiameterMessageList p_passCriteria,
		  in template DiameterMessageList p_failCriteria,
		  in template SkipTypeDiameter p_skip,
		  in charstring p_tpId,
		  in boolean p_forwardMtc,
		  in boolean p_checkMessage
		) runs on DiameterInterfaceMonitor { 
			var integer v_size := lengthof(p_failCriteria); 
			var DefaultList v_defaultArray;
			var integer i := 0;
			var integer v_size_ai := lengthof(PX_AVAILABLE_INTERFACES);

			log ("### f_Iot_Diameter_receive: passCriteria=", p_passCriteria);
			log ("### f_Iot_Diameter_receive: failCriteria=", p_failCriteria);
			
			// check if interface is available
			if (f_DiameterMonitorInterface_available(vc_interfaceName)==false){
				setverdict(inconc, self, "******f_Iot_Diameter_receive: Interface " & vc_interfaceName & " not available and is not evaluated******" );
			}else{// Interface is available
				v_defaultArray[0] := activate(a_default_diameter(p_tpId));
				f_activateDiameterDefaults(v_defaultArray, 1, p_failCriteria, fail, p_tpId, p_forwardMtc, p_checkMessage);
				f_activateDiameterDefaults(v_defaultArray, v_size + 1, p_passCriteria, pass, p_tpId, p_forwardMtc, p_checkMessage);
				f_gen_diameter_receive(p_tpId, p_skip);
	
				for (i := 0; i < lengthof(v_defaultArray); i := i + 1) {
					deactivate(v_defaultArray[i]);
				}
			
			}			
			
//			for(i := 0; i < v_size_ai; i := i+1) {
//				if (PX_AVAILABLE_INTERFACES[i].interfaceName == vc_interfaceName) {
//					if (PX_AVAILABLE_INTERFACES[i].available == false) {
//						setverdict(inconc, self, "******f_imsIot_receive: Interface " & PX_AVAILABLE_INTERFACES[i].interfaceName & " not available and is not evaluated******" );
//					} else { // Interface is available
//						v_defaultArray[0] := activate(a_default(p_tpId));
//						f_activateImsSipDefaults(v_defaultArray, 1, p_failCriteria, fail, p_tpId, p_forwardMtc, p_checkMessage);
//						f_activateImsSipDefaults(v_defaultArray, v_size + 1, p_passCriteria, pass, p_tpId, p_forwardMtc, p_checkMessage);
//						f_gen_receive(p_tpId, p_skip);
//	
//						for (i := 0; i < lengthof(v_defaultArray); i := i + 1) {
//							deactivate(v_defaultArray[i]);
//						}
//					}
//					break; // Exit loop
//				}	
//			} // 'for' loop           
		}
        
	}//end group
	}//end group