From 4d58d27e4f766878ff35a21011a876de05ade4f5 Mon Sep 17 00:00:00 2001
From: reinaortega <miguelangel.reinaortega@etsi.org>
Date: Wed, 20 Oct 2021 13:59:23 +0200
Subject: [PATCH] Fix g_CSE_DMR_001 and g_CSE_DMR_002 to include check of From
 parameter

Signed-off-by: reinaortega <miguelangel.reinaortega@etsi.org>
---
 LibOneM2M/OneM2M_Functions.ttcn  | 57 ++++++++++++++++++++++++++++++++
 LibOneM2M/OneM2M_Templates.ttcn  | 10 +++---
 OneM2M_PermutationFunctions.ttcn | 20 ++++++-----
 3 files changed, 73 insertions(+), 14 deletions(-)

diff --git a/LibOneM2M/OneM2M_Functions.ttcn b/LibOneM2M/OneM2M_Functions.ttcn
index 3365ee8..c4cc04f 100644
--- a/LibOneM2M/OneM2M_Functions.ttcn
+++ b/LibOneM2M/OneM2M_Functions.ttcn
@@ -787,6 +787,29 @@ module OneM2M_Functions {
 				return v_resourceIndex;
 
 			}
+			
+			/**
+			 * @desc Getting the address of the last resource saved in the vc_resourcesList
+			 * @param p_tester Given component
+			 */
+			function f_getLatestResourceAddress(in Tester p_component, AddressingMethod p_addressingMethod := PX_ADDRESSING_METHOD, PrimitiveScope p_primitiveScope := PX_PRIMITIVE_SCOPE) runs on Tester return XSD.ID {
+				var XSD.ID v_resourceAddress;
+
+				f_connectInfoPort(p_component);
+
+				p_component.start(f_sendLatestResourceAddress(p_addressingMethod, p_primitiveScope));
+				alt {
+					[]infoPort.receive(mw_resourceAddress) -> value v_resourceAddress{
+					}
+				}
+
+				p_component.done;
+				f_disconnectInfoPort(p_component);
+
+				return v_resourceAddress;
+
+			}
+			
 
 			/**
 			 * @desc Getting the latest local resource from an CseSimu component
@@ -933,6 +956,16 @@ module OneM2M_Functions {
 					
 			}
 			
+			/**
+			 * @desc Sending the address of the last resource saved in the vc_resourcesList
+			 */	
+			function f_sendLatestResourceAddress(AddressingMethod p_addressingMethod := PX_ADDRESSING_METHOD, PrimitiveScope p_primitiveScope := PX_PRIMITIVE_SCOPE) runs on Tester {
+			
+				infoPort.send(f_getResourceAddress(lengthof(vc_resourcesList)-1, p_addressingMethod, p_primitiveScope));
+		
+			} 
+			
+			
 			/**
 			 * @desc Sending of the latest resource through InfoPort
 			 */	
@@ -2371,6 +2404,12 @@ module OneM2M_Functions {
 						v_localResourceIndex := f_processCreateRequestPrimitive(vc_request.primitive.requestPrimitive, p_responseStatusCode);
 						f_send(e_mcc_in_port, m_response(vc_response.primitive.responsePrimitive));
 					}
+					[] mccPortIn.receive(mw_request(mw_create)) -> value vc_request {
+						tc_ac.stop;
+						v_localResourceIndex := f_processCreateRequestPrimitive(vc_request.primitive.requestPrimitive, int4000);
+						f_send(e_mcc_in_port, m_response(vc_response.primitive.responsePrimitive));
+						setverdict(inconc, __SCOPE__&":INFO: Wrong expected create request");
+					}
 					[] tc_ac.timeout {
 						setverdict(inconc, __SCOPE__&":INFO: No creation for resource received");
 					}
@@ -2493,6 +2532,12 @@ module OneM2M_Functions {
 						f_send(e_mcc_in_port, m_response(vc_response.primitive.responsePrimitive));
 						
 					}
+					[] mccPortIn.receive(mw_request(mw_update)) -> value vc_request {
+						tc_ac.stop;
+						v_targetResourceIndex := f_processUpdateRequestPrimitive(vc_request.primitive.requestPrimitive, int4000);
+						f_send(e_mcc_in_port, m_response(vc_response.primitive.responsePrimitive));
+						setverdict(inconc, __SCOPE__&":INFO: Wrong expected update request");
+					}
 					[] tc_ac.timeout {
 						setverdict(inconc, __SCOPE__&":INFO: No answer while updating resource");
 					}
@@ -2528,6 +2573,12 @@ module OneM2M_Functions {
 						f_send(e_mcc_in_port, m_response(vc_response.primitive.responsePrimitive));
 						
 					}
