From 7e05cf7526cd86a74fe1a9e6dc6dde55a49126b0 Mon Sep 17 00:00:00 2001
From: pkulkarni <pkulkarni75@gmail.com>
Date: Fri, 12 Jan 2018 10:12:18 +0100
Subject: [PATCH] Further improvement TTCN code changes done for
 TP/oneM2M/CSE/ANNC/001 based on feedback comments from Miguel.

Signed-off-by: pkulkarni <pkulkarni75@gmail.com>
---
 LibOneM2M/OneM2M_Functions.ttcn     | 49 ++++++++++++++---
 LibOneM2M/OneM2M_Templates.ttcn     | 39 ++++++++++++--
 OneM2M_PermutationFunctions.ttcn    | 37 +++++--------
 OneM2M_Testcases_CSE_Release_2.ttcn | 82 +++++++++++++++++++++++++++--
 4 files changed, 168 insertions(+), 39 deletions(-)

diff --git a/LibOneM2M/OneM2M_Functions.ttcn b/LibOneM2M/OneM2M_Functions.ttcn
index 34c2c0d..5dc376f 100644
--- a/LibOneM2M/OneM2M_Functions.ttcn
+++ b/LibOneM2M/OneM2M_Functions.ttcn
@@ -1117,21 +1117,28 @@ module OneM2M_Functions {
 			 * @verdict 
 			 */
 			 //TODO To finalize this function
-			function f_cse_resourceAnnouncementHandler(template XSD.ID p_from := *, template XSD.ID p_to := ?) runs on CseSimu {
+			function f_cse_resourceAnnouncementHandler(template RequestPrimitive p_requestprimitive := ?) 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;
 				
 				tc_ac.start;
 				alt {
-					[] mccPortIn.receive(mw_request(mw_create(p_from, p_to))) -> value v_request {
+					[] 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_responsePrimitive := f_getCreateResponsePrimitive(v_request.primitive.requestPrimitive.resourceType, v_request.primitive.requestPrimitive);
-						mccPortIn.send(m_response(v_responsePrimitive));
-						f_checkAttributesToBeSaved(v_request.primitive.requestPrimitive.resourceType, v_request.primitive.requestPrimitive, vc_response.primitive.responsePrimitive);
-						f_setResource(vc_response.primitive.responsePrimitive.primitiveContent, v_request.primitive.requestPrimitive.resourceType, vc_remoteCseIndex);					
+						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.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));			
 					}
 					[] mccPortIn.receive{
 						tc_ac.stop;
@@ -1823,6 +1830,36 @@ module OneM2M_Functions {
 						v_myResource.remoteCSE.nodeLink := omit;
 				    
 					}
+				} else if (p_resourceType == int10002 and ispresent (p_resource)) { //AE Annc
+					if(ischosen(p_resource.aEAnnc)) {
+						v_myResource.aEAnnc.expirationTime := p_resource.aEAnnc.expirationTime;
+						v_myResource.aEAnnc.accessControlPolicyIDs := p_resource.aEAnnc.accessControlPolicyIDs;
+						v_myResource.aEAnnc.labels := p_resource.aEAnnc.labels;
+					}
+				} else if (p_resourceType == int10001 and ispresent (p_resource)) { //Acp Annc
+					if(ischosen(p_resource.accessControlPolicyAnnc)) {
+						v_myResource.accessControlPolicyAnnc.expirationTime := p_resource.accessControlPolicyAnnc.expirationTime;
+						v_myResource.accessControlPolicyAnnc.labels := p_resource.accessControlPolicyAnnc.labels;
+						v_myResource.accessControlPolicyAnnc.privileges := p_resource.accessControlPolicyAnnc.privileges;
+						v_myResource.accessControlPolicyAnnc.selfPrivileges := p_resource.accessControlPolicyAnnc.selfPrivileges;
+					}
+				} else if (p_resourceType == int10003 and ispresent (p_resource)) { //Container Annc
+					if(ischosen(p_resource.containerAnnc)) {
+						v_myResource.containerAnnc.expirationTime := p_resource.containerAnnc.expirationTime;
+						v_myResource.containerAnnc.accessControlPolicyIDs := p_resource.containerAnnc.accessControlPolicyIDs;
+						v_myResource.containerAnnc.labels := p_resource.containerAnnc.labels;
+					}
+				} else if (p_resourceType == int10009 and ispresent (p_resource)) { //Group Annc
+					if(ischosen(p_resource.groupAnnc)) {
+						v_myResource.groupAnnc.expirationTime := p_resource.groupAnnc.expirationTime;
+						v_myResource.groupAnnc.accessControlPolicyIDs := p_resource.groupAnnc.accessControlPolicyIDs;
+						v_myResource.groupAnnc.labels := p_resource.groupAnnc.labels;
+					}
+				} else if (p_resourceType == int10014 and ispresent (p_resource)) { //ContentInstance Annc
+					if(ischosen(p_resource.contentInstanceAnnc)) {
+						v_myResource.contentInstanceAnnc.expirationTime := p_resource.contentInstanceAnnc.expirationTime;
+						v_myResource.contentInstanceAnnc.labels := p_resource.contentInstanceAnnc.labels;
+					}
 				}
 				return v_myResource;
 				
diff --git a/LibOneM2M/OneM2M_Templates.ttcn b/LibOneM2M/OneM2M_Templates.ttcn
index f4fe65f..5a6a28a 100644
--- a/LibOneM2M/OneM2M_Templates.ttcn
+++ b/LibOneM2M/OneM2M_Templates.ttcn
@@ -592,6 +592,35 @@ module OneM2M_Templates {
 				tokenRequestIndicator := *
 			}
 			
+			/**
+			 * @desc Base Reception template for create operation for announced resources
+			 */
+			template RequestPrimitive mw_createAnnc(template XSD.ID p_from := ?, template XSD.ID p_to := ?) := {
+				operation := int1,
+				to_ := p_to,
+				from_ := p_from,
+				requestIdentifier := ?,
+				resourceType := ?,
+				primitiveContent := ?,
+				roleIDs := *,
+				originatingTimestamp := *,
+				requestExpirationTimestamp := *,
+				resultExpirationTimestamp := *,
+				operationExecutionTime := *,
+				responseType := *,
+				resultPersistence := *,
+				resultContent := *,
+				eventCategory := *,
+				deliveryAggregation := *,
+				groupRequestIdentifier := *,
+				filterCriteria := *,
+				discoveryResultType := *,
+				tokens := *,
+				tokenIDs := *,
+				localTokenIDs := *,
+				tokenRequestIndicator := *
+			}
+			
 			
 			/**
 			 * @desc Base CREATE request primitive for AEAnnc resource
@@ -612,7 +641,7 @@ module OneM2M_Templates {
 			/**
 			 * @desc Reception template for CREATE AEAnnc
 			 */
-			template RequestPrimitive mw_createAEAnnc(template (omit) XSD.ID p_from := omit, template (omit) XSD.ID p_to := omit, template (omit) AcpType p_accessControlPolicyIds := omit) modifies mw_create := {
+			template RequestPrimitive mw_createAEAnnc(template XSD.ID p_from := ?, template XSD.ID p_to := ?, template (omit) AcpType p_accessControlPolicyIds := omit) modifies mw_createAnnc := {
 				resourceType := int10002,
 				primitiveContent := {aEAnnc := mw_contentCreateAEAnnc({"Credential-ID:None"}, p_accessControlPolicyIds)}
 			};
@@ -661,7 +690,7 @@ module OneM2M_Templates {
 			template RequestPrimitive mw_createAccessControlPolicyAnnc(template XSD.ID p_from := *, template XSD.ID p_to := ?) modifies mw_create := {
 				to_ := p_to,
 				from_ := p_from,
-				resourceType := int10002,
+				resourceType := int10001,
 				primitiveContent := {accessControlPolicyAnnc := mw_contentCreateAcpAnnc(-)}
 			};
         	
@@ -1427,7 +1456,7 @@ module OneM2M_Templates {
 		 * @desc Base reception template of primitiveContent for CREATE operation for AccessControlPolicyAnnc resource
 		 * @param p_labels Labels
 		 */
-		template AccessControlPolicyAnnc_optional mw_contentCreateAcpAnnc (in template (omit)  Labels p_labels := omit) := {
+		template AccessControlPolicyAnnc_optional mw_contentCreateAcpAnnc (in template Labels p_labels := ?) := {
 			resourceName := omit,//NA M
 			resourceType := omit,//NA M
 			resourceID := omit,//NA M
@@ -1437,8 +1466,8 @@ module OneM2M_Templates {
 			labels := p_labels,//MA
 			expirationTime := ?,//MA M
 			link := ?,//M
-			privileges := *,//MA
-			selfPrivileges := *,//MA
+			privileges := ?,//MA
+			selfPrivileges := ?,//MA
 			choice := omit//NA
 		};	
 		
diff --git a/OneM2M_PermutationFunctions.ttcn b/OneM2M_PermutationFunctions.ttcn
index 9c2bbba..9682ee4 100644
--- a/OneM2M_PermutationFunctions.ttcn
+++ b/OneM2M_PermutationFunctions.ttcn
@@ -6181,14 +6181,16 @@ module OneM2M_PermutationFunctions {
 			
 			group Basic {
 		
-				function f_CSE_ANNC_001(ResourceType p_resourceType, template RequestPrimitive p_requestCreatePrimitive, template (present) RequestPrimitive p_requestAnnc, template(omit) RequestPrimitive p_requestUpdatePrimitive := omit) runs on AeSimu {
+				function f_CSE_ANNC_001(ResourceType p_resourceType, template (present) RequestPrimitive p_createRequestAnnc, template(omit) RequestPrimitive p_requestCreatePrimitive := omit, template(omit) RequestPrimitive p_requestUpdatePrimitive := omit) runs on AeSimu {
 
 					// Local variables
 					var MsgIn vc_response;
 					var RequestPrimitive v_request;
 					var integer v_parentIndex := -1;
-					var integer v_containerIndex := -1;
+					var integer v_aeIndex := -1;
 					var ResponsePrimitive v_responsePrimitive;
+					var template RequestPrimitive v_create := m_createAe(PX_APP_ID, omit, omit);
+					v_create.primitiveContent.aE.announceTo := {f_getAnnouncementTargetPoA()};
 				   
 					// Test control
 
@@ -6202,47 +6204,36 @@ module OneM2M_PermutationFunctions {
 					vc_cse1.done;
 					
 					//Preamble
-					v_parentIndex := f_cse_preamble_registerAe();//c_CRUDNDi);						
-
-					vc_cse1.start(f_cse_resourceAnnouncementHandler());						
-					v_resourceIndex := f_cse_createResource(p_resourceType, m_createAEAnnc(PX_APP_ID, omit, omit));						
+					vc_cse1.start(f_cse_resourceAnnouncementHandler(mw_createAEAnnc(-, -, -)));
+					v_aeIndex := f_cse_createResource(int2,v_create);
 					vc_cse1.done;
 					
 					// Test Body
 					if (ispresent (p_requestUpdatePrimitive)) {
- 				      v_request := f_getUpdateRequestPrimitive(p_resourceType, v_resourceIndex, p_requestUpdatePrimitive);
-					  v_responsePrimitive.responseStatusCode := int2004;
+						v_resourceIndex := f_cse_createResource(p_resourceType,p_requestCreatePrimitive);
+ 				      	v_request := f_getUpdateRequestPrimitive(p_resourceType, v_resourceIndex, p_requestUpdatePrimitive);
+					  	v_responsePrimitive.responseStatusCode := int2004;
 					} else {
-					  v_request := f_getCreateRequestPrimitive(p_resourceType, p_requestCreatePrimitive, v_parentIndex);
-					  v_responsePrimitive.responseStatusCode := int2001;
+					  	v_request := f_getCreateRequestPrimitive(p_resourceType, p_requestCreatePrimitive, v_parentIndex);
+					  	v_responsePrimitive.responseStatusCode := int2001;
 					}
+					vc_cse1.start(f_cse_resourceAnnouncementHandler(p_createRequestAnnc));	
 					mcaPort.send(m_request(v_request));
 
-					vc_cse1.start(f_cse_receiveCreateRequest(p_requestAnnc));
-					vc_cse1.done;
-					
 					tc_ac.start;
 					alt {
 						[] mcaPort.receive(mw_response(mw_responsePrimitive(v_responsePrimitive.responseStatusCode))) -> value vc_response {
 							tc_ac.stop;
-							if (v_responsePrimitive.responseStatusCode == int2004){
-							  setverdict(pass, __SCOPE__, ": Attribute of resource type " & int2str(enum2int(p_resourceType)) & " updated successfully");
-							} else if (v_responsePrimitive.responseStatusCode == int2001) {
-							  setverdict(pass, __SCOPE__, ": Attribute of resource type " & int2str(enum2int(p_resourceType)) & " created successfully");
-							}
+							setverdict(pass, __SCOPE__, ": Operation for resource " & int2str(enum2int(p_resourceType)) & " performed successfully");	
 						}
 						[] mcaPort.receive(mw_response(mw_responsePrimitiveOK)) -> value vc_response {
 							tc_ac.stop;
 							setverdict(fail, __SCOPE__, ": Wrong response status code");
 						}
-						[] mcaPort.receive(mw_response(mw_responsePrimitiveKO)) -> value vc_response {
-							tc_ac.stop;
-							setverdict(fail, __SCOPE__, ": Error while updating optional attribute");
-						}
 						[] tc_ac.timeout {
 							setverdict(fail, __SCOPE__, ": No answer while updating resource type " & int2str(enum2int(p_resourceType)));
 						}
-					}	
+					}
 										
 					// Postamble
 					f_cse_postamble_deleteResources();
diff --git a/OneM2M_Testcases_CSE_Release_2.ttcn b/OneM2M_Testcases_CSE_Release_2.ttcn
index b0758a6..fa1c377 100644
--- a/OneM2M_Testcases_CSE_Release_2.ttcn
+++ b/OneM2M_Testcases_CSE_Release_2.ttcn
@@ -7252,19 +7252,91 @@ module OneM2M_Testcases_CSE_Release_2 {
 					testcase TC_CSE_ANNC_001_ACP_UPD() runs on Tester system CseSystem {
 						// Local variables
 						var AeSimu v_ae1 := AeSimu.create("AE1") alive;
-						var template RequestPrimitive v_createRequest := m_createAcpBase;
 						var template RequestPrimitive v_updateRequest := m_updateAcpBase;
+						var template RequestPrimitive v_createRequestAnnc := mw_createAccessControlPolicyAnnc;
   
-						v_createRequest.primitiveContent.accessControlPolicy.announceTo := {f_getAnnouncementTargetPoA()};
+						v_updateRequest.primitiveContent.accessControlPolicy.announceTo := {f_getAnnouncementTargetPoA()};
                   
-						v_ae1.start(f_CSE_ANNC_001(int1, v_createRequest, mw_createAccessControlPolicyAnnc, v_updateRequest));//AccessControlPolicy
+						v_ae1.start(f_CSE_ANNC_001(int1, v_createRequestAnnc, omit, v_updateRequest));//AccessControlPolicy
+						v_ae1.done;
+					}
+					
+					testcase TC_CSE_ANNC_001_ACP_CRE() runs on Tester system CseSystem {
+						// Local variables
+						var AeSimu v_ae1 := AeSimu.create("AE1") alive;
+						var template RequestPrimitive v_createRequest := m_createAcpBase;
+						var template RequestPrimitive v_createRequestAnnc := mw_createAccessControlPolicyAnnc;
+  
+						v_createRequest.primitiveContent.accessControlPolicy.announceTo := {f_getAnnouncementTargetPoA()};
+  
+						v_ae1.start(f_CSE_ANNC_001(int1, v_createRequestAnnc, v_createRequest, omit));//AccessControlPolicy
+						v_ae1.done;
+					}
+					
+					testcase TC_CSE_ANNC_001_CNT_UPD() runs on Tester system CseSystem {
+						// Local variables
+						var AeSimu v_ae1 := AeSimu.create("AE1") alive;
+						var template RequestPrimitive v_updateRequest := m_updateContainerBase;
+						var template RequestPrimitive v_createRequestAnnc := mw_createContainerAnncBase;
+  
+						v_updateRequest.primitiveContent.container.announceTo := {f_getAnnouncementTargetPoA()};
+  
+						v_ae1.start(f_CSE_ANNC_001(int3, v_createRequestAnnc, omit, v_updateRequest));//Container
+						v_ae1.done;
+					}
+					
+					testcase TC_CSE_ANNC_001_CNT_CRE() runs on Tester system CseSystem {
+						// Local variables
+						var AeSimu v_ae1 := AeSimu.create("AE1") alive;
+						var template RequestPrimitive v_createRequest := m_createContainerBase;
+						var template RequestPrimitive v_createRequestAnnc := mw_createContainerAnncBase;
+  
+						v_createRequest.primitiveContent.container.announceTo := {f_getAnnouncementTargetPoA()};
+  
+						v_ae1.start(f_CSE_ANNC_001(int3, v_createRequestAnnc, v_createRequest, omit));//Container
+						v_ae1.done;
+					}
+					
+					testcase TC_CSE_ANNC_001_GRP_UPD() runs on Tester system CseSystem {
+						// Local variables
+						var AeSimu v_ae1 := AeSimu.create("AE1") alive;
+						var template RequestPrimitive v_updateRequest := m_updateGroupBase;
+						var template RequestPrimitive v_createRequestAnnc := mw_createGroupAnncBase;
+  
+						v_updateRequest.primitiveContent.group_.announceTo := {f_getAnnouncementTargetPoA()};
+  
+						v_ae1.start(f_CSE_ANNC_001(int9, v_createRequestAnnc, omit, v_updateRequest));//Group
+						v_ae1.done;
+					}
+					
+					testcase TC_CSE_ANNC_001_GRP_CRE() runs on Tester system CseSystem {
+						// Local variables
+						var AeSimu v_ae1 := AeSimu.create("AE1") alive;
+						var template RequestPrimitive v_createRequest := m_createGroupBase;
+						var template RequestPrimitive v_createRequestAnnc := mw_createGroupAnncBase;
+  
+						v_createRequest.primitiveContent.group_.announceTo := {f_getAnnouncementTargetPoA()};
+  
+						v_ae1.start(f_CSE_ANNC_001(int9, v_createRequestAnnc, v_createRequest, omit));//Group
+						v_ae1.done;
+					}
+					
+					testcase TC_CSE_ANNC_001_CIN_CRE() 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_createContentInstanceAnncBase;
+  
+						v_createRequest.primitiveContent.contentInstance.announceTo := {f_getAnnouncementTargetPoA()};
+  
+						v_ae1.start(f_CSE_ANNC_001(int4, v_createRequestAnnc, v_createRequest, omit));//ContentInstance
 						v_ae1.done;
 					}
 			
 				}// end group g_CSE_ANNC_001
 		
-			}
-		}
+			}//end group Basic
+		}//end group Announcement
 	
 	}//end group CSE
 
-- 
GitLab