Skip to content

Commit 8961c4c

Browse files
committed
Merge pull request pocoproject#195 from syvex/RemoteSyslogChannelReset
Allow RemoteSyslogChannel to be used again after being closed.
2 parents 36025cc + 7f17255 commit 8961c4c

3 files changed

Lines changed: 47 additions & 1 deletion

File tree

‎Net/src/RemoteSyslogChannel.cpp‎

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,10 @@ RemoteSyslogChannel::~RemoteSyslogChannel()
8888
void RemoteSyslogChannel::open()
8989
{
9090
if (_open) return;
91-
91+
92+
// reset socket for the case that it has been previously closed
93+
_socket = DatagramSocket();
94+
9295
if (_logHost.find(':') != std::string::npos)
9396
_socketAddress = SocketAddress(_logHost);
9497
else
@@ -105,6 +108,8 @@ void RemoteSyslogChannel::open()
105108
_host = _socket.address().host().toString();
106109
}
107110
}
111+
112+
_open = true;
108113
}
109114

110115

‎Net/testsuite/src/SyslogTest.cpp‎

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,45 @@ void SyslogTest::testListener()
167167
}
168168

169169

170+
void SyslogTest::testChannelOpenClose()
171+
{
172+
Poco::AutoPtr<RemoteSyslogChannel> channel = new RemoteSyslogChannel();
173+
channel->setProperty("loghost", "localhost:51400");
174+
channel->open();
175+
Poco::AutoPtr<RemoteSyslogListener> listener = new RemoteSyslogListener(51400);
176+
listener->open();
177+
CachingChannel cl;
178+
listener->addChannel(&cl);
179+
180+
assert (cl.getCurrentSize() == 0);
181+
Poco::Message msg1("source1", "message1", Poco::Message::PRIO_CRITICAL);
182+
channel->log(msg1);
183+
Poco::Thread::sleep(1000);
184+
assert (cl.getCurrentSize() == 1);
185+
186+
channel->close(); // close and re-open channel
187+
channel->open();
188+
189+
Poco::Message msg2("source2", "message2", Poco::Message::PRIO_ERROR);
190+
channel->log(msg2);
191+
Poco::Thread::sleep(1000);
192+
assert (cl.getCurrentSize() == 2);
193+
194+
listener->close();
195+
std::vector<Poco::Message> msgs;
196+
cl.getMessages(msgs, 0, 10);
197+
assert (msgs.size() == 2);
198+
199+
assert (msgs[1].getSource() == "source1");
200+
assert (msgs[1].getText() == "message1");
201+
assert (msgs[1].getPriority() == Poco::Message::PRIO_CRITICAL);
202+
203+
assert (msgs[0].getSource() == "source2");
204+
assert (msgs[0].getText() == "message2");
205+
assert (msgs[0].getPriority() == Poco::Message::PRIO_ERROR);
206+
}
207+
208+
170209
void SyslogTest::testOldBSD()
171210
{
172211
Poco::AutoPtr<RemoteSyslogChannel> channel = new RemoteSyslogChannel();
@@ -209,6 +248,7 @@ CppUnit::Test* SyslogTest::suite()
209248
CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("SyslogTest");
210249

211250
CppUnit_addTest(pSuite, SyslogTest, testListener);
251+
CppUnit_addTest(pSuite, SyslogTest, testChannelOpenClose);
212252
CppUnit_addTest(pSuite, SyslogTest, testOldBSD);
213253

214254
return pSuite;

‎Net/testsuite/src/SyslogTest.h‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ class SyslogTest: public CppUnit::TestCase
4747
~SyslogTest();
4848

4949
void testListener();
50+
void testChannelOpenClose();
5051
void testOldBSD();
5152

5253
void setUp();

0 commit comments

Comments
 (0)