@@ -82,17 +82,17 @@ namespace
8282
8383 AtomicCounter TestUDPHandler::errors;
8484
85- template <typename S >
86- bool server (int handlerCount, int reps, int port = 0 )
85+ template <typename SRVT, typename CLTT, typename HNDLRT >
86+ bool server (int handlerCount, int reps, int port)
8787 {
8888 Poco::Net::UDPHandler::List handlers;
8989 for (int i = 0 ; i < handlerCount; ++i)
90- handlers.push_back (new TestUDPHandler ());
90+ handlers.push_back (new HNDLRT ());
9191
92- S server (handlers, Poco::Net::SocketAddress (" 127.0.0.1" , port));
92+ SRVT server (handlers, Poco::Net::SocketAddress (" 127.0.0.1" , port));
9393 Poco::Thread::sleep (100 );
9494
95- Poco::Net::UDPClient client (" 127.0.0.1" , server.port (), true );
95+ CLTT client (" 127.0.0.1" , server.port (), true );
9696 Poco::Thread::sleep (10 );
9797
9898 std::vector<std::string> data;
@@ -112,7 +112,7 @@ namespace
112112 << " , sent: " << sent << std::endl;
113113 return false ;
114114 }
115- Poco::Thread::sleep (10 );
115+ Poco::Thread::sleep (5 );
116116 data.clear ();
117117 }
118118 }
@@ -126,7 +126,7 @@ namespace
126126 Poco::Thread::sleep (10 );
127127 for (const auto & h: handlers)
128128 {
129- count += dynamic_cast <const TestUDPHandler &>(*h).counter .value ();
129+ count += dynamic_cast <const HNDLRT &>(*h).counter .value ();
130130 errCount += count / 10 ;
131131 }
132132 } while (count < i);
@@ -138,7 +138,7 @@ namespace
138138 }
139139 for (const auto & he: handlers)
140140 {
141- const auto &h = dynamic_cast <const TestUDPHandler &>(*he);
141+ const auto &h = dynamic_cast <const HNDLRT &>(*he);
142142 count = h.counter .value ();
143143 errCount = h.errCounter .value ();
144144 if (errCount < count / 10 )
@@ -170,11 +170,42 @@ UDPServerTest::~UDPServerTest()
170170}
171171
172172
173- void UDPServerTest::testServer ()
173+ void UDPServerTest::testUDPSingleSocket ()
174174{
175+ TestUDPHandler::errors = 0 ;
175176 int msgs = 10000 ;
176- assertTrue (server<Poco::Net::UDPServer>(1 , msgs));
177- assertTrue (server<Poco::Net::UDPMultiServer>(10 , msgs, 22080 ));
177+ auto tf = server<Poco::Net::UDPServer, Poco::Net::UDPClient, TestUDPHandler>;
178+ assertTrue ( tf (1 , msgs, 0 ) );
179+ assertTrue (TestUDPHandler::errors == 0 );
180+ }
181+
182+
183+ void UDPServerTest::testUDPMultiSocket ()
184+ {
185+ TestUDPHandler::errors = 0 ;
186+ int msgs = 10000 ;
187+ auto tf = server<Poco::Net::UDPMultiServer, Poco::Net::UDPClient, TestUDPHandler>;
188+ assertTrue ( tf (1 , msgs, 22080 ) );
189+ assertTrue (TestUDPHandler::errors == 0 );
190+ }
191+
192+
193+ void UDPServerTest::testUDPSingleSocketMultipleHandlers ()
194+ {
195+ TestUDPHandler::errors = 0 ;
196+ int msgs = 10000 ;
197+ auto tf = server<Poco::Net::UDPServer, Poco::Net::UDPClient, TestUDPHandler>;
198+ assertTrue ( tf (10 , msgs, 0 ) );
199+ assertTrue (TestUDPHandler::errors == 0 );
200+ }
201+
202+
203+ void UDPServerTest::testUDPMultiSocketMultipleHandlers ()
204+ {
205+ TestUDPHandler::errors = 0 ;
206+ int msgs = 10000 ;
207+ auto tf = server<Poco::Net::UDPMultiServer, Poco::Net::UDPClient, TestUDPHandler>;
208+ assertTrue ( tf (10 , msgs, 22080 ) );
178209 assertTrue (TestUDPHandler::errors == 0 );
179210}
180211
@@ -193,7 +224,10 @@ CppUnit::Test* UDPServerTest::suite()
193224{
194225 CppUnit::TestSuite* pSuite = new CppUnit::TestSuite (" UDPServerTest" );
195226
196- CppUnit_addTest (pSuite, UDPServerTest, testServer);
227+ CppUnit_addTest (pSuite, UDPServerTest, testUDPSingleSocket);
228+ CppUnit_addTest (pSuite, UDPServerTest, testUDPMultiSocket);
229+ CppUnit_addTest (pSuite, UDPServerTest, testUDPSingleSocketMultipleHandlers);
230+ CppUnit_addTest (pSuite, UDPServerTest, testUDPMultiSocketMultipleHandlers);
197231
198232 return pSuite;
199233}
0 commit comments