diff --git a/LibOneM2M/OneM2M_Functions.ttcn b/LibOneM2M/OneM2M_Functions.ttcn index 34c2c0d034da183be7158fdc35cafdb5b0f677b3..5dc376fb7d85069e209c424e749cdceb596b084b 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 f4fe65f90f0b7adef7bdbe5bda05f45cbbf2fa1a..5a6a28aa4f4257075a83b2d1c645a519a14d0170 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 9c2bbba33eba0bba27472af39d2ee842af4ac9a0..9682ee4eb2276cd17ce9ac88eb0eefc12a53d1b4 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 b0758a6c0ff08395fc47bcf35f18c2420df4b6e2..fa1c377a0f408f30555845c92c4aca519dc0386e 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