From 86e2b70e32658729a52e55e86bad079337247d99 Mon Sep 17 00:00:00 2001
From: reinaortega <miguelangel.reinaortega@etsi.org>
Date: Thu, 30 Nov 2017 10:15:05 +0100
Subject: [PATCH] New test case TC_CSE_DMR_CRE_001_SUB_CSR implemented

Signed-off-by: reinaortega <miguelangel.reinaortega@etsi.org>
---
 LibOneM2M/OneM2M_Functions.ttcn    | 30 ++++++++++
 OneM2M_TestControl_IN_profile.ttcn |  3 +-
 OneM2M_Testcases_CSE.ttcn          | 93 ++++++++++++++++++++++++++++++
 3 files changed, 124 insertions(+), 2 deletions(-)

diff --git a/LibOneM2M/OneM2M_Functions.ttcn b/LibOneM2M/OneM2M_Functions.ttcn
index c238899..6361c37 100644
--- a/LibOneM2M/OneM2M_Functions.ttcn
+++ b/LibOneM2M/OneM2M_Functions.ttcn
@@ -162,6 +162,7 @@ module OneM2M_Functions {
 			
 			// Map
 			map(self:mcaPort, system:mcaPort);
+			map(self:mcaPortIn, system:mcaPortIn);
 			map(self:acPort, system:acPort);
 			
 			activate(a_default());
@@ -1004,6 +1005,35 @@ module OneM2M_Functions {
 				return false;
 			}
 			
+			/**
+			 * @desc Check that a resource is present in the IUT (resourceId is known) by using RETRIEVE operation
+			 * @param p_resourceIndex Resource index of the resource to be checked
+			 * @return boolean
+			 */
+			function f_isResourcePresentCseSimu (integer p_resourceIndex) runs on CseSimu return boolean {
+			
+				//Check to see if the resource is present or not
+				mccPort.send(m_request(m_retrieveResource(f_getResourceAddress(p_resourceIndex), f_getOriginator(p_resourceIndex))));
+				tc_ac.start;
+				alt {
+					[] mccPort.receive(mw_response(mw_responsePrimitive(int2000))) {
+						tc_ac.stop;
+						setverdict(pass, testcasename() & ": Resource present: " & f_getResourceAddress(p_resourceIndex));
+						return true;
+					}
+					[] mccPort.receive(mw_response(mw_responsePrimitive(?, -))) {
+						tc_ac.stop;
+						setverdict(inconc, testcasename() & ": Wrong response status code in the response");
+						return false;
+					}
+					[] tc_ac.timeout {
+						setverdict(inconc, testcasename() & ": No answer while retrieving resource");
+						return false;
+					}
+				}	
+				return false;
+			}
+			
 			/**
 			 * @desc Check that a resource is not present in the IUT (resourceId is NOT known)
 			 * @param p_parentIndex Index of the parent resource of the resource to be checked
diff --git a/OneM2M_TestControl_IN_profile.ttcn b/OneM2M_TestControl_IN_profile.ttcn
index 24156c1..91842fb 100644
--- a/OneM2M_TestControl_IN_profile.ttcn
+++ b/OneM2M_TestControl_IN_profile.ttcn
@@ -144,7 +144,7 @@ module OneM2M_TestControl_IN_profile {
 		if(true) {execute (TC_CSE_DMR_CRE_001_SUB_AE());}
 		if(true) {execute (TC_CSE_DMR_CRE_001_SUB_CNT());}
 		if(true) {execute (TC_CSE_DMR_CRE_001_SUB_ACP());}
-		//if(true) {execute (TC_CSE_DMR_CRE_001_SUB_CSR());}TODO TO BE IMPLEMENTED
+		if(true) {execute (TC_CSE_DMR_CRE_001_SUB_CSR());}
 		if(true) {execute (TC_CSE_DMR_CRE_002_SUB());}
 		if(true) {execute (TC_CSE_DMR_CRE_003_SUB());}
 		if(true) {execute (TC_CSE_DMR_RET_001_SUB());}
@@ -171,7 +171,6 @@ module OneM2M_TestControl_IN_profile {
 		if(true) {execute (TC_CSE_SUB_CRE_001_CIN());}
 		if(true) {execute (TC_CSE_SUB_CRE_003());}
 		if(true) {execute (TC_CSE_SUB_CRE_005());}
-		if(true) {execute (TC_CSE_SUB_CRE_005());}
 		if(true) {execute (TC_CSE_SUB_UPD_001());}
 		if(true) {execute (TC_CSE_SUB_DEL_001());}
 		if(true) {execute (TC_CSE_SUB_CRE_004());}
diff --git a/OneM2M_Testcases_CSE.ttcn b/OneM2M_Testcases_CSE.ttcn
index 3d9bed3..ab0c508 100644
--- a/OneM2M_Testcases_CSE.ttcn
+++ b/OneM2M_Testcases_CSE.ttcn
@@ -4172,6 +4172,25 @@ module OneM2M_Testcases_CSE {
 						}		
 					}
 					
+					testcase TC_CSE_DMR_CRE_001_SUB_CSR() runs on Tester system CseSystem {
+						// Local variables
+						var template RequestPrimitive v_createRequest := m_createSubscriptionBase;
+						var ResponsePrimitive v_responsePrimitive;
+						var CseSimu v_cse1 := CseSimu.create("CSE1") alive;
+						
+						v_createRequest.primitiveContent.subscription.resourceName := omit;
+						v_cse1.start(f_CSE_DMR_CRE_001_cseSimu(int23, v_createRequest));//Subscription
+						v_cse1.done;
+						
+						 
+												
+						if(getverdict == pass){ v_responsePrimitive := f_getResponsePrimitive(v_cse1);
+							if(not ispresent(v_responsePrimitive.primitiveContent.subscription.resourceName)){
+								setverdict(fail, __SCOPE__, ": Error, resourceName attribute not provided");
+							}
+						}		
+					}
+					
 					testcase TC_CSE_DMR_CRE_001_NOD_CB() runs on Tester system CseSystem {
 						// Local variables
 						var template RequestPrimitive v_createRequest := m_createNodeBase;
@@ -4439,6 +4458,80 @@ module OneM2M_Testcases_CSE {
 						return vc_response.primitive.responsePrimitive;
     					    				
 					}//end f_CSE_DMR_CRE_001
+					
+					function f_CSE_DMR_CRE_001_cseSimu(ResourceType p_resourceType, template RequestPrimitive p_requestPrimitive) runs on CseSimu return ResponsePrimitive {
+    				
+							// Local variables
+							var MsgIn v_response;
+							var RequestPrimitive v_request;
+							var integer v_parentIndex := -1;
+							var integer v_resourceIndex := -1;
+							var integer v_ae1Index := -1;
+							var integer v_acpAuxIndex := -1;
+							var PoaList v_poaList := {"http://" & PX_AE1_ADDRESS & "/"};
+    										   
+							// Test control
+    				
+							// Test component configuration
+							f_cf02UpCseSimuMaster();
+						
+							// Test adapter configuration
+    				
+							// Preamble
+							vc_remoteCseIndex := f_cse_registerRemoteCse(m_createRemoteCSEBase);
+							
+    						if(match(int23, p_resourceType)){
+								vc_ae1.start(f_cse_createResource(int2, m_createAe(PX_APP_ID, -, PX_AE1_ID_STEM, "MyAe", v_poaList), -1)); // AE1 is registered
+								vc_ae1.done;
+								v_ae1Index := f_getResource(vc_ae1);
+								p_requestPrimitive.primitiveContent.subscription.notificationURI := {f_getResourceAddress(v_ae1Index)}; 
+								vc_ae1.start(f_cse_notifyProcedure_subscriptionVerificationHandler());
+							}
+							
+							// Test Body
+    					
+							v_request := f_getCreateRequestPrimitive(p_resourceType, p_requestPrimitive, vc_remoteCseIndex);
+						
+							mccPort.send(m_request(v_request));
+							tc_ac.start;
+							alt {
+								[] mccPort.receive(mw_response(mw_responsePrimitive(int2001))) -> value vc_response {
+									tc_ac.stop;
+									setverdict(pass, __SCOPE__ & ": Resource type " & int2str(enum2int(p_resourceType)) & " created successfully");
+									f_checkAttributesToBeSaved(p_resourceType, v_request, vc_response.primitive.responsePrimitive);
+									v_resourceIndex := f_setResource(vc_response.primitive.responsePrimitive.primitiveContent, p_resourceType, vc_remoteCseIndex);
+								}
+								[] mccPort.receive(mw_response(mw_responsePrimitiveOK)) -> value vc_response {
+									tc_ac.stop;
+									setverdict(fail, __SCOPE__ & ": Wrong response status code");
+									}
+								[] mccPort.receive(mw_response(mw_responsePrimitiveKO)) -> value vc_response {
+									tc_ac.stop;
+									setverdict(fail, __SCOPE__ & ": Error while creating resource type " & int2str(enum2int(p_resourceType)));
+								}
+								[] tc_ac.timeout {
+									setverdict(fail, __SCOPE__ & ": No answer while creating resource type " & int2str(enum2int(p_resourceType)));
+								}
+							}	
+    					
+							f_checkCseSimuStatus();
+    								
+							//Check to see if the resource is present or not
+							if (f_isResourcePresentCseSimu(v_resourceIndex)){
+								setverdict(pass, __SCOPE__ & ":INFO: Resource created");
+							} else {
+								setverdict(fail, __SCOPE__ & ":ERROR: Resource not created");
+							}
+    								
+							// Postamble
+							f_cse_postamble_deleteResourcesCSE();
+						
+							// Tear down
+							f_cf02DownCseSimuMaster();
+						
+							return vc_response.primitive.responsePrimitive;
+    					    				
+						}//end f_CSE_DMR_CRE_001_cseSimu
     				
 				} // end g_CSE_DMR_CRE_001
 								
-- 
GitLab