xref: /aosp_15_r20/external/cronet/net/base/upload_bytes_element_reader_unittest.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 // Copyright 2012 The Chromium Authors
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/base/upload_bytes_element_reader.h"
6 
7 #include <memory>
8 
9 #include "net/base/completion_once_callback.h"
10 #include "net/base/io_buffer.h"
11 #include "net/base/net_errors.h"
12 #include "net/test/gtest_util.h"
13 #include "testing/gmock/include/gmock/gmock.h"
14 #include "testing/gtest/include/gtest/gtest.h"
15 #include "testing/platform_test.h"
16 
17 using net::test::IsOk;
18 
19 namespace net {
20 
21 class UploadBytesElementReaderTest : public PlatformTest {
22  protected:
SetUp()23   void SetUp() override {
24     bytes_.assign({'1', '2', '3', 'a', 'b', 'c'});
25     reader_ =
26         std::make_unique<UploadBytesElementReader>(&bytes_[0], bytes_.size());
27     ASSERT_THAT(reader_->Init(CompletionOnceCallback()), IsOk());
28     EXPECT_EQ(bytes_.size(), reader_->GetContentLength());
29     EXPECT_EQ(bytes_.size(), reader_->BytesRemaining());
30     EXPECT_TRUE(reader_->IsInMemory());
31   }
32 
33   std::vector<char> bytes_;
34   std::unique_ptr<UploadElementReader> reader_;
35 };
36 
TEST_F(UploadBytesElementReaderTest,ReadPartially)37 TEST_F(UploadBytesElementReaderTest, ReadPartially) {
38   const size_t kHalfSize = bytes_.size() / 2;
39   std::vector<char> buf(kHalfSize);
40   auto wrapped_buffer = base::MakeRefCounted<WrappedIOBuffer>(buf);
41   EXPECT_EQ(static_cast<int>(buf.size()),
42             reader_->Read(wrapped_buffer.get(), buf.size(),
43                           CompletionOnceCallback()));
44   EXPECT_EQ(bytes_.size() - buf.size(), reader_->BytesRemaining());
45   bytes_.resize(kHalfSize);  // Resize to compare.
46   EXPECT_EQ(bytes_, buf);
47 }
48 
TEST_F(UploadBytesElementReaderTest,ReadAll)49 TEST_F(UploadBytesElementReaderTest, ReadAll) {
50   std::vector<char> buf(bytes_.size());
51   auto wrapped_buffer = base::MakeRefCounted<WrappedIOBuffer>(buf);
52   EXPECT_EQ(static_cast<int>(buf.size()),
53             reader_->Read(wrapped_buffer.get(), buf.size(),
54                           CompletionOnceCallback()));
55   EXPECT_EQ(0U, reader_->BytesRemaining());
56   EXPECT_EQ(bytes_, buf);
57   // Try to read again.
58   EXPECT_EQ(0, reader_->Read(wrapped_buffer.get(), buf.size(),
59                              CompletionOnceCallback()));
60 }
61 
TEST_F(UploadBytesElementReaderTest,ReadTooMuch)62 TEST_F(UploadBytesElementReaderTest, ReadTooMuch) {
63   const size_t kTooLargeSize = bytes_.size() * 2;
64   std::vector<char> buf(kTooLargeSize);
65   auto wrapped_buffer = base::MakeRefCounted<WrappedIOBuffer>(buf);
66   EXPECT_EQ(static_cast<int>(bytes_.size()),
67             reader_->Read(wrapped_buffer.get(), buf.size(),
68                           CompletionOnceCallback()));
69   EXPECT_EQ(0U, reader_->BytesRemaining());
70   buf.resize(bytes_.size());  // Resize to compare.
71   EXPECT_EQ(bytes_, buf);
72 }
73 
TEST_F(UploadBytesElementReaderTest,MultipleInit)74 TEST_F(UploadBytesElementReaderTest, MultipleInit) {
75   std::vector<char> buf(bytes_.size());
76   auto wrapped_buffer = base::MakeRefCounted<WrappedIOBuffer>(buf);
77 
78   // Read all.
79   EXPECT_EQ(static_cast<int>(buf.size()),
80             reader_->Read(wrapped_buffer.get(), buf.size(),
81                           CompletionOnceCallback()));
82   EXPECT_EQ(0U, reader_->BytesRemaining());
83   EXPECT_EQ(bytes_, buf);
84 
85   // Call Init() again to reset the state.
86   ASSERT_THAT(reader_->Init(CompletionOnceCallback()), IsOk());
87   EXPECT_EQ(bytes_.size(), reader_->GetContentLength());
88   EXPECT_EQ(bytes_.size(), reader_->BytesRemaining());
89 
90   // Read again.
91   EXPECT_EQ(static_cast<int>(buf.size()),
92             reader_->Read(wrapped_buffer.get(), buf.size(),
93                           CompletionOnceCallback()));
94   EXPECT_EQ(0U, reader_->BytesRemaining());
95   EXPECT_EQ(bytes_, buf);
96 }
97 
98 }  // namespace net
99