+					[] mccPortIn.receive(mw_request(mw_retrieve(?))) -> value vc_request {
+						tc_ac.stop;
+						v_targetResourceIndex := f_processRetrieveRequestPrimitive(vc_request.primitive.requestPrimitive, int4000);
+						f_send(e_mcc_in_port, m_response(vc_response.primitive.responsePrimitive));
+						setverdict(inconc, __SCOPE__&":INFO: Wrong expected retrieve request");
+					}
 					[] tc_ac.timeout {
 						setverdict(inconc, __SCOPE__&":INFO: No answer while retrieving resource");
 					}
@@ -2642,6 +2693,12 @@ module OneM2M_Functions {
 						f_send(e_mcc_in_port, m_response(vc_response.primitive.responsePrimitive));
 						
 					}
+					[] mccPortIn.receive(mw_request(mw_delete)) -> value vc_request {
+						tc_ac.stop;
+						v_targetResourceIndex := f_processDeleteRequestPrimitive(vc_request.primitive.requestPrimitive, int4000);
+						f_send(e_mcc_in_port, m_response(vc_response.primitive.responsePrimitive));
+						setverdict(inconc, __SCOPE__&":INFO: Wrong expected delete request");
+					}
 					[] tc_ac.timeout {
 						setverdict(inconc, __SCOPE__&":INFO: No answer while retrieving resource");
 					}
