From f593b239e78e74a67a94d4ef353b803f05a9eb49 Mon Sep 17 00:00:00 2001
From: pkulkarni <pkulkarni75@gmail.com>
Date: Thu, 8 Feb 2018 17:45:07 +0100
Subject: [PATCH] Implemented TC CSE/ANNC/CRE/003

---
 LibOneM2M/OneM2M_Functions.ttcn     | 14 +++++--
 OneM2M_PermutationFunctions.ttcn    | 59 +++++++++++++++++++++++++++++
 OneM2M_Testcases_CSE_Release_2.ttcn | 18 ++++++++-
 3 files changed, 86 insertions(+), 5 deletions(-)

diff --git a/LibOneM2M/OneM2M_Functions.ttcn b/LibOneM2M/OneM2M_Functions.ttcn
index 1061841..e5a4de9 100644
--- a/LibOneM2M/OneM2M_Functions.ttcn
+++ b/LibOneM2M/OneM2M_Functions.ttcn
@@ -1175,28 +1175,34 @@ module OneM2M_Functions {
 			 * @verdict 
 			 */
 			 //TODO To finalize this function
-			function f_cse_resourceAnnouncementHandler(template RequestPrimitive p_requestprimitive := ?) runs on CseSimu {
+			function f_cse_resourceAnnouncementHandler(template RequestPrimitive p_requestprimitive := ?, in ResponseStatusCode p_responseStatusCode := int2001) runs on CseSimu {
 				// Local variables
 				var MsgIn v_request;
 				var integer v_parentIndex := vc_localRemoteCseIndex;
 				var integer v_announcedResourceIndex;
 				var ResponsePrimitive v_responsePrimitive;
 				var PrimitiveContent v_announcedResource;
+				var integer v_localResourceIndex := -1;
 				
 				tc_ac.start;
 				alt {
 					[] mccPortIn.receive(mw_request(p_requestprimitive)) -> value v_request {
 						tc_ac.stop;
 						setverdict(pass, __SCOPE__ & ":INFO: Announcement received");
+						 
 						//TODO Save resource and generate required attributes
 						v_announcedResource:= f_cse_generateLocalResource(v_request.primitive.requestPrimitive.primitiveContent, v_parentIndex,v_request.primitive.requestPrimitive.resourceType);
 						v_announcedResourceIndex := f_setLocalResource(v_announcedResource, v_request.primitive.requestPrimitive.resourceType, v_parentIndex);
 						
-						v_responsePrimitive := valueof(m_responsePrimitive(int2001,v_request.primitive.requestPrimitive.requestIdentifier));
+						v_responsePrimitive := valueof(m_responsePrimitive(p_responseStatusCode,v_request.primitive.requestPrimitive.requestIdentifier));
 						v_responsePrimitive.from_ := PX_CSE1_ID;
 						v_responsePrimitive.to_ := v_request.primitive.requestPrimitive.from_;
-						v_responsePrimitive.primitiveContent := vc_localResourcesList[vc_localRemoteCseIndex].resource;
-						mccPortIn.send(m_response(v_responsePrimitive));			
+						if(p_responseStatusCode == int2001) {
+						  v_responsePrimitive.primitiveContent := vc_localResourcesList[vc_localRemoteCseIndex].resource;
+						} else {
+						  v_responsePrimitive.primitiveContent := omit;
+						}
+						mccPortIn.send(m_response(v_responsePrimitive));
 					}
 					[] tc_ac.timeout {
 						setverdict(fail, __SCOPE__ & ":ERROR:  No announcement received");
diff --git a/OneM2M_PermutationFunctions.ttcn b/OneM2M_PermutationFunctions.ttcn
index 0c0c180..c5cb1e0 100644
--- a/OneM2M_PermutationFunctions.ttcn
+++ b/OneM2M_PermutationFunctions.ttcn
@@ -6512,6 +6512,65 @@ module OneM2M_PermutationFunctions {
 
 				}//end f_CSE_ANNC_CRE_002
 				
+				function f_CSE_ANNC_CRE_003(ResourceType p_resourceType, template RequestPrimitive p_createRequestAnnc, in template RequestPrimitive p_requestCreatePrimitive := omit, in template RequestPrimitive p_requestUpdatePrimitive := omit) runs on AeSimu {
+
+					// Local variables
+					var MsgIn v_response;
+					var RequestPrimitive v_request;
+					var integer v_parentIndex := -1;
+					var integer v_aeIndex := -1;
+					var integer v_resourceIndex;
+					var template RequestPrimitive v_create := m_createAe(PX_APP_ID, omit, omit);
+					v_create.primitiveContent.container.announceTo := {PX_CSE1_ID};
+   
+					// Test control
+
+					// Test component configuration
+					f_cf02Up();
+
+					// Test adapter configuration
+
+					//Register the CSE
+					vc_cse1.start(f_cse_registrationRemoteCse(mw_createRemoteCSE));	
+					vc_cse1.done;
+	
+					//Preamble
+					vc_cse1.start(f_cse_resourceAnnouncementHandler(mw_createContainerAnncBase(-, -)));
+					v_aeIndex := f_cse_createResource(int2,v_create);
+					vc_cse1.done;
+	
+					// Test Body
+					v_request := f_getCreateRequestPrimitive(p_resourceType, p_requestCreatePrimitive, v_parentIndex);
+					vc_cse1.start(f_cse_resourceAnnouncementHandler(p_createRequestAnnc, int4000));	
+					mcaPort.send(m_request(v_request));
+					vc_cse1.done;
+
+					tc_ac.start;
+					alt {
+						[] mcaPort.receive(mw_response(mw_responsePrimitive(int2001))) -> value v_response {
+							tc_ac.stop;
+							setverdict(pass, __SCOPE__, ": Resource " & int2str(enum2int(p_resourceType)) & " created successfully");
+							if(ispresent(v_response.primitive.responsePrimitive.primitiveContent.contentInstance.announceTo)) {
+								setverdict(fail, __SCOPE__, ": Resource " & int2str(enum2int(p_resourceType)) & " contains the attribute announceTo");
+							}
+						}
+						[] mcaPort.receive(mw_response(mw_responsePrimitiveOK)) -> value vc_response {
+							tc_ac.stop;
+							setverdict(fail, __SCOPE__, ": Wrong response status code");
+						}
+						[] tc_ac.timeout {
+							setverdict(fail, __SCOPE__, ": No answer while creating resource type " & int2str(enum2int(p_resourceType)));
+						}
+					}
+						
+					// Postamble
+					f_cse_postamble_deleteResources();
+
+					// Tear down
+					f_cf02Down();
+
+				}//end f_CSE_ANNC_CRE_003
+				
 			} //end group Create
 		
 		}// end group Announcement
diff --git a/OneM2M_Testcases_CSE_Release_2.ttcn b/OneM2M_Testcases_CSE_Release_2.ttcn
index ab2ab61..81b7c1f 100644
--- a/OneM2M_Testcases_CSE_Release_2.ttcn
+++ b/OneM2M_Testcases_CSE_Release_2.ttcn
@@ -6881,7 +6881,7 @@ module OneM2M_Testcases_CSE_Release_2 {
 						var template RequestPrimitive v_createRequest := m_createContainerBase;
 						var template RequestPrimitive v_createRequestAnnc := mw_createContainerAnncBase;
 												
-						v_createRequest.primitiveContent.container.announceTo := {PX_CSE_ID};
+						v_createRequest.primitiveContent.container.announceTo := {PX_CSE1_ID};
 						
 						v_ae1.start(f_CSE_ANNC_CRE_001(int3, v_createRequestAnnc, v_createRequest));//Container
 						v_ae1.done;
@@ -6930,6 +6930,22 @@ module OneM2M_Testcases_CSE_Release_2 {
 						v_ae1.done;
 					}
 				} //end group g_CSE_ANNC_CRE_002
+				
+				group g_CSE_ANNC_CRE_003 {
+					
+					testcase TC_CSE_ANNC_CRE_003() runs on Tester system CseSystem {
+						//Local variables
+						var AeSimu v_ae1 := AeSimu.create("AE1") alive;
+						var template RequestPrimitive v_createRequest := m_createContentInstanceBase;
+						var template RequestPrimitive v_createRequestAnnc := mw_createContentInstanceAnnc;
+							
+						v_createRequest.primitiveContent.contentInstance.announceTo := {PX_CSE1_ID};
+	
+						v_ae1.start(f_CSE_ANNC_CRE_003(int4, v_createRequestAnnc, v_createRequest));//ContentInstance
+						v_ae1.done;
+						
+					} //end TC_CSE_ANNC_CRE_001
+				} //end group g_CSE_ANNC_CRE_003
 			}
 		}//end group Announcement
 	
-- 
GitLab