From 6b082755f0cba0bb8469f5f262f01a4defce348d Mon Sep 17 00:00:00 2001 From: David Reiss Date: Mon, 30 Jun 2008 19:48:04 +0000 Subject: [PATCH] (THRIFT-61) Fix "make check" for the C++ library by not doing empty flushes. I changed the behavior of TFramedTransport when flush is called without writing any data to the transport. This broke the unit test, which was relying on a weird corner of TFramedTransport's behavior in order to do some stricter checking. I altered the unit test to never flush without writing and added a new test to verfy the "empty flush" behavior. git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@672881 13f79535-47bb-0310-9956-ffa450edef68 --- test/TBufferBaseTest.cpp | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/test/TBufferBaseTest.cpp b/test/TBufferBaseTest.cpp index acc3d4b4..cd394b2c 100644 --- a/test/TBufferBaseTest.cpp +++ b/test/TBufferBaseTest.cpp @@ -555,7 +555,7 @@ BOOST_AUTO_TEST_CASE( test_FramedTransport_Write_Read ) { write_offset += dist[d1][write_index]; flush_size += dist[d1][write_index]; write_index++; - if (rand()%prob == 0) { + if (flush_size > 0 && rand()%prob == 0) { flush_sizes.push_back(flush_size); flush_size = 0; trans.flush(); @@ -586,4 +586,35 @@ BOOST_AUTO_TEST_CASE( test_FramedTransport_Write_Read ) { } } +BOOST_AUTO_TEST_CASE( test_FramedTransport_Empty_Flush ) { + init_data(); + + string output1("\x00\x00\x00\x01""a", 5); + string output2("\x00\x00\x00\x01""a\x00\x00\x00\x02""bc", 11); + + shared_ptr buffer(new TMemoryBuffer()); + TFramedTransport trans(buffer); + + BOOST_CHECK_EQUAL(buffer->getBufferAsString(), ""); + trans.flush(); + BOOST_CHECK_EQUAL(buffer->getBufferAsString(), ""); + trans.flush(); + trans.flush(); + BOOST_CHECK_EQUAL(buffer->getBufferAsString(), ""); + trans.write((const uint8_t*)"a", 1); + BOOST_CHECK_EQUAL(buffer->getBufferAsString(), ""); + trans.flush(); + BOOST_CHECK_EQUAL(buffer->getBufferAsString(), output1); + trans.flush(); + trans.flush(); + BOOST_CHECK_EQUAL(buffer->getBufferAsString(), output1); + trans.write((const uint8_t*)"bc", 2); + BOOST_CHECK_EQUAL(buffer->getBufferAsString(), output1); + trans.flush(); + BOOST_CHECK_EQUAL(buffer->getBufferAsString(), output2); + trans.flush(); + trans.flush(); + BOOST_CHECK_EQUAL(buffer->getBufferAsString(), output2); +} + BOOST_AUTO_TEST_SUITE_END() -- 2.17.1