From d4788dfd4ae1bd04a78dc611855f70eb97355af3 Mon Sep 17 00:00:00 2001 From: David Reiss Date: Wed, 6 Oct 2010 17:10:37 +0000 Subject: [PATCH] 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 --- lib/cpp/test/TransportTest.cpp | 196 +++++++++++++++------------------ 1 file changed, 88 insertions(+), 108 deletions(-) diff --git a/lib/cpp/test/TransportTest.cpp b/lib/cpp/test/TransportTest.cpp index baaf2bd9..49e97541 100644 --- a/lib/cpp/test/TransportTest.cpp +++ b/lib/cpp/test/TransportTest.cpp @@ -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 in; + boost::shared_ptr out; private: CoupledTransports(const CoupledTransports&); @@ -143,76 +143,67 @@ class CoupledTransports { */ class CoupledMemoryBuffers : public CoupledTransports { public: - CoupledMemoryBuffers() { - in = &buf; - out = &buf; + CoupledMemoryBuffers() : + buf(new TMemoryBuffer) { + in = buf; + out = buf; } - TMemoryBuffer buf; + boost::shared_ptr 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 { +template +class CoupledWrapperTransportsT : public CoupledTransports { 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 buf; + InnerCoupledTransports_ inner_; }; /** - * Coupled TFramedTransports. - * - * Uses a TMemoryBuffer as the underlying transport. + * Coupled TBufferedTransports. */ -class CoupledFramedTransports : public CoupledTransports { - public: - CoupledFramedTransports() : - buf(new TMemoryBuffer) { - in = new TFramedTransport(buf); - out = new TFramedTransport(buf); - } +template +class CoupledBufferedTransportsT : + public CoupledWrapperTransportsT { +}; - ~CoupledFramedTransports() { - delete in; - delete out; - } +typedef CoupledBufferedTransportsT + CoupledBufferedTransports; - boost::shared_ptr buf; +/** + * Coupled TFramedTransports. + */ +template +class CoupledFramedTransportsT : + public CoupledWrapperTransportsT { }; +typedef CoupledFramedTransportsT + CoupledFramedTransports; + /** * Coupled TZlibTransports. */ -class CoupledZlibTransports : public CoupledTransports { - public: - CoupledZlibTransports() : - buf(new TMemoryBuffer) { - in = new TZlibTransport(buf); - out = new TZlibTransport(buf); - } - - ~CoupledZlibTransports() { - delete in; - delete out; - } - - boost::shared_ptr buf; +template +class CoupledZlibTransportsT : + public CoupledWrapperTransportsT { }; +typedef CoupledZlibTransportsT + CoupledZlibTransports; + /** * Coupled TFDTransports. */ @@ -225,13 +216,8 @@ class CoupledFDTransports : public CoupledTransports { 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 CoupledTransports { 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 CoupledTransports { 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(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 >( \ - BOOST_STRINGIZE(CoupledTTransports), \ - 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 >( \ - BOOST_STRINGIZE(CoupledBufferBases), \ - totalSize, ## __VA_ARGS__); \ + ADD_TEST(CoupledTTransports, \ + totalSize, ## __VA_ARGS__); \ + /* Test wrapping the transport with TBufferedTransport */ \ + ADD_TEST(CoupledBufferedTransportsT, \ + totalSize, ## __VA_ARGS__); \ + /* Test wrapping the transport with TFramedTransports */ \ + ADD_TEST(CoupledFramedTransportsT, \ + totalSize, ## __VA_ARGS__); \ + /* Test wrapping the transport with TZlibTransport */ \ + ADD_TEST(CoupledZlibTransportsT, \ + 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) + // 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 @@ 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, + 1024*1024, rand4k, rand4k, rand4k, rand4k); + ADD_TEST(CoupledBufferBases, + 1024*1024, rand4k, rand4k, rand4k, rand4k); + ADD_TEST(CoupledTTransports, + 1024*1024, rand4k, rand4k, rand4k, rand4k); + ADD_TEST(CoupledBufferBases, + 1024*1024, rand4k, rand4k, rand4k, rand4k); + + // Test using TZlibTransport via a TTransport pointer + ADD_TEST(CoupledTTransports, + 1024*1024, rand4k, rand4k, rand4k, rand4k); } private: -- 2.17.1