1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one
3  * or more contributor license agreements. See the NOTICE file
4  * distributed with this work for additional information
5  * regarding copyright ownership. The ASF licenses this file
6  * to you under the Apache License, Version 2.0 (the
7  * "License"); you may not use this file except in compliance
8  * with the License. You may obtain a copy of the License at
9  *
10  *   http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing,
13  * software distributed under the License is distributed on an
14  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15  * KIND, either express or implied. See the License for the
16  * specific language governing permissions and limitations
17  * under the License.
18  */
19 
20 #include <thrift/Thrift.h>
21 #include <memory>
22 #include <thrift/transport/TTransportUtils.h>
23 #include <thrift/transport/TBufferTransports.h>
24 
25 #define BOOST_TEST_MODULE TPipedTransportTest
26 #include <boost/test/unit_test.hpp>
27 
28 using apache::thrift::transport::TTransportException;
29 using apache::thrift::transport::TPipedTransport;
30 using apache::thrift::transport::TMemoryBuffer;
31 using namespace apache::thrift;
32 
BOOST_AUTO_TEST_CASE(test_read_write)33 BOOST_AUTO_TEST_CASE(test_read_write) {
34   std::shared_ptr<TMemoryBuffer> underlying(new TMemoryBuffer);
35   std::shared_ptr<TMemoryBuffer> pipe(new TMemoryBuffer);
36   std::shared_ptr<TPipedTransport> trans(new TPipedTransport(underlying, pipe));
37 
38   uint8_t buffer[4];
39 
40   underlying->write((uint8_t*)"abcd", 4);
41   trans->readAll(buffer, 2);
42   BOOST_CHECK(std::string((char*)buffer, 2) == "ab");
43   trans->readEnd();
44   BOOST_CHECK(pipe->getBufferAsString() == "ab");
45   pipe->resetBuffer();
46   underlying->write((uint8_t*)"ef", 2);
47   trans->readAll(buffer, 2);
48   BOOST_CHECK(std::string((char*)buffer, 2) == "cd");
49   trans->readAll(buffer, 2);
50   BOOST_CHECK(std::string((char*)buffer, 2) == "ef");
51   trans->readEnd();
52   BOOST_CHECK(pipe->getBufferAsString() == "cdef");
53 }
54