cv.notify_all();
};
- // TODO: On timeout remove the callback
s.setNewPeerCallback(newPeerCallback);
if (!s.isStarted()) {
std::unique_lock<std::mutex> lock(mutex);
- BOOST_REQUIRE(cv.wait_for(lock, std::chrono::milliseconds(3 * TIMEOUT), [&peerFD]() {
+ BOOST_CHECK(cv.wait_for(lock, std::chrono::milliseconds(3 * TIMEOUT), [&peerFD]() {
return peerFD != 0;
}));
+ // Remove the callback
+ s.setNewPeerCallback(nullptr);
+ BOOST_REQUIRE(peerFD != 0);
return peerFD;
}
};
- // TODO: On timeout remove the callback
s.setNewPeerCallback(newPeerCallback);
s.setRemovedPeerCallback(std::bind(&IPCGSource::removeFD, ipcGSourcePtr, _1));
s.start(true);
c.start();
std::unique_lock<std::mutex> lock(mutex);
- BOOST_REQUIRE(cv.wait_for(lock, std::chrono::milliseconds(3 * TIMEOUT), [&peerFD]() {
+ BOOST_CHECK(cv.wait_for(lock, std::chrono::milliseconds(3 * TIMEOUT), [&peerFD]() {
return peerFD != 0;
}));
+ // remove the callback
+ s.setNewPeerCallback(nullptr);
+ BOOST_REQUIRE(peerFD != 0);
return std::make_pair(peerFD, ipcGSourcePtr);
}
peerFD = newFD;
cv.notify_all();
};
- // TODO: On timeout remove the callback
s.setNewPeerCallback(newPeerCallback);
if (!s.isStarted()) {
ipcGSourcePtr->attach();
std::unique_lock<std::mutex> lock(mutex);
- BOOST_REQUIRE(cv.wait_for(lock, std::chrono::milliseconds(3 * TIMEOUT), [&peerFD]() {
+ BOOST_CHECK(cv.wait_for(lock, std::chrono::milliseconds(3 * TIMEOUT), [&peerFD]() {
return peerFD != 0;
}));
+ // Remove the callback
+ s.setNewPeerCallback(nullptr);
+ BOOST_REQUIRE(peerFD != 0);
return std::make_pair(peerFD, ipcGSourcePtr);
}
BOOST_AUTO_TEST_CASE(AsyncClientToServiceEcho)
{
+ std::mutex mutex;
+ std::condition_variable cv;
+
+ std::shared_ptr<SendData> sentData(new SendData(34));
+ std::shared_ptr<SendData> recvData;
+
// Setup Service and Client
Service s(socketPath);
s.addMethodHandler<SendData, SendData>(1, echoCallback);
Client c(socketPath);
c.start();
- std::mutex mutex;
- std::condition_variable cv;
-
//Async call
- std::shared_ptr<SendData> sentData(new SendData(34));
- std::shared_ptr<SendData> recvData;
auto dataBack = [&cv, &recvData, &mutex](ipc::Status status, std::shared_ptr<SendData>& data) {
- BOOST_CHECK(status == ipc::Status::OK);
- std::unique_lock<std::mutex> lock(mutex);
- recvData = data;
+ if (status == ipc::Status::OK) {
+ std::unique_lock<std::mutex> lock(mutex);
+ recvData = data;
+ }
cv.notify_one();
};
c.callAsync<SendData, SendData>(1, sentData, dataBack);
// Wait for the response
std::unique_lock<std::mutex> lock(mutex);
- BOOST_CHECK(cv.wait_for(lock, std::chrono::milliseconds(TIMEOUT), [&recvData]() {
+ BOOST_REQUIRE(cv.wait_for(lock, std::chrono::milliseconds(TIMEOUT), [&recvData]() {
return static_cast<bool>(recvData);
}));
-
+ BOOST_REQUIRE(recvData);
BOOST_CHECK_EQUAL(recvData->intVal, sentData->intVal);
}
BOOST_AUTO_TEST_CASE(AsyncServiceToClientEcho)
{
+ std::shared_ptr<SendData> sentData(new SendData(56));
+ std::shared_ptr<SendData> recvData;
+
+ std::mutex mutex;
+ std::condition_variable cv;
+
Service s(socketPath);
Client c(socketPath);
c.addMethodHandler<SendData, SendData>(1, echoCallback);
FileDescriptor peerFD = connect(s, c);
// Async call
- std::shared_ptr<SendData> sentData(new SendData(56));
- std::shared_ptr<SendData> recvData;
-
- std::mutex mutex;
- std::condition_variable cv;
auto dataBack = [&cv, &recvData, &mutex](ipc::Status status, std::shared_ptr<SendData>& data) {
- BOOST_CHECK(status == ipc::Status::OK);
- std::unique_lock<std::mutex> lock(mutex);
- recvData = data;
+ if (status == ipc::Status::OK) {
+ std::unique_lock<std::mutex> lock(mutex);
+ recvData = data;
+ }
cv.notify_one();
};
// Wait for the response
std::unique_lock<std::mutex> lock(mutex);
- BOOST_CHECK(cv.wait_for(lock, std::chrono::milliseconds(TIMEOUT), [&recvData]() {
+ BOOST_REQUIRE(cv.wait_for(lock, std::chrono::milliseconds(TIMEOUT), [&recvData]() {
return recvData.get() != nullptr;
}));
+ BOOST_REQUIRE(recvData);
BOOST_CHECK_EQUAL(recvData->intVal, sentData->intVal);
}
s.addMethodHandler<SendData, ThrowOnAcceptData>(1, method);
s.start();
- Client c(socketPath);
- c.start();
-
std::mutex mutex;
std::condition_variable cv;
ipc::Status retStatus = ipc::Status::UNDEFINED;
+ Client c(socketPath);
+ c.start();
+
auto dataBack = [&cv, &retStatus, &mutex](ipc::Status status, std::shared_ptr<SendData>&) {
std::unique_lock<std::mutex> lock(mutex);
retStatus = status;
// Wait for the response
std::unique_lock<std::mutex> lock(mutex);
- BOOST_CHECK(cv.wait_for(lock, std::chrono::milliseconds(TIMEOUT), [&retStatus]() {
+ BOOST_REQUIRE(cv.wait_for(lock, std::chrono::milliseconds(TIMEOUT), [&retStatus]() {
return retStatus != ipc::Status::UNDEFINED;
}));
BOOST_AUTO_TEST_CASE(AddSignalInRuntime)
{
+ utils::Latch latchA;
+ utils::Latch latchB;
+
Service s(socketPath);
Client c(socketPath);
connect(s, c);
- utils::Latch latchA;
auto handlerA = [&latchA](const FileDescriptor, std::shared_ptr<SendData>&) {
latchA.set();
};
- utils::Latch latchB;
auto handlerB = [&latchB](const FileDescriptor, std::shared_ptr<SendData>&) {
latchB.set();
};
BOOST_AUTO_TEST_CASE(AddSignalOffline)
{
+ utils::Latch latchA;
+ utils::Latch latchB;
+
Service s(socketPath);
Client c(socketPath);
- utils::Latch latchA;
auto handlerA = [&latchA](const FileDescriptor, std::shared_ptr<SendData>&) {
latchA.set();
};
- utils::Latch latchB;
auto handlerB = [&latchB](const FileDescriptor, std::shared_ptr<SendData>&) {
latchB.set();
};
BOOST_AUTO_TEST_CASE(ServiceGSource)
{
- ScopedGlibLoop loop;
utils::Latch l;
+ ScopedGlibLoop loop;
+
auto signalHandler = [&l](const FileDescriptor, std::shared_ptr<SendData>&) {
l.set();
};
BOOST_AUTO_TEST_CASE(ClientGSource)
{
+ utils::Latch l;
ScopedGlibLoop loop;
- utils::Latch l;
auto signalHandler = [&l](const FileDescriptor, std::shared_ptr<SendData>&) {
l.set();
};