summaryrefslogtreecommitdiff
path: root/AudioManagerUtilities/test/AmSocketHandlerTest/CAmSocketHandlerTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'AudioManagerUtilities/test/AmSocketHandlerTest/CAmSocketHandlerTest.cpp')
-rw-r--r--AudioManagerUtilities/test/AmSocketHandlerTest/CAmSocketHandlerTest.cpp116
1 files changed, 75 insertions, 41 deletions
diff --git a/AudioManagerUtilities/test/AmSocketHandlerTest/CAmSocketHandlerTest.cpp b/AudioManagerUtilities/test/AmSocketHandlerTest/CAmSocketHandlerTest.cpp
index af21f90..ecd38fe 100644
--- a/AudioManagerUtilities/test/AmSocketHandlerTest/CAmSocketHandlerTest.cpp
+++ b/AudioManagerUtilities/test/AmSocketHandlerTest/CAmSocketHandlerTest.cpp
@@ -48,6 +48,22 @@ static const char * TEST_SOCKET_DATA_FINAL = "finish!";
static const std::chrono::time_point<std::chrono::high_resolution_clock> TP_ZERO;
+
+MockIAmSignalHandler *pMockSignalHandler = NULL;
+static void signalHandler(int sig, siginfo_t *siginfo, void *context)
+{
+ (void) sig;
+ (void) siginfo;
+ (void) context;
+
+ if(pMockSignalHandler!=NULL)
+ pMockSignalHandler->signalHandler(sig, siginfo, context);
+
+#ifdef ENABLED_SOCKETHANDLER_TEST_OUTPUT
+ std::cout<<"signal handler was called with signal " << sig << std::endl;
+#endif
+}
+
CAmSocketHandlerTest::CAmSocketHandlerTest()
{
}
@@ -227,7 +243,7 @@ TEST(CAmSocketHandlerTest, timersOneshot)
#ifndef WITH_TIMERFD
ASSERT_EQ(handle, 1);
#else
- ASSERT_EQ(handle, 3);
+ ASSERT_EQ(handle, 2);
#endif
EXPECT_CALL(testCallback1,timerCallback(handle,&userData)).Times(1);
@@ -240,7 +256,7 @@ TEST(CAmSocketHandlerTest, timersOneshot)
#ifndef WITH_TIMERFD
ASSERT_EQ(handle, 2);
#else
- ASSERT_EQ(handle, 4);
+ ASSERT_EQ(handle, 3);
#endif
EXPECT_CALL(testCallback4,timerCallback(handle,NULL)).Times(1);
myHandler.start_listenting();
@@ -269,7 +285,7 @@ TEST(CAmSocketHandlerTest, timersStop)
#ifndef WITH_TIMERFD
ASSERT_EQ(handle, 1);
#else
- ASSERT_EQ(handle, 3);
+ ASSERT_EQ(handle, 2);
#endif
EXPECT_CALL(testCallback1,timerCallback(handle,&userData)).Times(4);
@@ -282,7 +298,7 @@ TEST(CAmSocketHandlerTest, timersStop)
#ifndef WITH_TIMERFD
ASSERT_EQ(handle, 2);
#else
- ASSERT_EQ(handle, 4);
+ ASSERT_EQ(handle, 3);
#endif
EXPECT_CALL(testCallback4,timerCallback(handle,NULL)).Times(1);
myHandler.start_listenting();
@@ -312,7 +328,7 @@ TEST(CAmSocketHandlerTest, timersGeneral)
#ifndef WITH_TIMERFD
ASSERT_EQ(handle, 1);
#else
- ASSERT_EQ(handle, 3);
+ ASSERT_EQ(handle, 2);
#endif
EXPECT_CALL(testCallback1,timerCallback(handle,&userData)).Times(4); //+1 because of measurment
@@ -325,7 +341,7 @@ TEST(CAmSocketHandlerTest, timersGeneral)
#ifndef WITH_TIMERFD
ASSERT_EQ(handle, 2);
#else
- ASSERT_EQ(handle, 4);
+ ASSERT_EQ(handle, 3);
#endif
EXPECT_CALL(testCallback4,timerCallback(handle,NULL)).Times(1);
myHandler.start_listenting();
@@ -356,7 +372,7 @@ TEST(CAmSocketHandlerTest,playWithTimers)
#ifndef WITH_TIMERFD
ASSERT_EQ(handle, 1);
#else
- ASSERT_EQ(handle, 3);
+ ASSERT_EQ(handle, 2);
#endif
EXPECT_CALL(testCallback1,timerCallback(handle,NULL)).Times(AnyNumber());
@@ -364,7 +380,7 @@ TEST(CAmSocketHandlerTest,playWithTimers)
#ifndef WITH_TIMERFD
ASSERT_EQ(handle, 2);
#else
- ASSERT_EQ(handle, 4);
+ ASSERT_EQ(handle, 3);
#endif
EXPECT_CALL(testCallback2,timerCallback(handle,NULL)).Times(AnyNumber());
@@ -372,7 +388,7 @@ TEST(CAmSocketHandlerTest,playWithTimers)
#ifndef WITH_TIMERFD
ASSERT_EQ(handle, 3);
#else
- ASSERT_EQ(handle, 5);
+ ASSERT_EQ(handle, 4);
#endif
EXPECT_CALL(testCallback3,timerCallback(handle,NULL)).Times(2); //+1 because of measurment
@@ -380,64 +396,82 @@ TEST(CAmSocketHandlerTest,playWithTimers)
#ifndef WITH_TIMERFD
ASSERT_EQ(handle, 4);
#else
- ASSERT_EQ(handle, 6);
+ ASSERT_EQ(handle, 5);
#endif
EXPECT_CALL(testCallback4,timerCallback(handle,NULL)).Times(1);
myHandler.start_listenting();
}
-TEST(CAmSocketHandlerTest, signalHandler)
+
+
+TEST(CAmSocketHandlerTest, signalHandlerPrimaryPlusSecondary)
{
+ pMockSignalHandler = new MockIAmSignalHandler;
CAmSocketHandler myHandler;
ASSERT_FALSE(myHandler.fatalErrorOccurred());
+ ASSERT_TRUE(myHandler.listenToSignals({SIGHUP})==E_OK);
+ ASSERT_TRUE(myHandler.listenToSignals({SIGHUP, SIGTERM, SIGCHLD})==E_OK);
sh_pollHandle_t signalHandler1, signalHandler2;
- MockIAmSignalHandler mock;
+
std::string userData = "User data";
- myHandler.addSignalHandler([&](const sh_pollHandle_t handle, const signalfd_siginfo & info, void* userData)
- {
- unsigned sig = info.ssi_signo;
- mock.signalHandlerAction(handle, sig, userData);
+
+// critical signals are registered here:
+ struct sigaction signalAction;
+ memset(&signalAction, '\0', sizeof(signalAction));
+ signalAction.sa_sigaction = &signalHandler;
+ signalAction.sa_flags = SA_RESETHAND | SA_NODEFER| SA_SIGINFO;
+ sigaction(SIGINT, &signalAction, NULL);
+ sigaction(SIGQUIT, &signalAction, NULL);
+
+ myHandler.addSignalHandler([&](const sh_pollHandle_t handle, const signalfd_siginfo & info, void* userData)
+ {
+ unsigned sig = info.ssi_signo;
+ pMockSignalHandler->signalHandlerAction(handle, sig, userData);
#ifdef ENABLED_SOCKETHANDLER_TEST_OUTPUT
- unsigned user = info.ssi_uid;
- std::cout<<"signal handler was called from user "<< user << " with signal " << sig << std::endl;
+ unsigned user = info.ssi_uid;
+ std::cout<<"signal handler was called from user "<< user << " with signal " << sig << std::endl;
#endif
- }, signalHandler1, &userData);
- ASSERT_EQ(signalHandler1, 1);
- myHandler.addSignalHandler([&](const sh_pollHandle_t handle, const signalfd_siginfo & info, void* userData)
- {
- unsigned sig = info.ssi_signo;
- mock.signalHandlerAction(handle, sig, userData);
- #ifdef ENABLED_SOCKETHANDLER_TEST_OUTPUT
- unsigned user = info.ssi_uid;
- std::cout<<"signal handler was called from user "<< user << " with signal " << sig << std::endl;
- #endif
- }, signalHandler2, &userData);
- ASSERT_EQ(signalHandler2, 2);
+ }, signalHandler1, &userData);
+ ASSERT_EQ(signalHandler1, 1);
+ myHandler.addSignalHandler([&](const sh_pollHandle_t handle, const signalfd_siginfo & info, void* userData)
+ {
+ unsigned sig = info.ssi_signo;
+ pMockSignalHandler->signalHandlerAction(handle, sig, userData);
+#ifdef ENABLED_SOCKETHANDLER_TEST_OUTPUT
+ unsigned user = info.ssi_uid;
+ std::cout<<"signal handler was called from user "<< user << " with signal " << sig << std::endl;
+#endif
+ }, signalHandler2, &userData);
+ ASSERT_EQ(signalHandler2, 2);
timespec timeout4;
timeout4.tv_nsec = 200000000;
timeout4.tv_sec = 0;
- std::set<unsigned> signals;
- signals.insert(SIGHUP);
- signals.insert(SIGINT);
- signals.insert(SIGTERM);
- signals.insert(SIGQUIT);
+ std::set<unsigned> secondarySignals;
+ secondarySignals.insert({SIGHUP,SIGTERM, SIGCHLD});
+ std::set<unsigned> primarySignals({SIGQUIT,SIGINT});
+ std::set<unsigned> signals(primarySignals);
+ signals.insert(secondarySignals.begin(), secondarySignals.end());
CAmTimerSignalHandler testCallback4(&myHandler, timeout4, signals);
sh_timerHandle_t handle;
myHandler.addTimer(timeout4, &testCallback4.pTimerCallback, handle, NULL, true);
#ifndef WITH_TIMERFD
- ASSERT_EQ(handle, 1);
+ ASSERT_EQ(handle, 1);
#else
- ASSERT_EQ(handle, 3);
+ ASSERT_EQ(handle, 3);
#endif
EXPECT_CALL(testCallback4,timerCallback(handle,NULL)).Times(signals.size()+1);
- for(auto it: signals)
- EXPECT_CALL(mock,signalHandlerAction(signalHandler1,it,&userData)).Times(1);
- for(auto it: signals)
- EXPECT_CALL(mock,signalHandlerAction(signalHandler2,it,&userData)).Times(1);
+ for(auto it: secondarySignals)
+ EXPECT_CALL(*pMockSignalHandler,signalHandlerAction(signalHandler1,it,&userData)).Times(1);
+ for(auto it: secondarySignals)
+ EXPECT_CALL(*pMockSignalHandler,signalHandlerAction(signalHandler2,it,&userData)).Times(1);
+ for(auto it: primarySignals)
+ EXPECT_CALL(*pMockSignalHandler,signalHandler(it,_,_)).Times(1);
+
myHandler.start_listenting();
+ delete pMockSignalHandler;
}
TEST(CAmSocketHandlerTest,playWithUNIXSockets)