libcamera/test/event-dispatcher.cpp
Laurent Pinchart 83c73c39c5 tests: Test event dispatcher interruption by signal
Add a test to verify that the event dispatcher correctly restarts event
processing when interrupted by a signal. The test currently fails as
this feature isn't implemented.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
2019-01-23 18:51:56 +02:00

73 lines
1.4 KiB
C++

/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
* Copyright (C) 2019, Google Inc.
*
* event-dispatcher.cpp - Event dispatcher test
*/
#include <iostream>
#include <signal.h>
#include <sys/time.h>
#include <libcamera/camera_manager.h>
#include <libcamera/event_dispatcher.h>
#include <libcamera/timer.h>
#include "test.h"
using namespace std;
using namespace libcamera;
class EventDispatcherTest : public Test
{
protected:
static void sigAlarmHandler(int)
{
cout << "SIGALARM received" << endl;
}
int init()
{
struct sigaction sa = {};
sa.sa_handler = &sigAlarmHandler;
sigaction(SIGALRM, &sa, nullptr);
return 0;
}
int run()
{
EventDispatcher *dispatcher = CameraManager::instance()->eventDispatcher();
Timer timer;
/* Event processing interruption by signal. */
struct timespec start;
clock_gettime(CLOCK_MONOTONIC, &start);
timer.start(1000);
struct itimerval itimer = {};
itimer.it_value.tv_usec = 500000;
setitimer(ITIMER_REAL, &itimer, nullptr);
dispatcher->processEvents();
struct timespec stop;
clock_gettime(CLOCK_MONOTONIC, &stop);
int duration = (stop.tv_sec - start.tv_sec) * 1000;
duration += (stop.tv_nsec - start.tv_nsec) / 1000000;
if (abs(duration - 1000) > 50) {
cout << "Event processing restart test failed" << endl;
return TestFail;
}
return TestPass;
}
void cleanup()
{
}
};
TEST_REGISTER(EventDispatcherTest)