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);
}
Exemple #2
0
void
metisDispatcher_StartTimer(MetisDispatcher *dispatcher, PARCEventTimer *timerEvent, struct timeval *delay)
{
    assertNotNull(dispatcher, "Parameter dispatcher must be non-null");
    assertNotNull(timerEvent, "Parameter timerEvent must be non-null");
    int failure = parcEventTimer_Start(timerEvent, delay);
    assertFalse(failure < 0, "Error starting timer event %p: (%d) %s", (void *) timerEvent, errno, strerror(errno));
}
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);
}