diff --git a/LibOneM2M/OneM2M_Templates.ttcn b/LibOneM2M/OneM2M_Templates.ttcn
index f957803..872192c 100644
--- a/LibOneM2M/OneM2M_Templates.ttcn
+++ b/LibOneM2M/OneM2M_Templates.ttcn
@@ -161,10 +161,10 @@ module OneM2M_Templates {
 			 * @desc Base Receive RETRIEVE request primitive
 			 * @param p_targetResourceAddress Target resource address
 			 */
-			template RequestPrimitive mw_retrieve(template XSD.ID p_targetResourceAddress) := {
+			template RequestPrimitive mw_retrieve(template XSD.ID p_targetResourceAddress, template XSD.ID p_from := ?) := {
 				operation := int2,
 				to_ := p_targetResourceAddress,
-				from_ := ?,
+				from_ := p_from,
 				requestIdentifier := ?,
 				resourceType := omit,
 				primitiveContent := *,
@@ -477,7 +477,7 @@ module OneM2M_Templates {
 			};
         	
 						
-			template RequestPrimitive mw_update(template XSD.ID p_from := *, template XSD.ID p_to := ?) := {
+			template RequestPrimitive mw_update(template XSD.ID p_from := ?, template XSD.ID p_to := ?) := {
 				operation := int3,
 				to_ := p_to,
 				from_ := p_from,
@@ -1421,10 +1421,10 @@ module OneM2M_Templates {
 				vendorInformation := omit
 			};
 
-			template  RequestPrimitive mw_delete(template XSD.ID p_resourceAddress := ?, template XSD.ID p_from := *) := {
+			template  RequestPrimitive mw_delete(template XSD.ID p_resourceAddress := ?, template XSD.ID p_from := ?) := {
 				operation := int4,
 				to_ := p_resourceAddress,
-				from_ := ?,
+				from_ := p_from,
 				requestIdentifier := ?,
 				resourceType := omit,
 				primitiveContent := omit, 
diff --git a/OneM2M_PermutationFunctions.ttcn b/OneM2M_PermutationFunctions.ttcn
index 88464ea..1527dab 100644
--- a/OneM2M_PermutationFunctions.ttcn
+++ b/OneM2M_PermutationFunctions.ttcn
@@ -2339,6 +2339,7 @@ module OneM2M_PermutationFunctions {
 				var integer v_aeIndex, v_remoteCseIndex, v_targetResourceIndex := -1;
 				var ResponseStatusCode v_responseStatusCode := int2000;   
 				var XSD.ID v_targetResourceAddress;
+				var XSD.ID v_originatorResourceAddress;
 				
 				// Test control
 
@@ -2359,7 +2360,8 @@ module OneM2M_PermutationFunctions {
 				
 				// Test Body
 				v_aeIndex := f_getLatestResource(vc_ae1);
-				
+				v_originatorResourceAddress := f_getLatestResourceAddress(vc_ae1, e_nonHierarchical, e_spRelative);
+ 				
 				v_targetResourceAddress := f_getLocalResourceAddress(v_targetResourceIndex, PX_ADDRESSING_METHOD, e_spRelative);
 				p_requestPrimitive.from_ := f_getOriginator(v_aeIndex);
 				p_requestPrimitive.to_ := v_targetResourceAddress;
@@ -2377,25 +2379,25 @@ module OneM2M_PermutationFunctions {
 				
 				tc_ac.start;
 				alt {
-					[v_responseStatusCode == int2001] mccPortIn.receive(mw_request(mw_create(-, v_targetResourceAddress))) -> value vc_request {
+					[v_responseStatusCode == int2001] mccPortIn.receive(mw_request(mw_create(v_originatorResourceAddress, v_targetResourceAddress))) -> value vc_request {
 						tc_ac.stop;
 						setverdict(pass, __SCOPE__ & ": Request primitive retargeted successfully");
 						f_processCreateRequestPrimitive(vc_request.primitive.requestPrimitive);
 						f_send(e_mcc_in_port, m_response(vc_response.primitive.responsePrimitive));
 					}
-					[v_responseStatusCode == int2000] mccPortIn.receive(mw_request(mw_retrieve(v_targetResourceAddress))) -> value vc_request {
+					[v_responseStatusCode == int2000] mccPortIn.receive(mw_request(mw_retrieve(v_targetResourceAddress, v_originatorResourceAddress))) -> value vc_request {
 						tc_ac.stop;
 						setverdict(pass, __SCOPE__ & ": Request primitive retargeted successfully");
 						f_processRetrieveRequestPrimitive(vc_request.primitive.requestPrimitive);
 						f_send(e_mcc_in_port, m_response(vc_response.primitive.responsePrimitive));
 					}
-					[v_responseStatusCode == int2004] mccPortIn.receive(mw_request(mw_update(-, v_targetResourceAddress))) -> value vc_request {
+					[v_responseStatusCode == int2004] mccPortIn.receive(mw_request(mw_update(v_originatorResourceAddress, v_targetResourceAddress))) -> value vc_request {
 						tc_ac.stop;
 						setverdict(pass, __SCOPE__ & ": Request primitive retargeted successfully");
 						f_processUpdateRequestPrimitive(vc_request.primitive.requestPrimitive);
 						f_send(e_mcc_in_port, m_response(vc_response.primitive.responsePrimitive));
 					}
-					[v_responseStatusCode == int2002] mccPortIn.receive(mw_request(mw_delete(v_targetResourceAddress))) -> value vc_request {
+					[v_responseStatusCode == int2002] mccPortIn.receive(mw_request(mw_delete(v_targetResourceAddress, v_originatorResourceAddress))) -> value vc_request {
 						tc_ac.stop;
 						setverdict(pass, __SCOPE__ & ": Request primitive retargeted successfully");
 						f_processDeleteRequestPrimitive(vc_request.primitive.requestPrimitive);
@@ -2458,16 +2460,16 @@ module OneM2M_PermutationFunctions {
 				
 				if(valueof(p_requestPrimitive.operation) == int1) {
 					v_responseStatusCode := int2001;
-					vc_cse1.start(f_cse_createResourceHandler(mw_create(-, v_targetResourceAddress )));
+					vc_cse1.start(f_cse_createResourceHandler(mw_create(f_getResourceAddress(v_aeIndex, e_nonHierarchical, e_spRelative), v_targetResourceAddress )));
 				} else if(valueof(p_requestPrimitive.operation) == int2) {
 					v_responseStatusCode := int2000;
-					vc_cse1.start(f_cse_retrieveResourceHandler(v_targetResourceIndex));
+					vc_cse1.start(f_cse_retrieveResourceHandler(v_targetResourceIndex, mw_retrieve(v_targetResourceAddress, f_getResourceAddress(v_aeIndex, e_nonHierarchical, e_spRelative))));
 				} else if(valueof(p_requestPrimitive.operation) == int3) {
 					v_responseStatusCode := int2004;
-					vc_cse1.start(f_cse_updateResourceHandler(v_targetResourceIndex));
+					vc_cse1.start(f_cse_updateResourceHandler(v_targetResourceIndex, mw_update(f_getResourceAddress(v_aeIndex, e_nonHierarchical, e_spRelative),v_targetResourceAddress)));
 				} else if(valueof(p_requestPrimitive.operation) == int4) {
 					v_responseStatusCode := int2002;
-					vc_cse1.start(f_cse_deleteResourceHandler(v_targetResourceIndex));
+					vc_cse1.start(f_cse_deleteResourceHandler(v_targetResourceIndex, mw_delete(v_targetResourceAddress,f_getResourceAddress(v_aeIndex, e_nonHierarchical, e_spRelative))));
 				}
 
 				f_send(e_mca_port, m_request(valueof(p_requestPrimitive)));
-- 
GitLab