From 0baa174855cb263fc13eed6bc025f99ed03568e8 Mon Sep 17 00:00:00 2001
From: pkulkarni <pkulkarni75@gmail.com>
Date: Wed, 4 Jul 2018 16:51:12 +0200
Subject: [PATCH] Implemented TP AE/PCH/001

---
 LibOneM2M/OneM2M_Functions.ttcn    | 44 +++++++++++++++
 LibOneM2M/OneM2M_Templates.ttcn    |  4 +-
 OneM2M_PermutationFunctions.ttcn   |  2 +-
 OneM2M_Testcases_AE_Release_1.ttcn | 91 ++++++++++++++++++++++++++++++
 4 files changed, 138 insertions(+), 3 deletions(-)

diff --git a/LibOneM2M/OneM2M_Functions.ttcn b/LibOneM2M/OneM2M_Functions.ttcn
index 3ac2991..3bb9ebc 100644
--- a/LibOneM2M/OneM2M_Functions.ttcn
+++ b/LibOneM2M/OneM2M_Functions.ttcn
@@ -2854,6 +2854,50 @@ module OneM2M_Functions {
 				// Error
 				return p_resource;
 			}
+			
+			function f_ae_createPollingChannel(template UtTriggerPrimitive p_utRequest := m_utCreateAe) runs on CseSimu return integer {
+
+				var MsgIn v_request;
+				var PrimitiveContent v_modifiedResource;
+				var integer v_resourceIndex, v_parentIndex;
+				var RequestPrimitive v_rp;
+				var charstring v_action := "Please, create a Polling Channel resource on the Tester";
+	
+				if(not(ispresent(p_utRequest.requestPrimitive.primitiveContent))) {
+					p_utRequest.requestPrimitive.primitiveContent.pollingChannel := m_contentCreatePollingChannel;
+				}
+
+				f_sendUtPrimitive(p_utRequest, v_action);
+	
+				tc_ac.start;
+				alt {    				
+					[] mcaPortIn.receive(mw_request(mw_createPollingChannel(?,?))) -> value v_request {
+						tc_ac.stop;
+			
+						v_rp := v_request.primitive.requestPrimitive;		
+						v_parentIndex := f_getResourceIndex(v_rp.to_);
+						v_modifiedResource := f_ae_generateLocalResource(v_rp.primitiveContent, v_parentIndex, v_rp.resourceType);
+						v_resourceIndex := f_setLocalResource(v_modifiedResource, int2, v_parentIndex);
+						if(v_resourceIndex != -1) {
+							mcaPortIn.send(m_response(m_responsePrimitive_content(int2001, v_rp.requestIdentifier, v_modifiedResource)));
+							setverdict(pass, __SCOPE__&":INFO: Polling Channel created successfuly");
+						}
+						else {
+							mcaPortIn.send(m_response(m_responsePrimitive(int5000, v_request.primitive.requestPrimitive.requestIdentifier)));
+							setverdict(inconc, __SCOPE__&":INFO: Polling Channel creation failed");
+						}					
+					}
+			
+					[] tc_ac.timeout {
+						setverdict(inconc, __SCOPE__&":INFO: Polling Channel create request not received");
+						stop;
+					}	     				   	
+				}    
+	
+				f_checkCseSimuStatus();	
+	
+				return v_resourceIndex;	
+			} //end function f_ae_createPollingChannel
 
 		} // end helpingFunctions
 		
diff --git a/LibOneM2M/OneM2M_Templates.ttcn b/LibOneM2M/OneM2M_Templates.ttcn
index 98a318a..0594268 100644
--- a/LibOneM2M/OneM2M_Templates.ttcn
+++ b/LibOneM2M/OneM2M_Templates.ttcn
@@ -4676,9 +4676,9 @@ module OneM2M_Templates {
 			forcedFields := omit
 		};
 		
