diff --git a/LibOneM2M/OneM2M_Functions.ttcn b/LibOneM2M/OneM2M_Functions.ttcn index 7bd89e4b1ee692fae398866bf5e89ef1cd512152..3bb342aaf5555db36d6b2987b53892ee18a2d534 100644 --- a/LibOneM2M/OneM2M_Functions.ttcn +++ b/LibOneM2M/OneM2M_Functions.ttcn @@ -19,6 +19,7 @@ module OneM2M_Functions { import from OneM2M_TestSystem all; import from OneM2M_Pixits all; import from OneM2M_Pics all; + import from LibCommon_Time all; group ConfigFunctions { @@ -2161,7 +2162,7 @@ module OneM2M_Functions { } - function f_cse_generateMissingDataPoint(in integer p_timeSeriesResourceIndex) runs on AeSimu{ + function f_cse_generateMissingDataPoint(in integer p_timeSeriesResourceIndex, in integer p_timeSeriesInstanceNumber := 0) runs on AeSimu{ var RequestPrimitive v_request; var integer v_resourceIndex := -1; @@ -2173,17 +2174,21 @@ module OneM2M_Functions { //Activate defaults when running on a PTC f_cse_activateDefaults_ae(); i := 0; - while (i < 3) { + while (i < 1) { v_request := valueof(m_createTimeSeriesInstanceBase); - v_request.primitiveContent.timeSeriesInstance.resourceName := "MyTimeSeriesInstance" & int2str(i); + v_request.primitiveContent.timeSeriesInstance.resourceName := "MyTimeSeriesInstance" & int2str(p_timeSeriesInstanceNumber); + v_request.primitiveContent.timeSeriesInstance.dataGenerationTime := {alt_ := fx_generateTimestamp()}; + v_request.primitiveContent.timeSeriesInstance.dataGenerationTime.alt_ := v_request.primitiveContent.timeSeriesInstance.dataGenerationTime.alt_ & ",1234"; v_resourceIndex := f_cse_createResource(int30, v_request, p_timeSeriesResourceIndex); i := i + 1; - t_noAction.start(int2float(v_periodicInterval)); + t_noAction.start(int2float(v_periodicInterval/1000+v_missingDataDetectTimer/1000)); + t_noAction.timeout; } + //f_sleep(int2float(v_periodicInterval/1000)); //After missingDataTimerDetect, a missing data point should have been detected - t_noAction.start(int2float(v_missingDataDetectTimer)); + //t_noAction.start(int2float(v_missingDataDetectTimer)); } @@ -2306,12 +2311,49 @@ module OneM2M_Functions { v_responsePrimitive.requestIdentifier := vc_request.primitive.requestPrimitive.requestIdentifier; f_send(e_mcaPortIn, m_response(v_responsePrimitive)); } + [] mcaPortIn.receive(mw_request(mw_notifyNotification(?))) -> value vc_request { + tc_ac.stop; + setverdict(fail, __SCOPE__ & ":ERROR: Notification received but the content doesn't match"); + } [] tc_ac.timeout { setverdict(fail, __SCOPE__ & ":ERROR: No notification received"); } } } //end f_cse_notifyProcedure_representationHandler + + /** + * @desc Handling message exchange for the notification procedure for timeSeries + * @param p_timeSeriesNotification Expected timeSeriesNotification in the notification + * @verdict + */ + function f_cse_notifyProcedure_timeSeriesNotificationHandler(template TimeSeriesNotification p_timeSeriesNotification) runs on AeSimu { + // Local variables + var ResponsePrimitive v_responsePrimitive; + + //Activate defaults when running on a PTC + f_cse_activateDefaults_ae(); + + tc_ac.start; + alt { + [] mcaPortIn.receive(mw_request(mw_notifyNotification(mw_contentNotification({timeSeriesNotification := p_timeSeriesNotification})))) -> value vc_request { + tc_ac.stop; + setverdict(pass, __SCOPE__ & ":INFO: Notification received"); + //Send response in any case + v_responsePrimitive := valueof(m_responseNotification(int2000, omit)); + v_responsePrimitive.requestIdentifier := vc_request.primitive.requestPrimitive.requestIdentifier; + f_send(e_mcaPortIn, m_response(v_responsePrimitive)); + } + [] mcaPortIn.receive(mw_request(mw_notifyNotification(?))) -> value vc_request { + tc_ac.stop; + setverdict(fail, __SCOPE__ & ":ERROR: Notification received but the content doesn't match"); + } + [] tc_ac.timeout { + setverdict(fail, __SCOPE__ & ":ERROR: No notification received"); + } + } + + } //end f_cse_notifyProcedure_timeSeriesNotificationHandler /** * @desc Handling message exchange for the notification procedure @@ -2443,14 +2485,14 @@ module OneM2M_Functions { * @desc Handling message exchange for the notification procedure (no notification expected) * @verdict */ - function f_cse_notifyProcedure_noNotificationHandler() runs on AeSimu { + function f_cse_notifyProcedure_noNotificationHandler(float p_waitingTime := 10.0) runs on AeSimu { // Local variables var ResponsePrimitive v_responsePrimitive; //Activate defaults when running on a PTC f_cse_activateDefaults_ae(); - tc_ac.start(10.0); + tc_ac.start(p_waitingTime); alt { [] mcaPortIn.receive(mw_request(mw_notifyNotification(mw_contentNotification(?)))) -> value vc_request { tc_ac.stop; diff --git a/LibOneM2M/OneM2M_Templates.ttcn b/LibOneM2M/OneM2M_Templates.ttcn index d57807f7f5f89494986e5eb2381b57e651d12813..669b744655cd92c221873f54befccf8b8884e548 100644 --- a/LibOneM2M/OneM2M_Templates.ttcn +++ b/LibOneM2M/OneM2M_Templates.ttcn @@ -1386,8 +1386,8 @@ module OneM2M_Templates { primitiveContent := {subscription := m_contentCreateSubscription ({"NotInitialized"})} }; - template (value) RequestPrimitive m_createSubscription(XSD.ID p_parentResourceAddress, in template (omit) XSD.String p_name, in template (value) ListOfURIs p_notificationURI := {"NotInitialized"}) modifies m_create := { - to_ := p_parentResourceAddress, + template (value) RequestPrimitive m_createSubscription(template (omit) XSD.ID p_to := omit, in template (omit) XSD.String p_name, in template (value) ListOfURIs p_notificationURI := {"NotInitialized"}) modifies m_create := { + to_ := p_to, requestIdentifier := testcasename() & "-m_createSubscription", resourceType := int23, primitiveContent := {subscription := m_contentCreateSubscription (p_notificationURI, p_name)} @@ -1462,9 +1462,9 @@ module OneM2M_Templates { primitiveContent := {semanticMashupResult := m_contentCreateSemanticMashupResult} }; - template (value) RequestPrimitive m_createSubscriptionAdvanced( XSD.ID p_parentResourceAddress, + template (value) RequestPrimitive m_createSubscriptionAdvanced( template (omit) XSD.ID p_to := "NotInitialized", in template (omit) XSD.String p_name := omit, - in template (value) ListOfURIs p_notificationURI, + in template (value) ListOfURIs p_notificationURI := {"NotInitialized"}, in template (omit) EventNotificationCriteria p_eventNotificationCriteria := omit, in template (omit) XSD.PositiveInteger p_expirationCounter := omit, in template (omit) BatchNotify p_batchNotify := omit, @@ -1562,7 +1562,7 @@ module OneM2M_Templates { template (value) RequestPrimitive m_createTimeSeries(in template (omit) XSD.String p_name := c_defaultTimeSeriesResourceName, in XSD.Boolean p_missingDataDetect := true, - in XSD.NonNegativeInteger p_periodicInterval := 5, + in XSD.NonNegativeInteger p_periodicInterval := 5000, in XSD.NonNegativeInteger p_missingDataMaxNr := 5, in XSD.NonNegativeInteger p_missingDataDetectTimer := 2000) modifies m_createTimeSeriesBase := { primitiveContent := {timeSeries := m_contentCreateTimeSeriesAttributes (p_name, p_missingDataDetect, p_periodicInterval, p_missingDataMaxNr, p_missingDataDetectTimer)} @@ -2638,9 +2638,9 @@ module OneM2M_Templates { template (value) AccessControlRule m_createAcr (in template (value) ListOfURIs p_acor, in template (value) AccessControlOperations p_allowedOperations) := { accessControlOriginators := p_acor,//{"*"},//{PX_AE_ID_STEM}, //{"admin:admin"}, accessControlOperations := p_allowedOperations, - accessControlContexts_list := {}, + accessControlContexts_list := omit, accessControlAuthenticationFlag := omit, - accessControlObjectDetails_list := {} + accessControlObjectDetails_list := omit } /*template (value) CSEBase_optional m_contentCreateCSEBase (in template (value) ServiceSubscribedAppRule p_serviceSubscribedAppRule) := { @@ -3577,7 +3577,7 @@ module OneM2M_Templates { expireAfter := omit, sizeAbove := omit, sizeBelow := omit, - operationMonitor_list := {}, + operationMonitor_list := omit, attribute := p_attribute_list, notificationEventType_list := p_notificationEventType_list,// TODO this list should be able to be omited see 9.6.8 (TS0001) childResourceType := omit, @@ -7050,6 +7050,10 @@ module OneM2M_Templates { } }; + template Representation mw_timeSeriesNotification (TimeSeriesNotification p_timeSeriesNotification) := { + timeSeriesNotification := p_timeSeriesNotification + } + template (value) Node_optional m_contentNode_allOmit := { resourceName := omit, @@ -7164,6 +7168,11 @@ module OneM2M_Templates { missingDataList := p_missingDataList, missingDataCurrentNr := p_missingDataCurrentNr } + + template TimeSeriesNotification mw_contentTimeSeriesNotification(in template MissingDataList p_missingDataList := *, in template XSD.NonNegativeInteger p_missingDataCurrentNr := *) := { + missingDataList := p_missingDataList, + missingDataCurrentNr := p_missingDataCurrentNr + } template TimeSeries_optional mw_contentTimeSeries_rc1 modifies mw_contentTimeSeriesBase := { choice := omit //O diff --git a/OneM2M_Testcases_CSE_Release_3.ttcn b/OneM2M_Testcases_CSE_Release_3.ttcn index 8b43aead780cce23d95ff31e1975790d309091fd..61ce1653479980f7c87bf6c5966104489fca8b30 100644 --- a/OneM2M_Testcases_CSE_Release_3.ttcn +++ b/OneM2M_Testcases_CSE_Release_3.ttcn @@ -21,6 +21,7 @@ module OneM2M_Testcases_CSE_Release_3 { import from OneM2M_Pics all; import from OneM2M_Functions all; import from OneM2M_PermutationFunctions all; + import from LibCommon_Time all; import from XSD all; //Demos used for validation purposes @@ -12302,10 +12303,13 @@ module OneM2M_Testcases_CSE_Release_3 { v_aeIndex := f_cse_preamble_registerAe(); - v_resourceIndex := f_cse_createResource(int29, m_createTimeSeries(-, -, 5, -, 2000), v_aeIndex); + v_resourceIndex := f_cse_createResource(int29, m_createTimeSeries(-, -, 5000, -, 1000), v_aeIndex); //Create data points and force a missingDataPoint f_cse_generateMissingDataPoint(v_resourceIndex); + + f_sleep(3.0); + // Test Body f_send(e_mcaPort, m_request(m_retrieve(f_getResourceAddress(v_resourceIndex), f_getOriginator(v_resourceIndex)))); tc_ac.start; @@ -12371,6 +12375,7 @@ module OneM2M_Testcases_CSE_Release_3 { var integer v_resourceIndex := -1; var Timestamp v_missingDataPointTimestamp; var XSD.Long v_missingDataPointRel; + var integer v_timeSeriesInstanceNumber := 0; // Test control @@ -12383,10 +12388,12 @@ module OneM2M_Testcases_CSE_Release_3 { v_aeIndex := f_cse_preamble_registerAe(); - v_resourceIndex := f_cse_createResource(int29, m_createTimeSeries(-, -, 5, 1, 2000), v_aeIndex); + v_resourceIndex := f_cse_createResource(int29, m_createTimeSeries(-, -, 5000, 1, 1000), v_aeIndex); //Create data points and force a missingDataPoint - f_cse_generateMissingDataPoint(v_resourceIndex); + f_cse_generateMissingDataPoint(v_resourceIndex, v_timeSeriesInstanceNumber); + + f_sleep(3.0); //Retrieve first missing data point f_send(e_mcaPort, m_request(m_retrieve(f_getResourceAddress(v_resourceIndex), f_getOriginator(v_resourceIndex)))); @@ -12430,7 +12437,8 @@ module OneM2M_Testcases_CSE_Release_3 { //Test body //Create data points and force a second missingDataPoint - f_cse_generateMissingDataPoint(v_resourceIndex); + //f_cse_generateMissingDataPoint(v_resourceIndex, v_timeSeriesInstanceNumber + 1); + f_sleep(int2float(5000/1000)); //Retrieve second missing data point f_send(e_mcaPort, m_request(m_retrieve(f_getResourceAddress(v_resourceIndex), f_getOriginator(v_resourceIndex)))); @@ -12507,14 +12515,15 @@ module OneM2M_Testcases_CSE_Release_3 { var integer v_aeIndex := -1; var integer v_timeSeriesIndex := -1; var integer v_subscriptionIndex := -1; - var EventNotificationCriteria v_eventNotificationCriteria := valueof(m_eventNotificationCriteria({int1}, -)); + var EventNotificationCriteria v_eventNotificationCriteria := valueof(m_eventNotificationCriteria({int8}, -)); var template RequestPrimitive v_createRequest := omit; var RequestPrimitive v_request; var integer v_ae2Index := -1; var XSD.NonNegativeInteger v_missingDataPointNumber := 1; - var template PrimitiveContent v_contentNotification := {timeSeries := mw_contentTimeSeries(?,v_missingDataPointNumber)}; + var template TimeSeriesNotification v_contentNotification := mw_contentTimeSeriesNotification(?,v_missingDataPointNumber); - v_eventNotificationCriteria.missingData := valueof(m_missingData(v_missingDataPointNumber, "PT0H")); + v_eventNotificationCriteria.missingData := valueof(m_missingData(v_missingDataPointNumber, "PT1H")); + v_createRequest := m_createSubscriptionAdvanced(-, -, -, v_eventNotificationCriteria, omit, omit, omit, omit, omit, omit); // Test control @@ -12526,12 +12535,12 @@ module OneM2M_Testcases_CSE_Release_3 { // Preamble v_aeIndex := f_cse_preamble_registerAe(); - v_timeSeriesIndex := f_cse_createResource(int29, m_createTimeSeries(-, true, 5, -, 2000), v_aeIndex); + v_timeSeriesIndex := f_cse_createResource(int29, m_createTimeSeries(-, true, 5000, -, 1000), v_aeIndex); f_cse_preamble_subscriptionVerification(v_ae2Index, v_createRequest, int23); - v_createRequest := m_createSubscriptionAdvanced(f_getResourceAddress(v_timeSeriesIndex), -, {f_getResourceAddress(v_aeIndex)}, v_eventNotificationCriteria, omit, omit, omit, omit, omit, omit); - + //v_createRequest.primitiveContent.subscription.notificationURI := {"http://127.0.0.1:61617/"}; + v_subscriptionIndex := f_cse_createResource(int23, v_createRequest, v_timeSeriesIndex); if(vc_ae2.running) { @@ -12539,12 +12548,12 @@ module OneM2M_Testcases_CSE_Release_3 { }; // Test Body + vc_ae2.start(f_cse_notifyProcedure_timeSeriesNotificationHandler(v_contentNotification)); //Create data points and force a missingDataPoint - vc_ae2.start(f_cse_generateMissingDataPoint(v_timeSeriesIndex)); - vc_ae2.done; - - f_cse_notifyProcedure_representationHandler(v_contentNotification); + f_cse_generateMissingDataPoint(v_timeSeriesIndex); + + f_aeSimu_checkComponentDoneAndGetVerdict(vc_ae2); //Postamble f_cse_postamble_deleteResources(); @@ -12574,14 +12583,16 @@ module OneM2M_Testcases_CSE_Release_3 { var integer v_aeIndex := -1; var integer v_timeSeriesIndex := -1; var integer v_subscriptionIndex := -1; - var EventNotificationCriteria v_eventNotificationCriteria := valueof(m_eventNotificationCriteria({int1}, -)); + var EventNotificationCriteria v_eventNotificationCriteria := valueof(m_eventNotificationCriteria({int8}, -)); var template RequestPrimitive v_createRequest := omit; var ResponsePrimitive v_responsePrimitive; var integer v_ae2Index := -1; - var XSD.NonNegativeInteger v_missingDataPointNumber := 100; + var XSD.NonNegativeInteger v_missingDataPointNumber := 1; + var template TimeSeriesNotification v_contentNotification := mw_contentTimeSeriesNotification(?,v_missingDataPointNumber); var template PrimitiveContent v_contentResponse; - v_eventNotificationCriteria.missingData := valueof(m_missingData(v_missingDataPointNumber, "PT0H")); + v_eventNotificationCriteria.missingData := valueof(m_missingData(v_missingDataPointNumber, "PT4S")); + v_createRequest := m_createSubscriptionAdvanced(-, -, -, v_eventNotificationCriteria, omit, omit, omit, omit, omit, omit); // Test control @@ -12593,68 +12604,32 @@ module OneM2M_Testcases_CSE_Release_3 { // Preamble v_aeIndex := f_cse_preamble_registerAe(); - v_timeSeriesIndex := f_cse_createResource(int29, m_createTimeSeries(-, true, 5, -, 2000), v_aeIndex);//TimeSeries + v_timeSeriesIndex := f_cse_createResource(int29, m_createTimeSeries(-, true, 5000, -, 1000), v_aeIndex);//TimeSeries f_cse_preamble_subscriptionVerification(v_ae2Index, v_createRequest, int23);//AE2 registered - v_createRequest := m_createSubscriptionAdvanced(f_getResourceAddress(v_timeSeriesIndex), -, {f_getResourceAddress(v_aeIndex)}, v_eventNotificationCriteria, omit, omit, omit, omit, omit, omit); + //v_createRequest := m_createSubscriptionAdvanced(f_getResourceAddress(v_timeSeriesIndex), -, {f_getResourceAddress(v_aeIndex)}, v_eventNotificationCriteria, omit, omit, omit, omit, omit, omit); v_subscriptionIndex := f_cse_createResource(int23, v_createRequest, v_timeSeriesIndex);//Subscription under TimeSeries + // Test Body + if(vc_ae2.running) { vc_ae2.stop; }; // Test Body - + vc_ae2.start(f_cse_notifyProcedure_timeSeriesNotificationHandler(v_contentNotification)); + //Create data points and force a missingDataPoint - vc_ae2.start(f_cse_generateMissingDataPoint(v_timeSeriesIndex)); - vc_ae2.done; - - tc_ac.start; - alt { - [] mcaPortIn.receive(mw_request(mw_notifyNotification(?))){ - tc_ac.stop; - setverdict(fail, __SCOPE__ & ":ERROR: Notification received"); - //Send response in any case - v_responsePrimitive := valueof(m_responseNotification(int2000, omit)); - v_responsePrimitive.requestIdentifier := vc_request.primitive.requestPrimitive.requestIdentifier; - f_send(e_mcaPortIn, m_response(v_responsePrimitive)); - } - [] tc_ac.timeout { - setverdict(pass, __SCOPE__ & ": Notification not received"); - } - } + f_cse_generateMissingDataPoint(v_timeSeriesIndex); - //Check if the IUT restarts missing data point counter and timer - f_send(e_mcaPort, m_request(m_retrieve(f_getResourceAddress(v_timeSeriesIndex), f_getOriginator(v_timeSeriesIndex)))); + f_aeSimu_checkComponentDoneAndGetVerdict(vc_ae2); + + vc_ae2.start(f_cse_notifyProcedure_timeSeriesNotificationHandler(v_contentNotification)); + + f_aeSimu_checkComponentDoneAndGetVerdict(vc_ae2); - v_contentResponse.timeSeries := mw_contentTimeSeries_rc1; - v_contentResponse.timeSeries.missingDataCurrentNr := 0; - - tc_ac.start; - alt { - [] mcaPort.receive(mw_response(mw_responsePrimitive(int2000, v_contentResponse))){ - tc_ac.stop; - setverdict(pass, __SCOPE__ & ": Response OK for retrieving. MissingDataCurrentNr has been restarted"); - } - [] mcaPort.receive(mw_response(mw_responsePrimitiveOK(v_contentResponse))){ - tc_ac.stop; - setverdict(fail, __SCOPE__ & ": Wrong response status code"); - } - [] mcaPort.receive(mw_response(mw_responsePrimitiveOK)){ - tc_ac.stop; - setverdict(fail, __SCOPE__ & ": Error, resource elements provided not matching expected resource elements"); - } - [] mcaPort.receive(mw_response(mw_responsePrimitiveKO)){ - tc_ac.stop; - setverdict(fail, __SCOPE__ & ": Error while retrieving resource"); - } - [] tc_ac.timeout { - setverdict(fail, __SCOPE__ & ": No answer while retrieving resource"); - } - } - //Postamble f_cse_postamble_deleteResources();