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

Reply via email to