You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@thrift.apache.org by dr...@apache.org on 2010/10/06 19:10:38 UTC

svn commit: r1005159 - /incubator/thrift/trunk/lib/cpp/test/TransportTest.cpp

Author: dreiss
Date: Wed Oct  6 17:10:37 2010
New Revision: 1005159

URL: http://svn.apache.org/viewvc?rev=1005159&view=rev
Log:
THRIFT-929. cpp: Test wrapper transports more thoroughly

UpdateS TransportTest so that the wrapper transports
(TBufferedTransport, TFramedTransport, TZlibTransport) are tested with a
wider variety of inner transports.  Previously they were only tested
using TMemoryBuffer.  Now all other transports are also tested wrapped
inside each of these transports.

Modified:
    incubator/thrift/trunk/lib/cpp/test/TransportTest.cpp

Modified: incubator/thrift/trunk/lib/cpp/test/TransportTest.cpp
URL: http://svn.apache.org/viewvc/incubator/thrift/trunk/lib/cpp/test/TransportTest.cpp?rev=1005159&r1=1005158&r2=1005159&view=diff
==============================================================================
--- incubator/thrift/trunk/lib/cpp/test/TransportTest.cpp (original)
+++ incubator/thrift/trunk/lib/cpp/test/TransportTest.cpp Wed Oct  6 17:10:37 2010
@@ -128,10 +128,10 @@ class CoupledTransports {
  public:
   typedef Transport_ TransportType;
 
-  CoupledTransports() : in(NULL), out(NULL) {}
+  CoupledTransports() : in(), out() {}
 
-  Transport_* in;
-  Transport_* out;
+  boost::shared_ptr<Transport_> in;
+  boost::shared_ptr<Transport_> out;
 
  private:
   CoupledTransports(const CoupledTransports&);
@@ -143,76 +143,67 @@ class CoupledTransports {
  */
 class CoupledMemoryBuffers : public CoupledTransports<TMemoryBuffer> {
  public:
-  CoupledMemoryBuffers() {
-    in = &buf;
-    out = &buf;
+  CoupledMemoryBuffers() :
+    buf(new TMemoryBuffer) {
+    in = buf;
+    out = buf;
   }
 
-  TMemoryBuffer buf;
+  boost::shared_ptr<TMemoryBuffer> buf;
 };
 
 /**
- * Coupled TBufferedTransports.
- *
- * Uses a TMemoryBuffer as the underlying transport.
+ * Helper template class for creating coupled transports that wrap
+ * another transport.
  */
-class CoupledBufferedTransports :
-  public CoupledTransports<TBufferedTransport> {
+template <class WrapperTransport_, class InnerCoupledTransports_>
+class CoupledWrapperTransportsT : public CoupledTransports<WrapperTransport_> {
  public:
-  CoupledBufferedTransports() :
-    buf(new TMemoryBuffer) {
-    in = new TBufferedTransport(buf);
-    out = new TBufferedTransport(buf);
-  }
-
-  ~CoupledBufferedTransports() {
-    delete in;
-    delete out;
+  CoupledWrapperTransportsT() {
+    if (inner_.in) {
+      this->in.reset(new WrapperTransport_(inner_.in));
+    }
+    if (inner_.out) {
+      this->out.reset(new WrapperTransport_(inner_.out));
+    }
   }
 
-  boost::shared_ptr<TMemoryBuffer> buf;
+  InnerCoupledTransports_ inner_;
 };
 
 /**
- * Coupled TFramedTransports.
- *
- * Uses a TMemoryBuffer as the underlying transport.
+ * Coupled TBufferedTransports.
  */
-class CoupledFramedTransports : public CoupledTransports<TFramedTransport> {
- public:
-  CoupledFramedTransports() :
-    buf(new TMemoryBuffer) {
-    in = new TFramedTransport(buf);
-    out = new TFramedTransport(buf);
-  }
+template <class InnerTransport_>
+class CoupledBufferedTransportsT :
+  public CoupledWrapperTransportsT<TBufferedTransport, InnerTransport_> {
+};
 
-  ~CoupledFramedTransports() {
-    delete in;
-    delete out;
-  }
+typedef CoupledBufferedTransportsT<CoupledMemoryBuffers>
+  CoupledBufferedTransports;
 
-  boost::shared_ptr<TMemoryBuffer> buf;
+/**
+ * Coupled TFramedTransports.
+ */
+template <class InnerTransport_>
+class CoupledFramedTransportsT :
+  public CoupledWrapperTransportsT<TFramedTransport, InnerTransport_> {
 };
 
+typedef CoupledFramedTransportsT<CoupledMemoryBuffers>
+  CoupledFramedTransports;
+
 /**
  * Coupled TZlibTransports.
  */
-class CoupledZlibTransports : public CoupledTransports<TZlibTransport> {
- public:
-  CoupledZlibTransports() :
-    buf(new TMemoryBuffer) {
-    in = new TZlibTransport(buf);
-    out = new TZlibTransport(buf);
-  }
-
-  ~CoupledZlibTransports() {
-    delete in;
-    delete out;
-  }
-
-  boost::shared_ptr<TMemoryBuffer> buf;
+template <class InnerTransport_>
+class CoupledZlibTransportsT :
+  public CoupledWrapperTransportsT<TZlibTransport, InnerTransport_> {
 };
 
+typedef CoupledZlibTransportsT<CoupledMemoryBuffers>
+  CoupledZlibTransports;
+
 /**
  * Coupled TFDTransports.
  */
@@ -225,13 +216,8 @@ class CoupledFDTransports : public Coupl
       return;
     }
 
-    in = new TFDTransport(pipes[0], TFDTransport::CLOSE_ON_DESTROY);
-    out = new TFDTransport(pipes[1], TFDTransport::CLOSE_ON_DESTROY);
-  }
-
-  ~CoupledFDTransports() {
-    delete in;
-    delete out;
+    in.reset(new TFDTransport(pipes[0], TFDTransport::CLOSE_ON_DESTROY));
+    out.reset(new TFDTransport(pipes[1], TFDTransport::CLOSE_ON_DESTROY));
   }
 };
 
@@ -246,8 +232,8 @@ class CoupledSocketTransports : public C
       return;
     }
 
-    in = new TSocket(sockets[0]);
-    out = new TSocket(sockets[1]);
+    in.reset(new TSocket(sockets[0]));
+    out.reset(new TSocket(sockets[1]));
   }
 };
 
@@ -267,14 +253,11 @@ class CoupledFileTransports : public Cou
       return;
     }
 
