root/net/spdy/spdy_prefixed_buffer_reader_test.cc

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. Build
  2. TEST_F
  3. TEST_F
  4. TEST_F
  5. TEST_F
  6. TEST_F
  7. TEST_F
  8. TEST_F

// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "net/spdy/spdy_prefixed_buffer_reader.h"

#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace net {

namespace test {

using base::StringPiece;
using testing::ElementsAreArray;

class SpdyPrefixedBufferReaderTest : public ::testing::Test {
 protected:
  SpdyPrefixedBufferReader Build(std::string prefix, std::string suffix) {
    prefix_ = prefix;
    suffix_ = suffix;
    return SpdyPrefixedBufferReader(prefix_.data(), prefix_.length(),
                                    suffix_.data(), suffix_.length());
  }
  std::string prefix_, suffix_;
};

TEST_F(SpdyPrefixedBufferReaderTest, ReadRawFromPrefix) {
  SpdyPrefixedBufferReader reader = Build("foobar", "");
  EXPECT_EQ(6u, reader.Available());

  char buffer[] = "123456";
  EXPECT_FALSE(reader.ReadN(10, buffer));  // Not enough buffer.
  EXPECT_TRUE(reader.ReadN(6, buffer));
  EXPECT_THAT(buffer, ElementsAreArray("foobar"));
  EXPECT_EQ(0u, reader.Available());
}

TEST_F(SpdyPrefixedBufferReaderTest, ReadPieceFromPrefix) {
  SpdyPrefixedBufferReader reader = Build("foobar", "");
  EXPECT_EQ(6u, reader.Available());

  SpdyPinnableBufferPiece piece;
  EXPECT_FALSE(reader.ReadN(10, &piece));  // Not enough buffer.
  EXPECT_TRUE(reader.ReadN(6, &piece));
  EXPECT_FALSE(piece.IsPinned());
  EXPECT_EQ(StringPiece("foobar"), piece);
  EXPECT_EQ(0u, reader.Available());
}

TEST_F(SpdyPrefixedBufferReaderTest, ReadRawFromSuffix) {
  SpdyPrefixedBufferReader reader = Build("", "foobar");
  EXPECT_EQ(6u, reader.Available());

  char buffer[] = "123456";
  EXPECT_FALSE(reader.ReadN(10, buffer));  // Not enough buffer.
  EXPECT_TRUE(reader.ReadN(6, buffer));
  EXPECT_THAT(buffer, ElementsAreArray("foobar"));
  EXPECT_EQ(0u, reader.Available());
}

TEST_F(SpdyPrefixedBufferReaderTest, ReadPieceFromSuffix) {
  SpdyPrefixedBufferReader reader = Build("", "foobar");
  EXPECT_EQ(6u, reader.Available());

  SpdyPinnableBufferPiece piece;
  EXPECT_FALSE(reader.ReadN(10, &piece));  // Not enough buffer.
  EXPECT_TRUE(reader.ReadN(6, &piece));
  EXPECT_FALSE(piece.IsPinned());
  EXPECT_EQ(StringPiece("foobar"), piece);
  EXPECT_EQ(0u, reader.Available());
}

TEST_F(SpdyPrefixedBufferReaderTest, ReadRawSpanning) {
  SpdyPrefixedBufferReader reader = Build("foob", "ar");
  EXPECT_EQ(6u, reader.Available());

  char buffer[] = "123456";
  EXPECT_FALSE(reader.ReadN(10, buffer));  // Not enough buffer.
  EXPECT_TRUE(reader.ReadN(6, buffer));
  EXPECT_THAT(buffer, ElementsAreArray("foobar"));
  EXPECT_EQ(0u, reader.Available());
}

TEST_F(SpdyPrefixedBufferReaderTest, ReadPieceSpanning) {
  SpdyPrefixedBufferReader reader = Build("foob", "ar");
  EXPECT_EQ(6u, reader.Available());

  SpdyPinnableBufferPiece piece;
  EXPECT_FALSE(reader.ReadN(10, &piece));  // Not enough buffer.
  EXPECT_TRUE(reader.ReadN(6, &piece));
  EXPECT_TRUE(piece.IsPinned());
  EXPECT_EQ(StringPiece("foobar"), piece);
  EXPECT_EQ(0u, reader.Available());
}

TEST_F(SpdyPrefixedBufferReaderTest, ReadMixed) {
  SpdyPrefixedBufferReader reader = Build("abcdef", "hijkl");
  EXPECT_EQ(11u, reader.Available());

  char buffer[] = "1234";
  SpdyPinnableBufferPiece piece;

  EXPECT_TRUE(reader.ReadN(3, buffer));
  EXPECT_THAT(buffer, ElementsAreArray("abc4"));
  EXPECT_EQ(8u, reader.Available());

  EXPECT_TRUE(reader.ReadN(2, buffer));
  EXPECT_THAT(buffer, ElementsAreArray("dec4"));
  EXPECT_EQ(6u, reader.Available());

  EXPECT_TRUE(reader.ReadN(3, &piece));
  EXPECT_EQ(StringPiece("fhi"), piece);
  EXPECT_TRUE(piece.IsPinned());
  EXPECT_EQ(3u, reader.Available());

  EXPECT_TRUE(reader.ReadN(2, &piece));
  EXPECT_EQ(StringPiece("jk"), piece);
  EXPECT_FALSE(piece.IsPinned());
  EXPECT_EQ(1u, reader.Available());

  EXPECT_TRUE(reader.ReadN(1, buffer));
  EXPECT_THAT(buffer, ElementsAreArray("lec4"));
  EXPECT_EQ(0u, reader.Available());
}

}  // namespace test

}  // namespace net

/* [<][>][^][v][top][bottom][index][help] */