thrift/test/TPipedTransportTest.cpp
David Reiss 28f298dd5d Memory-based transport rewrite.
The old implementations of the memory-based transports (TBufferedTransport,
TFramedTransport, and TMemoryBuffer) shared very little code and all worked
a bit differently.  This change unifies them all as subclasses of a single
base (TBufferBase) which handles the fast-path operations (when requests
can be satisfied by the buffer) with inline methods (that will eventually
be made nonvirtual in the template branch) and calls out to pure-virutal
methods to handle full/empty buffers.  All of the buffer-management is now
done in terms of "base and bound" pointers rather than "pos" integers.

These classes were moved to TBufferTransports.{h,cpp}.  The .h is included
in TTransportUtils for backwards compatibility.

Also added a "TShortReadTransport" to assist testing transports.


git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@665676 13f79535-47bb-0310-9956-ffa450edef68
2008-05-01 06:17:36 +00:00

36 lines
1.0 KiB
C++

#include <cstdlib>
#include <stdexcept>
#include <Thrift.h>
#include <transport/TTransportUtils.h>
#include <transport/TBufferTransports.h>
using namespace std;
using boost::shared_ptr;
using facebook::thrift::transport::TTransportException;
using facebook::thrift::transport::TPipedTransport;
using facebook::thrift::transport::TMemoryBuffer;
int main() {
shared_ptr<TMemoryBuffer> underlying(new TMemoryBuffer);
shared_ptr<TMemoryBuffer> pipe(new TMemoryBuffer);
shared_ptr<TPipedTransport> trans(new TPipedTransport(underlying, pipe));
uint8_t buffer[4];
underlying->write((uint8_t*)"abcd", 4);
trans->readAll(buffer, 2);
assert( string((char*)buffer, 2) == "ab" );
trans->readEnd();
assert( pipe->getBufferAsString() == "ab" );
pipe->resetBuffer();
underlying->write((uint8_t*)"ef", 2);
trans->readAll(buffer, 2);
assert( string((char*)buffer, 2) == "cd" );
trans->readAll(buffer, 2);
assert( string((char*)buffer, 2) == "ef" );
trans->readEnd();
assert( pipe->getBufferAsString() == "cdef" );
return 0;
}