Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(215)

Side by Side Diff: net/quic/core/quic_stream_send_buffer_test.cc

Issue 2963763003: In QUIC, send data is copied to streams rather than frames. Protected by FLAGS_quic_reloadable_flag… (Closed)
Patch Set: Rebase Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/quic/core/quic_stream_send_buffer.cc ('k') | net/quic/core/quic_stream_test.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2017 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/quic/core/quic_stream_send_buffer.h"
6
7 #include "net/quic/core/quic_data_writer.h"
8 #include "net/quic/core/quic_simple_buffer_allocator.h"
9 #include "net/quic/core/quic_utils.h"
10 #include "net/quic/platform/api/quic_test.h"
11 #include "net/quic/test_tools/quic_test_utils.h"
12
13 namespace net {
14 namespace test {
15 namespace {
16
17 struct iovec MakeIovec(QuicStringPiece data) {
18 struct iovec iov = {const_cast<char*>(data.data()),
19 static_cast<size_t>(data.size())};
20 return iov;
21 }
22
23 class QuicStreamSendBufferTest : public QuicTest {
24 public:
25 QuicStreamSendBufferTest() : send_buffer_(&allocator_) {
26 EXPECT_EQ(0u, send_buffer_.size());
27 std::string data1(1536, 'a');
28 std::string data2(256, 'b');
29 std::string data3(2048, 'c');
30 struct iovec iov[3];
31 iov[0] = MakeIovec(QuicStringPiece(data1));
32 iov[1] = MakeIovec(QuicStringPiece(data2));
33 iov[2] = MakeIovec(QuicStringPiece(data3));
34 QuicIOVector quic_iov(iov, 3, 3840);
35
36 // Add all data.
37 send_buffer_.SaveStreamData(quic_iov, /*iov_offset=*/0, /*offset=*/0, 1024);
38 send_buffer_.SaveStreamData(quic_iov, /*iov_offset=*/1024,
39 /*offset=*/1024, 1024);
40 send_buffer_.SaveStreamData(quic_iov, /*iov_offset=*/2048,
41 /*offset=*/2048, 1024);
42 send_buffer_.SaveStreamData(quic_iov, /*iov_offset=*/3072,
43 /*offset=*/3072, 768);
44 EXPECT_EQ(4u, send_buffer_.size());
45 }
46
47 QuicStreamSendBuffer send_buffer_;
48 SimpleBufferAllocator allocator_;
49 };
50
51 TEST_F(QuicStreamSendBufferTest, CopyDataToBuffer) {
52 char buf[4000];
53 QuicDataWriter writer(4000, buf, Perspective::IS_CLIENT, HOST_BYTE_ORDER);
54 std::string copy1(1024, 'a');
55 std::string copy2 =
56 std::string(512, 'a') + std::string(256, 'b') + std::string(256, 'c');
57 std::string copy3(1024, 'c');
58 std::string copy4(768, 'c');
59
60 ASSERT_TRUE(send_buffer_.WriteStreamData(0, 1024, &writer));
61 EXPECT_EQ(copy1, QuicStringPiece(buf, 1024));
62 ASSERT_TRUE(send_buffer_.WriteStreamData(1024, 1024, &writer));
63 EXPECT_EQ(copy2, QuicStringPiece(buf + 1024, 1024));
64 ASSERT_TRUE(send_buffer_.WriteStreamData(2048, 1024, &writer));
65 EXPECT_EQ(copy3, QuicStringPiece(buf + 2048, 1024));
66 ASSERT_TRUE(send_buffer_.WriteStreamData(2048, 768, &writer));
67 EXPECT_EQ(copy4, QuicStringPiece(buf + 3072, 768));
68
69 // Test data piece across boundries.
70 QuicDataWriter writer2(4000, buf, Perspective::IS_CLIENT, HOST_BYTE_ORDER);
71 std::string copy5 =
72 std::string(536, 'a') + std::string(256, 'b') + std::string(232, 'c');
73 ASSERT_TRUE(send_buffer_.WriteStreamData(1000, 1024, &writer2));
74 EXPECT_EQ(copy5, QuicStringPiece(buf, 1024));
75 ASSERT_TRUE(send_buffer_.WriteStreamData(2500, 1024, &writer2));
76 EXPECT_EQ(copy3, QuicStringPiece(buf + 1024, 1024));
77
78 // Invalid data copy.
79 QuicDataWriter writer3(4000, buf, Perspective::IS_CLIENT, HOST_BYTE_ORDER);
80 EXPECT_FALSE(send_buffer_.WriteStreamData(3000, 1024, &writer3));
81 EXPECT_FALSE(send_buffer_.WriteStreamData(0, 4000, &writer3));
82 }
83
84 TEST_F(QuicStreamSendBufferTest, RemoveStreamFrame) {
85 send_buffer_.RemoveStreamFrame(1024, 1024);
86 EXPECT_EQ(4u, send_buffer_.size());
87 send_buffer_.RemoveStreamFrame(2048, 1024);
88 EXPECT_EQ(4u, send_buffer_.size());
89 send_buffer_.RemoveStreamFrame(0, 1024);
90 // Send buffer is cleaned up in order.
91 EXPECT_EQ(1u, send_buffer_.size());
92 send_buffer_.RemoveStreamFrame(3072, 768);
93 EXPECT_EQ(0u, send_buffer_.size());
94 }
95
96 TEST_F(QuicStreamSendBufferTest, RemoveStreamFrameAcrossBoundries) {
97 send_buffer_.RemoveStreamFrame(2024, 576);
98 EXPECT_EQ(4u, send_buffer_.size());
99 send_buffer_.RemoveStreamFrame(0, 1000);
100 EXPECT_EQ(4u, send_buffer_.size());
101 send_buffer_.RemoveStreamFrame(1000, 1024);
102 // Send buffer is cleaned up in order.
103 EXPECT_EQ(2u, send_buffer_.size());
104 send_buffer_.RemoveStreamFrame(2600, 1024);
105 EXPECT_EQ(1u, send_buffer_.size());
106 send_buffer_.RemoveStreamFrame(3624, 216);
107 EXPECT_EQ(0u, send_buffer_.size());
108 }
109
110 } // namespace
111 } // namespace test
112 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/core/quic_stream_send_buffer.cc ('k') | net/quic/core/quic_stream_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698