| Index: content/browser/download/base_file_unittest.cc
|
| diff --git a/content/browser/download/base_file_unittest.cc b/content/browser/download/base_file_unittest.cc
|
| index 6d6edc74e1d6efb113358ba0c520ff1c8056ddf8..bb035ad28eebd4e85f6dbbb16b42151e6a6c5ff5 100644
|
| --- a/content/browser/download/base_file_unittest.cc
|
| +++ b/content/browser/download/base_file_unittest.cc
|
| @@ -7,6 +7,7 @@
|
| #include "base/file_util.h"
|
| #include "base/logging.h"
|
| #include "base/message_loop.h"
|
| +#include "base/pickle.h"
|
| #include "base/scoped_temp_dir.h"
|
| #include "base/string_number_conversions.h"
|
| #include "base/test/test_file_util.h"
|
| @@ -44,7 +45,7 @@ class BaseFileTest : public testing::Test {
|
| virtual void SetUp() {
|
| ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
|
| base_file_.reset(
|
| - new BaseFile(FilePath(), GURL(), GURL(), 0, file_stream_));
|
| + new BaseFile(FilePath(), GURL(), GURL(), 0, Pickle(), file_stream_));
|
| }
|
|
|
| virtual void TearDown() {
|
| @@ -118,7 +119,7 @@ class BaseFileTest : public testing::Test {
|
| static FilePath CreateTestFile() {
|
| FilePath file_name;
|
| linked_ptr<net::FileStream> dummy_file_stream;
|
| - BaseFile file(FilePath(), GURL(), GURL(), 0, dummy_file_stream);
|
| + BaseFile file(FilePath(), GURL(), GURL(), 0, Pickle(), dummy_file_stream);
|
|
|
| EXPECT_EQ(net::OK, file.Initialize(false));
|
| file_name = file.full_path();
|
| @@ -136,7 +137,8 @@ class BaseFileTest : public testing::Test {
|
| static void CreateFileWithName(const FilePath& file_name) {
|
| EXPECT_NE(FilePath::StringType(), file_name.value());
|
| linked_ptr<net::FileStream> dummy_file_stream;
|
| - BaseFile duplicate_file(file_name, GURL(), GURL(), 0, dummy_file_stream);
|
| + BaseFile duplicate_file(
|
| + file_name, GURL(), GURL(), 0, Pickle(), dummy_file_stream);
|
| EXPECT_EQ(net::OK, duplicate_file.Initialize(false));
|
| // Write something into it.
|
| duplicate_file.AppendDataToFile(kTestData4, kTestDataLength4);
|
| @@ -251,8 +253,12 @@ TEST_F(BaseFileTest, MultipleWrites) {
|
|
|
| // Write data to the file once and calculate its sha256 hash.
|
| TEST_F(BaseFileTest, SingleWriteWithHash) {
|
| + std::string partial_hash;
|
| ASSERT_EQ(net::OK, base_file_->Initialize(true));
|
| + // Can get partial hashes before Finish() is called.
|
| + EXPECT_TRUE(base_file_->GetSha256Hash(&partial_hash));
|
| ASSERT_EQ(net::OK, AppendDataToFile(kTestData1));
|
| + EXPECT_TRUE(base_file_->GetSha256Hash(&partial_hash));
|
| base_file_->Finish();
|
|
|
| std::string hash;
|
| @@ -269,8 +275,6 @@ TEST_F(BaseFileTest, MultipleWritesWithHash) {
|
| ASSERT_EQ(net::OK, AppendDataToFile(kTestData1));
|
| ASSERT_EQ(net::OK, AppendDataToFile(kTestData2));
|
| ASSERT_EQ(net::OK, AppendDataToFile(kTestData3));
|
| - // no hash before Finish() is called either.
|
| - EXPECT_FALSE(base_file_->GetSha256Hash(&hash));
|
| base_file_->Finish();
|
|
|
| EXPECT_TRUE(base_file_->GetSha256Hash(&hash));
|
| @@ -278,6 +282,40 @@ TEST_F(BaseFileTest, MultipleWritesWithHash) {
|
| base::HexEncode(hash.data(), hash.size()));
|
| }
|
|
|
| +// Write data to the file multiple times, interrupt it, and continue using
|
| +// another file. Calculate the resulting combined sha256 hash.
|
| +TEST_F(BaseFileTest, MultipleWritesInterruptedWithHash) {
|
| + ASSERT_EQ(net::OK, base_file_->Initialize(true));
|
| + // Write some data
|
| + ASSERT_EQ(net::OK, AppendDataToFile(kTestData1));
|
| + ASSERT_EQ(net::OK, AppendDataToFile(kTestData2));
|
| + // Get the hash state and file name.
|
| + Pickle hash_state;
|
| + base_file_->GetSha256HashState(&hash_state);
|
| + // Finish the file.
|
| + base_file_->Finish();
|
| +
|
| + // Create another file
|
| + linked_ptr<net::FileStream> second_stream;
|
| + BaseFile second_file(FilePath(),
|
| + GURL(),
|
| + GURL(),
|
| + base_file_->bytes_so_far(),
|
| + hash_state,
|
| + second_stream);
|
| + ASSERT_EQ(net::OK, second_file.Initialize(true));
|
| + std::string data(kTestData3);
|
| + EXPECT_EQ(net::OK, second_file.AppendDataToFile(data.data(), data.size()));
|
| + second_file.Finish();
|
| +
|
| + std::string hash;
|
| + EXPECT_TRUE(second_file.GetSha256Hash(&hash));
|
| + // This will fail until getting the hash state is supported in SecureHash.
|
| + EXPECT_STREQ(
|
| + "CBF68BF10F8003DB86B31343AFAC8C7175BD03FB5FC905650F8C80AF087443A8",
|
| + base::HexEncode(hash.data(), hash.size()).c_str());
|
| +}
|
| +
|
| // Rename the file after all writes to it.
|
| TEST_F(BaseFileTest, WriteThenRename) {
|
| ASSERT_EQ(net::OK, base_file_->Initialize(false));
|
| @@ -321,7 +359,11 @@ TEST_F(BaseFileTest, RenameWhileInProgress) {
|
| TEST_F(BaseFileTest, MultipleWritesWithError) {
|
| ASSERT_TRUE(OpenMockFileStream());
|
| base_file_.reset(new BaseFile(mock_file_stream_->get_path(),
|
| - GURL(), GURL(), 0, mock_file_stream_));
|
| + GURL(),
|
| + GURL(),
|
| + 0,
|
| + Pickle(),
|
| + mock_file_stream_));
|
| EXPECT_EQ(net::OK, base_file_->Initialize(false));
|
| ASSERT_EQ(net::OK, AppendDataToFile(kTestData1));
|
| ASSERT_EQ(net::OK, AppendDataToFile(kTestData2));
|
| @@ -359,9 +401,12 @@ TEST_F(BaseFileTest, AppendToBaseFile) {
|
| set_expected_data(kTestData4);
|
|
|
| // Use the file we've just created.
|
| - base_file_.reset(
|
| - new BaseFile(existing_file_name, GURL(), GURL(), kTestDataLength4,
|
| - file_stream_));
|
| + base_file_.reset(new BaseFile(existing_file_name,
|
| + GURL(),
|
| + GURL(),
|
| + kTestDataLength4,
|
| + Pickle(),
|
| + file_stream_));
|
|
|
| EXPECT_EQ(net::OK, base_file_->Initialize(false));
|
|
|
| @@ -385,8 +430,12 @@ TEST_F(BaseFileTest, ReadonlyBaseFile) {
|
| EXPECT_TRUE(file_util::MakeFileUnwritable(readonly_file_name));
|
|
|
| // Try to overwrite it.
|
| - base_file_.reset(
|
| - new BaseFile(readonly_file_name, GURL(), GURL(), 0, file_stream_));
|
| + base_file_.reset(new BaseFile(readonly_file_name,
|
| + GURL(),
|
| + GURL(),
|
| + 0,
|
| + Pickle(),
|
| + file_stream_));
|
|
|
| expect_in_progress_ = false;
|
|
|
|
|