Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2006)

Unified Diff: content/browser/download/base_file_unittest.cc

Issue 8404049: Added member data to classes to support download resumption. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Merged with trunk Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;

Powered by Google App Engine
This is Rietveld 408576698