proxygen
TestUtil.cpp
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2018-present, Facebook, Inc.
3  * All rights reserved.
4  *
5  * This source code is licensed under the BSD-style license found in the
6  * LICENSE file in the root directory of this source tree.
7  */
8 
10 
12 
13 using namespace folly;
14 
15 namespace fizz {
16 namespace test {
17 
18 std::unique_ptr<folly::IOBuf> defaultCreator(size_t len, size_t) {
19  return IOBuf::create(len);
20 }
21 
22 // Converts the hex encoded string to an IOBuf.
23 std::unique_ptr<folly::IOBuf>
24 toIOBuf(std::string hexData, size_t headroom, size_t tailroom) {
25  std::string out;
26  CHECK(folly::unhexlify(hexData, out));
27  return folly::IOBuf::copyBuffer(out, headroom, tailroom);
28 }
29 
30 std::unique_ptr<IOBuf>
31 chunkIOBuf(std::unique_ptr<IOBuf> input, size_t chunks, BufCreator creator) {
32  if (!creator) {
33  creator = defaultCreator;
34  }
35  // create IOBuf chunks
36  size_t inputLen = input->computeChainDataLength();
37  size_t chunkLen = floor((double)inputLen / (double)chunks);
38  std::unique_ptr<IOBuf> chunked;
39 
40  for (size_t i = 0; i < chunks - 1; ++i) {
41  auto buf = creator(chunkLen, i);
42  buf->append(chunkLen);
43  if (!chunked) {
44  chunked = std::move(buf);
45  } else {
46  chunked->prependChain(std::move(buf));
47  }
48  }
49 
50  size_t remainLen = inputLen - (chunks - 1) * chunkLen;
51  auto remain = creator(remainLen, chunks - 1);
52  remain->append(remainLen);
53  chunked->prependChain(std::move(remain));
54 
56  *input, *chunked, [](uint8_t* out, const uint8_t* in, size_t len) {
57  memcpy(out, in, len);
58  });
59 
60  CHECK_EQ(chunks, chunked->countChainElements());
61  return chunked;
62 }
63 } // namespace test
64 } // namespace fizz
auto chunks
bool unhexlify(const InputString &input, OutputString &output)
Definition: String-inl.h:616
static std::unique_ptr< IOBuf > create(std::size_t capacity)
Definition: IOBuf.cpp:229
std::function< std::unique_ptr< folly::IOBuf >(size_t len, size_t bufNum)> BufCreator
Definition: TestUtil.h:20
std::unique_ptr< folly::IOBuf > toIOBuf(std::string hexData)
std::unique_ptr< folly::IOBuf > defaultCreator(size_t len, size_t)
Definition: TestUtil.cpp:18
constexpr detail::Map< Move > move
Definition: Base-inl.h:2567
—— Concurrent Priority Queue Implementation ——
Definition: AtomicBitSet.h:29
size_t countChainElements() const
Definition: IOBuf.cpp:493
void transformBuffer(const folly::IOBuf &in, folly::IOBuf &out, Func func)
Definition: IOBufUtil.h:38
Definition: Actions.h:16
void prependChain(std::unique_ptr< IOBuf > &&iobuf)
Definition: IOBuf.cpp:509
std::size_t computeChainDataLength() const
Definition: IOBuf.cpp:501
const char * string
Definition: Conv.cpp:212
constexpr To floor(std::chrono::duration< Rep, Period > const &d)
Definition: Chrono.h:114
static std::unique_ptr< IOBuf > copyBuffer(const void *buf, std::size_t size, std::size_t headroom=0, std::size_t minTailroom=0)
Definition: IOBuf.h:1587
Chunked chunked(const Container &container, int chunkSize=256)
Definition: Parallel.h:49
std::unique_ptr< IOBuf > chunkIOBuf(std::unique_ptr< IOBuf > input, size_t chunks, BufCreator creator)
Definition: TestUtil.cpp:31