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