From 7ca5f9d8118b351fbc1f67da0b07c16164bd1c4d Mon Sep 17 00:00:00 2001 From: Anders Lindh Olsson Date: Fri, 30 May 2025 15:50:47 +0200 Subject: [PATCH 1/4] Exec testFail instead of exit(3) if channel is not connected --- test/src/testChannelMonitor.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/src/testChannelMonitor.cpp b/test/src/testChannelMonitor.cpp index 3d63278..f5aa891 100644 --- a/test/src/testChannelMonitor.cpp +++ b/test/src/testChannelMonitor.cpp @@ -171,7 +171,8 @@ class ChannelRequesterImpl : public ChannelRequester } else { cout << Channel::ConnectionStateNames[connectionState] << endl; - exit(3); + testFail("Channel did not reach CONNECTED state"); + event.signal(); // To ensure the test does not hang } } From f903316e70f1c4cb1802923cc2aa1ada6e062ef0 Mon Sep 17 00:00:00 2001 From: Anders Lindh Olsson Date: Mon, 2 Jun 2025 10:49:19 +0200 Subject: [PATCH 2/4] Avoid exit() in channelStateChange; abort test cleanly if connection fails --- test/src/testChannelMonitor.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/test/src/testChannelMonitor.cpp b/test/src/testChannelMonitor.cpp index f5aa891..aa0bef5 100644 --- a/test/src/testChannelMonitor.cpp +++ b/test/src/testChannelMonitor.cpp @@ -138,6 +138,7 @@ class ChannelRequesterImpl : public ChannelRequester { private: Event event; + bool connected = false; public: @@ -167,18 +168,18 @@ class ChannelRequesterImpl : public ChannelRequester virtual void channelStateChange(const Channel::shared_pointer& /*channel*/, Channel::ConnectionState connectionState) { if (connectionState == Channel::CONNECTED) { - event.signal(); - } - else { + connected = true; + } else { cout << Channel::ConnectionStateNames[connectionState] << endl; - testFail("Channel did not reach CONNECTED state"); - event.signal(); // To ensure the test does not hang + connected = false; } + event.signal(); } bool waitUntilConnected(double timeOut) { - return event.wait(timeOut); + event.wait(timeOut); + return connected; } }; @@ -210,6 +211,9 @@ static void test() Channel::shared_pointer channel = provider->createChannel(recordName, channelRequesterImpl); bool channelConnected = channelRequesterImpl->waitUntilConnected(1.0); testOk1(channelConnected); + if (!channelConnected) { + testAbort("Channel did not reach CONNECTED state"); + } if (channelConnected) { string remoteAddress = channel->getRemoteAddress(); cout << "remote address: " << remoteAddress << endl; From e606c43e2b372dde7c4df8be799b5f97d227e0c2 Mon Sep 17 00:00:00 2001 From: Anders Lindh Olsson Date: Mon, 2 Jun 2025 10:50:00 +0200 Subject: [PATCH 3/4] Increase timeout from 1s to 2s To reduce the risk of timeout on heavily loaded machines. --- test/src/testChannelMonitor.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/src/testChannelMonitor.cpp b/test/src/testChannelMonitor.cpp index aa0bef5..fd6fa81 100644 --- a/test/src/testChannelMonitor.cpp +++ b/test/src/testChannelMonitor.cpp @@ -209,7 +209,7 @@ static void test() TR1::shared_ptr channelRequesterImpl(new ChannelRequesterImpl()); Channel::shared_pointer channel = provider->createChannel(recordName, channelRequesterImpl); - bool channelConnected = channelRequesterImpl->waitUntilConnected(1.0); + bool channelConnected = channelRequesterImpl->waitUntilConnected(2.0); testOk1(channelConnected); if (!channelConnected) { testAbort("Channel did not reach CONNECTED state"); @@ -223,7 +223,7 @@ static void test() PVStructure::shared_pointer pvRequest = CreateRequest::create()->createRequest(request); TR1::shared_ptr cmRequesterImpl(new ChannelMonitorRequesterImpl(channel->getChannelName())); Monitor::shared_pointer monitor = channel->createMonitor(cmRequesterImpl, pvRequest); - bool monitorConnected = cmRequesterImpl->waitUntilConnected(1.0); + bool monitorConnected = cmRequesterImpl->waitUntilConnected(2.0); testOk1(monitorConnected); Status status = monitor->start(); testOk1(status.isOK()); @@ -285,7 +285,7 @@ static void test() pvRequest = CreateRequest::create()->createRequest(request); cmRequesterImpl = TR1::shared_ptr(new ChannelMonitorRequesterImpl(channel->getChannelName())); monitor = channel->createMonitor(cmRequesterImpl, pvRequest); - monitorConnected = cmRequesterImpl->waitUntilConnected(1.0); + monitorConnected = cmRequesterImpl->waitUntilConnected(2.0); testOk1(monitorConnected); status = monitor->start(); testOk1(status.isOK()); From b58d792c61ab335fec63bf1a9ef95d6b4d97c9e1 Mon Sep 17 00:00:00 2001 From: Anders Lindh Olsson Date: Fri, 27 Jun 2025 15:55:56 +0200 Subject: [PATCH 4/4] Fix member initialisation for RTEMS compatibility --- test/src/testChannelMonitor.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/src/testChannelMonitor.cpp b/test/src/testChannelMonitor.cpp index fd6fa81..f43e003 100644 --- a/test/src/testChannelMonitor.cpp +++ b/test/src/testChannelMonitor.cpp @@ -138,9 +138,10 @@ class ChannelRequesterImpl : public ChannelRequester { private: Event event; - bool connected = false; + bool connected; public: + ChannelRequesterImpl() : connected(false) {} virtual string getRequesterName() {