-    in = new TFileTransport(filename, true);
-    out = new TFileTransport(filename);
+    in.reset(new TFileTransport(filename, true));
+    out.reset(new TFileTransport(filename));
   }
 
   ~CoupledFileTransports() {
-    delete in;
-    delete out;
-
     if (fd >= 0) {
       close(fd);
       unlink(filename);
@@ -463,44 +446,31 @@ void test_rw(uint32_t totalSize,
  *   is compiler-dependent.  gcc returns mangled names.)
  **************************************************************************/
 
+#define ADD_TEST(CoupledTransports, totalSize, ...) \
+    addTest< CoupledTransports >(BOOST_STRINGIZE(CoupledTransports), \
+                                 totalSize, ## __VA_ARGS__);
+
 #define TEST_RW(CoupledTransports, totalSize, ...) \
   do { \
     /* Add the test as specified, to test the non-virtual function calls */ \
-    addTest<CoupledTransports>(BOOST_STRINGIZE(CoupledTransports), \
-                               totalSize, ## __VA_ARGS__); \
+    ADD_TEST(CoupledTransports, totalSize, ## __VA_ARGS__); \
     /* \
      * Also test using the transport as a TTransport*, to test \
      * the read_virt()/write_virt() calls \
      */ \
-    addTest< CoupledTTransports<CoupledTransports> >( \
-        BOOST_STRINGIZE(CoupledTTransports<CoupledTransports>), \
-                        totalSize, ## __VA_ARGS__); \
-  } while (0)
-
-#define TEST_RW_BUF(CoupledTransports, totalSize, ...) \
-  do { \
-    /* Add the standard tests */ \
-    TEST_RW(CoupledTransports, totalSize, ## __VA_ARGS__); \
-    /* Also test using the transport as a TBufferBase* */ \
-    addTest< CoupledBufferBases<CoupledTransports> >( \
-        BOOST_STRINGIZE(CoupledBufferBases<CoupledTransports>), \
-                        totalSize, ## __VA_ARGS__); \
+    ADD_TEST(CoupledTTransports<CoupledTransports>, \
+             totalSize, ## __VA_ARGS__); \
+    /* Test wrapping the transport with TBufferedTransport */ \
+    ADD_TEST(CoupledBufferedTransportsT<CoupledTransports>, \
+        totalSize, ## __VA_ARGS__); \
+    /* Test wrapping the transport with TFramedTransports */ \
+    ADD_TEST(CoupledFramedTransportsT<CoupledTransports>, \
+             totalSize, ## __VA_ARGS__); \
+    /* Test wrapping the transport with TZlibTransport */ \
+    ADD_TEST(CoupledZlibTransportsT<CoupledTransports>, \
+             totalSize, ## __VA_ARGS__); \
   } while (0)
 
-// We use the same tests for all of the buffered transports
-// This is a helper macro so we don't have to copy-and-paste them.
-#define BUFFER_TESTS(CoupledTransports) \
-  TEST_RW_BUF(CoupledTransports, 1024*1024, 0, 0); \
-  TEST_RW_BUF(CoupledTransports, 1024*256, rand4k, rand4k); \
-  TEST_RW_BUF(CoupledTransports, 1024*256, 167, 163); \
-  TEST_RW_BUF(CoupledTransports, 1024*16, 1, 1); \
-  \
-  TEST_RW_BUF(CoupledTransports, 1024*256, 0, 0, rand4k, rand4k); \
-  TEST_RW_BUF(CoupledTransports, 1024*256, \
-              rand4k, rand4k, rand4k, rand4k); \
-  TEST_RW_BUF(CoupledTransports, 1024*256, 167, 163, rand4k, rand4k); \
-  TEST_RW_BUF(CoupledTransports, 1024*16, 1, 1, rand4k, rand4k);
-
 class TransportTestGen {
  public:
   TransportTestGen(boost::unit_test::test_suite* suite,
@@ -516,21 +486,16 @@ class TransportTestGen {
      * although we tweak the parameters in some places.
      */
 
-    // Buffered transport tests
-    BUFFER_TESTS(CoupledMemoryBuffers)
-    BUFFER_TESTS(CoupledBufferedTransports)
-    BUFFER_TESTS(CoupledFramedTransports)
-
-    TEST_RW(CoupledZlibTransports, 1024*256, 0, 0);
-    TEST_RW(CoupledZlibTransports, 1024*256, rand4k, rand4k);
-    TEST_RW(CoupledZlibTransports, 1024*128, 167, 163);
-    TEST_RW(CoupledZlibTransports, 1024*2, 1, 1);
-
-    TEST_RW(CoupledZlibTransports, 1024*256, 0, 0, rand4k, rand4k);
-    TEST_RW(CoupledZlibTransports, 1024*256,
-            rand4k, rand4k, rand4k, rand4k);
-    TEST_RW(CoupledZlibTransports, 1024*128, 167, 163, rand4k, rand4k);
-    TEST_RW(CoupledZlibTransports, 1024*2, 1, 1, rand4k, rand4k);
+    // TMemoryBuffer tests
+    TEST_RW(CoupledMemoryBuffers, 1024*1024, 0, 0);
+    TEST_RW(CoupledMemoryBuffers, 1024*256, rand4k, rand4k);
+    TEST_RW(CoupledMemoryBuffers, 1024*256, 167, 163);
+    TEST_RW(CoupledMemoryBuffers, 1024*16, 1, 1);
+
+    TEST_RW(CoupledMemoryBuffers, 1024*256, 0, 0, rand4k, rand4k);
+    TEST_RW(CoupledMemoryBuffers, 1024*256, rand4k, rand4k, rand4k, rand4k);
+    TEST_RW(CoupledMemoryBuffers, 1024*256, 167, 163, rand4k, rand4k);
+    TEST_RW(CoupledMemoryBuffers, 1024*16, 1, 1, rand4k, rand4k);
 
     // TFDTransport tests
     // Since CoupledFDTransports tests with a pipe, writes will block
@@ -591,6 +556,21 @@ class TransportTestGen {
             rand4k, rand4k, rand4k, rand4k);
     TEST_RW(CoupledFileTransports, 1024*64, 167, 163, rand4k, rand4k);
     TEST_RW(CoupledFileTransports, 1024*2, 1, 1, rand4k, rand4k);
+
+    // Add some tests that access TBufferedTransport and TFramedTransport
+    // via TTransport pointers and TBufferBase pointers.
+    ADD_TEST(CoupledTTransports<CoupledBufferedTransports>,
+             1024*1024, rand4k, rand4k, rand4k, rand4k);
+    ADD_TEST(CoupledBufferBases<CoupledBufferedTransports>,
+             1024*1024, rand4k, rand4k, rand4k, rand4k);
+    ADD_TEST(CoupledTTransports<CoupledFramedTransports>,
+             1024*1024, rand4k, rand4k, rand4k, rand4k);
+    ADD_TEST(CoupledBufferBases<CoupledFramedTransports>,
+             1024*1024, rand4k, rand4k, rand4k, rand4k);
+
+    // Test using TZlibTransport via a TTransport pointer
+    ADD_TEST(CoupledTTransports<CoupledZlibTransports>,
+             1024*1024, rand4k, rand4k, rand4k, rand4k);
   }
 
  private: