From be4de28e3d15c342ba391ccedf3db093b90e02da Mon Sep 17 00:00:00 2001
From: reinaortega <miguelangel.reinaortega@etsi.org>
Date: Thu, 21 Feb 2019 09:05:30 +0100
Subject: [PATCH] First Hybrid addressing test case

Signed-off-by: reinaortega <miguelangel.reinaortega@etsi.org>
---
 LibOneM2M/OneM2M_Functions.ttcn     | 29 +++++++++++--
 LibOneM2M/OneM2M_Types.ttcn         |  3 +-
 OneM2M_PermutationFunctions.ttcn    | 63 ++++++++++++++++++++++++++++-
 OneM2M_Testcases_CSE_Release_2.ttcn | 41 +++++++++++++++++++
 4 files changed, 130 insertions(+), 6 deletions(-)

diff --git a/LibOneM2M/OneM2M_Functions.ttcn b/LibOneM2M/OneM2M_Functions.ttcn
index 763e59c..8c7e86d 100644
--- a/LibOneM2M/OneM2M_Functions.ttcn
+++ b/LibOneM2M/OneM2M_Functions.ttcn
@@ -4227,13 +4227,20 @@ module OneM2M_Functions {
 					} else {
 						return f_getResourceId(vc_resourcesList[p_targetResourceIndex].resource);
 					}
-				} else {
+				} else if (p_addressingMethod == e_hierarchical){
 					if(p_targetResourceIndex == -1) {
 						return PX_CSE_NAME;
 					} else {
 						v_resourceAddress := f_getResourceAddress(vc_resourcesList[p_targetResourceIndex].parentIndex, p_addressingMethod, p_primitiveScope) & "/" & f_getResourceName(vc_resourcesList[p_targetResourceIndex].resource);
 						return v_resourceAddress;
 					}	
+				} else if (p_addressingMethod == e_hybrid){
+					if(p_targetResourceIndex == -1) {
+						return PX_CSE_RESOURCE_ID;
+					} else {
+						v_resourceAddress := f_getResourceAddress(vc_resourcesList[p_targetResourceIndex].parentIndex, e_nonHierarchical, p_primitiveScope) & "/" & f_getResourceName(vc_resourcesList[p_targetResourceIndex].resource);
+						return v_resourceAddress;
+					}	
 				}
 					
 			} else if (p_primitiveScope == e_spRelative) {
@@ -4244,13 +4251,20 @@ module OneM2M_Functions {
 						v_resourceAddress := PX_CSE_ID & "/" & f_getResourceId(vc_resourcesList[p_targetResourceIndex].resource);
 						return v_resourceAddress;
 					}
-				} else {
+				} else if (p_addressingMethod == e_hierarchical){
 					if(p_targetResourceIndex == -1) {
 						return PX_CSE_ID & "/" & PX_CSE_NAME;
 					} else {
 						v_resourceAddress := f_getResourceAddress(vc_resourcesList[p_targetResourceIndex].parentIndex, p_addressingMethod, p_primitiveScope) & "/" & f_getResourceName(vc_resourcesList[p_targetResourceIndex].resource);
 						return v_resourceAddress;
 					}
+				} else if (p_addressingMethod == e_hybrid){
+					if(p_targetResourceIndex == -1) {
+						return PX_CSE_ID & "/" & PX_CSE_RESOURCE_ID;
+					} else {
+						v_resourceAddress := f_getResourceAddress(vc_resourcesList[p_targetResourceIndex].parentIndex, e_nonHierarchical, p_primitiveScope) & "/" & f_getResourceName(vc_resourcesList[p_targetResourceIndex].resource);
+						return v_resourceAddress;
+					}	
 				}
 			} else if (p_primitiveScope ==  e_absolute) {
 				if(p_addressingMethod == e_nonHierarchical) {
@@ -4260,14 +4274,21 @@ module OneM2M_Functions {
 						v_resourceAddress := PX_SP_ID & PX_CSE_ID & "/" & f_getResourceId(vc_resourcesList[p_targetResourceIndex].resource);
 						return v_resourceAddress;
 					}
-				} else {
+				} else if (p_addressingMethod == e_hierarchical){
 					if(p_targetResourceIndex == -1) {
 						return PX_SP_ID & PX_CSE_ID & "/" & PX_CSE_NAME;
 					} else {
 						v_resourceAddress := f_getResourceAddress(vc_resourcesList[p_targetResourceIndex].parentIndex, p_addressingMethod, p_primitiveScope) & "/" & f_getResourceName(vc_resourcesList[p_targetResourceIndex].resource);
 						return v_resourceAddress;
 					}	
-				}				
+				} else if (p_addressingMethod == e_hybrid){
+					if(p_targetResourceIndex == -1) {
+						return PX_SP_ID & PX_CSE_ID & "/" & PX_CSE_RESOURCE_ID;
+					} else {
+						v_resourceAddress := f_getResourceAddress(vc_resourcesList[p_targetResourceIndex].parentIndex, e_nonHierarchical, p_primitiveScope) & "/" & f_getResourceName(vc_resourcesList[p_targetResourceIndex].resource);
+						return v_resourceAddress;
+					}	
+				}
 			} else {
 				return "";
 			}
