OLD | NEW |
(Empty) | |
| 1 // Copyright (c) 2010 The Chromium OS 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 <gtest/gtest.h> |
| 6 |
| 7 #include "update_engine/buffered_file_writer.h" |
| 8 #include "update_engine/file_writer_mock.h" |
| 9 |
| 10 using std::string; |
| 11 using testing::_; |
| 12 using testing::InSequence; |
| 13 using testing::Return; |
| 14 |
| 15 namespace chromeos_update_engine { |
| 16 |
| 17 static const int kTestFlags = O_CREAT | O_LARGEFILE | O_TRUNC | O_WRONLY; |
| 18 static const mode_t kTestMode = 0644; |
| 19 |
| 20 MATCHER_P2(MemCmp, expected, n, "") { return memcmp(arg, expected, n) == 0; } |
| 21 |
| 22 class BufferedFileWriterTest : public ::testing::Test { |
| 23 protected: |
| 24 FileWriterMock file_writer_mock_; |
| 25 }; |
| 26 |
| 27 TEST_F(BufferedFileWriterTest, CloseErrorTest) { |
| 28 BufferedFileWriter writer(&file_writer_mock_, 100); |
| 29 writer.buffered_bytes_ = 1; |
| 30 InSequence s; |
| 31 EXPECT_CALL(file_writer_mock_, Write(&writer.buffer_[0], 1)) |
| 32 .Times(1) |
| 33 .WillOnce(Return(50)); |
| 34 EXPECT_CALL(file_writer_mock_, Close()).Times(1).WillOnce(Return(-20)); |
| 35 EXPECT_EQ(-20, writer.Close()); |
| 36 } |
| 37 |
| 38 TEST_F(BufferedFileWriterTest, CloseNoDataTest) { |
| 39 BufferedFileWriter writer(&file_writer_mock_, 50); |
| 40 InSequence s; |
| 41 EXPECT_CALL(file_writer_mock_, Write(_, _)).Times(0); |
| 42 EXPECT_CALL(file_writer_mock_, Close()).Times(1).WillOnce(Return(-30)); |
| 43 EXPECT_EQ(-30, writer.Close()); |
| 44 } |
| 45 |
| 46 TEST_F(BufferedFileWriterTest, CloseWriteErrorTest) { |
| 47 BufferedFileWriter writer(&file_writer_mock_, 100); |
| 48 writer.buffered_bytes_ = 2; |
| 49 InSequence s; |
| 50 EXPECT_CALL(file_writer_mock_, Write(&writer.buffer_[0], 2)) |
| 51 .Times(1) |
| 52 .WillOnce(Return(-10)); |
| 53 EXPECT_CALL(file_writer_mock_, Close()).Times(1).WillOnce(Return(-20)); |
| 54 EXPECT_EQ(-10, writer.Close()); |
| 55 } |
| 56 |
| 57 TEST_F(BufferedFileWriterTest, ConstructorTest) { |
| 58 BufferedFileWriter writer(&file_writer_mock_, 123); |
| 59 EXPECT_EQ(&file_writer_mock_, writer.next_); |
| 60 EXPECT_EQ(123, writer.buffer_size_); |
| 61 EXPECT_TRUE(writer.buffer_ != NULL); |
| 62 EXPECT_EQ(0, writer.buffered_bytes_); |
| 63 } |
| 64 |
| 65 TEST_F(BufferedFileWriterTest, OpenTest) { |
| 66 BufferedFileWriter writer(&file_writer_mock_, 100); |
| 67 EXPECT_CALL(file_writer_mock_, Open("foo", kTestFlags, kTestMode)) |
| 68 .Times(1) |
| 69 .WillOnce(Return(20)); |
| 70 EXPECT_EQ(20, writer.Open("foo", kTestFlags, kTestMode)); |
| 71 } |
| 72 |
| 73 TEST_F(BufferedFileWriterTest, WriteBufferNoDataTest) { |
| 74 BufferedFileWriter writer(&file_writer_mock_, 300); |
| 75 EXPECT_CALL(file_writer_mock_, Write(_, _)).Times(0); |
| 76 EXPECT_EQ(0, writer.WriteBuffer()); |
| 77 } |
| 78 |
| 79 TEST_F(BufferedFileWriterTest, WriteBufferTest) { |
| 80 BufferedFileWriter writer(&file_writer_mock_, 200); |
| 81 writer.buffered_bytes_ = 100; |
| 82 EXPECT_CALL(file_writer_mock_, Write(&writer.buffer_[0], 100)) |
| 83 .Times(1) |
| 84 .WillOnce(Return(-10)); |
| 85 EXPECT_EQ(-10, writer.WriteBuffer()); |
| 86 } |
| 87 |
| 88 TEST_F(BufferedFileWriterTest, WriteErrorTest) { |
| 89 string kData = "test_data"; |
| 90 BufferedFileWriter writer(&file_writer_mock_, 4); |
| 91 InSequence s; |
| 92 EXPECT_CALL(file_writer_mock_, Write(MemCmp("test", 4), 4)) |
| 93 .Times(1) |
| 94 .WillOnce(Return(3)); |
| 95 EXPECT_CALL(file_writer_mock_, Write(MemCmp("_dat", 4), 4)) |
| 96 .Times(1) |
| 97 .WillOnce(Return(-10)); |
| 98 EXPECT_EQ(-10, writer.Write(kData.data(), kData.size())); |
| 99 EXPECT_EQ(0, writer.buffered_bytes_); |
| 100 } |
| 101 |
| 102 TEST_F(BufferedFileWriterTest, WriteTest) { |
| 103 string kData = "test_data"; |
| 104 BufferedFileWriter writer(&file_writer_mock_, 100); |
| 105 writer.buffered_bytes_ = 10; |
| 106 EXPECT_CALL(file_writer_mock_, Write(_, _)).Times(0); |
| 107 EXPECT_EQ(kData.size(), writer.Write(kData.data(), kData.size())); |
| 108 EXPECT_EQ(0, memcmp(kData.data(), &writer.buffer_[10], kData.size())); |
| 109 EXPECT_EQ(kData.size() + 10, writer.buffered_bytes_); |
| 110 } |
| 111 |
| 112 TEST_F(BufferedFileWriterTest, WriteWrapBufferTest) { |
| 113 string kData = "test_data1"; |
| 114 BufferedFileWriter writer(&file_writer_mock_, 3); |
| 115 writer.buffered_bytes_ = 1; |
| 116 writer.buffer_[0] = 'x'; |
| 117 InSequence s; |
| 118 EXPECT_CALL(file_writer_mock_, Write(MemCmp("xte", 3), 3)) |
| 119 .Times(1) |
| 120 .WillOnce(Return(3)); |
| 121 EXPECT_CALL(file_writer_mock_, Write(MemCmp("st_", 3), 3)) |
| 122 .Times(1) |
| 123 .WillOnce(Return(3)); |
| 124 EXPECT_CALL(file_writer_mock_, Write(MemCmp("dat", 3), 3)) |
| 125 .Times(1) |
| 126 .WillOnce(Return(3)); |
| 127 EXPECT_EQ(kData.size(), writer.Write(kData.data(), kData.size())); |
| 128 EXPECT_EQ(0, memcmp("a1", &writer.buffer_[0], 2)); |
| 129 EXPECT_EQ(2, writer.buffered_bytes_); |
| 130 } |
| 131 |
| 132 } // namespace chromeos_update_engine |
OLD | NEW |