upload_bytes_element_reader_unittest.cc 3.6 KB

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