xref: /aosp_15_r20/external/cronet/net/third_party/quiche/src/quiche/spdy/core/array_output_buffer_test.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 // Copyright 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 "quiche/spdy/core/array_output_buffer.h"
6 
7 #include <cstdint>
8 #include <cstring>
9 
10 #include "quiche/common/platform/api/quiche_test.h"
11 
12 namespace spdy {
13 namespace test {
14 
15 // This test verifies that ArrayOutputBuffer is initialized properly.
TEST(ArrayOutputBufferTest,InitializedFromArray)16 TEST(ArrayOutputBufferTest, InitializedFromArray) {
17   char array[100];
18   ArrayOutputBuffer buffer(array, sizeof(array));
19   EXPECT_EQ(sizeof(array), buffer.BytesFree());
20   EXPECT_EQ(0u, buffer.Size());
21   EXPECT_EQ(array, buffer.Begin());
22 }
23 
24 // This test verifies that Reset() causes an ArrayOutputBuffer's capacity and
25 // size to be reset to the initial state.
TEST(ArrayOutputBufferTest,WriteAndReset)26 TEST(ArrayOutputBufferTest, WriteAndReset) {
27   char array[100];
28   ArrayOutputBuffer buffer(array, sizeof(array));
29 
30   // Let's write some bytes.
31   char* dst;
32   int size;
33   buffer.Next(&dst, &size);
34   ASSERT_GT(size, 1);
35   ASSERT_NE(nullptr, dst);
36   const int64_t written = size / 2;
37   memset(dst, 'x', written);
38   buffer.AdvanceWritePtr(written);
39 
40   // The buffer should be partially used.
41   EXPECT_EQ(static_cast<uint64_t>(size) - written, buffer.BytesFree());
42   EXPECT_EQ(static_cast<uint64_t>(written), buffer.Size());
43 
44   buffer.Reset();
45 
46   // After a reset, the buffer should regain its full capacity.
47   EXPECT_EQ(sizeof(array), buffer.BytesFree());
48   EXPECT_EQ(0u, buffer.Size());
49 }
50 
51 }  // namespace test
52 }  // namespace spdy
53