diff --git a/LibOneM2M/OneM2M_Functions.ttcn b/LibOneM2M/OneM2M_Functions.ttcn index c707f968d2b0367f380461f36a97cd345f817c84..4e79578a963aac6d556fc3207a692ee4509deda6 100644 --- a/LibOneM2M/OneM2M_Functions.ttcn +++ b/LibOneM2M/OneM2M_Functions.ttcn @@ -3493,7 +3493,21 @@ module OneM2M_Functions { v_myResource.contentInstance.content := valueof(p_resource.contentInstance.content); } } - + } else if(p_resourceType == int18 and ispresent(p_resource)) { //Schedule + if(ischosen(p_resource.schedule)){ + v_myResource.schedule := valueof(p_resource.schedule); + v_myResource.schedule.resourceID := "sch" & int2str(v_resourceIndex); + if(not(ispresent(p_resource.schedule.resourceName))) { + v_myResource.schedule.resourceName := "schedule" & int2str(v_resourceIndex); + } + v_myResource.schedule.resourceType := p_resourceType; + v_myResource.schedule.parentID := f_getResourceId(vc_localResourcesList[p_parentIndex].resource); + v_myResource.schedule.creationTime := fx_generateTimestamp(); + v_myResource.schedule.lastModifiedTime := v_myResource.schedule.creationTime; + if(not(ispresent(p_resource.schedule.expirationTime))) { + v_myResource.schedule.expirationTime := "20301231T012345"; + } + } } else if(p_resourceType == int23 and ispresent(p_resource)) {//Subscription if(ischosen(p_resource.subscription)){ v_myResource.subscription := valueof(p_resource.subscription); @@ -5759,6 +5773,9 @@ module OneM2M_Functions { else if (ischosen(p_resource.remoteCSEAnnc)){ p_resource.remoteCSEAnnc.link := p_link; } + else if (ischosen(p_resource.scheduleAnnc)){ + p_resource.scheduleAnnc.link := p_link; + } else if (ischosen(p_resource.timeSeriesAnnc)){ p_resource.timeSeriesAnnc.link := p_link; } @@ -5792,6 +5809,9 @@ module OneM2M_Functions { else if (ischosen(p_resource.remoteCSEAnnc)){ p_resource.remoteCSEAnnc.expirationTime := p_originalResource.remoteCSE.expirationTime; } + else if (ischosen(p_resource.scheduleAnnc)){ + p_resource.scheduleAnnc.expirationTime := p_originalResource.schedule.expirationTime; + } else if (ischosen(p_resource.timeSeriesAnnc)){ p_resource.timeSeriesAnnc.expirationTime := p_originalResource.timeSeries.expirationTime; } diff --git a/LibOneM2M/OneM2M_Templates.ttcn b/LibOneM2M/OneM2M_Templates.ttcn index d169a9893af00251d5cd18abbbcc129dbd46ad38..4c071b55489ba84ea2eb84dd00d5f6f997f85ee1 100644 --- a/LibOneM2M/OneM2M_Templates.ttcn +++ b/LibOneM2M/OneM2M_Templates.ttcn @@ -1348,6 +1348,15 @@ module OneM2M_Templates { primitiveContent := {schedule := m_contentCreateSchedule ({{"* * * * * * *"}})} }; + /** + * @desc Base CREATE request primitive for ScheduleAnnc resource + */ + template (value) RequestPrimitive m_createScheduleAnncBase modifies m_create := { + requestIdentifier := testcasename() & "-m_createScheduleAnnc", + resourceType := int10018, + primitiveContent := {scheduleAnnc := m_contentCreateScheduleAnnc (omit, {{"* * * * * * *"}})} + }; + template (value) RequestPrimitive m_createSchedule(XSD.ID p_parentResourceAddress, in template (omit) XSD.String p_name, in template (value) ScheduleEntries p_scheduleElement ) modifies m_create := { to_ := p_parentResourceAddress, requestIdentifier := testcasename() & "-m_createSchedule", @@ -2327,6 +2336,10 @@ module OneM2M_Templates { cSEBase := p_cSEBase } + template (value) PrimitiveContent m_primitiveContentPollingChannel(template (value) PollingChannel_optional p_pollingChannel) := { + pollingChannel := p_pollingChannel + } + template (value) PrimitiveContent m_primitiveContentRemoteCSE(template (value) RemoteCSE_optional p_remoteCSE) := { remoteCSE := p_remoteCSE } @@ -2335,6 +2348,14 @@ module OneM2M_Templates { responsePrimitive := p_responsePrimitive } + template (value) PrimitiveContent m_primitiveContentSchedule(template (value) Schedule_optional p_schedule) := { + schedule := p_schedule + } + + template (value) PrimitiveContent m_primitiveContentSubscription(template (value) Subscription_optional p_subscription) := { + subscription := p_subscription + } + template (value) PrimitiveContent m_primitiveContentTimeSeries(template (value) TimeSeries_optional p_timeSeries) := { timeSeries := p_timeSeries } @@ -3114,7 +3135,7 @@ module OneM2M_Templates { * @param p_scheduleElement Schedule * @param p_name Resource name */ - template (value) Schedule_optional m_contentCreateSchedule (in template (value) ScheduleEntries p_scheduleElement, + template (value) Schedule_optional m_contentCreateSchedule (in template (value) ScheduleEntries p_scheduleElement := {{"* * * * * * *"}}, in template (omit) XSD.String p_name := c_defaultScheduleResourceName) := { resourceName := p_name,//O resourceType := omit,//NP @@ -3133,6 +3154,26 @@ module OneM2M_Templates { choice := omit//NP }; + /** + * @desc Base primitiveContent for CREATE operation for ScheduleAnnc resource + */ + template (value) ScheduleAnnc_optional m_contentCreateScheduleAnnc (in template (omit) AcpType p_accessControlPolicyIds,in template (omit) ScheduleEntries p_scheduleEntries) := { + resourceName := omit,//NA M + resourceType := omit,//NA M + resourceID := omit,//NA M + parentID := omit,//NA M + creationTime := omit,//NA M + lastModifiedTime := omit,//NA M + labels := omit,//MA O + accessControlPolicyIDs := omit,//NA O + expirationTime := "29991231T235959",//MA M + dynamicAuthorizationConsultationIDs := omit,//NA O + link := "NotInitialized",//M + scheduleElement := p_scheduleEntries,//OA M + networkCoordinated := omit,//OA O + choice := omit//NP + }; + /** * @desc Base reception template of primitiveContent for CREATE operation for ScheduleAnnc resource */ diff --git a/OneM2M_PermutationFunctions.ttcn b/OneM2M_PermutationFunctions.ttcn index 74db44c33d1b881ccda5303c4140853f9cdb6e8f..39aa2f747f27d84696a46ded92b3a0c725bc4794 100644 --- a/OneM2M_PermutationFunctions.ttcn +++ b/OneM2M_PermutationFunctions.ttcn @@ -5590,6 +5590,96 @@ module OneM2M_PermutationFunctions { f_cf01Down(); }//end f_CSE_DMR_RET_025 + + function f_CSE_DMR_RET_026(ResourceType p_resourceType, template PrimitiveContent p_originalResource, template RequestPrimitive p_createRequestAnnc) runs on AeSimu system CseSystem { + + //Local variables + var template RequestPrimitive v_request; + var integer v_cseBaseIndex := -1; + var integer v_aeIndex := -1; + var integer v_remoteCSEIndex := -1; + var integer v_originalResourceIndex, v_originalLocalResourceIndex := -1; + var XSD.ID v_originalResourceAddress; + var XSD.ID v_resourceAnncAddress; + var template RequestPrimitive v_createAE := m_createAe(PX_TS_AE1.appId, omit, omit); + var template RequestPrimitive v_createAcp := m_createAcp("NotInitialized", "MyAcp", -, int63); + var integer v_aeAnncIndex; + var integer v_resourceAnncIndex; + var integer v_acpIndex; + var XSD.ID v_membersAcpId; + + //Test control + + // Test component configuration + f_cf02Up(); + + // Test adapter configuration + + //Preamble + v_cseBaseIndex := f_getLatestLocalResourceIndex(vc_cse1); + //Register the CSE + vc_cse1.start(f_cse_registerRemoteCse(m_createRemoteCSE_poa(-, -, -, -, {f_getCompletePoA()}))); + f_aeSimu_checkComponentDoneAndGetVerdict(vc_cse1); + + v_remoteCSEIndex := f_getLatestResourceIndex(vc_cse1); + + //Creating resource in Hosting CSE + vc_cse1.start(f_generateAndSetLocalResource(valueof(p_originalResource), v_cseBaseIndex, p_resourceType)); + vc_cse1.done; + + v_originalResourceAddress := f_getLatestLocalResourceAddress(vc_cse1, -, e_spRelative); + + v_originalResourceIndex := f_getLatestLocalResource(vc_cse1); + + v_originalLocalResourceIndex := f_getLatestLocalResourceIndex(vc_cse1); + + v_aeIndex := f_cse_createResource(int2,v_createAE); + + v_acpIndex := f_cse_createResource(int1, v_createAcp, -); // AE child resource + + if((p_resourceType == int3) or (p_resourceType == int9) or (p_resourceType == int29)) { + p_createRequestAnnc := f_setAcpId(p_createRequestAnnc, {f_getResourceId(vc_resourcesList[v_acpIndex].resource)}); + } + p_createRequestAnnc.primitiveContent := f_setLink(valueof(p_createRequestAnnc.primitiveContent), v_originalResourceAddress); + p_createRequestAnnc.primitiveContent := f_setExpirationTime(valueof(p_createRequestAnnc.primitiveContent), vc_resourcesList[v_originalResourceIndex].resource); + + vc_cse1.start(f_cse_createResource_cseSimu(f_getAnnouncedResourceType(p_resourceType), p_createRequestAnnc, v_remoteCSEIndex)); + f_aeSimu_checkComponentDoneAndGetVerdict(vc_cse1); + + v_resourceAnncAddress := f_getLatestResourceAddress(vc_cse1, -, -); + v_resourceAnncIndex := f_getLatestResourceIndex(vc_cse1); + + v_request := m_retrieve(v_resourceAnncAddress, f_getOriginator(v_aeIndex)); + v_request.resultContent := int7; + // Test Body + vc_cse1.start(f_cse_retrieveResourceHandler(v_originalLocalResourceIndex, -, -)); + f_send(e_mcaPort, m_request(valueof(v_request))); + tc_ac.start; + alt { + [] mcaPort.receive(mw_response(mw_responsePrimitive(int2000, vc_resourcesList[v_originalResourceIndex].resource))) -> value vc_response { + tc_ac.stop; + setverdict(pass, __SCOPE__, ": Resource " & int2str(enum2int(p_resourceType)) & " retrieved successfully"); + } + [] mcaPort.receive(mw_response(mw_responsePrimitiveOK)) -> value vc_response { + tc_ac.stop; + setverdict(fail, __SCOPE__, ": Wrong response status code"); + } + [] tc_ac.timeout { + setverdict(fail, __SCOPE__, ": No answer while retrieving resource type " & int2str(enum2int(p_resourceType))); + } + } + + f_aeSimu_checkComponentDoneAndGetVerdict(vc_cse1); + + + // Postamble + f_cse_postamble_deleteResources(); + + // Tear down + f_cf02Down(); + + } //end f_CSE_DMR_RET_026 + }//end group Retrieve diff --git a/OneM2M_Testcases_CSE_Release_3.ttcn b/OneM2M_Testcases_CSE_Release_3.ttcn index e98c7d8d31a2cace104bef3436cd0c6948976470..9be5480dc6dbeb6e23c1f5e7d0dea49487b35601 100644 --- a/OneM2M_Testcases_CSE_Release_3.ttcn +++ b/OneM2M_Testcases_CSE_Release_3.ttcn @@ -1468,7 +1468,7 @@ module OneM2M_Testcases_CSE_Release_3 { // Local variables var AeSimu v_ae1 := AeSimu.create("AE1") alive; - v_ae1.start(f_CSE_DMR_CRE_018(int8));//ResultContent = 7 (original resource) + v_ae1.start(f_CSE_DMR_CRE_018(int7));//ResultContent = 7 (original resource) v_ae1.done; } @@ -3673,6 +3673,59 @@ module OneM2M_Testcases_CSE_Release_3 { } // end g_CSE_DMR_RET_025 + group g_CSE_DMR_RET_026 { + + /** + * @desc Check that the IUT sends a RETRIEVE request to ORIGINAL_RESOURCE_ADDRESS resource when receiving a RETRIEVE request with Result Content set to 7 (original resource) + * + */ + testcase TC_CSE_DMR_RET_026_CNT() runs on Tester system CseSystem { + //Local variables + var AeSimu v_ae1 := AeSimu.create("AE1") alive; + var template PrimitiveContent v_originalResource := m_primitiveContentContainer(m_contentCreateContainer); + var template RequestPrimitive v_createRequestAnnc := m_createContainerAnncBase; + + v_ae1.start(f_CSE_DMR_RET_026(int3, v_originalResource, v_createRequestAnnc));//Container + v_ae1.done; + } + testcase TC_CSE_DMR_RET_026_GRP() runs on Tester system CseSystem { + //Local variables + var AeSimu v_ae1 := AeSimu.create("AE1") alive; + var template PrimitiveContent v_originalResource := m_primitiveContentGroup(m_contentCreateGroup(1, {"NotInitialized"}, omit, -, -, -, -)); + var template RequestPrimitive v_createRequestAnnc := m_createGroupAnncBase; + + v_ae1.start(f_CSE_DMR_RET_026(int9, v_originalResource, v_createRequestAnnc));//Group + v_ae1.done; + } + testcase TC_CSE_DMR_RET_026_ACP() runs on Tester system CseSystem { + //Local variables + var AeSimu v_ae1 := AeSimu.create("AE1") alive; + var template PrimitiveContent v_originalResource := m_primitiveContentAccessControlPolicy(m_contentCreateAcp); + var template RequestPrimitive v_createRequestAnnc := m_createAcpAnncBase; + + v_ae1.start(f_CSE_DMR_RET_026(int1, v_originalResource, v_createRequestAnnc));//AccessControlPolicy + v_ae1.done; + } + testcase TC_CSE_DMR_RET_026_SCH() runs on Tester system CseSystem { + //Local variables + var AeSimu v_ae1 := AeSimu.create("AE1") alive; + var template PrimitiveContent v_originalResource := m_primitiveContentSchedule(m_contentCreateSchedule); + var template RequestPrimitive v_createRequestAnnc := m_createScheduleAnncBase; + + v_ae1.start(f_CSE_DMR_RET_026(int18, v_originalResource, v_createRequestAnnc));//Container + v_ae1.done; + } + testcase TC_CSE_DMR_RET_026_TS() runs on Tester system CseSystem { + //Local variables + var AeSimu v_ae1 := AeSimu.create("AE1") alive; + var template PrimitiveContent v_originalResource := m_primitiveContentTimeSeries(m_contentCreateTimeSeries); + var template RequestPrimitive v_createRequestAnnc := m_createTimeSeriesAnncBase; + + v_ae1.start(f_CSE_DMR_RET_026(int29, v_originalResource, v_createRequestAnnc));//TimeSeries + v_ae1.done; + } + } //end group g_CSE_DMR_RET_026 + }//end group Retrieve group Update {