diff --git a/LibOneM2M/OneM2M_Types.ttcn b/LibOneM2M/OneM2M_Types.ttcn
index f804670..1c34ae4 100644
--- a/LibOneM2M/OneM2M_Types.ttcn
+++ b/LibOneM2M/OneM2M_Types.ttcn
@@ -8690,7 +8690,8 @@ group OtherTypes {
 		
 	type enumerated AddressingMethod {
 		e_nonHierarchical,
-		e_hierarchical
+		e_hierarchical, 
+		e_hybrid
 	}
 		
 	type union Resource_2 {
diff --git a/OneM2M_PermutationFunctions.ttcn b/OneM2M_PermutationFunctions.ttcn
index 6238466..863cc04 100644
--- a/OneM2M_PermutationFunctions.ttcn
+++ b/OneM2M_PermutationFunctions.ttcn
@@ -858,7 +858,68 @@ module OneM2M_PermutationFunctions {
 						// Tear down
 						f_cf01Down();
     				
-					}//end f_CSE_GEN_CRE_002				
+					}//end f_CSE_GEN_CRE_002		
+					
+					function f_CSE_GEN_CRE_003(in PrimitiveScope p_primitiveScope) runs on AeSimu {
+    				
+						// Local variables
+						var RequestPrimitive v_request;
+						var integer v_aeIndex := -1;
+						var integer v_resourceIndex := -1;
+						var AddressingMethod v_addressingMethod;
+						var PrimitiveScope v_primitiveScope;
+											   
+						// Test control
+						if(not(PICS_STRUCTURED_CSE_RELATIVE_RESOURCE_ID_FORMAT)) {
+							setverdict(inconc, __SCOPE__ & ": Structured-CSE-Relative-Resource-ID format support is required to run this test case");
+							stop;
+						}
+    				
+						// Test component configuration
+						f_cf01Up();
+    				
+						// Test adapter configuration
+    				
+						// Preamble
+						v_aeIndex := f_cse_preamble_registerAe();//c_CRUDNDi);
+					
+						v_resourceIndex := f_cse_createResource(int3, m_createContainerBase, v_aeIndex); 
+					
+						// Test Body
+						//Force usage of Hybrid Hierarchical addressing method
+						v_addressingMethod := e_hybrid;
+						v_primitiveScope := p_primitiveScope;
+						v_request := f_getCreateRequestPrimitive(int3, m_createContainerBase, v_resourceIndex);
+						v_request.to_ := f_getResourceAddress(v_resourceIndex, v_addressingMethod, v_primitiveScope);
+												
+						mcaPort.send(f_getMsgOutPrimitive(m_request(v_request)));
+						tc_ac.start;
+						alt {
+							[] mcaPort.receive(mw_response(mw_responsePrimitive(int2001))) {
+								tc_ac.stop;
+								setverdict(pass, __SCOPE__ & ": Container resource created using hierarchical addressing method");
+							}
+							[] mcaPort.receive(mw_response(mw_responsePrimitiveOK)) {
+								tc_ac.stop;
+								setverdict(fail, __SCOPE__ & ": Wrong response status code in the response");
+							}
+							[] mcaPort.receive(mw_response(mw_responsePrimitiveKO)) {
+								tc_ac.stop;
+								setverdict(fail, __SCOPE__ & ": Error while creating container resource using hierarchical addressing method");
+							}
+							[] tc_ac.timeout {
+								setverdict(fail, __SCOPE__ & ": No answer while creating resource");
+							}
+						}	
+    								
+						// Postamble
+						f_cse_postamble_deleteResources();
+					
+						// Tear down
+						f_cf01Down();
+    				
+					}//end f_CSE_GEN_CRE_003				
+							
 				
 			} // end of group Create
 			
diff --git a/OneM2M_Testcases_CSE_Release_2.ttcn b/OneM2M_Testcases_CSE_Release_2.ttcn
index 85d0596..367bf4a 100644
--- a/OneM2M_Testcases_CSE_Release_2.ttcn
+++ b/OneM2M_Testcases_CSE_Release_2.ttcn
@@ -82,6 +82,47 @@ module OneM2M_Testcases_CSE_Release_2 {
 		group Generic {
 			
 			group Create {
+
+				group g_CSE_GEN_CRE_003 {
+
+					/**
+					 * @desc Check that the IUT accepts the creation of a <container> resource using structured resource identifier with hybrid addressing.
+					 * 
+					 */
+					testcase TC_CSE_GEN_CRE_003_CSR() runs on Tester system CseSystem {
+						// Local variables
+						                        
+						var AeSimu v_ae1 := AeSimu.create("AE1") alive;
+						v_ae1.start(f_setProtocolBinding(PX_PROTOCOL_BINDING_AE1));
+						v_ae1.done;
+                        
+						v_ae1.start(f_CSE_GEN_CRE_003(e_cseRelative));
+						v_ae1.done;
+					}
+
+					testcase TC_CSE_GEN_CRE_003_SPR() runs on Tester system CseSystem {
+						// Local variables
+						
+						var AeSimu v_ae1 := AeSimu.create("AE1") alive;
+						v_ae1.start(f_setProtocolBinding(PX_PROTOCOL_BINDING_AE1));
+						v_ae1.done;
+                        
+						v_ae1.start(f_CSE_GEN_CRE_003(e_spRelative));
+						v_ae1.done;
+					}
+					
+					testcase TC_CSE_GEN_CRE_003_ABS() runs on Tester system CseSystem {
+						// Local variables
+							
+						var AeSimu v_ae1 := AeSimu.create("AE1") alive;
+						v_ae1.start(f_setProtocolBinding(PX_PROTOCOL_BINDING_AE1));
+						v_ae1.done;
+                        
+						v_ae1.start(f_CSE_GEN_CRE_003(e_absolute));
+						v_ae1.done;
+					}
+				
+				} // end of group g_CSE_GEN_CRE_003				
 				
 			} // end of group Create
 			
-- 
GitLab