diff --git a/LibOneM2M/OneM2M_Functions.ttcn b/LibOneM2M/OneM2M_Functions.ttcn index 437023ea68745b8f6bc9dceb11046a2d2ab71ae2..02c3ea807a135b54c8b673785fa7e357747114da 100644 --- a/LibOneM2M/OneM2M_Functions.ttcn +++ b/LibOneM2M/OneM2M_Functions.ttcn @@ -1935,8 +1935,8 @@ module OneM2M_Functions { v_myResource.remoteCSE.resourceName := "remoteCSE" & int2str(v_resourceIndex); } v_myResource.remoteCSE.resourceType := p_resourceType; - //v_myResource.remoteCSE.resourceID := f_resourceIdCleaner(v_myResource.remoteCSE.cSE_ID); - v_myResource.remoteCSE.resourceID := "remoteCSE-ID" & int2str(v_resourceIndex); + v_myResource.remoteCSE.resourceID := f_resourceIdCleaner(v_myResource.remoteCSE.cSE_ID); + //v_myResource.remoteCSE.resourceID := "remoteCSE-ID" & int2str(v_resourceIndex); v_myResource.remoteCSE.parentID := f_getResourceId(vc_localResourcesList[p_parentIndex].resource); v_myResource.remoteCSE.creationTime := fx_generateTimestamp(); v_myResource.remoteCSE.creationTime := "20171231T012345"; @@ -2046,6 +2046,7 @@ module OneM2M_Functions { var PrimitiveContent v_localResource; var integer vc_localResourceIndex := -1; + var integer v_parentResourceIndex := -1; var MsgIn v_request; var ResponsePrimitive v_response; var integer v_localResourceIndex := -1; @@ -2053,15 +2054,23 @@ module OneM2M_Functions { [] mccPortIn.receive(mw_request(mw_create())) -> value v_request { log(__SCOPE__&": WARNING: Unexpected CREATE message received"); tc_ac.stop; - v_localResource := f_cse_generateLocalResource(v_request.primitive.requestPrimitive.primitiveContent, vc_cSEBaseIndex, v_request.primitive.requestPrimitive.resourceType);//TODO Get index from v_request.primitive.requestPrimitive.to_ - vc_localResourceIndex := f_setLocalResource(v_localResource, v_request.primitive.requestPrimitive.resourceType, vc_cSEBaseIndex); - - v_response := valueof(m_responsePrimitive(int2001,v_request.primitive.requestPrimitive.requestIdentifier)); + + v_parentResourceIndex := f_getResourceIndex(v_request.primitive.requestPrimitive.to_); + if(v_parentResourceIndex == -1) { + log(__SCOPE__&": ERROR: Target resource not found"); + v_response := valueof(m_responsePrimitive(int4004,v_request.primitive.requestPrimitive.requestIdentifier)); + + } else { + v_localResource := f_cse_generateLocalResource(v_request.primitive.requestPrimitive.primitiveContent, vc_cSEBaseIndex, v_request.primitive.requestPrimitive.resourceType);//TODO Get index from v_request.primitive.requestPrimitive.to_ + vc_localResourceIndex := f_setLocalResource(v_localResource, v_request.primitive.requestPrimitive.resourceType, vc_cSEBaseIndex); + + v_response := valueof(m_responsePrimitive(int2001,v_request.primitive.requestPrimitive.requestIdentifier)); + v_response.primitiveContent := vc_localResourcesList[vc_localResourceIndex].resource; + } v_response.from_ := PX_CSE1_ID; v_response.to_ := v_request.primitive.requestPrimitive.from_; - v_response.primitiveContent := vc_localResourcesList[vc_localResourceIndex].resource; mccPortIn.send(m_response(v_response)); - tc_ac.start; + tc_ac.start(5.0); repeat; } [] mccPortIn.receive(mw_request(mw_retrieve(?))) -> value v_request { @@ -2083,7 +2092,7 @@ module OneM2M_Functions { v_response.primitiveContent := vc_localResourcesList[v_localResourceIndex].resource; mccPortIn.send(m_response(v_response)); } - tc_ac.start; + tc_ac.start(5.0); repeat; } [] mccPortIn.receive(mw_request(mw_update())) -> value v_request { @@ -2105,7 +2114,7 @@ module OneM2M_Functions { v_response.primitiveContent := vc_localResourcesList[v_localResourceIndex].resource; mccPortIn.send(m_response(v_response)); } - tc_ac.start; + tc_ac.start(5.0); repeat; } [] mccPortIn.receive (mw_request(?)){ @@ -2827,7 +2836,7 @@ module OneM2M_Functions { log("Hierarchical method: " & v_cleanedURI); for(i:=0; i < lengthof(vc_localResourcesList); i := i+1){ - if(match(f_getResourceName(vc_localResourcesList[i].resource), v_cleanedURI)){ + if(v_cleanedURI == f_getResourceName(vc_localResourcesList[i].resource)){ v_resourceIndex := i; break; } @@ -2837,7 +2846,7 @@ module OneM2M_Functions { log("Non Hierarchical method: " & v_cleanedURI); for(i:=0; i < lengthof(vc_localResourcesList); i := i+1){ - if(match(f_getResourceId(vc_localResourcesList[i].resource), v_cleanedURI)){ + if(v_cleanedURI == f_getResourceId(vc_localResourcesList[i].resource)){ v_resourceIndex := i; break; } @@ -2846,10 +2855,11 @@ module OneM2M_Functions { log("Resource index found: " & int2str(v_resourceIndex)); //Try CSEBase if(v_resourceIndex == -1) { - if(match(f_getResourceName(vc_localResourcesList[vc_cSEBaseIndex].resource), v_cleanedURI)) { + if(v_cleanedURI == f_getResourceName(vc_localResourcesList[vc_cSEBaseIndex].resource)) { v_resourceIndex := vc_cSEBaseIndex; } } + log("Resource index found: " & int2str(v_resourceIndex)); return v_resourceIndex; } @@ -2929,13 +2939,13 @@ module OneM2M_Functions { if(p_primitiveScope == e_cseRelative) { if(p_addressingMethod == e_nonHierarchical) { - if(p_targetResourceIndex == -1) { + if(p_targetResourceIndex == 0) { return PX_CSE1_RESOURCE_ID; } else { return f_getResourceId(vc_localResourcesList[p_targetResourceIndex].resource); } } else { - if(p_targetResourceIndex == -1) { + if(p_targetResourceIndex == 0) { return PX_CSE1_NAME; } else { v_resourceAddress := f_getLocalResourceAddress(vc_localResourcesList[p_targetResourceIndex].parentIndex, p_addressingMethod, p_primitiveScope) & "/" & f_getResourceName(vc_localResourcesList[p_targetResourceIndex].resource); @@ -2945,14 +2955,14 @@ module OneM2M_Functions { } else if (p_primitiveScope == e_spRelative) { if(p_addressingMethod == e_nonHierarchical) { - if(p_targetResourceIndex == -1) { + if(p_targetResourceIndex == 0) { return PX_CSE1_ID & "/" & PX_CSE1_RESOURCE_ID; } else { v_resourceAddress := PX_CSE1_ID & "/" & f_getResourceId(vc_localResourcesList[p_targetResourceIndex].resource); return v_resourceAddress; } } else { - if(p_targetResourceIndex == -1) { + if(p_targetResourceIndex == 0) { return PX_CSE1_ID & "/" & PX_CSE1_NAME; } else { v_resourceAddress := f_getLocalResourceAddress(vc_localResourcesList[p_targetResourceIndex].parentIndex, p_addressingMethod, p_primitiveScope) & "/" & f_getResourceName(vc_localResourcesList[p_targetResourceIndex].resource); @@ -2961,14 +2971,14 @@ module OneM2M_Functions { } } else if (p_primitiveScope == e_absolute) { if(p_addressingMethod == e_nonHierarchical) { - if(p_targetResourceIndex == -1) { + if(p_targetResourceIndex == 0) { return PX_SP1_ID & PX_CSE1_ID; } else { v_resourceAddress := f_getLocalResourceAddress(-, p_addressingMethod, p_primitiveScope) & "/" & f_getResourceId(vc_localResourcesList[p_targetResourceIndex].resource); return v_resourceAddress; } } else { - if(p_targetResourceIndex == -1) { + if(p_targetResourceIndex == 0) { return PX_SP1_ID & PX_CSE1_ID & "/" & PX_CSE1_NAME; } else { v_resourceAddress := f_getLocalResourceAddress(vc_localResourcesList[p_targetResourceIndex].parentIndex, p_addressingMethod, p_primitiveScope) & "/" & f_getResourceName(vc_localResourcesList[p_targetResourceIndex].resource); diff --git a/LibOneM2M/OneM2M_Templates.ttcn b/LibOneM2M/OneM2M_Templates.ttcn index e6f8505ef57e85e459b1efc155581a76a6d9082c..3970aef52096d9277fe148bd3e51c48e70d5f3c1 100644 --- a/LibOneM2M/OneM2M_Templates.ttcn +++ b/LibOneM2M/OneM2M_Templates.ttcn @@ -585,7 +585,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 AcpType p_accessControlPolicyIds := ?, template XSD.AnyURI p_link := ?) modifies mw_create := { + template RequestPrimitive mw_createAEAnnc(template XSD.ID p_from := ?, template XSD.ID p_to := ?, template AcpType p_accessControlPolicyIds := ?, template XSD.AnyURI p_link := ?) modifies mw_create := { resourceType := int10002, primitiveContent := {aEAnnc := mw_contentCreateAEAnnc({"Credential-ID:None"}, p_accessControlPolicyIds)} }; diff --git a/OneM2M_Testcases_CSE_Release_1.ttcn b/OneM2M_Testcases_CSE_Release_1.ttcn index dc06935c148d21d095d7ba70534e27fef135f626..4e169f47fdd2880930d86101844ff1c2f20b1a8e 100644 --- a/OneM2M_Testcases_CSE_Release_1.ttcn +++ b/OneM2M_Testcases_CSE_Release_1.ttcn @@ -562,7 +562,7 @@ module OneM2M_Testcases_CSE_Release_1 { */ testcase TC_CSE_REG_CRE_005() runs on InCseSimu system CseSystem { - var RequestPrimitive v_request; + var template RequestPrimitive v_request; var integer v_cseBaseIndex := -1; var ResourceType v_resourceType := int2; @@ -577,16 +577,23 @@ module OneM2M_Testcases_CSE_Release_1 { //Test Body vc_ae1.start(f_cse_sendCreateRequestPrimitive(int2, m_createAe(PX_APP_ID, -, "S", omit))); vc_ae1.done; + + v_request := mw_createAEAnnc(PX_CSE_ID & "/S", -, -, -); + v_request.primitiveContent.aEAnnc.app_ID := PX_APP_ID; tc_ac.start; alt{ - [] mccPortIn.receive(mw_request(mw_createAEAnnc(PX_CSE_ID, f_getResourceAddress(-1,e_hierarchical, e_spRelative) & "/S", -))){ + [] mccPortIn.receive(mw_request(v_request)){ tc_ac.stop; setverdict(pass, __SCOPE__ & ": AE creation redirected."); } - [] mccPortIn.receive(mw_request(mw_createAEAnnc(PX_CSE_ID, f_getResourceAddress(-1,e_hierarchical, e_absolute) & "/S", -))){ + [] mccPortIn.receive(mw_request(mw_createAEAnnc())){ tc_ac.stop; - setverdict(pass, __SCOPE__ & ": AE creation redirected."); + setverdict(fail, __SCOPE__ & ": AE creation redirected but wrong parameters"); + } + [] mccPortIn.receive(mw_request(?)){ + tc_ac.stop; + setverdict(fail, __SCOPE__ & ": Unexpected message received"); } [] tc_ac.timeout { setverdict(fail, __SCOPE__ & ": No answer while creating AE"); @@ -675,7 +682,7 @@ module OneM2M_Testcases_CSE_Release_1 { mcaPort.send(m_request(f_getCreateRequestPrimitive(int2, m_createAe(PX_APP_ID, omit, "S"),-1))); - vc_cse1.start(f_cse_resourceAnnouncementHandler()); + vc_cse1.start(f_cse_announcementProcedure_createHandler()); vc_cse1.done; //Test Body @@ -793,7 +800,7 @@ module OneM2M_Testcases_CSE_Release_1 { vc_remoteCseIndex := f_cse_registerRemoteCse(m_createRemoteCSEBase); //Create AEAnnc - v_aeAnncIndex := f_cse_announceResource(int2, m_createAEAnnc(-, PX_CSE1_ID & "/" & "S", PX_APP_ID, PX_CSE1_ID & "/" & "S")); + v_aeAnncIndex := f_cse_announcementProcedure_announceResource(int2, m_createAEAnnc(-, PX_CSE1_ID & "/" & "S", PX_APP_ID, PX_CSE1_ID & "/" & "S")); //Update AEAnnc to simulate deregistration of AE v_request := f_getUpdateRequestPrimitive(f_getAnnouncedResourceType(int2),v_aeAnncIndex, valueof(m_updateAEAnncBase));//TODO @@ -861,7 +868,7 @@ module OneM2M_Testcases_CSE_Release_1 { v_aeIndex := f_cse_createResource(int2, m_createAe(PX_APP_ID, omit, "S-AE-ID-STEM")); - vc_cse1.start(f_cse_resourceAnnouncementHandler()); + vc_cse1.start(f_cse_announcementProcedure_createHandler()); vc_cse1.done; //TODO Deregister @@ -872,7 +879,7 @@ module OneM2M_Testcases_CSE_Release_1 { //Test Body f_cse_createResource(int2, m_createAe(PX_APP_ID, omit, f_getResourceId(vc_resourcesList[v_aeIndex].resource))); - vc_cse1.start(f_cse_resourceAnnouncementHandler(mw_createAEAnnc(PX_CSE_ID, -, -, -))); + vc_cse1.start(f_cse_announcementProcedure_createHandler(mw_createAEAnnc(PX_CSE_ID, -, -, -))); vc_cse1.done; tc_ac.start; @@ -1294,7 +1301,7 @@ module OneM2M_Testcases_CSE_Release_1 { } } - vc_cse1.start(f_cse_notifyProcedure_updateHandler()); + vc_cse1.start(f_cse_announcementProcedure_updateHandler()); vc_cse1.done; //Test body