-		template (value) UtTriggerPrimitive m_utRetrievePollingChannel(XSD.ID p_targetResourceAddress) modifies m_utRetrieve := {
+		template (value) UtTriggerPrimitive m_utRetrievePollingChannelUri(XSD.ID p_targetResourceAddress) modifies m_utRetrieve := {
 			requestPrimitive := {
-				requestIdentifier := testcasename() & "-m_utRetrievePollingChannel" & f_rnd(1, 1000000),
+				requestIdentifier := testcasename() & "-m_utRetrievePollingChannelUri" & f_rnd(1, 1000000),
 				resourceType := int15,
 				primitiveContent := {pollingChannel := m_contentRetrievePollingChannel}
 			}
diff --git a/OneM2M_PermutationFunctions.ttcn b/OneM2M_PermutationFunctions.ttcn
index b1045d2..a0719a1 100644
--- a/OneM2M_PermutationFunctions.ttcn
+++ b/OneM2M_PermutationFunctions.ttcn
@@ -8298,7 +8298,7 @@ module OneM2M_PermutationFunctions {
 				}
    
 				//Trigger IUT for sending a polling request (req1)
-				v_utRequest2 := valueof(m_utRetrievePollingChannel(f_getLocalResourceAddress(v_localResourceIndex) & "/" & c_resourceShortNamePollingChannelUri));
+				v_utRequest2 := valueof(m_utRetrievePollingChannelUri(f_getLocalResourceAddress(v_localResourceIndex) & "/" & c_resourceShortNamePollingChannelUri));
 				f_sendUtPrimitive(v_utRequest2,v_action2);
 	
 				tc_ac.start;
diff --git a/OneM2M_Testcases_AE_Release_1.ttcn b/OneM2M_Testcases_AE_Release_1.ttcn
index b16c04c..2722f4e 100644
--- a/OneM2M_Testcases_AE_Release_1.ttcn
+++ b/OneM2M_Testcases_AE_Release_1.ttcn
@@ -2183,6 +2183,97 @@ module OneM2M_Testcases_AE_Release_1 {
 
 
 		}//end SUB subgroup
+		
+		group Polling {
+			
+			/**
+			 * @desc Check that the IUT which performs polling sends the Notify request to <pollingChannelURI> Hosting CSE after receiving response using polling channel
+			 */
+			testcase TC_AE_PCH_001() runs on Tester system AeSystem {
+			   
+				var CseSimu v_cse1 := CseSimu.create("CSE1") alive;
+				v_cse1.start(f_AE_PCH_001());
+				v_cse1.done;
+			}
+			
+			function f_AE_PCH_001() runs on CseSimu {
+			//Local variables
+			  var integer v_pollingChannelIndex := -1;
+			  var integer v_aeIndex := -1;
+			  var MsgIn v_request_req1, v_request_req3;
+			  var RequestPrimitive v_request_req2;
+			  var ResponsePrimitive v_response_rsp1;
+			  var template UtTriggerPrimitive v_utRequest1 := m_utCreateAe;
+			  var template UtTriggerPrimitive v_utRequest2 := m_utCreatePollingChannel;
+			  var template UtTriggerPrimitive v_utRequest3;
+			  var charstring v_action3 := "Please, send a Polling request (Retrieve PollingChannelURI request)";
+			  var RequestPrimitive v_requestNotify;
+   
+			  //Test control
+
+			  // Test component configuration
+			  f_cf03Up();
+
+			  // Test adapter configuration
+
+			   // Preamble
+			  v_aeIndex := f_ae_preamble_registerAe(v_utRequest1);
+   
+   			  f_checkCseSimuStatus();
+			 
+			  //Create a function to receive the Create PollingChannel and to send the response
+			  v_pollingChannelIndex := f_ae_createPollingChannel(v_utRequest2);
+			    				
+			  f_checkCseSimuStatus();
+			  
+			  //Trigger IUT for sending a polling request (req1)
+			  v_utRequest3 := valueof(m_utRetrievePollingChannelUri(f_getLocalResourceAddress(v_pollingChannelIndex) & "/" & c_resourceShortNamePollingChannelUri));
+			  f_sendUtPrimitive(v_utRequest3,v_action3);
+
+			  tc_ac.start;
+			  alt {
+				  [] mcaPortIn.receive(mw_request(mw_retrieve(f_getLocalResourceAddress(v_pollingChannelIndex) & "/" & c_resourceShortNamePollingChannelUri))) -> value v_request_req1 {
+					  tc_ac.stop;
+					  setverdict(pass, __SCOPE__&":INFO: Polling request received successfuly");
+					  v_response_rsp1 := valueof(m_responsePrimitive(int2000,v_request_req1.primitive.requestPrimitive.requestIdentifier));
+					  v_response_rsp1.from_ := PX_CSE1_ID;
+					  v_response_rsp1.to_ := v_request_req1.primitive.requestPrimitive.from_;
+					  //Put in the primitiveContent a Notify request (req2) (simulated) from another node CSE
+					  v_request_req2 := valueof(m_notify(f_getLocalResourceAddress(v_pollingChannelIndex)));
+					  v_response_rsp1.primitiveContent := { requestPrimitive := v_request_req2 };
+					  mcaPortIn.send(m_response(v_response_rsp1));
+				 }
+				 [] tc_ac.timeout {
+					 setverdict(inconc, __SCOPE__&":INFO: No request received for creating resource type Polling Channel");
+				 }
+			  }
+			  
+			  f_checkCseSimuStatus();
+
+			  tc_ac.start;
+			  alt {
+				  [] mcaPortIn.receive(mw_request(mw_notifyResponsePrimitive(?))) -> value v_request_req3 {
+					  tc_ac.stop;
+					  //Check that primitiveContent carries the response to req2 (resp2)
+					  if(v_request_req3.primitive.requestPrimitive.primitiveContent.responsePrimitive.requestIdentifier == v_request_req2.requestIdentifier) {
+						  setverdict(pass, __SCOPE__ & ": NOTIFY request received carrying response (rsp2) to the Notify request (req2)");
+					  } else {
+						  setverdict(fail, __SCOPE__ & ": NOTIFY request received not carryng the expected response (rsp2) to the Notify request (req2)");
+					  }
+				  }
+				  [] tc_ac.timeout {
+					  setverdict(fail, __SCOPE__ & ": No message while expecting NOTIFY request");
+				  }
+			   }
+
+			  //Postamble
+			  f_cse_postamble_deleteResourcesCSE();
+
+			  // Tear down
+			  f_cf03Down();
+			} 
+		
+		} //end group Polling
 
 
 	}//end group AE
-- 
GitLab