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.
git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@1005159 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/lib/cpp/test/TransportTest.cpp b/lib/cpp/test/TransportTest.cpp
index baaf2bd..49e9754 100644
--- a/lib/cpp/test/TransportTest.cpp
+++ b/lib/cpp/test/TransportTest.cpp
@@ -128,10 +128,10 @@
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 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;
+};
+
+/**
+ * Helper template class for creating coupled transports that wrap
+ * another transport.
+ */
+template <class WrapperTransport_, class InnerCoupledTransports_>
+class CoupledWrapperTransportsT : public CoupledTransports<WrapperTransport_> {
+ public:
+ CoupledWrapperTransportsT() {
+ if (inner_.in) {
+ this->in.reset(new WrapperTransport_(inner_.in));
+ }
+ if (inner_.out) {
+ this->out.reset(new WrapperTransport_(inner_.out));
+ }
+ }
+
+ InnerCoupledTransports_ inner_;
};
/**
* Coupled TBufferedTransports.
- *
- * Uses a TMemoryBuffer as the underlying transport.
*/
-class CoupledBufferedTransports :
- public CoupledTransports<TBufferedTransport> {
- public:
- CoupledBufferedTransports() :
- buf(new TMemoryBuffer) {
- in = new TBufferedTransport(buf);
- out = new TBufferedTransport(buf);
- }
-
- ~CoupledBufferedTransports() {
- delete in;
- delete out;
- }
-
- boost::shared_ptr<TMemoryBuffer> buf;
+template <class InnerTransport_>
+class CoupledBufferedTransportsT :
+ public CoupledWrapperTransportsT<TBufferedTransport, InnerTransport_> {
};
+typedef CoupledBufferedTransportsT<CoupledMemoryBuffers>
+ CoupledBufferedTransports;
+
/**
* Coupled TFramedTransports.
- *
- * Uses a TMemoryBuffer as the underlying transport.
*/
-class CoupledFramedTransports : public CoupledTransports<TFramedTransport> {
- public:
- CoupledFramedTransports() :
- buf(new TMemoryBuffer) {
- in = new TFramedTransport(buf);
- out = new TFramedTransport(buf);
- }
-
- ~CoupledFramedTransports() {
- delete in;
- delete out;
- }
-
- boost::shared_ptr<TMemoryBuffer> buf;
+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 @@
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 @@
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 @@
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 @@
* 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__); \
+ 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)
-#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__); \
- } 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 @@
* although we tweak the parameters in some places.
*/
- // Buffered transport tests
- BUFFER_TESTS(CoupledMemoryBuffers)
- BUFFER_TESTS(CoupledBufferedTransports)
- BUFFER_TESTS(CoupledFramedTransports)
+ // 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(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);
+ 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 @@
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: