LONGBOW_TEST_CASE(Global, parc_EventScheduler_Dispatch) { _callback_event_called = 0; PARCEventScheduler *parcEventScheduler = parcEventScheduler_Create(); assertNotNull(parcEventScheduler, "parcEventScheduler_Create returned a null reference"); PARCEventTimer *parcEvent = parcEventTimer_Create(parcEventScheduler, 0, _event_callback, (void *) &_callback_event_called); assertNotNull(parcEvent, "parcEventTimer_Create returned a null reference"); struct timeval fs = { 0, 1 }; parcEventTimer_Start(parcEvent, &fs); // This will block until the event is processed parcEventScheduler_DispatchBlocking(parcEventScheduler); assertTrue(_callback_event_called == 1, "Timer event never called back"); // Start the timer struct timeval longerfs = { 1, 0 }; // 1s parcEventTimer_Start(parcEvent, &longerfs); parcEventScheduler_DispatchNonBlocking(parcEventScheduler); assertTrue(_callback_event_called == 1, "Timer event called again prematurely"); usleep(2000000); // 2s parcEventScheduler_DispatchNonBlocking(parcEventScheduler); assertTrue(_callback_event_called == 2, "Timer event never called back"); parcEventTimer_Destroy(&parcEvent); parcEventScheduler_Destroy(&parcEventScheduler); }
void metisDispatcher_DestroyTimerEvent(MetisDispatcher *dispatcher, PARCEventTimer **eventPtr) { assertNotNull(dispatcher, "Parameter dispatcher must be non-null"); assertNotNull(eventPtr, "Parameter eventPtr must be non-null double pointer"); assertNotNull(*eventPtr, "Paramter eventPtr must dereference to non-null pointer"); parcEventTimer_Destroy(eventPtr); eventPtr = NULL; }
LONGBOW_TEST_CASE(Global, parc_EventScheduler_Abort) { PARCEventScheduler *parcEventScheduler = parcEventScheduler_Create(); assertNotNull(parcEventScheduler, "parcEventScheduler_Create returned a null reference"); PARCEventTimer *parcEvent = parcEventTimer_Create(parcEventScheduler, PARCEventType_Persist, _abort_callback, parcEventScheduler); assertNotNull(parcEvent, "parcEventTimer_Create returned a null reference"); struct timeval fs = { 1, 0 }; parcEventTimer_Start(parcEvent, &fs); parcEventScheduler_Start(parcEventScheduler, PARCEventSchedulerDispatchType_Blocking); parcEventTimer_Destroy(&parcEvent); parcEventScheduler_Destroy(&parcEventScheduler); }
LONGBOW_TEST_CASE(Global, parc_EventScheduler_Run) { _callback_event_called = 0; PARCEventScheduler *parcEventScheduler = parcEventScheduler_Create(); assertNotNull(parcEventScheduler, "parcEventScheduler_Create returned a null reference"); PARCEventTimer *parcEvent = parcEventTimer_Create(parcEventScheduler, 0, _event_callback, (void *) &_callback_event_called); assertNotNull(parcEvent, "parcEventTimer_Create returned a null reference"); struct timeval fs = { 0, 1 }; parcEventTimer_Start(parcEvent, &fs); parcEventScheduler_Start(parcEventScheduler, PARCEventSchedulerDispatchType_Blocking); assertTrue(_callback_event_called == 1, "Timer event never called back"); parcEventTimer_Destroy(&parcEvent); parcEventScheduler_Destroy(&parcEventScheduler); }
LONGBOW_TEST_CASE(Global, parc_EventScheduler_Stop) { _callback_event_called = 0; // Create a new scheduler PARCEventScheduler *parcEventScheduler = parcEventScheduler_Create(); assertNotNull(parcEventScheduler, "parcEventScheduler_Create returned a null reference"); // Create a persistent event which will repeat until stopped PARCEventTimer *parcEvent = parcEventTimer_Create(parcEventScheduler, PARCEventType_Persist, _stop_callback, parcEventScheduler); assertNotNull(parcEvent, "parcEventTimer_Create returned a null reference"); struct timeval fs = { 1, 0 }; parcEventTimer_Start(parcEvent, &fs); parcEventScheduler_Start(parcEventScheduler, PARCEventSchedulerDispatchType_Blocking); assertTrue(_callback_event_called == 1, "Timer event never called back"); parcEventTimer_Destroy(&parcEvent); parcEventScheduler_Destroy(&parcEventScheduler); }