diff --git a/LibOneM2M/OneM2M_Functions.ttcn b/LibOneM2M/OneM2M_Functions.ttcn index e8aa80744cdf1ce2bd194d036520dce81be1ac11..281e102ffc3f34e31358401cc2a1c7a46fb97040 100644 --- a/LibOneM2M/OneM2M_Functions.ttcn +++ b/LibOneM2M/OneM2M_Functions.ttcn @@ -2148,6 +2148,7 @@ module OneM2M_Functions { function f_cse_notifyProcedure_subscriptionVerificationHandler(in ResponseStatusCode p_responseStatusCode := int2000) runs on AeSimu { // Local variables var ResponsePrimitive v_responsePrimitive; + var boolean v_notificationReceived := false; var template Notification v_notificationRequest := mw_contentNotificationVerification; //Activate defaults when running on a PTC @@ -2162,10 +2163,12 @@ module OneM2M_Functions { alt { [] mcaPortIn.receive(mw_request(mw_notifyNotification(v_notificationRequest))) -> value vc_request { tc_ac.stop; + v_notificationReceived := true; setverdict(pass, __SCOPE__ & ":INFO: Subscription Verification Notification received"); } [] mcaPortIn.receive(mw_request(mw_notifyNotification(mw_contentNotification(?)))) -> value vc_request { tc_ac.stop; + v_notificationReceived := true; setverdict(inconc, __SCOPE__ & ":ERROR: Notification received but verificationRequest isn't set to TRUE"); } [] tc_ac.timeout { @@ -2174,16 +2177,18 @@ module OneM2M_Functions { } } - //Sending response to the notification received - //Preparation of Notification response to be sent - v_responsePrimitive := valueof(m_responseNotification(p_responseStatusCode, omit)); - v_responsePrimitive.requestIdentifier := vc_request.primitive.requestPrimitive.requestIdentifier; - - if(getverdict != pass) { - v_responsePrimitive.responseStatusCode := int4000; + if(v_notificationReceived) { + //Sending response to the notification received + //Preparation of Notification response to be sent + v_responsePrimitive := valueof(m_responseNotification(p_responseStatusCode, omit)); + v_responsePrimitive.requestIdentifier := vc_request.primitive.requestPrimitive.requestIdentifier; + + if(getverdict != pass) { + v_responsePrimitive.responseStatusCode := int4000; + } + f_send(e_mcaPortIn, m_response(v_responsePrimitive)); } - f_send(e_mcaPortIn, m_response(v_responsePrimitive)); - + } //end f_cse_notifyProcedure_subscriptionVerificationHandler /** @@ -6624,7 +6629,7 @@ module OneM2M_Functions { //Calculate the SP-Relative-AE-ID following format defined in TS-0010 MQTT v_aeResourceAddress := f_getResourceAddress(p_aeIndex, e_nonHierarchical, e_spRelative); if(vc_resourcesList[p_aeIndex].resource.aE.aE_ID[0] == "S") { - v_spRelativeAeIdForMqtt := f_resourceIdCleaner(v_aeResourceAddress); + v_spRelativeAeIdForMqtt := oct2char(unichar2oct(f_resourceIdCleaner(v_aeResourceAddress))); } else { v_spRelativeAeIdForMqtt := f_getSpRelativeAeIdForMqtt(v_aeResourceAddress); } diff --git a/LibOneM2M/OneM2M_Templates.ttcn b/LibOneM2M/OneM2M_Templates.ttcn index 58ced2c0a040e2f43e3e1648bda9c6a7b986df27..89e6f9547fb5dec80806e60db335dc74121d4121 100644 --- a/LibOneM2M/OneM2M_Templates.ttcn +++ b/LibOneM2M/OneM2M_Templates.ttcn @@ -2232,7 +2232,7 @@ module OneM2M_Templates { operationExecutionTime := *, responseType := *, resultPersistence := omit, - resultContent := omit, + resultContent := int0 ifpresent, eventCategory := *, deliveryAggregation := *, groupRequestIdentifier := *, diff --git a/LibOneM2M/OneM2M_TypesAndValues.ttcn b/LibOneM2M/OneM2M_TypesAndValues.ttcn index 5a67daa355166daa61f43d512a2cd128eed9acdd..4ea88fdefaf5106c0416debb122ab652f23c7f4d 100644 --- a/LibOneM2M/OneM2M_TypesAndValues.ttcn +++ b/LibOneM2M/OneM2M_TypesAndValues.ttcn @@ -4360,8 +4360,8 @@ group OtherTypes { type record MqttBindingDesc { ProtocolBindings bindingProtocol (e_mqtt), BindingDesc bindingDesc, - XSD.ID originator, - XSD.ID receiver + XSD.ID originator optional, + XSD.ID receiver optional } /** diff --git a/OneM2M_Testcases_AE_Release_1.ttcn b/OneM2M_Testcases_AE_Release_1.ttcn index 730ac6f7db11c8ed8852e9027e0b30c8cb28578f..f60ad65e263e29875f6ab6b96e42712aec0e7bd4 100644 --- a/OneM2M_Testcases_AE_Release_1.ttcn +++ b/OneM2M_Testcases_AE_Release_1.ttcn @@ -2132,8 +2132,10 @@ module OneM2M_Testcases_AE_Release_1 { v_response_rsp1.to_ := v_request_req1.primitive.requestPrimitive.from_; //Put in the primitiveContent a Notify request (req2) (simulated) from another node CSE v_request_req2 := valueof(m_notify(f_getLocalResourceAddress(v_pollingChannelIndex))); + v_request_req2.from_ := PX_TS_CSE1.cseId; v_response_rsp1.primitiveContent := { requestPrimitive := v_request_req2 }; - mcaPortIn.send(m_response(v_response_rsp1)); + //send back responsePrimitive + f_send(e_mcaPortIn, m_response(v_response_rsp1)); } [] tc_ac.timeout { setverdict(inconc, __SCOPE__&":INFO: No request received for creating resource type Polling Channel"); diff --git a/OneM2M_Testcases_CSE_Release_1.ttcn b/OneM2M_Testcases_CSE_Release_1.ttcn index 67f87073b706fd02ff288fc50d3c36bac44fa7c4..2abce727e704c9dc2a694650426b2cb618e292ab 100644 --- a/OneM2M_Testcases_CSE_Release_1.ttcn +++ b/OneM2M_Testcases_CSE_Release_1.ttcn @@ -43,7 +43,7 @@ module OneM2M_Testcases_CSE_Release_1 { var integer i; var XSD.ID v_resourceAddress; var RequestPrimitive v_request; - map(self:mcaPort, system:mcaPort); + f_cf01Up(); for (i:=0; i<lengthof(PX_RESOURCES_TO_BE_DELETED); i:= i+1) { @@ -77,8 +77,7 @@ module OneM2M_Testcases_CSE_Release_1 { } } - unmap(self:mcaPort, system:mcaPort); - stop; + f_cf01Down(); } }//end group helpingTestCases @@ -1244,7 +1243,7 @@ module OneM2M_Testcases_CSE_Release_1 { f_send(e_mcaPort, m_request(v_request)); tc_ac.start; alt { - [] mcaPort.receive(mw_response(mw_responsePrimitive(int4107))) { + [] mcaPort.receive(mw_response(mw_responsePrimitive(int4126))) { tc_ac.stop; setverdict(pass, __SCOPE__ & ": AE creation rejected."); } @@ -8327,21 +8326,30 @@ module OneM2M_Testcases_CSE_Release_1 { // Local variables var MsgIn v_response; var integer v_aeIndex := -1; + var integer v_ae2Index := -1; var template RequestPrimitive v_createRequest := m_createSubscriptionBase; var RequestPrimitive v_request; // Test control // Test component configuration - f_cf01Up(); + f_cf01Up(true); // Test adapter configuration // Preamble v_aeIndex := f_cse_preamble_registerAe();//c_CRUDNDi); - v_request := f_getCreateRequestPrimitive(int23, v_createRequest, v_aeIndex);//Subscription - v_request.primitiveContent.subscription.notificationURI := {"NotReachableNotificationURI"}; + vc_ae2.start(f_cse_createAccessControlPolicyAux("SubscriptionVerificationAcp",{"all"}, int63)); + f_aeSimu_checkComponentDoneAndGetVerdict(vc_ae2); + + vc_ae2.start(f_cse_createResource_withAcpAux(int2, m_createAe(PX_TS_AE2.appId, -, PX_TS_AE2.aeIdStem, c_defaultAe2ResourceName, -), -1)); // AE2 is registred + f_aeSimu_checkComponentDoneAndGetVerdict(vc_ae2); + + v_ae2Index := f_getLatestResource(vc_ae2); + + v_request := f_getCreateRequestPrimitive(int23, m_createSubscriptionBase, v_aeIndex); + v_request.primitiveContent.subscription.notificationURI := {f_getResourceAddress(v_ae2Index)}; // Test Body f_send(e_mcaPort, m_request(v_request)); @@ -8421,6 +8429,7 @@ module OneM2M_Testcases_CSE_Release_1 { v_resourceIndex := f_cse_createResource(int23, v_request, v_aeIndex);//Subscription if(vc_ae2.running) { + setverdict(inconc, __SCOPE__ & ": Notification not received"); vc_ae2.stop; }; @@ -9743,10 +9752,14 @@ module OneM2M_Testcases_CSE_Release_1 { f_send(e_mcaPort, m_request(v_request)); tc_ac.start; alt { - [] mcaPort.receive(mw_response(mw_responseDiscovery)){ + [] mcaPort.receive(mw_response(mw_responseDiscovery({?}))){ tc_ac.stop; setverdict(pass, __SCOPE__ & ": URI List Representation available"); } + [] mcaPort.receive(mw_response(mw_responseDiscovery)){ + tc_ac.stop; + setverdict(fail, __SCOPE__ & ": URI List Representation available but not the expected number of elements"); + } [] mcaPort.receive(mw_response(mw_responsePrimitiveOK)) { tc_ac.stop; setverdict(fail, __SCOPE__ & ": Wrong response status code"); @@ -9935,7 +9948,6 @@ module OneM2M_Testcases_CSE_Release_1 { var RequestPrimitive v_request; var integer v_childResourceIndex := -1; const ResourceType c_containerResourceType := int3; - var integer v_i_cont := 0; // Test control @@ -9955,17 +9967,18 @@ module OneM2M_Testcases_CSE_Release_1 { f_send(e_mcaPort, m_request(v_request)); tc_ac.start; alt { - [] mcaPort.receive(mw_response(mw_responseDiscovery)) -> value v_response { + [] mcaPort.receive(mw_response(mw_responseDiscovery({?}))) -> value v_response { tc_ac.stop; - while (v_i_cont<lengthof(v_response.primitive.responsePrimitive.primitiveContent.uRIList)){ - if (f_isNonHierarchical(v_response.primitive.responsePrimitive.primitiveContent.uRIList[v_i_cont])) { - setverdict(pass, __SCOPE__ & ": Non-hierarchical address form present in URIList[" & int2str(v_i_cont) & "] element"); - } else { - setverdict(fail, __SCOPE__ & ": Non-hierarchical address form absent in URIList[" & int2str(v_i_cont) & "] element"); - } - v_i_cont := v_i_cont + 1; + if (f_isNonHierarchical(v_response.primitive.responsePrimitive.primitiveContent.uRIList[0])) { + setverdict(pass, __SCOPE__ & ": Non-hierarchical address form present in URIList[0] element"); + } else { + setverdict(fail, __SCOPE__ & ": Non-hierarchical address form absent in URIList[0] element"); } } + [] mcaPort.receive(mw_response(mw_responseDiscovery)) -> value v_response { + tc_ac.stop; + setverdict(fail, __SCOPE__ & ": URI List Representation available but not the expected number of elements"); + } [] mcaPort.receive(mw_response(mw_responsePrimitiveOK)) { tc_ac.stop; setverdict(fail, __SCOPE__ & ": Wrong response status code"); @@ -10005,6 +10018,7 @@ module OneM2M_Testcases_CSE_Release_1 { var RequestPrimitive v_requestPrimitive := valueof(m_createContainerBase); var integer v_aeIndex := -1; var integer v_resourceIndex := -1; + var integer v_childResourceIndex := -1; var RequestPrimitive v_request; const ResourceType c_containerResourceType := int3; @@ -10024,9 +10038,11 @@ module OneM2M_Testcases_CSE_Release_1 { v_aeIndex := f_cse_preamble_registerAe();//AE1 is registred; + v_resourceIndex := f_cse_createResource(c_containerResourceType, v_requestPrimitive, v_aeIndex); + v_requestPrimitive := f_setAcpId(v_requestPrimitive, {f_getResourceId(vc_resourcesList[vc_acpIndex].resource)}); + v_childResourceIndex := f_cse_createResource(c_containerResourceType, v_requestPrimitive, v_resourceIndex); - v_resourceIndex := f_cse_createResource(c_containerResourceType, v_requestPrimitive, v_aeIndex); v_request := valueof(m_retrieveFilterUsageOption(f_getResourceAddress(v_resourceIndex), f_getOriginator(v_resourceIndex), int1)); f_send(e_mcaPort, m_request(v_request)); tc_ac.start; @@ -10366,7 +10382,6 @@ module OneM2M_Testcases_CSE_Release_1 { var RequestPrimitive v_request; var integer v_childResourceIndex := -1; const ResourceType c_containerResourceType := int3; - var integer v_i_cont := 0; // Test control @@ -10386,17 +10401,18 @@ module OneM2M_Testcases_CSE_Release_1 { f_send(e_mcaPort, m_request(v_request)); tc_ac.start; alt { - [] mcaPort.receive(mw_response(mw_responseDiscovery)) -> value v_response { + [] mcaPort.receive(mw_response(mw_responseDiscovery({?}))) -> value v_response { tc_ac.stop; - while (v_i_cont<lengthof(v_response.primitive.responsePrimitive.primitiveContent.uRIList)){ - if (f_isHierarchical(v_response.primitive.responsePrimitive.primitiveContent.uRIList[v_i_cont])) { - setverdict(pass, __SCOPE__ & ": Hierarchical address form present in URIList[" & int2str(v_i_cont) & "] element"); - } else { - setverdict(fail, __SCOPE__ & ": Hierarchical address form absent in URIList[" & int2str(v_i_cont) & "] element"); - } - v_i_cont := v_i_cont + 1; + if (f_isHierarchical(v_response.primitive.responsePrimitive.primitiveContent.uRIList[0])) { + setverdict(pass, __SCOPE__ & ": Hierarchical address form present in URIList[0] element"); + } else { + setverdict(fail, __SCOPE__ & ": Hierarchical address form absent in URIList[0] element"); } } + [] mcaPort.receive(mw_response(mw_responseDiscovery)){ + tc_ac.stop; + setverdict(fail, __SCOPE__ & ": URI List Representation available but not the expected number of elements"); + } [] mcaPort.receive(mw_response(mw_responsePrimitiveOK)) { tc_ac.stop; setverdict(fail, __SCOPE__ & ": Wrong response status code"); @@ -10439,7 +10455,6 @@ module OneM2M_Testcases_CSE_Release_1 { var RequestPrimitive v_request; var integer v_childResourceIndex := -1; const ResourceType c_containerResourceType := int3; - var integer v_i_cont := 0; // Test control @@ -10459,17 +10474,18 @@ module OneM2M_Testcases_CSE_Release_1 { f_send(e_mcaPort, m_request(v_request)); tc_ac.start; alt { - [] mcaPort.receive(mw_response(mw_responseDiscovery)) -> value v_response { + [] mcaPort.receive(mw_response(mw_responseDiscovery({?}))) -> value v_response { tc_ac.stop; - while (v_i_cont<lengthof(v_response.primitive.responsePrimitive.primitiveContent.uRIList)){ - if (f_isHierarchical(v_response.primitive.responsePrimitive.primitiveContent.uRIList[v_i_cont])) { - setverdict(pass, __SCOPE__ & ": Hierarchical address form present in URIList[" & int2str(v_i_cont) & "] element"); - } else { - setverdict(fail, __SCOPE__ & ": Hierarchical address form absent in URIList[" & int2str(v_i_cont) & "] element"); - } - v_i_cont := v_i_cont + 1; + if (f_isHierarchical(v_response.primitive.responsePrimitive.primitiveContent.uRIList[0])) { + setverdict(pass, __SCOPE__ & ": Hierarchical address form present in URIList[0] element"); + } else { + setverdict(fail, __SCOPE__ & ": Hierarchical address form absent in URIList[0] element"); } } + [] mcaPort.receive(mw_response(mw_responseDiscovery)){ + tc_ac.stop; + setverdict(fail, __SCOPE__ & ": URI List Representation available but not the expected number of elements"); + } [] mcaPort.receive(mw_response(mw_responsePrimitiveOK)) { tc_ac.stop; setverdict(fail, __SCOPE__ & ": Wrong response status code");