diff --git a/LibOneM2M/OneM2M_Functions.ttcn b/LibOneM2M/OneM2M_Functions.ttcn index c8cc996be353c44d84e130ecafe835e4337e9bbd..7d16fd6bee23319e35ac7f647e9323fe2be091c9 100644 --- a/LibOneM2M/OneM2M_Functions.ttcn +++ b/LibOneM2M/OneM2M_Functions.ttcn @@ -418,13 +418,41 @@ module OneM2M_Functions { * @param p_tester AeSimu component * @param p_resourceIndex Index of resource to be retrieved */ - function f_getResource(in Tester p_component, in integer p_resourceIndex := -1) runs on Tester return integer { + function f_getResourceFromAeSimu(in AeSimu p_component, in integer p_resourceIndex := -1) runs on Tester return integer { var MyResource v_resource; var integer v_resourceIndex := -1; f_connectInfoPort(p_component); + + p_component.start(f_sendResourceAeSimu(p_resourceIndex)); + + alt { + []infoPort.receive(mw_resource) -> value v_resource { + v_resourceIndex := f_setResource(v_resource.resource, v_resource.resourceType, v_resource.parentIndex, false); + } + } - p_component.start(f_sendResource(p_resourceIndex)); + p_component.done; + f_disconnectInfoPort(p_component); + + return v_resourceIndex; + + } + + + /** + * @desc Getting a specific resource from an CseSimu component + * @param p_tester AeSimu component + * @param p_resourceIndex Index of resource to be retrieved + */ + function f_getResourceFromCseSimu(in CseSimu p_component, in integer p_resourceIndex := -1) runs on Tester return integer { + var MyResource v_resource; + var integer v_resourceIndex := -1; + + f_connectInfoPort(p_component); + + p_component.start(f_sendResourceCseSimu(p_resourceIndex)); + alt { []infoPort.receive(mw_resource) -> value v_resource { v_resourceIndex := f_setResource(v_resource.resource, v_resource.resourceType, v_resource.parentIndex, false); @@ -491,7 +519,7 @@ module OneM2M_Functions { * @desc Sending of a specific resource through InfoPort * @param p_resourceIndex Index of resource to be sent */ - function f_sendResource(in integer p_resourceIndex) runs on Tester { + function f_sendResourceAeSimu(in integer p_resourceIndex) runs on AeSimu { if(p_resourceIndex == -1) { infoPort.send(vc_resourcesList[vc_aeAuxIndex]); //TODO To send Ae or RemoteCSE depending on the component type @@ -500,6 +528,57 @@ module OneM2M_Functions { } } + + /** + * @desc Sending of a specific resource through InfoPort + * @param p_resourceIndex Index of resource to be sent + */ + function f_sendResourceCseSimu(in integer p_resourceIndex) runs on CseSimu { + + if(p_resourceIndex == -1) { + infoPort.send(vc_resourcesList[vc_remoteCseIndex]); //TODO To send Ae or RemoteCSE depending on the component type + } else { + infoPort.send(vc_resourcesList[p_resourceIndex]); + } + + } + + /** + * @desc Sending of the latest resource through InfoPort + */ + function f_sendLatestResource() runs on Tester { + + infoPort.send(vc_resourcesList[lengthof(vc_resourcesList)-1]); + + } + + /** + * @desc Sending of last resourceIndex saved in the vc_resourcesList + */ + function f_sendLatestResourceIndex() runs on Tester { + + infoPort.send(lengthof(vc_resourcesList)-1); + + } + + /** + * @desc Sending the address of the last resource saved in the vc_resourcesList + */ + function f_sendLatestLocalResourceAddress(AddressingMethod p_addressingMethod := PX_ADDRESSING_METHOD, PrimitiveScope p_primitiveScope := PX_PRIMITIVE_SCOPE) runs on CseSimu { + + infoPort.send(f_getLocalResourceAddress(lengthof(vc_localResourcesList)-1, p_addressingMethod, p_primitiveScope)); + + } + + /** + * @desc Sending of last local resourceIndex saved in the vc_localResourcesList + */ + function f_sendLatestLocalResourceIndex() runs on CseSimu { + + infoPort.send(lengthof(vc_localResourcesList)-1); + + } + }//end of group sendFunctions }// end of gropu InfoPortCommunication @@ -599,7 +678,7 @@ module OneM2M_Functions { } if(vc_acpAuxIndex != -1) { - vc_resourcesIndexToBeDeleted := {vc_acpAuxIndex}; + vc_resourcesIndexToBeDeleted := {vc_acpAuxIndex};//TODO Not needed v_request := valueof(m_createAe(p_appId, {f_getResourceId(vc_resourcesList[vc_acpAuxIndex].resource)}, -)); //TODO Test, to be removed @@ -702,7 +781,7 @@ module OneM2M_Functions { vc_ae2.start(f_cse_createResource_withAcpAux(int2, m_createAe(PX_APP_ID, -, PX_AE2_ID_STEM, c_defaultAE2Name, {f_getCompletePoA("HTTP", PX_AE2_ADDRESS, "")}), -1)); // AE2 is registred f_aeSimu_checkComponentDoneAndGetVerdict(vc_ae2); - p_ae2Index := f_getResource(vc_ae2); + p_ae2Index := f_getResourceFromAeSimu(vc_ae2); if(ischosen(p_createRequestPrimitive.primitiveContent.subscription)){ //this condition is necessary for Subscription TCs where notification URI is set in m_createSubscriptionAdvanced p_createRequestPrimitive.primitiveContent.subscription.notificationURI := {f_getResourceAddress(p_ae2Index)}; } @@ -1027,7 +1106,8 @@ module OneM2M_Functions { * @return Internal resource index of the created auxiliar ACP resource * @verdict */ - function f_cse_createAccessControlPolicyAux(in template (value) XSD.String p_acpName := c_acpAuxName, in template (value) ListOfURIs p_acor := PX_ACOR, in template (value) AccessControlOperations p_allowedOperations := int63) runs on AeSimu return integer{ var RequestPrimitive v_request; + function f_cse_createAccessControlPolicyAux(in template (value) XSD.String p_acpName := c_acpAuxName, in template (value) ListOfURIs p_acor := PX_ACOR, in template (value) AccessControlOperations p_allowedOperations := int63) runs on AeSimu return integer{ + var RequestPrimitive v_request; var integer v_acpAuxIndex := -1; v_request := valueof(m_createAcpAux(p_acpName := p_acpName, p_acor := p_acor, p_allowedOperations := p_allowedOperations)); @@ -1565,6 +1645,10 @@ module OneM2M_Functions { tc_ac.stop; setverdict(fail, __SCOPE__ & ": Error, Non expected notification received"); } + [] mcaPortIn.receive(mw_request(mw_notifyResponsePrimitive(?))) -> value vc_request { + tc_ac.stop; + setverdict(fail, __SCOPE__ & ": Error, Non expected notification received"); + } [] tc_ac.timeout { setverdict(pass, __SCOPE__ & ": No notification received"); } @@ -2878,8 +2962,8 @@ module OneM2M_Functions { if (p_resourceType == int9) {//group if(match(valueof(p_request.primitiveContent.group_.memberIDs), v_defaultListOfURIs )){ - if ((p_parentIndex == -1) and (isbound(vc_aeAuxIndex))){ - p_request.primitiveContent.group_.memberIDs := {f_getResourceId(vc_resourcesList[vc_aeAuxIndex].resource)}; + if (p_parentIndex == -1){ + p_request.primitiveContent.group_.memberIDs := {}; }else{ p_request.primitiveContent.group_.memberIDs := {f_getResourceId(vc_resourcesList[p_parentIndex].resource)}; } @@ -2915,7 +2999,7 @@ module OneM2M_Functions { //subscriberURI if(ispresent(p_request.primitiveContent.subscription.subscriberURI)) { if(match(valueof(p_request.primitiveContent.subscription.subscriberURI), "NotInitialized" )){ - p_request.primitiveContent.subscription.subscriberURI := f_getResourceAddress(vc_aeAuxIndex); + p_request.primitiveContent.subscription.subscriberURI := valueof(p_request.from_); } } //accessControlPolicyIds diff --git a/LibOneM2M/OneM2M_Ports.ttcn b/LibOneM2M/OneM2M_Ports.ttcn index 76b80cefe389d569029331bd0661ec2025a6287e..fbfdbc6024dc35bbb7ffe700a6855d824231f4db 100644 --- a/LibOneM2M/OneM2M_Ports.ttcn +++ b/LibOneM2M/OneM2M_Ports.ttcn @@ -14,6 +14,7 @@ module OneM2M_Ports { import from OneM2M_Types all; + import from XSD all; /* *************************************** * oneM2M Ports * *************************************** @@ -47,9 +48,9 @@ module OneM2M_Ports { */ type port InfoPort message { in - RequestPrimitive, ResponsePrimitive, PrimitiveContent, MyResource; + RequestPrimitive, ResponsePrimitive, PrimitiveContent, MyResource, integer, XSD.ID; out - RequestPrimitive, ResponsePrimitive, PrimitiveContent, MyResource; + RequestPrimitive, ResponsePrimitive, PrimitiveContent, MyResource, integer, XSD.ID; } diff --git a/LibOneM2M/OneM2M_Templates.ttcn b/LibOneM2M/OneM2M_Templates.ttcn index 85a8e7b0d138ab6d327af3573dfaae3a24384604..3a00f17f01a6c5addfc2329f15f02526cce52a88 100644 --- a/LibOneM2M/OneM2M_Templates.ttcn +++ b/LibOneM2M/OneM2M_Templates.ttcn @@ -1191,6 +1191,13 @@ module OneM2M_Templates { primitiveContent := {notification := p_notification} }; + /** + * @desc Base NOTIFY request primitive for ResponsePrimitive + */ + + template RequestPrimitive mw_notifyResponsePrimitive(in template (present) ResponsePrimitive p_responsePrimitive) modifies mw_notify := { + primitiveContent := {responsePrimitive := p_responsePrimitive} + }; diff --git a/LibOneM2M/OneM2M_TestSystem.ttcn b/LibOneM2M/OneM2M_TestSystem.ttcn index b1808128e9b8db935d6030770a2ab9f83223a423..ed535b18d206c00958b5ddc0e5e29ea664460da3 100644 --- a/LibOneM2M/OneM2M_TestSystem.ttcn +++ b/LibOneM2M/OneM2M_TestSystem.ttcn @@ -35,13 +35,12 @@ module OneM2M_TestSystem { var TestSystemRole vc_testSystemRole; var MyResourcesList vc_resourcesList; var IntegerList vc_resourcesIndexToBeDeleted := {}; - var integer vc_aeAuxIndex := -1;//TODO To be removed var integer vc_acpAuxIndex := -1; - var AccessControlPolicy_optional vc_acpAux; var MsgIn vc_request; var MsgIn vc_response; var default vc_aeSimu := null; var default vc_cseSimu := null; + var PrimitiveContent vc_primitiveContentRetrievedResource; }; type component AeSimu extends Tester { @@ -50,10 +49,11 @@ module OneM2M_TestSystem { port OneM2MPort mcaPortIn; //global variables - var PrimitiveContent vc_primitiveContentRetrievedResource; + //var PrimitiveContent vc_primitiveContentRetrievedResource; var CseSimu vc_cse1;//For CF02 when AeSimu is master var boolean vc_auxiliaryAe2Up := false; + var integer vc_aeAuxIndex := -1;//Specific to AeSimu }; type component CseSimu extends Tester { @@ -65,10 +65,10 @@ module OneM2M_TestSystem { //global variables var MyResourcesList vc_localResourcesList := {}; var AeSimu vc_ae1;//For CF02 when CseSimu is master - var integer vc_remoteCseIndex := -1; var integer vc_localRemoteCseIndex := -1; var integer vc_cSEBaseIndex := -1; //Index of the CSEBase resource of the Tester inside vc_localResourcesList var CseTypeID vc_cseType; //cseType of the simulated CSE. IN =1, MN = 2 + var integer vc_remoteCseIndex := -1;//Specific to CseSimu }; type component InCseSimu extends CseSimu {} diff --git a/LibOneM2M/OneM2M_Types.ttcn b/LibOneM2M/OneM2M_Types.ttcn index b116f750797f31282fc746c89b96c671e6ea8cf9..8f58e11081f26b2eadc52adf46f992c91a58f917 100644 --- a/LibOneM2M/OneM2M_Types.ttcn +++ b/LibOneM2M/OneM2M_Types.ttcn @@ -2865,7 +2865,7 @@ module OneM2M_Types { MemberType memberType, XSD.NonNegativeInteger currentNrOfMembers, XSD.PositiveInteger maxNrOfMembers, - record of XSD.AnyURI memberIDs, + record length(0 .. infinity) of XSD.AnyURI memberIDs,//TODO A list that can be empty ListOfURIs membersAccessControlPolicyIDs optional, XSD.Boolean memberTypeValidated optional, ConsistencyStrategy consistencyStrategy optional, @@ -4619,7 +4619,7 @@ group optionalResourceTypes { MemberType memberType optional, XSD.NonNegativeInteger currentNrOfMembers optional, XSD.PositiveInteger maxNrOfMembers optional, - ListOfURIs memberIDs optional, + record length(0 .. infinity) of XSD.AnyURI memberIDs optional,//TODO A list that can be empty ListOfURIs membersAccessControlPolicyIDs optional, XSD.Boolean memberTypeValidated optional, ConsistencyStrategy consistencyStrategy optional, diff --git a/OneM2M_PermutationFunctions.ttcn b/OneM2M_PermutationFunctions.ttcn index b42f331bc1b6ff8a386ea1c3b5569b13b47a4c72..0d0a66e1d6675bb0086a0759991c1d9a3d0158dd 100644 --- a/OneM2M_PermutationFunctions.ttcn +++ b/OneM2M_PermutationFunctions.ttcn @@ -1752,7 +1752,7 @@ module OneM2M_PermutationFunctions { vc_ae2.start(f_cse_createResource_withAcpAux(int2, m_createAe(PX_APP_ID, -, PX_AE2_ID_STEM, c_defaultAE2Name, v_poaList), -1)); // AE2 is registred f_aeSimu_checkComponentDoneAndGetVerdict(vc_ae2); - v_ae2Index := f_getResource(vc_ae2); + v_ae2Index := f_getResourceFromAeSimu(vc_ae2); p_parentRequestPrimitive.primitiveContent.subscription.notificationURI := {f_getResourceAddress(v_ae2Index)}; vc_ae2.start(f_cse_notifyProcedure_subscriptionVerificationHandler()); } @@ -1789,7 +1789,7 @@ module OneM2M_PermutationFunctions { f_aeSimu_checkComponentDoneAndGetVerdict(vc_ae2); vc_ae2.start(f_cse_createResource_withAcpAux(int2, m_createAe(PX_APP_ID, -, PX_AE2_ID_STEM, c_defaultAE2Name, v_poaList), -1)); // AE2 is registred f_aeSimu_checkComponentDoneAndGetVerdict(vc_ae2); - v_ae2Index := f_getResource(vc_ae2); + v_ae2Index := f_getResourceFromAeSimu(vc_ae2); p_requestPrimitive.primitiveContent.subscription.notificationURI := {f_getResourceAddress(v_ae2Index)}; vc_ae2.start(f_cse_notifyProcedure_subscriptionVerificationHandler()); } @@ -1863,7 +1863,7 @@ module OneM2M_PermutationFunctions { f_cseSimu_checkComponentDoneAndGetVerdict(vc_ae1); vc_ae1.start(f_cse_createResource_withAcpAux(int2, m_createAe(PX_APP_ID, -, PX_AE1_ID_STEM, "MyAe", v_poaList), -1)); // AE1 is registered f_cseSimu_checkComponentDoneAndGetVerdict(vc_ae1); - v_ae1Index := f_getResource(vc_ae1); + v_ae1Index := f_getResourceFromAeSimu(vc_ae1); p_requestPrimitive.primitiveContent.subscription.notificationURI := {f_getResourceAddress(v_ae1Index)}; vc_ae1.start(f_cse_notifyProcedure_subscriptionVerificationHandler()); } diff --git a/OneM2M_Testcases_CSE_Release_1.ttcn b/OneM2M_Testcases_CSE_Release_1.ttcn index a0597f2667df817afadbfd29e25c59a4906ea08e..cdad95e4f0779d1b55e6779a0859671c76705546 100644 --- a/OneM2M_Testcases_CSE_Release_1.ttcn +++ b/OneM2M_Testcases_CSE_Release_1.ttcn @@ -1414,7 +1414,7 @@ module OneM2M_Testcases_CSE_Release_1 { tc_ac.stop; setverdict(pass, __SCOPE__ & ": Resource type remoteCSE created successfully"); f_checkAttributesToBeSaved(int16, v_request, v_response.primitive.responsePrimitive); - vc_aeAuxIndex := f_setResource(v_response.primitive.responsePrimitive.primitiveContent, int16); + vc_remoteCseIndex := f_setResource(v_response.primitive.responsePrimitive.primitiveContent, int16); } [] mccPort.receive(mw_response(mw_responsePrimitiveOK)) { tc_ac.stop; @@ -1480,7 +1480,7 @@ module OneM2M_Testcases_CSE_Release_1 { tc_ac.stop; setverdict(pass, __SCOPE__ & ": Resource type remoteCSE created successfully"); f_checkAttributesToBeSaved(int16, v_request, v_response.primitive.responsePrimitive); - vc_aeAuxIndex := f_setResource(v_response.primitive.responsePrimitive.primitiveContent, int16); + vc_remoteCseIndex := f_setResource(v_response.primitive.responsePrimitive.primitiveContent, int16); } [] mccPort.receive(mw_response(mw_responsePrimitiveKO)) -> value v_response { tc_ac.stop;