From 00fc5d8dafe12b5fd8c98e7955c70389cd078496 Mon Sep 17 00:00:00 2001 From: Markus Kauppila <markus.kauppila@gmail.com> Date: Mon, 18 Jul 2011 15:25:54 +0300 Subject: [PATCH] Refactored a bit. --- test/test-automation/runner.c | 49 ++++++++++++++++++++++++++++------- 1 file changed, 39 insertions(+), 10 deletions(-) diff --git a/test/test-automation/runner.c b/test/test-automation/runner.c index ffd55c5b..ed6cf14b 100644 --- a/test/test-automation/runner.c +++ b/test/test-automation/runner.c @@ -131,6 +131,7 @@ TestCaseReference **QueryTestCaseReferences(void *library); TestCaseSetUpFp LoadTestSetUpFunction(void *suite); TestCaseTearDownFp LoadTestTearDownFunction(void *suite); CountFailedAssertsFp LoadCountFailedAssertsFunction(void *suite); +void KillHungTest(int signum); /*! Pointers to selected logger implementation */ @@ -573,6 +574,31 @@ LoadCountFailedAssertsFunction(void *suite) { } +/*! + * Set timeout for test. + * + * \param timeout Timeout interval in seconds! + * \param callback Function that will be called after timeout has elapsed + */ +void SetTestTimeout(int timeout, void (*callback)(int)) +{ +#if 0 + /* Note: + * SDL_Init(SDL_INIT_TIMER) should be successfully called before using this + */ + int timeoutInMilliseconds = timeout * 1000; + SDL_TimerID timerID = SDL_AddTimer(timeoutInMilliseconds, callback, 0x0); + if(timerID == NULL) { + fprintf(stderr, "Error: Creation of SDL timer failed.\n"); + fprintf(stderr, "%s\n", SDL_GetError()); + } +#else + signal(SIGALRM, callback); + alarm((unsigned int) timeout); +#endif +} + + /*! * Kills test that hungs. Test hungs when its execution * takes longer than timeout specified for it. @@ -585,7 +611,8 @@ LoadCountFailedAssertsFunction(void *suite) { * * \param signum */ -void KillHungTest(int signum) { +void KillHungTest(int signum) +{ exit(TEST_RESULT_KILLED); } @@ -598,7 +625,17 @@ void KillHungTest(int signum) { * \param test result */ int -RunTest(TestCase *testItem) { +RunTest(TestCase *testItem) +{ + if(testItem->timeout > 0) { + if(execute_inproc) { + Log("Test asked for timeout which is not supported.", time(0)); + } + else { + SetTestTimeout(testItem->timeout, KillHungTest); + } + } + testItem->initTestEnvironment(); if(testItem->testSetUp) { @@ -632,18 +669,10 @@ ExecuteTest(TestCase *testItem) { int retVal = -1; if(execute_inproc) { - if(testItem->timeout > 0) { - Log("Test asked for timeout which is not supported.", time(0)); - } retVal = RunTest(testItem); } else { int childpid = fork(); if(childpid == 0) { - if(testItem->timeout > 0) { - signal(SIGALRM, KillHungTest); - alarm((unsigned int) testItem->timeout); - } - exit(RunTest(testItem)); } else { int stat_lock = -1; -- 2.18.1