OLD | NEW |
| (Empty) |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "net/spdy/spdy_prefixed_buffer_reader.h" | |
6 | |
7 #include "net/spdy/platform/api/spdy_string.h" | |
8 #include "net/spdy/platform/api/spdy_string_piece.h" | |
9 #include "testing/gmock/include/gmock/gmock.h" | |
10 #include "testing/gtest/include/gtest/gtest.h" | |
11 | |
12 namespace net { | |
13 | |
14 namespace test { | |
15 | |
16 using testing::ElementsAreArray; | |
17 | |
18 class SpdyPrefixedBufferReaderTest : public ::testing::Test { | |
19 protected: | |
20 SpdyPrefixedBufferReader Build(const SpdyString& prefix, | |
21 const SpdyString& suffix) { | |
22 prefix_ = prefix; | |
23 suffix_ = suffix; | |
24 return SpdyPrefixedBufferReader(prefix_.data(), prefix_.length(), | |
25 suffix_.data(), suffix_.length()); | |
26 } | |
27 SpdyString prefix_, suffix_; | |
28 }; | |
29 | |
30 TEST_F(SpdyPrefixedBufferReaderTest, ReadRawFromPrefix) { | |
31 SpdyPrefixedBufferReader reader = Build("foobar", ""); | |
32 EXPECT_EQ(6u, reader.Available()); | |
33 | |
34 char buffer[] = "123456"; | |
35 EXPECT_FALSE(reader.ReadN(10, buffer)); // Not enough buffer. | |
36 EXPECT_TRUE(reader.ReadN(6, buffer)); | |
37 EXPECT_THAT(buffer, ElementsAreArray("foobar")); | |
38 EXPECT_EQ(0u, reader.Available()); | |
39 } | |
40 | |
41 TEST_F(SpdyPrefixedBufferReaderTest, ReadPieceFromPrefix) { | |
42 SpdyPrefixedBufferReader reader = Build("foobar", ""); | |
43 EXPECT_EQ(6u, reader.Available()); | |
44 | |
45 SpdyPinnableBufferPiece piece; | |
46 EXPECT_FALSE(reader.ReadN(10, &piece)); // Not enough buffer. | |
47 EXPECT_TRUE(reader.ReadN(6, &piece)); | |
48 EXPECT_FALSE(piece.IsPinned()); | |
49 EXPECT_EQ(SpdyStringPiece("foobar"), SpdyStringPiece(piece)); | |
50 EXPECT_EQ(0u, reader.Available()); | |
51 } | |
52 | |
53 TEST_F(SpdyPrefixedBufferReaderTest, ReadRawFromSuffix) { | |
54 SpdyPrefixedBufferReader reader = Build("", "foobar"); | |
55 EXPECT_EQ(6u, reader.Available()); | |
56 | |
57 char buffer[] = "123456"; | |
58 EXPECT_FALSE(reader.ReadN(10, buffer)); // Not enough buffer. | |
59 EXPECT_TRUE(reader.ReadN(6, buffer)); | |
60 EXPECT_THAT(buffer, ElementsAreArray("foobar")); | |
61 EXPECT_EQ(0u, reader.Available()); | |
62 } | |
63 | |
64 TEST_F(SpdyPrefixedBufferReaderTest, ReadPieceFromSuffix) { | |
65 SpdyPrefixedBufferReader reader = Build("", "foobar"); | |
66 EXPECT_EQ(6u, reader.Available()); | |
67 | |
68 SpdyPinnableBufferPiece piece; | |
69 EXPECT_FALSE(reader.ReadN(10, &piece)); // Not enough buffer. | |
70 EXPECT_TRUE(reader.ReadN(6, &piece)); | |
71 EXPECT_FALSE(piece.IsPinned()); | |
72 EXPECT_EQ(SpdyStringPiece("foobar"), SpdyStringPiece(piece)); | |
73 EXPECT_EQ(0u, reader.Available()); | |
74 } | |
75 | |
76 TEST_F(SpdyPrefixedBufferReaderTest, ReadRawSpanning) { | |
77 SpdyPrefixedBufferReader reader = Build("foob", "ar"); | |
78 EXPECT_EQ(6u, reader.Available()); | |
79 | |
80 char buffer[] = "123456"; | |
81 EXPECT_FALSE(reader.ReadN(10, buffer)); // Not enough buffer. | |
82 EXPECT_TRUE(reader.ReadN(6, buffer)); | |
83 EXPECT_THAT(buffer, ElementsAreArray("foobar")); | |
84 EXPECT_EQ(0u, reader.Available()); | |
85 } | |
86 | |
87 TEST_F(SpdyPrefixedBufferReaderTest, ReadPieceSpanning) { | |
88 SpdyPrefixedBufferReader reader = Build("foob", "ar"); | |
89 EXPECT_EQ(6u, reader.Available()); | |
90 | |
91 SpdyPinnableBufferPiece piece; | |
92 EXPECT_FALSE(reader.ReadN(10, &piece)); // Not enough buffer. | |
93 EXPECT_TRUE(reader.ReadN(6, &piece)); | |
94 EXPECT_TRUE(piece.IsPinned()); | |
95 EXPECT_EQ(SpdyStringPiece("foobar"), SpdyStringPiece(piece)); | |
96 EXPECT_EQ(0u, reader.Available()); | |
97 } | |
98 | |
99 TEST_F(SpdyPrefixedBufferReaderTest, ReadMixed) { | |
100 SpdyPrefixedBufferReader reader = Build("abcdef", "hijkl"); | |
101 EXPECT_EQ(11u, reader.Available()); | |
102 | |
103 char buffer[] = "1234"; | |
104 SpdyPinnableBufferPiece piece; | |
105 | |
106 EXPECT_TRUE(reader.ReadN(3, buffer)); | |
107 EXPECT_THAT(buffer, ElementsAreArray("abc4")); | |
108 EXPECT_EQ(8u, reader.Available()); | |
109 | |
110 EXPECT_TRUE(reader.ReadN(2, buffer)); | |
111 EXPECT_THAT(buffer, ElementsAreArray("dec4")); | |
112 EXPECT_EQ(6u, reader.Available()); | |
113 | |
114 EXPECT_TRUE(reader.ReadN(3, &piece)); | |
115 EXPECT_EQ(SpdyStringPiece("fhi"), SpdyStringPiece(piece)); | |
116 EXPECT_TRUE(piece.IsPinned()); | |
117 EXPECT_EQ(3u, reader.Available()); | |
118 | |
119 EXPECT_TRUE(reader.ReadN(2, &piece)); | |
120 EXPECT_EQ(SpdyStringPiece("jk"), SpdyStringPiece(piece)); | |
121 EXPECT_FALSE(piece.IsPinned()); | |
122 EXPECT_EQ(1u, reader.Available()); | |
123 | |
124 EXPECT_TRUE(reader.ReadN(1, buffer)); | |
125 EXPECT_THAT(buffer, ElementsAreArray("lec4")); | |
126 EXPECT_EQ(0u, reader.Available()); | |
127 } | |
128 | |
129 } // namespace test | |
130 | |
131 } // namespace net | |
OLD | NEW |