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

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: Updated comment. Created 9 years 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 030a635324abb210e79020ea36b249d36a2f04f6..c60e02831bf88a9a08c825dd37f2d9f2cf044678 100644
--- a/content/browser/download/base_file_unittest.cc
+++ b/content/browser/download/base_file_unittest.cc
@@ -47,7 +47,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, false, "", file_stream_));
}
virtual void TearDown() {
@@ -73,6 +73,11 @@ class BaseFileTest : public testing::Test {
EXPECT_EQ(expect_file_survives_, file_util::PathExists(full_path));
}
+ void MakeFileWithHash() {
+ base_file_.reset(
+ new BaseFile(FilePath(), GURL(), GURL(), 0, true, "", file_stream_));
+ }
+
bool OpenMockFileStream() {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
@@ -121,9 +126,9 @@ 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, false, "", dummy_file_stream);
- EXPECT_EQ(net::OK, file.Initialize(false));
+ EXPECT_EQ(net::OK, file.Initialize());
file_name = file.full_path();
EXPECT_NE(FilePath::StringType(), file_name.value());
@@ -139,8 +144,9 @@ 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);
- EXPECT_EQ(net::OK, duplicate_file.Initialize(false));
+ BaseFile duplicate_file(
+ file_name, GURL(), GURL(), 0, false, "", dummy_file_stream);
+ EXPECT_EQ(net::OK, duplicate_file.Initialize());
// Write something into it.
duplicate_file.AppendDataToFile(kTestData4, kTestDataLength4);
// Detach the file so it isn't deleted on destruction of |duplicate_file|.
@@ -192,7 +198,7 @@ TEST_F(BaseFileTest, CreateDestroy) {
// Cancel the download explicitly.
TEST_F(BaseFileTest, Cancel) {
- ASSERT_EQ(net::OK, base_file_->Initialize(false));
+ ASSERT_EQ(net::OK, base_file_->Initialize());
EXPECT_TRUE(file_util::PathExists(base_file_->full_path()));
base_file_->Cancel();
EXPECT_FALSE(file_util::PathExists(base_file_->full_path()));
@@ -202,7 +208,7 @@ TEST_F(BaseFileTest, Cancel) {
// Write data to the file and detach it, so it doesn't get deleted
// automatically when base_file_ is destructed.
TEST_F(BaseFileTest, WriteAndDetach) {
- ASSERT_EQ(net::OK, base_file_->Initialize(false));
+ ASSERT_EQ(net::OK, base_file_->Initialize());
ASSERT_EQ(net::OK, AppendDataToFile(kTestData1));
base_file_->Finish();
base_file_->Detach();
@@ -211,12 +217,13 @@ TEST_F(BaseFileTest, WriteAndDetach) {
// Write data to the file and detach it, and calculate its sha256 hash.
TEST_F(BaseFileTest, WriteWithHashAndDetach) {
- ASSERT_EQ(net::OK, base_file_->Initialize(true));
+ MakeFileWithHash();
+ ASSERT_EQ(net::OK, base_file_->Initialize());
ASSERT_EQ(net::OK, AppendDataToFile(kTestData1));
base_file_->Finish();
std::string hash;
- base_file_->GetSha256Hash(&hash);
+ base_file_->GetHash(&hash);
EXPECT_EQ("0B2D3F3F7943AD64B860DF94D05CB56A8A97C6EC5768B5B70B930C5AA7FA9ADE",
Randy Smith (Not in Mondays) 2011/12/20 17:05:40 nit, suggestion: An ideal world would have this au
ahendrickson 2011/12/20 22:06:54 Done.
base::HexEncode(hash.data(), hash.size()));
@@ -226,7 +233,7 @@ TEST_F(BaseFileTest, WriteWithHashAndDetach) {
// Rename the file after writing to it, then detach.
TEST_F(BaseFileTest, WriteThenRenameAndDetach) {
- ASSERT_EQ(net::OK, base_file_->Initialize(false));
+ ASSERT_EQ(net::OK, base_file_->Initialize());
FilePath initial_path(base_file_->full_path());
EXPECT_TRUE(file_util::PathExists(initial_path));
@@ -246,30 +253,34 @@ TEST_F(BaseFileTest, WriteThenRenameAndDetach) {
// Write data to the file once.
TEST_F(BaseFileTest, SingleWrite) {
- ASSERT_EQ(net::OK, base_file_->Initialize(false));
+ ASSERT_EQ(net::OK, base_file_->Initialize());
ASSERT_EQ(net::OK, AppendDataToFile(kTestData1));
base_file_->Finish();
}
// Write data to the file multiple times.
TEST_F(BaseFileTest, MultipleWrites) {
- ASSERT_EQ(net::OK, base_file_->Initialize(false));
+ ASSERT_EQ(net::OK, base_file_->Initialize());
ASSERT_EQ(net::OK, AppendDataToFile(kTestData1));
ASSERT_EQ(net::OK, AppendDataToFile(kTestData2));
ASSERT_EQ(net::OK, AppendDataToFile(kTestData3));
std::string hash;
- EXPECT_FALSE(base_file_->GetSha256Hash(&hash));
+ EXPECT_FALSE(base_file_->GetHash(&hash));
base_file_->Finish();
}
// Write data to the file once and calculate its sha256 hash.
TEST_F(BaseFileTest, SingleWriteWithHash) {
- ASSERT_EQ(net::OK, base_file_->Initialize(true));
+ MakeFileWithHash();
+ ASSERT_EQ(net::OK, base_file_->Initialize());
+ // Can get partial hash states before Finish() is called.
+ EXPECT_STRNE(std::string().c_str(), base_file_->GetHashState().c_str());
ASSERT_EQ(net::OK, AppendDataToFile(kTestData1));
+ EXPECT_STRNE(std::string().c_str(), base_file_->GetHashState().c_str());
base_file_->Finish();
std::string hash;
- base_file_->GetSha256Hash(&hash);
+ base_file_->GetHash(&hash);
EXPECT_EQ("0B2D3F3F7943AD64B860DF94D05CB56A8A97C6EC5768B5B70B930C5AA7FA9ADE",
base::HexEncode(hash.data(), hash.size()));
}
@@ -278,22 +289,59 @@ TEST_F(BaseFileTest, SingleWriteWithHash) {
TEST_F(BaseFileTest, MultipleWritesWithHash) {
std::string hash;
- ASSERT_EQ(net::OK, base_file_->Initialize(true));
+ MakeFileWithHash();
+ ASSERT_EQ(net::OK, base_file_->Initialize());
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));
+ // No hash before Finish() is called.
+ EXPECT_FALSE(base_file_->GetHash(&hash));
base_file_->Finish();
- EXPECT_TRUE(base_file_->GetSha256Hash(&hash));
+ EXPECT_TRUE(base_file_->GetHash(&hash));
EXPECT_EQ("CBF68BF10F8003DB86B31343AFAC8C7175BD03FB5FC905650F8C80AF087443A8",
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) {
+ MakeFileWithHash();
+ ASSERT_EQ(net::OK, base_file_->Initialize());
+ // Write some data
+ ASSERT_EQ(net::OK, AppendDataToFile(kTestData1));
+ ASSERT_EQ(net::OK, AppendDataToFile(kTestData2));
+ // Get the hash state and file name.
+ std::string hash_state;
+ hash_state = base_file_->GetHashState();
+ // 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(),
+ true,
+ hash_state,
+ second_stream);
+ ASSERT_EQ(net::OK, second_file.Initialize());
+ 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.GetHash(&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));
+ ASSERT_EQ(net::OK, base_file_->Initialize());
FilePath initial_path(base_file_->full_path());
EXPECT_TRUE(file_util::PathExists(initial_path));
@@ -311,7 +359,7 @@ TEST_F(BaseFileTest, WriteThenRename) {
// Rename the file while the download is still in progress.
TEST_F(BaseFileTest, RenameWhileInProgress) {
- ASSERT_EQ(net::OK, base_file_->Initialize(false));
+ ASSERT_EQ(net::OK, base_file_->Initialize());
FilePath initial_path(base_file_->full_path());
EXPECT_TRUE(file_util::PathExists(initial_path));
@@ -334,14 +382,19 @@ 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_));
- EXPECT_EQ(net::OK, base_file_->Initialize(false));
+ GURL(),
+ GURL(),
+ 0,
+ false,
+ "",
+ mock_file_stream_));
+ EXPECT_EQ(net::OK, base_file_->Initialize());
ASSERT_EQ(net::OK, AppendDataToFile(kTestData1));
ASSERT_EQ(net::OK, AppendDataToFile(kTestData2));
ForceError(net::ERR_ACCESS_DENIED);
ASSERT_NE(net::OK, AppendDataToFile(kTestData3));
std::string hash;
- EXPECT_FALSE(base_file_->GetSha256Hash(&hash));
+ EXPECT_FALSE(base_file_->GetHash(&hash));
base_file_->Finish();
}
@@ -355,7 +408,7 @@ TEST_F(BaseFileTest, UninitializedFile) {
// Overwrite base_file_ with another file with the same name and
// non-zero contents, and make sure the last file to close 'wins'.
TEST_F(BaseFileTest, DuplicateBaseFile) {
- EXPECT_EQ(net::OK, base_file_->Initialize(false));
+ EXPECT_EQ(net::OK, base_file_->Initialize());
// Create another |BaseFile| referring to the file that |base_file_| owns.
CreateFileWithName(base_file_->full_path());
@@ -372,11 +425,15 @@ 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,
+ false,
+ "",
+ file_stream_));
- EXPECT_EQ(net::OK, base_file_->Initialize(false));
+ EXPECT_EQ(net::OK, base_file_->Initialize());
const FilePath file_name = base_file_->full_path();
EXPECT_NE(FilePath::StringType(), file_name.value());
@@ -398,12 +455,17 @@ 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,
+ false,
+ "",
+ file_stream_));
expect_in_progress_ = false;
- int init_error = base_file_->Initialize(false);
+ int init_error = base_file_->Initialize();
DVLOG(1) << " init_error = " << init_error;
EXPECT_NE(net::OK, init_error);
@@ -418,17 +480,17 @@ TEST_F(BaseFileTest, ReadonlyBaseFile) {
expect_file_survives_ = true;
}
-TEST_F(BaseFileTest, IsEmptySha256Hash) {
+TEST_F(BaseFileTest, IsEmptyHash) {
std::string empty(BaseFile::kSha256HashLen, '\x00');
- EXPECT_TRUE(BaseFile::IsEmptySha256Hash(empty));
+ EXPECT_TRUE(BaseFile::IsEmptyHash(empty));
std::string not_empty(BaseFile::kSha256HashLen, '\x01');
- EXPECT_FALSE(BaseFile::IsEmptySha256Hash(not_empty));
- EXPECT_FALSE(BaseFile::IsEmptySha256Hash(""));
+ EXPECT_FALSE(BaseFile::IsEmptyHash(not_empty));
+ EXPECT_FALSE(BaseFile::IsEmptyHash(""));
}
// Test that calculating speed after no writes.
TEST_F(BaseFileTest, SpeedWithoutWrite) {
- ASSERT_EQ(net::OK, base_file_->Initialize(false));
+ ASSERT_EQ(net::OK, base_file_->Initialize());
base::TimeTicks current = StartTick() + kElapsedTimeDelta;
ASSERT_EQ(0, CurrentSpeedAtTime(current));
base_file_->Finish();
@@ -436,7 +498,7 @@ TEST_F(BaseFileTest, SpeedWithoutWrite) {
// Test that calculating speed after a single write.
TEST_F(BaseFileTest, SpeedAfterSingleWrite) {
- ASSERT_EQ(net::OK, base_file_->Initialize(false));
+ ASSERT_EQ(net::OK, base_file_->Initialize());
ASSERT_EQ(net::OK, AppendDataToFile(kTestData1));
base::TimeTicks current = StartTick() + kElapsedTimeDelta;
int64 expected_speed = kTestDataLength1 / kElapsedTimeSeconds;
@@ -446,7 +508,7 @@ TEST_F(BaseFileTest, SpeedAfterSingleWrite) {
// Test that calculating speed after a multiple writes.
TEST_F(BaseFileTest, SpeedAfterMultipleWrite) {
- ASSERT_EQ(net::OK, base_file_->Initialize(false));
+ ASSERT_EQ(net::OK, base_file_->Initialize());
ASSERT_EQ(net::OK, AppendDataToFile(kTestData1));
ASSERT_EQ(net::OK, AppendDataToFile(kTestData2));
ASSERT_EQ(net::OK, AppendDataToFile(kTestData3));
@@ -460,7 +522,7 @@ TEST_F(BaseFileTest, SpeedAfterMultipleWrite) {
// Test that calculating speed after no delay - should not divide by 0.
TEST_F(BaseFileTest, SpeedAfterNoElapsedTime) {
- ASSERT_EQ(net::OK, base_file_->Initialize(false));
+ ASSERT_EQ(net::OK, base_file_->Initialize());
ASSERT_EQ(net::OK, AppendDataToFile(kTestData1));
ASSERT_EQ(0, CurrentSpeedAtTime(StartTick()));
base_file_->Finish();

Powered by Google App Engine
This is Rietveld 408576698