THRIFT-3626 Fix lib/cpp/test/TSocketInterruptTest.cpp to use ephemeral ports. Client: Test (C++) Patch: John Sirois
Instead of using a fixed port, use an ephemeral port to improve robustness and make way for parallelizability. This change has an undesirable amount of repeated code but this fact is not different from the prior so being a bit expedient here. Ideally setup of a `TServerSocket` listening on an ephemeral port would be DRYed up into a helper of some sort. This closes #857 Project: http://git-wip-us.apache.org/repos/asf/thrift/repo Commit: http://git-wip-us.apache.org/repos/asf/thrift/commit/9bd3530b Tree: http://git-wip-us.apache.org/repos/asf/thrift/tree/9bd3530b Diff: http://git-wip-us.apache.org/repos/asf/thrift/diff/9bd3530b Branch: refs/heads/master Commit: 9bd3530b977dd422c3deff73c4577b55f9c3d23c Parents: cab5600 Author: John Sirois <jsir...@apache.org> Authored: Fri Feb 12 21:07:49 2016 -0700 Committer: Nobuaki Sukegawa <ns...@apache.org> Committed: Sun Feb 14 22:47:19 2016 +0900 ---------------------------------------------------------------------- lib/cpp/test/TSocketInterruptTest.cpp | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/thrift/blob/9bd3530b/lib/cpp/test/TSocketInterruptTest.cpp ---------------------------------------------------------------------- diff --git a/lib/cpp/test/TSocketInterruptTest.cpp b/lib/cpp/test/TSocketInterruptTest.cpp index 02da3ee..27b89eb 100644 --- a/lib/cpp/test/TSocketInterruptTest.cpp +++ b/lib/cpp/test/TSocketInterruptTest.cpp @@ -26,14 +26,13 @@ #include <boost/thread/thread.hpp> #include <thrift/transport/TSocket.h> #include <thrift/transport/TServerSocket.h> -#include "TestPortFixture.h" using apache::thrift::transport::TServerSocket; using apache::thrift::transport::TSocket; using apache::thrift::transport::TTransport; using apache::thrift::transport::TTransportException; -BOOST_FIXTURE_TEST_SUITE(TSocketInterruptTest, TestPortFixture) +BOOST_AUTO_TEST_SUITE(TSocketInterruptTest) void readerWorker(boost::shared_ptr<TTransport> tt, uint32_t expectedResult) { uint8_t buf[4]; @@ -51,9 +50,10 @@ void readerWorkerMustThrow(boost::shared_ptr<TTransport> tt) { } BOOST_AUTO_TEST_CASE(test_interruptable_child_read) { - TServerSocket sock1("localhost", m_serverPort); + TServerSocket sock1("localhost", 0); sock1.listen(); - TSocket clientSock("localhost", m_serverPort); + int port = sock1.getPort(); + TSocket clientSock("localhost", port); clientSock.open(); boost::shared_ptr<TTransport> accepted = sock1.accept(); boost::thread readThread(boost::bind(readerWorkerMustThrow, accepted)); @@ -68,10 +68,11 @@ BOOST_AUTO_TEST_CASE(test_interruptable_child_read) { } BOOST_AUTO_TEST_CASE(test_non_interruptable_child_read) { - TServerSocket sock1("localhost", m_serverPort); + TServerSocket sock1("localhost", 0); sock1.setInterruptableChildren(false); // returns to pre-THRIFT-2441 behavior sock1.listen(); - TSocket clientSock("localhost", m_serverPort); + int port = sock1.getPort(); + TSocket clientSock("localhost", port); clientSock.open(); boost::shared_ptr<TTransport> accepted = sock1.accept(); boost::thread readThread(boost::bind(readerWorker, accepted, 0)); @@ -89,7 +90,7 @@ BOOST_AUTO_TEST_CASE(test_non_interruptable_child_read) { } BOOST_AUTO_TEST_CASE(test_cannot_change_after_listen) { - TServerSocket sock1("localhost", m_serverPort); + TServerSocket sock1("localhost", 0); sock1.listen(); BOOST_CHECK_THROW(sock1.setInterruptableChildren(false), std::logic_error); sock1.close(); @@ -100,9 +101,10 @@ void peekerWorker(boost::shared_ptr<TTransport> tt, bool expectedResult) { } BOOST_AUTO_TEST_CASE(test_interruptable_child_peek) { - TServerSocket sock1("localhost", m_serverPort); + TServerSocket sock1("localhost", 0); sock1.listen(); - TSocket clientSock("localhost", m_serverPort); + int port = sock1.getPort(); + TSocket clientSock("localhost", port); clientSock.open(); boost::shared_ptr<TTransport> accepted = sock1.accept(); // peek() will return false if child is interrupted @@ -118,10 +120,11 @@ BOOST_AUTO_TEST_CASE(test_interruptable_child_peek) { } BOOST_AUTO_TEST_CASE(test_non_interruptable_child_peek) { - TServerSocket sock1("localhost", m_serverPort); + TServerSocket sock1("localhost", 0); sock1.setInterruptableChildren(false); // returns to pre-THRIFT-2441 behavior sock1.listen(); - TSocket clientSock("localhost", m_serverPort); + int port = sock1.getPort(); + TSocket clientSock("localhost", port); clientSock.open(); boost::shared_ptr<TTransport> accepted = sock1.accept(); // peek() will return false when remote side is closed