Subversion Repositories SmartDukaan

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
30 ashish 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
#ifndef _THRIFT_TRANSPORT_TSHORTREADTRANSPORT_H_
21
#define _THRIFT_TRANSPORT_TSHORTREADTRANSPORT_H_ 1
22
 
23
#include <cstdlib>
24
 
25
#include <transport/TTransport.h>
26
 
27
namespace apache { namespace thrift { namespace transport { namespace test {
28
 
29
/**
30
 * This class is only meant for testing.  It wraps another transport.
31
 * Calls to read are passed through with some probability.  Otherwise,
32
 * the read amount is randomly reduced before being passed through.
33
 *
34
 */
35
class TShortReadTransport : public TTransport {
36
 public:
37
  TShortReadTransport(boost::shared_ptr<TTransport> transport, double full_prob)
38
    : transport_(transport)
39
    , fullProb_(full_prob)
40
  {}
41
 
42
  bool isOpen() {
43
    return transport_->isOpen();
44
  }
45
 
46
  bool peek() {
47
    return transport_->peek();
48
  }
49
 
50
  void open() {
51
    transport_->open();
52
  }
53
 
54
  void close() {
55
    transport_->close();
56
  }
57
 
58
  uint32_t read(uint8_t* buf, uint32_t len) {
59
    if (len == 0) {
60
      return 0;
61
    }
62
 
63
    if (rand()/(double)RAND_MAX >= fullProb_) {
64
      len = 1 + rand()%len;
65
    }
66
    return transport_->read(buf, len);
67
  }
68
 
69
  void write(const uint8_t* buf, uint32_t len) {
70
    transport_->write(buf, len);
71
  }
72
 
73
  void flush() {
74
    transport_->flush();
75
  }
76
 
77
  const uint8_t* borrow(uint8_t* buf, uint32_t* len) {
78
    return transport_->borrow(buf, len);
79
  }
80
 
81
  void consume(uint32_t len) {
82
    return transport_->consume(len);
83
  }
84
 
85
  boost::shared_ptr<TTransport> getUnderlyingTransport() {
86
    return transport_;
87
  }
88
 
89
 protected:
90
  boost::shared_ptr<TTransport> transport_;
91
  double fullProb_;
92
};
93
 
94
}}}} // apache::thrift::transport::test
95
 
96
#endif // #ifndef _THRIFT_TRANSPORT_TSHORTREADTRANSPORT_H_