xref: /aosp_15_r20/external/cronet/net/third_party/quiche/src/quiche/common/quiche_mem_slice_storage_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/common/quiche_mem_slice_storage.h"
6 
7 #include "quiche/common/platform/api/quiche_test.h"
8 #include "quiche/common/simple_buffer_allocator.h"
9 
10 namespace quiche {
11 namespace test {
12 namespace {
13 
14 class QuicheMemSliceStorageImplTest : public QuicheTest {
15  public:
16   QuicheMemSliceStorageImplTest() = default;
17 };
18 
TEST_F(QuicheMemSliceStorageImplTest,EmptyIov)19 TEST_F(QuicheMemSliceStorageImplTest, EmptyIov) {
20   QuicheMemSliceStorage storage(nullptr, 0, nullptr, 1024);
21   EXPECT_TRUE(storage.ToSpan().empty());
22 }
23 
TEST_F(QuicheMemSliceStorageImplTest,SingleIov)24 TEST_F(QuicheMemSliceStorageImplTest, SingleIov) {
25   SimpleBufferAllocator allocator;
26   std::string body(3, 'c');
27   struct iovec iov = {const_cast<char*>(body.data()), body.length()};
28   QuicheMemSliceStorage storage(&iov, 1, &allocator, 1024);
29   auto span = storage.ToSpan();
30   EXPECT_EQ("ccc", span[0].AsStringView());
31   EXPECT_NE(static_cast<const void*>(span[0].data()), body.data());
32 }
33 
TEST_F(QuicheMemSliceStorageImplTest,MultipleIovInSingleSlice)34 TEST_F(QuicheMemSliceStorageImplTest, MultipleIovInSingleSlice) {
35   SimpleBufferAllocator allocator;
36   std::string body1(3, 'a');
37   std::string body2(4, 'b');
38   struct iovec iov[] = {{const_cast<char*>(body1.data()), body1.length()},
39                         {const_cast<char*>(body2.data()), body2.length()}};
40 
41   QuicheMemSliceStorage storage(iov, 2, &allocator, 1024);
42   auto span = storage.ToSpan();
43   EXPECT_EQ("aaabbbb", span[0].AsStringView());
44 }
45 
TEST_F(QuicheMemSliceStorageImplTest,MultipleIovInMultipleSlice)46 TEST_F(QuicheMemSliceStorageImplTest, MultipleIovInMultipleSlice) {
47   SimpleBufferAllocator allocator;
48   std::string body1(4, 'a');
49   std::string body2(4, 'b');
50   struct iovec iov[] = {{const_cast<char*>(body1.data()), body1.length()},
51                         {const_cast<char*>(body2.data()), body2.length()}};
52 
53   QuicheMemSliceStorage storage(iov, 2, &allocator, 4);
54   auto span = storage.ToSpan();
55   EXPECT_EQ("aaaa", span[0].AsStringView());
56   EXPECT_EQ("bbbb", span[1].AsStringView());
57 }
58 
59 }  // namespace
60 }  // namespace test
61 }  // namespace quiche
62