From dfbb84ebbd503e798086bb031170cdc1666d0bec Mon Sep 17 00:00:00 2001 From: acverdugo <acverdugo@at4wireless.com> Date: Wed, 4 Jul 2018 18:42:54 +0200 Subject: [PATCH] - New templates related to TimeSeries and TimeSeriesInstance - Fixed c_defaultTimeSeriesInstanceResourceName value - Some test cases have acquired permutations structure because of the insertion of TimeSeries (CSE_DMR_CRE_007, CSE_DMR_CRE_008, CSE_DMR_CRE_013, CSE_DMR_CRE_014, CSE_DMR_UPD_010, CSE_DMR_UPD_011, CSE_DMR_DEL_005, CSE_DMR_DEL_006, CSE_SUB_CRE_001) - New permutation: TC_CSE_DMR_UPD_009_TS_EXC, Signed-off-by: acverdugo <acverdugo@at4wireless.com> --- LibOneM2M/OneM2M_Templates.ttcn | 64 +++- LibOneM2M/OneM2M_TypesAndValues.ttcn | 2 +- OneM2M_PermutationFunctions.ttcn | 475 +++++++++++++++++++++++++++ OneM2M_Testcases_CSE_Release_2.ttcn | 398 +++++++++++++++++++++- 4 files changed, 919 insertions(+), 20 deletions(-) diff --git a/LibOneM2M/OneM2M_Templates.ttcn b/LibOneM2M/OneM2M_Templates.ttcn index 1be590a..16159cd 100644 --- a/LibOneM2M/OneM2M_Templates.ttcn +++ b/LibOneM2M/OneM2M_Templates.ttcn @@ -623,6 +623,14 @@ module OneM2M_Templates { template (value) RequestPrimitive m_updateTimeSeriesBase modifies m_update := { requestIdentifier := "m_updateTimeSeries", primitiveContent:= {timeSeries := m_contentUpdateTimeSeries} + }; + + /** + * @desc Base UPDATE request primitive for TimeSeriesInstance resource + */ + template (value) RequestPrimitive m_updateTimeSeriesInstanceBase modifies m_update:= { + requestIdentifier := "m_updateTimeSeriesInstance", + primitiveContent:= {timeSeriesInstance := m_contentUpdateTimeSeriesInstance} }; /** @@ -2609,19 +2617,19 @@ module OneM2M_Templates { accessControlPolicyIDs := ?,//MA expirationTime := ?,//MA M link := omit, //O NA - dynamicAuthorizationConsultationIDs := omit, //OA - stateTag := ?,//MA - maxNrOfInstances := omit,//O OA - maxByteSize := omit,//O OA - maxInstanceAge := omit,//O OA - currentNrOfInstances := ?,//M OA - currentByteSize := ?,//M OA - periodicInterval := omit,//O OA + dynamicAuthorizationConsultationIDs := *, //OA + stateTag := *,//OA + maxNrOfInstances := *,//O OA + maxByteSize := *,//O OA + maxInstanceAge := *,//O OA + currentNrOfInstances := *,//M OA + currentByteSize := *,//M OA + periodicInterval := *,//O OA missingDataDetect := omit,//O NA - missingDataList := omit,//O OA - missingDataCurrentNr := omit,//O OA - missingDataDetectTimer := omit,//O OA - ontologyRef := omit,//O OA + missingDataList := *,//O OA + missingDataCurrentNr := *,//O OA + missingDataDetectTimer := *,//O OA + ontologyRef := *,//O OA choice := omit //O }; @@ -2637,12 +2645,12 @@ module OneM2M_Templates { creationTime := omit,//NA M lastModifiedTime := omit,//NA M labels := ?,//MA - expirationTime := ?,//MA M + expirationTime := omit,//NA M link := omit, //O NA - dataGenerationTime := ?,//M OA - content := ?,//M OA - sequenceNr := omit,//O OA - contentSize := ?//M OA + dataGenerationTime := *,//M OA + content := *,//M OA + sequenceNr := *,//O OA + contentSize := *//M OA } /** @@ -2711,7 +2719,7 @@ module OneM2M_Templates { announceTo := omit,//O announcedAttribute := omit,//O dataGenerationTime := {alt_ := fx_generateTimestamp()},//M - content := "Value",//M + content := "AnyValue",//M sequenceNr := omit,//O contentSize := omit//NP }; @@ -3124,6 +3132,26 @@ module OneM2M_Templates { choice := omit//NP }; + /** + * @desc Base primitiveContent for UPDATE operation for TimeSeriesInstance resource + */ + template (value) TimeSeriesInstance_optional m_contentUpdateTimeSeriesInstance := { + resourceName := omit, + resourceType := omit, + resourceID := omit, + parentID := omit, + creationTime := omit, + lastModifiedTime := omit, + labels := omit, + expirationTime := omit, + announceTo := omit, + announcedAttribute := omit, + dataGenerationTime := omit, + content := omit, + sequenceNr := omit, + contentSize := omit + }; + }//end group ContentUpdate diff --git a/LibOneM2M/OneM2M_TypesAndValues.ttcn b/LibOneM2M/OneM2M_TypesAndValues.ttcn index feb8189..0514eea 100644 --- a/LibOneM2M/OneM2M_TypesAndValues.ttcn +++ b/LibOneM2M/OneM2M_TypesAndValues.ttcn @@ -38,7 +38,7 @@ module OneM2M_TypesAndValues { const XSD.String c_defaultm2mServiceSubscriptionProfileResourceName := "Mym2mServiceSubscriptionProfileResource"; const XSD.String c_defaultServiceSubscribedAppRuleResourceName := "MyServiceSubscribedAppRuleResource"; const XSD.String c_defaultTimeSeriesResourceName := "MyTimeSeriesResource"; - const XSD.String c_defaultTimeSeriesInstanceResourceName := "MyTimeSeriesResource"; + const XSD.String c_defaultTimeSeriesInstanceResourceName := "MyTimeSeriesInstanceResource"; const XSD.ID c_aeAuxName := "MyAe"; const XSD.String c_defaultAE2Name := "MyAe2"; const XSD.String c_acpAuxName := "MyAcp"; diff --git a/OneM2M_PermutationFunctions.ttcn b/OneM2M_PermutationFunctions.ttcn index 8b6bae1..f362e3e 100644 --- a/OneM2M_PermutationFunctions.ttcn +++ b/OneM2M_PermutationFunctions.ttcn @@ -2312,6 +2312,130 @@ module OneM2M_PermutationFunctions { return vc_response.primitive.responsePrimitive; }//end f_CSE_DMR_CRE_006 + + function f_CSE_DMR_CRE_007(ResourceType p_resourceTypeParent, template RequestPrimitive p_requestPrimitiveParent, ResourceType p_resourceTypeChild, template RequestPrimitive p_requestPrimitiveChild1, template RequestPrimitive p_requestPrimitiveChild2, XSD.String p_resourceName) runs on AeSimu { + //Local variables + var MsgIn v_response; + var RequestPrimitive v_request; + var integer v_aeIndex := -1; + var integer v_parentIndex := -1; + var integer v_childIndex := -1; + + // Test control + + // Test component configuration + f_cf01Up(); + + // Test adapter configuration + + // Preamble + v_aeIndex := f_cse_preamble_registerAe();//c_CRUDNDi); + + v_parentIndex := f_cse_createResource(p_resourceTypeParent, p_requestPrimitiveParent, v_aeIndex); //Parent + + v_childIndex := f_cse_createResource(p_resourceTypeChild, p_requestPrimitiveChild1, v_parentIndex); //Child1 + + // Test Body + v_request := f_getCreateRequestPrimitive(p_resourceTypeChild, p_requestPrimitiveChild2, v_parentIndex); ////Child2 + + mcaPort.send(m_request(v_request)); + tc_ac.start; + alt { + [] mcaPort.receive(mw_response(mw_responsePrimitive(int2001))) -> value v_response { + tc_ac.stop; + setverdict(pass, __SCOPE__ & ": Resource " & int2str(enum2int(p_resourceTypeChild)) & " created"); + } + [] mcaPort.receive(mw_response(mw_responsePrimitiveOK)) -> value v_response { + tc_ac.stop; + setverdict(fail, __SCOPE__ & ": Wrong response status code in the response"); + } + [] mcaPort.receive(mw_response(mw_responsePrimitiveKO)) -> value v_response { + tc_ac.stop; + setverdict(fail, __SCOPE__ & ": Error while creating resource type " & int2str(enum2int(p_resourceTypeChild))); + } + [] tc_ac.timeout { + setverdict(fail, __SCOPE__ & ": No answer while creating resource type " & int2str(enum2int(p_resourceTypeChild))); + } + } + + f_checkAeSimuStatus(); + + //Check to see if the resource is NOT present + if(f_isResourceNotPresent(v_parentIndex, p_resourceName)){ + setverdict(pass, __SCOPE__ & ":INFO: Oldest resource " & int2str(enum2int(p_resourceTypeChild)) & " has been removed to allow the creation of the new instance"); + } else { + setverdict(fail, __SCOPE__ & ":ERROR: Oldest resource " & int2str(enum2int(p_resourceTypeChild)) & " has not been removed to allow the creation of the new instance"); + } + + // Postamble + f_cse_postamble_deleteResources(); + + // Tear down + f_cf01Down(); + + }//end f_CSE_DMR_CRE_007 + + function f_CSE_DMR_CRE_008(ResourceType p_resourceTypeParent, template RequestPrimitive p_requestPrimitiveParent, ResourceType p_resourceTypeChild, template RequestPrimitive p_requestPrimitiveChild1, template RequestPrimitive p_requestPrimitiveChild2, XSD.String p_resourceName) runs on AeSimu { + //Local variables + var MsgIn v_response; + var RequestPrimitive v_request; + var integer v_aeIndex := -1; + var integer v_parentIndex := -1; + var integer v_childIndex := -1; + // Test control + + // Test component configuration + f_cf01Up(); + + // Test adapter configuration + + // Preamble + v_aeIndex := f_cse_preamble_registerAe();//c_CRUDNDi); + + v_parentIndex := f_cse_createResource(p_resourceTypeParent, p_requestPrimitiveParent, v_aeIndex); //Parent + + v_childIndex := f_cse_createResource(p_resourceTypeChild, p_requestPrimitiveChild1, v_parentIndex); //Child1 + + // Test Body + + v_request := f_getCreateRequestPrimitive(p_resourceTypeChild, p_requestPrimitiveChild2, v_parentIndex); //Child2 + + mcaPort.send(m_request(v_request)); + tc_ac.start; + alt { + [] mcaPort.receive(mw_response(mw_responsePrimitive(int2001))) -> value v_response { + tc_ac.stop; + setverdict(pass, __SCOPE__ & ": Resource " & int2str(enum2int(p_resourceTypeChild)) & " created"); + } + [] mcaPort.receive(mw_response(mw_responsePrimitiveOK)) -> value v_response { + tc_ac.stop; + setverdict(fail, __SCOPE__ & ": Wrong response status code in the response"); + } + [] mcaPort.receive(mw_response(mw_responsePrimitiveKO)) -> value v_response { + tc_ac.stop; + setverdict(fail, __SCOPE__ & ": Error while creating resource type " & int2str(enum2int(p_resourceTypeChild))); + } + [] tc_ac.timeout { + setverdict(fail, __SCOPE__ & ": No answer while creating resource type " & int2str(enum2int(p_resourceTypeChild))); + } + } + + f_checkAeSimuStatus(); + + //Check to see if the resource is NOT present + if(f_isResourceNotPresent(v_parentIndex, p_resourceName)){ + setverdict(pass, __SCOPE__ & ":INFO: Oldest resource " & int2str(enum2int(p_resourceTypeChild)) & " has been removed to allow the creation of the new instance"); + } else { + setverdict(fail, __SCOPE__ & ":ERROR: Oldest resource " & int2str(enum2int(p_resourceTypeChild)) & " has not been removed to allow the creation of the new instance"); + } + + // Postamble + f_cse_postamble_deleteResources(); + + // Tear down + f_cf01Down(); + + }//end f_CSE_DMR_CRE_008 function f_CSE_DMR_CRE_012(ResourceType p_resourceType, template RequestPrimitive p_requestPrimitive, in AttributeList p_optionalAttribute) runs on AeSimu { @@ -2404,6 +2528,56 @@ module OneM2M_PermutationFunctions { }//end f_CSE_DMR_CRE_012 + function f_CSE_DMR_CRE_013(ResourceType p_resourceTypeParent, template RequestPrimitive p_requestPrimitiveParent, ResourceType p_resourceTypeChild, template RequestPrimitive p_requestPrimitiveChild) runs on AeSimu { + // Local variables + var MsgIn v_response; + var RequestPrimitive v_request; + var integer v_aeIndex := -1; + var integer v_parentIndex := -1; + // Test control + + // Test component configuration + f_cf01Up(); + + // Test adapter configuration + + // Preamble + v_aeIndex := f_cse_preamble_registerAe();//c_CRUDNDi); + + v_parentIndex := f_cse_createResource(p_resourceTypeParent, p_requestPrimitiveParent, v_aeIndex); + + // Test Body + v_request := f_getCreateRequestPrimitive(p_resourceTypeChild, p_requestPrimitiveChild, v_parentIndex); + + mcaPort.send(m_request(v_request)); + tc_ac.start; + alt { + [] mcaPort.receive(mw_response(mw_responsePrimitive(int5207))) -> value v_response { + tc_ac.stop; + setverdict(pass, __SCOPE__ & ": Maximum byte size exceeded"); + } + [] mcaPort.receive(mw_response(mw_responsePrimitiveKO)) -> value v_response { + tc_ac.stop; + setverdict(fail, __SCOPE__ & ": Bad responseStatusCode in response"); + } + + [] mcaPort.receive(mw_response(mw_responsePrimitiveOK)) -> value v_response { + tc_ac.stop; + setverdict(fail, __SCOPE__ & ": Accepted creation of resource type " & int2str(enum2int(p_resourceTypeChild)) & " exceding maximum byte size"); + } + [] tc_ac.timeout { + setverdict(fail, __SCOPE__ & ": No answer while creating resource type 4 " & int2str(enum2int(p_resourceTypeChild))); + } + } + + // Postamble + f_cse_postamble_deleteResources(); + + // Tear down + f_cf01Down(); + + }//end f_CSE_DMR_CRE_013 + function f_CSE_DMR_CRE_014(ResourceType p_parentResourceType, template RequestPrimitive p_parentResourceRequestPrimitive, ResourceType p_childResourceType, template RequestPrimitive p_childRequestPrimitive) runs on AeSimu { // Local variables var MsgIn v_response; @@ -4601,6 +4775,110 @@ module OneM2M_PermutationFunctions { f_cf01Down(); }//end f_CSE_DMR_UPD_009 + + function f_CSE_DMR_UPD_010(ResourceType p_resourceType, template RequestPrimitive p_createRequestPrimitive, template RequestPrimitive p_updateRequestPrimitive) runs on AeSimu { + + // Local variables + var MsgIn v_response; + var integer v_aeIndex := -1; + var integer v_resourceIndex := -1; + + // Test control + + // Test component configuration + f_cf01Up(); + + // Test adapter configuration + + // Preamble + v_aeIndex := f_cse_preamble_registerAe();//c_CRUDNDi); + + v_resourceIndex := f_cse_createResource(p_resourceType, p_createRequestPrimitive, v_aeIndex); + + // Test Body + + f_cse_updateResource(p_resourceType, v_resourceIndex, p_updateRequestPrimitive); + + mcaPort.send(m_request(m_retrieve(f_getResourceAddress(v_resourceIndex), f_getOriginator(v_resourceIndex)))); + + tc_ac.start; + alt { + [] mcaPort.receive(mw_response(mw_responsePrimitiveOK)) -> value v_response { + tc_ac.stop; + } + [] mcaPort.receive(mw_response(mw_responsePrimitiveKO)) { + tc_ac.stop; + setverdict(fail, __SCOPE__ & ": Error while retrieving resource attributes"); + } + [] tc_ac.timeout { + setverdict(fail, __SCOPE__ & ": No answer while retrieving resource attributes"); + } + } + + vc_primitiveContentRetrievedResource := f_cse_retrieveResource(v_resourceIndex); + + // Postamble + f_cse_postamble_deleteResources(); + + // Tear down + f_cf01Down(); + + }//end f_CSE_DMR_UPD_010 + + function f_CSE_DMR_UPD_011(ResourceType p_resourceTypeParent, template RequestPrimitive p_createParentRequestPrimitive, ResourceType p_resourceTypeChild, template RequestPrimitive p_createChildRequestPrimitive,template RequestPrimitive p_updateRequestPrimitive) runs on AeSimu { + //Local variables + var MsgIn v_response; + var RequestPrimitive v_request; + var integer v_aeIndex := -1; + var integer v_parentIndex := -1; + var integer v_childIndex := -1; + + // Test control + + // Test component configuration + f_cf01Up(); + + // Test adapter configuration + + // Preamble + v_aeIndex := f_cse_preamble_registerAe();//c_CRUDNDi); + + v_parentIndex := f_cse_createResource(p_resourceTypeParent, p_createParentRequestPrimitive, v_aeIndex); + + v_childIndex := f_cse_createResource(p_resourceTypeChild, p_createChildRequestPrimitive, v_parentIndex); + + //Test Body + v_request := f_getUpdateRequestPrimitive(p_resourceTypeChild, v_childIndex, p_updateRequestPrimitive); + + mcaPort.send(m_request(v_request)); + tc_ac.start; + alt { + [] mcaPort.receive(mw_response(mw_responsePrimitive(int4005))) -> value v_response { + tc_ac.stop; + setverdict(pass, __SCOPE__ & ": Not allowed to update resource " & int2str(enum2int(p_resourceTypeChild)) & " with error OPERATION_NOT_ALLOWED"); + } + [] mcaPort.receive(mw_response(mw_responsePrimitiveKO)) -> value v_response { + tc_ac.stop; + setverdict(fail, __SCOPE__ & ": Wrong response status code"); + } + [] mcaPort.receive(mw_response(mw_responsePrimitiveOK)) -> value v_response { + tc_ac.stop; + setverdict(fail, __SCOPE__ & ": Accepted update of resource " & int2str(enum2int(p_resourceTypeChild))); + } + [] tc_ac.timeout { + setverdict(fail, __SCOPE__ & ": No answer while updating resource " & int2str(enum2int(p_resourceTypeChild))); + } + } + + vc_primitiveContentRetrievedResource := f_cse_retrieveResource(v_childIndex); + + // Postamble + f_cse_postamble_deleteResources(); + + // Tear down + f_cf01Down(); + + }//end f_CSE_DMR_UPD_011 function f_CSE_DMR_UPD_014(ResourceType p_resourceType, template RequestPrimitive p_createRequestPrimitive, template RequestPrimitive p_updateRequestPrimitive) runs on AeSimu { @@ -5070,6 +5348,135 @@ module OneM2M_PermutationFunctions { f_cf01Down(); };//end f_CSE_DMR_DEL_004 + + function f_CSE_DMR_DEL_005(ResourceType p_resourceTypeParent, template RequestPrimitive p_requestPrimitiveParent, ResourceType p_resourceTypeChild, template RequestPrimitive p_requestPrimitiveChild) runs on AeSimu { + //Local variables + var MsgIn v_response; + var RequestPrimitive v_request; + var integer v_aeIndex := -1; + var integer v_resourceIndex := -1; + var integer v_childResourceIndex := -1; + + // Test control + + // Test component configuration + f_cf01Up(); + + // Test adapter configuration + + // Preamble + v_aeIndex := f_cse_preamble_registerAe();//c_CRUDNDi); + + v_resourceIndex := f_cse_createResource(p_resourceTypeParent, p_requestPrimitiveParent, v_aeIndex); + + v_childResourceIndex := f_cse_createResource(p_resourceTypeChild, p_requestPrimitiveChild, v_resourceIndex); + + // Test Body + mcaPort.send(m_request(m_delete(f_getResourceAddress(v_childResourceIndex), f_getOriginator(v_childResourceIndex)))); + + tc_ac.start; + alt { + [] mcaPort.receive(mw_response(mw_responsePrimitive(int2002))) -> value v_response { + tc_ac.stop; + setverdict(pass, __SCOPE__ & ": Resource type " & int2str(enum2int(p_resourceTypeChild)) & " deleted successfully"); + } + [] mcaPort.receive(mw_response(mw_responsePrimitiveOK)) -> value v_response { + tc_ac.stop; + setverdict(fail, __SCOPE__ & ": Wrong response status code"); + } + [] mcaPort.receive(mw_response(mw_responsePrimitiveKO)) -> value v_response { + tc_ac.stop; + setverdict(fail, __SCOPE__ & ": Error while deleting resource type " & int2str(enum2int(p_resourceTypeChild))); + } + [] tc_ac.timeout { + setverdict(fail, __SCOPE__ & ": No answer while deleting resource type " & int2str(enum2int(p_resourceTypeChild))); + } + } + + vc_primitiveContentRetrievedResource := f_cse_retrieveResource(v_resourceIndex); + + // Postamble + f_cse_postamble_deleteResources(); + + // Tear down + f_cf01Down(); + + };//end f_CSE_DMR_DEL_005 + + function f_CSE_DMR_DEL_006(ResourceType p_resourceTypeParent, template RequestPrimitive p_requestPrimitiveParent, ResourceType p_resourceTypeChild, template RequestPrimitive p_requestPrimitiveChild) runs on AeSimu { + //Local variables + var integer v_aeIndex := -1; + var integer v_parentIndex := -1; + var integer v_childIndex := -1; + var PrimitiveContent v_attributesParent, v_attributesParent_afterDeletion; + + // Test control + + // Test component configuration + f_cf01Up(); + + // Test adapter configuration + + // Preamble + v_aeIndex := f_cse_preamble_registerAe();//c_CRUDNDi); + + v_parentIndex := f_cse_createResource(p_resourceTypeParent, p_requestPrimitiveParent, v_aeIndex); + + v_childIndex := f_cse_createResource(p_resourceTypeChild, p_requestPrimitiveChild, v_parentIndex); + + v_attributesParent := f_cse_retrieveResource(v_parentIndex); + + if (p_resourceTypeParent==int3){ //Container + if(not(ispresent(v_attributesParent.container.currentNrOfInstances))) { + setverdict(fail, __SCOPE__ & ": Error the currentNrOfInstances attribute is empty"); + f_checkAeSimuStatus(); + } + }else if (p_resourceTypeParent==int29){ //TimeSeries + if(not(ispresent(v_attributesParent.timeSeries.currentNrOfInstances))) { + setverdict(fail, __SCOPE__ & ": Error the currentNrOfInstances attribute is empty"); + f_checkAeSimuStatus(); + } + } + + // Test Body + f_cse_deleteResource(v_childIndex); + + v_attributesParent_afterDeletion := f_cse_retrieveResource(v_parentIndex); + + if (p_resourceTypeParent==int3){ //Container + if(not(ispresent(v_attributesParent_afterDeletion.container.currentNrOfInstances))) { + setverdict(fail, __SCOPE__ & ": Error the currentNrOfInstances attribute is empty"); + f_checkAeSimuStatus(); + } + }else if (p_resourceTypeParent==int29){ //TimeSeries + if(not(ispresent(v_attributesParent_afterDeletion.timeSeries.currentNrOfInstances))) { + setverdict(fail, __SCOPE__ & ": Error the currentNrOfInstances attribute is empty"); + f_checkAeSimuStatus(); + } + } + + if (p_resourceTypeParent==int3){ //Container + if((v_attributesParent.container.currentNrOfInstances > v_attributesParent_afterDeletion.container.currentNrOfInstances) and + (v_attributesParent.container.currentByteSize > v_attributesParent_afterDeletion.container.currentByteSize)) { + setverdict(pass, __SCOPE__ & ": The currentNrOfInstances and currentByteSize attributes are decreased"); + } else { + setverdict(fail, __SCOPE__ & ": currentNrOfInstances and/or currentByteSize attributes are not decreased"); + } + }else if (p_resourceTypeParent==int29){ //TimeSeries + if((v_attributesParent.timeSeries.currentNrOfInstances > v_attributesParent_afterDeletion.timeSeries.currentNrOfInstances) and + (v_attributesParent.timeSeries.currentByteSize > v_attributesParent_afterDeletion.timeSeries.currentByteSize)) { + setverdict(pass, __SCOPE__ & ": The currentNrOfInstances and currentByteSize attributes are decreased"); + } else { + setverdict(fail, __SCOPE__ & ": currentNrOfInstances and/or currentByteSize attributes are not decreased"); + } + } + + // Postamble + f_cse_postamble_deleteResources(); + + // Tear down + f_cf01Down(); + };//end f_CSE_DMR_DEL_006 }//end group Delete @@ -5616,6 +6023,74 @@ module OneM2M_PermutationFunctions { group Create { + function f_CSE_SUB_CRE_001(ResourceType p_parentResourceType, template RequestPrimitive p_parentResourceRequestPrimitive, ResourceType p_childResourceType, template RequestPrimitive p_childRequestPrimitive) runs on AeSimu { + //Local variables + var MsgIn v_response; + var integer v_aeIndex := -1; + var integer v_parentResourceIndex := -1; + var integer v_childResourceIndex := -1; + var RequestPrimitive v_request; + var integer v_ae2Index := -1; + var template RequestPrimitive v_createSubscriptionRequest := m_createSubscriptionBase; + + // Test control + + // Test component configuration + f_cf01Up(); + + // Test adapter configuration + + // Preamble + v_aeIndex := f_cse_preamble_registerAe();//c_CRUDNDi); + + f_cse_preamble_subscriptionVerification(v_ae2Index, v_createSubscriptionRequest, int23); + + v_parentResourceIndex := f_cse_createResource(p_parentResourceType, p_parentResourceRequestPrimitive, v_aeIndex);//Parent + + if(p_parentResourceType != int23){ + v_childResourceIndex := f_cse_createResource(p_childResourceType, p_childRequestPrimitive, v_parentResourceIndex);//Child + }else{ + v_childResourceIndex := v_parentResourceIndex; + } + + v_request := f_getCreateRequestPrimitive(int23, v_createSubscriptionRequest, v_childResourceIndex);//Subscription under child + + // Test Body + mcaPort.send(m_request(v_request)); + tc_ac.start; + alt { + [] mcaPort.receive(mw_response(mw_responsePrimitive(int5203))) -> value v_response { + tc_ac.stop; + setverdict(pass, __SCOPE__ & ": Resource type " & int2str(enum2int(p_childResourceType)) & " not subscribable"); + } + [] mcaPort.receive(mw_response(mw_responsePrimitiveKO)) -> value v_response { + tc_ac.stop; + setverdict(fail, __SCOPE__ & ": Wrong response status code"); + } + [] mcaPort.receive(mw_response(mw_responsePrimitiveOK)) -> value v_response { + tc_ac.stop; + setverdict(fail, __SCOPE__ & ": Subscription successful whereas resource type " & int2str(enum2int(p_childResourceType)) & " resource is not subscribable"); + } + [] tc_ac.timeout { + setverdict(fail, __SCOPE__ & ": No answer while creating resource"); + } + } + + f_checkAeSimuStatus(); + + //Check to see if the resource is NOT present + if(f_isResourceNotPresent(v_childResourceIndex, f_getResourceName(v_request.primitiveContent))){ + setverdict(pass, __SCOPE__ & ":INFO: Subscription resource not created"); + } else { + setverdict(fail, __SCOPE__ & ":ERROR: Subscription resource created"); + } + + //Postamble + f_cse_postamble_deleteResources(); + + //Tear down + f_cf01Down(); + }// end f_CSE_SUB_CRE_001 }//end group Create diff --git a/OneM2M_Testcases_CSE_Release_2.ttcn b/OneM2M_Testcases_CSE_Release_2.ttcn index e055fc3..00ae285 100644 --- a/OneM2M_Testcases_CSE_Release_2.ttcn +++ b/OneM2M_Testcases_CSE_Release_2.ttcn @@ -947,6 +947,90 @@ module OneM2M_Testcases_CSE_Release_2 { }// end group g_CSE_DMR_CRE_006 + group g_CSE_DMR_CRE_007 { + + /** + * @desc Checks that the IUT accepts a newly created RESOURCE_TYPE when the currentNrOfInstances exceeds the field value set in maxNrOfInstances in the PARENT_RESOURCE_TYPE resource by removing enough of the oldest RESOURCE_TYPE resources to allow the creation of the new RESOURCE_TYPE resource + * + */ + testcase TC_CSE_DMR_CRE_007_CNT_CIN() runs on Tester system CseSystem { + // Local variables + var template RequestPrimitive v_createRequestContainer := m_createContainerBase; + var template RequestPrimitive v_createRequestContentInstance1 := m_createContentInstanceBase; + var template RequestPrimitive v_createRequestContentInstance2 := m_createContentInstanceBase; + const integer c_maxNumberOfInstances := 1; + var AeSimu v_ae1 := AeSimu.create("AE1") alive; + + v_createRequestContainer.primitiveContent.container.maxNrOfInstances := c_maxNumberOfInstances; + v_createRequestContentInstance2.primitiveContent.contentInstance.resourceName := c_defaultContentInstanceResourceName & "2"; //Resource 2 + + v_ae1.start(f_CSE_DMR_CRE_007(int3, v_createRequestContainer, int4, v_createRequestContentInstance1, v_createRequestContentInstance2, c_defaultContentInstanceResourceName));//ContentInstance under Container + v_ae1.done; + } + + testcase TC_CSE_DMR_CRE_007_TS_TSI() runs on Tester system CseSystem { + //Local variables + var template RequestPrimitive v_createRequestTimeSeries := m_createTimeSeriesBase; + var template RequestPrimitive v_createRequestTimeSeriesInstance1 := m_createTimeSeriesInstanceBase; + var template RequestPrimitive v_createRequestTimeSeriesInstance2 := m_createTimeSeriesInstanceBase; + const integer c_maxNumberOfInstances := 1; + var AeSimu v_ae1 := AeSimu.create("AE1") alive; + + v_createRequestTimeSeries.primitiveContent.timeSeries.maxNrOfInstances := c_maxNumberOfInstances; + v_createRequestTimeSeriesInstance2.primitiveContent.timeSeriesInstance.resourceName := c_defaultTimeSeriesInstanceResourceName & "2"; //Resource 2 + + v_ae1.start(f_CSE_DMR_CRE_007(int29, v_createRequestTimeSeries, int30, v_createRequestTimeSeriesInstance1, v_createRequestTimeSeriesInstance2, c_defaultTimeSeriesInstanceResourceName));//TimeSeriesInstance under TimeSeries + v_ae1.done; + } + + }// end group g_CSE_DMR_CRE_007 + + group g_CSE_DMR_CRE_008 { + + /** + * @desc Checks that the IUT accepts a newly created RESOURCE_TYPE when the currentNrOfInstances exceeds the field value set in maxNrOfInstances in the PARENT_RESOURCE_TYPE resource by removing enough of the oldest RESOURCE_TYPE resources to allow the creation of the new RESOURCE_TYPE resource + * + */ + testcase TC_CSE_DMR_CRE_008_CNT_CIN() runs on Tester system CseSystem { + // Local variables + var template RequestPrimitive v_createRequestContainer := m_createContainerBase; + var template RequestPrimitive v_createRequestContentInstance1 := m_createContentInstanceBase; + var template RequestPrimitive v_createRequestContentInstance2 := m_createContentInstanceBase; + const integer c_maxByteSize := 10; + const XSD.String c_primitiveContent1 := "Content1"; + const XSD.String c_primitiveContent2 := "Content2"; + var AeSimu v_ae1 := AeSimu.create("AE1") alive; + + v_createRequestContainer.primitiveContent.container.maxByteSize := c_maxByteSize; + v_createRequestContentInstance1.primitiveContent.contentInstance.content := c_primitiveContent1; //ContentInstance 1 + v_createRequestContentInstance2.primitiveContent.contentInstance.content := c_primitiveContent2; //ContentInstance 2 + v_createRequestContentInstance2.primitiveContent.contentInstance.resourceName := c_defaultContentInstanceResourceName & "2"; //ContentInstance 2 + + v_ae1.start(f_CSE_DMR_CRE_007(int3, v_createRequestContainer, int4, v_createRequestContentInstance1, v_createRequestContentInstance2, c_defaultContentInstanceResourceName));//ContentInstance under Container + v_ae1.done; + } + + testcase TC_CSE_DMR_CRE_008_TS_TSI() runs on Tester system CseSystem { + //Local variables + var template RequestPrimitive v_createRequestTimeSeries := m_createTimeSeriesBase; + var template RequestPrimitive v_createRequestTimeSeriesInstance1 := m_createTimeSeriesInstanceBase; + var template RequestPrimitive v_createRequestTimeSeriesInstance2 := m_createTimeSeriesInstanceBase; + const integer c_maxByteSize := 10; + const XSD.String c_primitiveContent1 := "Content1"; + const XSD.String c_primitiveContent2 := "Content2"; + var AeSimu v_ae1 := AeSimu.create("AE1") alive; + + v_createRequestTimeSeries.primitiveContent.container.maxByteSize := c_maxByteSize; + v_createRequestTimeSeriesInstance1.primitiveContent.timeSeriesInstance.content := c_primitiveContent1; //ContentInstance 1 + v_createRequestTimeSeriesInstance2.primitiveContent.timeSeriesInstance.content := c_primitiveContent2; //ContentInstance 2 + v_createRequestTimeSeriesInstance2.primitiveContent.timeSeriesInstance.resourceName := c_defaultTimeSeriesInstanceResourceName & "2"; //ContentInstance 2 + + v_ae1.start(f_CSE_DMR_CRE_008(int29, v_createRequestTimeSeries, int30, v_createRequestTimeSeriesInstance1, v_createRequestTimeSeriesInstance2, c_defaultTimeSeriesInstanceResourceName));//TimeSeriesInstance under TimeSeries + v_ae1.done; + } + + }// end group g_CSE_DMR_CRE_008 + group g_CSE_DMR_CRE_012 { /** @@ -1379,6 +1463,63 @@ module OneM2M_Testcases_CSE_Release_2 { } }// end group g_CSE_DMR_CRE_012 + + group g_CSE_DMR_CRE_013 { + + /** + * @desc Check that the IUT rejects the CREATE Request of a RESOURCE_TYPE resource with error “NOT_ACCEPTABLE†when contentSize exceeds maxByteSize of the PARENT_RESOURCE_TYPE + * + */ + testcase TC_CSE_DMR_CRE_013_CNT_CIN() runs on Tester system CseSystem { + // Local variables + var template RequestPrimitive v_createRequestContainer := m_createContainerBase; + var template RequestPrimitive v_createRequestContentInstance := m_createContentInstanceBase; + const integer c_maxByteSize := 1; + var AeSimu v_ae1 := AeSimu.create("AE1") alive; + + v_createRequestContainer.primitiveContent.container.maxByteSize := c_maxByteSize; + + v_ae1.start(f_CSE_DMR_CRE_013(int3, v_createRequestContainer, int4, v_createRequestContentInstance));//ContentInstance under Container + v_ae1.done; + } + + testcase TC_CSE_DMR_CRE_013_TS_TSI() runs on Tester system CseSystem { + //Local variables + var template RequestPrimitive v_createRequestTimeSeries := m_createTimeSeriesBase; + var template RequestPrimitive v_createRequestTimeSeriesInstance := m_createTimeSeriesInstanceBase; + const integer c_maxByteSize := 1; + var AeSimu v_ae1 := AeSimu.create("AE1") alive; + + v_createRequestTimeSeries.primitiveContent.timeSeries.maxByteSize := c_maxByteSize; + + v_ae1.start(f_CSE_DMR_CRE_013(int29, v_createRequestTimeSeries, int30, v_createRequestTimeSeriesInstance));//TimeSeriesInstance under TimeSeries + v_ae1.done; + } + + }// end group g_CSE_DMR_CRE_013 + + group g_CSE_DMR_CRE_014 { + + /** + * @desc Check that the IUT updates the currentByteSize attribute in a PARENT_RESOURCE_TYPE when a new RESOURCE_TYPE is created. + * + */ + testcase TC_CSE_DMR_CRE_014_TS_TSI() runs on Tester system CseSystem { + // Local variables + var template RequestPrimitive v_parentResourceRequest := m_createTimeSeriesBase; + var template RequestPrimitive v_childResourceRequest := m_createTimeSeriesInstanceBase;//Default content: "AnyValue" (8 bytes length) + var ResponsePrimitive v_responsePrimitive; + var AeSimu v_ae1 := AeSimu.create("AE1") alive; + const integer c_maxByteSize := 512; + + v_parentResourceRequest.primitiveContent.timeSeries.maxByteSize := c_maxByteSize; + + v_ae1.start(f_CSE_DMR_CRE_014(int29, v_parentResourceRequest, int30, v_childResourceRequest)); + v_ae1.done; + + } + + }// end group g_CSE_DMR_CRE_014 group g_CSE_DMR_CRE_015 { @@ -4560,7 +4701,140 @@ module OneM2M_Testcases_CSE_Release_2 { v_ae1.done; } - } // end g_CSE_DMR_UPD_009 + testcase TC_CSE_DMR_UPD_009_TS_EXC() runs on Tester system CseSystem { + // Local variables + var AeSimu v_ae1 := AeSimu.create("AE1") alive; + var XSD.PositiveInteger v_expirationCounter := 1; + var template RequestPrimitive v_createRequest := m_createTimeSeriesBase; + var template RequestPrimitive v_updateRequest := m_updateTimeSeriesBase; + + v_updateRequest.primitiveContent := {timeSeries_update_invalid := m_contentUpdateTimeSeries_invalid}; + + v_updateRequest.primitiveContent.timeSeries_update_invalid.expirationCounter := v_expirationCounter; + + v_ae1.start(f_CSE_DMR_UPD_009(int29, v_createRequest, v_updateRequest));//TimeSeries + v_ae1.done; + } + + } // end g_CSE_DMR_UPD_009 + + group g_CSE_DMR_UPD_010{ + + /** + * @desc Check that the stateTag attribute of a RESOURCE_TYPE resource is increased when an update operation has been performed on its child resource + * + */ + testcase TC_CSE_DMR_UPD_010_CNT() runs on Tester system CseSystem { + // Local variables + var AeSimu v_ae1 := AeSimu.create("AE1") alive; + var RequestPrimitive v_updateRequest := valueof(m_updateContainerBase); + var template RequestPrimitive v_createRequest := m_createContainerBase; + var Labels v_labels_1:= {"VALUE_1"}; + var PrimitiveContent v_primitiveContentRetrieveResource; + + v_updateRequest.primitiveContent.container.labels := v_labels_1; + + v_ae1.start(f_CSE_DMR_UPD_010(int3, v_createRequest, v_updateRequest));//Container + v_ae1.done; + + if(getverdict == pass){ + v_primitiveContentRetrieveResource := f_getPrimitiveContentRetrievedResource(v_ae1); + //Check that stateTag has been incremented + if(ischosen(v_primitiveContentRetrieveResource.container)) { + if(v_primitiveContentRetrieveResource.container.stateTag == 1){ + setverdict(pass, __SCOPE__ & ": The stateTag attribute is incremented"); + }else{ + setverdict(fail, __SCOPE__ & ": Error the stateTag attribute is not incremented"); + } + } + } + } + + testcase TC_CSE_DMR_UPD_010_TS() runs on Tester system CseSystem { + // Local variables + var AeSimu v_ae1 := AeSimu.create("AE1") alive; + var RequestPrimitive v_updateRequest := valueof(m_updateTimeSeriesBase); + var template RequestPrimitive v_createRequest := m_createTimeSeriesBase; + var Labels v_labels_1:= {"VALUE_1"}; + var PrimitiveContent v_primitiveContentRetrieveResource; + + v_updateRequest.primitiveContent.timeSeries.labels := v_labels_1; + + v_ae1.start(f_CSE_DMR_UPD_010(int29, v_createRequest, v_updateRequest));//TimeSeries + v_ae1.done; + + if(getverdict == pass){ + v_primitiveContentRetrieveResource := f_getPrimitiveContentRetrievedResource(v_ae1); + //Check that stateTag has been incremented + if(ischosen(v_primitiveContentRetrieveResource.timeSeries)) { + if(v_primitiveContentRetrieveResource.timeSeries.stateTag == 1){ + setverdict(pass, __SCOPE__ & ": The stateTag attribute is incremented"); + }else{ + setverdict(fail, __SCOPE__ & ": Error the stateTag attribute is not incremented"); + } + } + } + } + + } // end g_CSE_DMR_UPD_010 + + group g_CSE_DMR_UPD_011{ + + /** + * @desc Check that the IUT rejects the UPDATE Request of an existing RESOURCE_TYPE resource with error “OPERATION_NOT_ALLOWED†+ * + */ + testcase TC_CSE_DMR_UPD_011_CNT_CNI() runs on Tester system CseSystem { + // Local variables + var AeSimu v_ae1 := AeSimu.create("AE1") alive; + var template RequestPrimitive v_updateRequest := m_updateContentInstanceBase; + var Labels v_labels:= {"LABEL"}; + var template RequestPrimitive v_createParentRequest := m_createContainerBase; + var template RequestPrimitive v_createChildRequest := m_createContentInstanceBase; + var PrimitiveContent v_primitiveContentRetrieveResource; + + v_updateRequest.primitiveContent.contentInstance.labels := v_labels; + + v_ae1.start(f_CSE_DMR_UPD_011(int3, v_createParentRequest, int4, v_createChildRequest, v_updateRequest));//ContentInstance under Container + v_ae1.done; + + if(getverdict == pass){ + v_primitiveContentRetrieveResource := f_getPrimitiveContentRetrievedResource(v_ae1); + //Check that the resource has NOT been udpated + if(ischosen(v_primitiveContentRetrieveResource.contentInstance)) { + if(v_primitiveContentRetrieveResource.contentInstance.labels == v_labels){ + setverdict(fail, __SCOPE__ & ": Error: Labels attribute updated") + } + } + } + } + + testcase TC_CSE_DMR_UPD_011_TS_TSI() runs on Tester system CseSystem { + // Local variables + var AeSimu v_ae1 := AeSimu.create("AE1") alive; + var template RequestPrimitive v_updateRequest := m_updateTimeSeriesInstanceBase; + var Labels v_labels:= {"LABEL"}; + var template RequestPrimitive v_createParentRequest := m_createTimeSeriesBase; + var template RequestPrimitive v_createChildRequest := m_createTimeSeriesInstanceBase; + var PrimitiveContent v_primitiveContentRetrieveResource; + + v_updateRequest.primitiveContent.timeSeriesInstance.labels := v_labels; + + v_ae1.start(f_CSE_DMR_UPD_011(int29, v_createParentRequest, int30, v_createChildRequest, v_updateRequest));//TimeSeriesInstance under TimeSeries + v_ae1.done; + + if(getverdict == pass){ + v_primitiveContentRetrieveResource := f_getPrimitiveContentRetrievedResource(v_ae1); + //Check that the resource has NOT been udpated + if(ischosen(v_primitiveContentRetrieveResource.timeSeriesInstance)) { + if(v_primitiveContentRetrieveResource.timeSeriesInstance.labels == v_labels){ + setverdict(fail, __SCOPE__ & ": Error: Labels attribute updated") + } + } + } + } + + } // end g_CSE_DMR_UPD_011 group g_CSE_DMR_UPD_014 { @@ -6476,6 +6750,82 @@ module OneM2M_Testcases_CSE_Release_2 { }; };//end of group g_CSE_DMR_DEL_004 + + group g_CSE_DMR_DEL_005{ + + /** + * @desc Check that the stateTag attribute of a RESOURCE_TYPE resource is increased when a child resource is deleted + * + */ + testcase TC_CSE_DMR_DEL_005_CNT() runs on Tester system CseSystem { + // Local variables + var PrimitiveContent v_primitiveContentRetrieveResource; + var AeSimu v_ae1 := AeSimu.create("AE1") alive; + + v_ae1.start(f_CSE_DMR_DEL_005(int3, m_createContainerBase, int3, m_createContainerBase));//Container + v_ae1.done; + + if(getverdict == pass){ + v_primitiveContentRetrieveResource := f_getPrimitiveContentRetrievedResource(v_ae1); + //Check that stateTag has been incremented + if(ischosen(v_primitiveContentRetrieveResource.container)) { + if(v_primitiveContentRetrieveResource.container.stateTag == 2){ //(Create and Delete) + setverdict(pass, __SCOPE__ & ": The stateTag attribute is incremented"); + }else{ + setverdict(fail, __SCOPE__ & ": Error the stateTag attribute is not incremented"); + } + } + } + }; + + testcase TC_CSE_DMR_DEL_005_TS() runs on Tester system CseSystem { + // Local variables + var PrimitiveContent v_primitiveContentRetrieveResource; + var AeSimu v_ae1 := AeSimu.create("AE1") alive; + + v_ae1.start(f_CSE_DMR_DEL_005(int29, m_createTimeSeriesBase, int30, m_createTimeSeriesInstanceBase));//TimeSeries + v_ae1.done; + + if(getverdict == pass){ + v_primitiveContentRetrieveResource := f_getPrimitiveContentRetrievedResource(v_ae1); + //Check that stateTag has been incremented + if(ischosen(v_primitiveContentRetrieveResource.container)) { + if(v_primitiveContentRetrieveResource.timeSeries.stateTag == 2){ //(Create and Delete) + setverdict(pass, __SCOPE__ & ": The stateTag attribute is incremented"); + }else{ + setverdict(fail, __SCOPE__ & ": Error the stateTag attribute is not incremented"); + } + } + } + }; + + };//end of group g_CSE_DMR_DEL_005 + + group g_CSE_DMR_DEL_006{ + + /** + * @desc Check that the IUT decreases the field value of attribute currentNrOfInstances and currentByteSize of parent RESOURCE_TYPE when a latest RESOURCE_TYPE resource is deleted successfully + * + */ + testcase TC_CSE_DMR_DEL_006_CNT_CIN() runs on Tester system CseSystem { + // Local variables + var AeSimu v_ae1 := AeSimu.create("AE1") alive; + + v_ae1.start(f_CSE_DMR_DEL_006(int3, m_createContainerBase, int4, m_createContentInstanceBase));//ContentInstance under Container + v_ae1.done; + + }; + + testcase TC_CSE_DMR_DEL_006_TS_TSI() runs on Tester system CseSystem { + // Local variables + var AeSimu v_ae1 := AeSimu.create("AE1") alive; + + v_ae1.start(f_CSE_DMR_DEL_006(int29, m_createTimeSeriesBase, int30, m_createTimeSeriesInstanceBase));//TimeSeriesInstance under TimeSeries + v_ae1.done; + + }; + + };//end of group g_CSE_DMR_DEL_006 group g_CSE_DMR_DEL_008{ @@ -7597,6 +7947,52 @@ module OneM2M_Testcases_CSE_Release_2 { group Create { + group g_CSE_SUB_CRE_001 { + + /** + * @desc Check that the IUT rejects the creation of the <subscription> resource when the target subscribed-to RESOURCE_TYPE resource is not subscribable. + * + */ + testcase TC_CSE_SUB_CRE_001_CIN() runs on Tester system CseSystem { + // Local variables + var template RequestPrimitive v_parentResourceRequest := m_createContainerBase; + var template RequestPrimitive v_childResourceRequest := m_createContentInstanceBase; + var ResponsePrimitive v_responsePrimitive; + var AeSimu v_ae1 := AeSimu.create("AE1") alive; + const XSD.String c_content := "Random Value"; + + v_childResourceRequest.primitiveContent.contentInstance.content := "Random Value"; + + v_ae1.start(f_CSE_SUB_CRE_001(int3, v_parentResourceRequest, int4, v_childResourceRequest)); + v_ae1.done; + } + + testcase TC_CSE_SUB_CRE_001_SUB() runs on Tester system CseSystem { + // Local variables + var template RequestPrimitive v_parentResourceRequest := m_createSubscriptionBase; + var ResponsePrimitive v_responsePrimitive; + var AeSimu v_ae1 := AeSimu.create("AE1") alive; + + v_ae1.start(f_CSE_SUB_CRE_001(int23, v_parentResourceRequest, int23, v_parentResourceRequest)); + v_ae1.done; + } + + testcase TC_CSE_SUB_CRE_001_TSI() runs on Tester system CseSystem { + // Local variables + var template RequestPrimitive v_parentResourceRequest := m_createTimeSeriesBase; + var template RequestPrimitive v_childResourceRequest := m_createTimeSeriesInstanceBase; + var ResponsePrimitive v_responsePrimitive; + var AeSimu v_ae1 := AeSimu.create("AE1") alive; + const XSD.String c_content := "Random Value"; + + v_childResourceRequest.primitiveContent.timeSeriesInstance.content := "Random Value"; + + v_ae1.start(f_CSE_SUB_CRE_001(int29, v_parentResourceRequest, int30, v_childResourceRequest)); + v_ae1.done; + } + + }// end group g_CSE_DMR_CRE_014 + }//end group Create group Notify{ -- GitLab