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>
This commit is contained in:
Laurent Pinchart 2019-01-23 10:16:26 +02:00
parent d32dc0c1c8
commit 83c73c39c5
2 changed files with 78 additions and 4 deletions

73
test/event-dispatcher.cpp Normal file
View file

@ -0,0 +1,73 @@
/* 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)

View file

@ -6,6 +6,7 @@ subdir('v4l2_device')
public_tests = [ public_tests = [
['event', 'event.cpp'], ['event', 'event.cpp'],
['event-dispatcher', 'event-dispatcher.cpp'],
['list-cameras', 'list-cameras.cpp'], ['list-cameras', 'list-cameras.cpp'],
['signal', 'signal.cpp'], ['signal', 'signal.cpp'],
['timer', 'timer.cpp'], ['timer', 'timer.cpp'],