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

Side by Side Diff: chrome/browser/history/history_unittest.cc

Issue 13044019: Clean up entries left by crashes in the DownloadDB. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Sync'd to r192579 Created 7 years, 8 months 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // History unit tests come in two flavors: 5 // History unit tests come in two flavors:
6 // 6 //
7 // 1. The more complicated style is that the unit test creates a full history 7 // 1. The more complicated style is that the unit test creates a full history
8 // service. This spawns a background thread for the history backend, and 8 // service. This spawns a background thread for the history backend, and
9 // all communication is asynchronous. This is useful for testing more 9 // all communication is asynchronous. This is useful for testing more
10 // complicated things or end-to-end behavior. 10 // complicated things or end-to-end behavior.
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after
206 // Currently, just send the notifications directly to the in-memory database. 206 // Currently, just send the notifications directly to the in-memory database.
207 // We may want do do something more fancy in the future. 207 // We may want do do something more fancy in the future.
208 content::Details<HistoryDetails> det(details); 208 content::Details<HistoryDetails> det(details);
209 history_test_->in_mem_backend_->Observe(type, 209 history_test_->in_mem_backend_->Observe(type,
210 content::Source<HistoryBackendDBTest>(NULL), det); 210 content::Source<HistoryBackendDBTest>(NULL), det);
211 211
212 // The backend passes ownership of the details pointer to us. 212 // The backend passes ownership of the details pointer to us.
213 delete details; 213 delete details;
214 } 214 }
215 215
216 namespace {
217
218 TEST_F(HistoryBackendDBTest, ClearBrowsingData_Downloads) { 216 TEST_F(HistoryBackendDBTest, ClearBrowsingData_Downloads) {
219 CreateBackendAndDatabase(); 217 CreateBackendAndDatabase();
220 218
221 // Initially there should be nothing in the downloads database. 219 // Initially there should be nothing in the downloads database.
222 std::vector<DownloadRow> downloads; 220 std::vector<DownloadRow> downloads;
223 db_->QueryDownloads(&downloads); 221 db_->QueryDownloads(&downloads);
224 EXPECT_EQ(0U, downloads.size()); 222 EXPECT_EQ(0U, downloads.size());
225 223
226 // Add a download, test that it was added, remove it, test that it was 224 // Add a download, test that it was added, remove it, test that it was
227 // removed. 225 // removed.
(...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after
509 ASSERT_TRUE(db.Open(history_dir_.Append(chrome::kHistoryFilename))); 507 ASSERT_TRUE(db.Open(history_dir_.Append(chrome::kHistoryFilename)));
510 { 508 {
511 sql::Statement statement(db.GetUniqueStatement( 509 sql::Statement statement(db.GetUniqueStatement(
512 "SELECT count(*) from downloads")); 510 "SELECT count(*) from downloads"));
513 ASSERT_TRUE(statement.Step()); 511 ASSERT_TRUE(statement.Step());
514 EXPECT_EQ(0, statement.ColumnInt(0)); 512 EXPECT_EQ(0, statement.ColumnInt(0));
515 } 513 }
516 } 514 }
517 } 515 }
518 516
517 TEST_F(HistoryBackendDBTest, ConfirmDownloadInProgressCleanup) {
518 // Create the DB.
519 CreateBackendAndDatabase();
520
521 base::Time now(base::Time::Now());
522
523 // Put an IN_PROGRESS download in the DB.
524 AddDownload(DownloadItem::IN_PROGRESS, now);
525
526 // Confirm that they made it into the DB unchanged.
527 DeleteBackend();
528 {
529 sql::Connection db;
530 ASSERT_TRUE(db.Open(history_dir_.Append(chrome::kHistoryFilename)));
531 sql::Statement statement(db.GetUniqueStatement(
532 "Select Count(*) from downloads"));
533 EXPECT_TRUE(statement.Step());
534 EXPECT_EQ(1, statement.ColumnInt(0));
535
536 sql::Statement statement1(db.GetUniqueStatement(
537 "Select state, interrupt_reason from downloads"));
538 EXPECT_TRUE(statement1.Step());
539 EXPECT_EQ(DownloadDatabase::kStateInProgress, statement1.ColumnInt(0));
540 EXPECT_EQ(content::DOWNLOAD_INTERRUPT_REASON_NONE, statement1.ColumnInt(1));
541 EXPECT_FALSE(statement1.Step());
542 }
543
544 // Read in the DB through query downloads, then test that the
545 // right transformation was returned.
546 CreateBackendAndDatabase();
547 std::vector<DownloadRow> results;
548 db_->QueryDownloads(&results);
549 ASSERT_EQ(1u, results.size());
550 EXPECT_EQ(content::DownloadItem::INTERRUPTED, results[0].state);
551 EXPECT_EQ(content::DOWNLOAD_INTERRUPT_REASON_CRASH,
552 results[0].interrupt_reason);
553
554 // Allow the update to propagate, shut down the DB, and confirm that
555 // the query updated the on disk database as well.
556 MessageLoop::current()->RunUntilIdle();
557 DeleteBackend();
558 {
559 sql::Connection db;
560 ASSERT_TRUE(db.Open(history_dir_.Append(chrome::kHistoryFilename)));
561 sql::Statement statement(db.GetUniqueStatement(
562 "Select Count(*) from downloads"));
563 EXPECT_TRUE(statement.Step());
564 EXPECT_EQ(1, statement.ColumnInt(0));
565
566 sql::Statement statement1(db.GetUniqueStatement(
567 "Select state, interrupt_reason from downloads"));
568 EXPECT_TRUE(statement1.Step());
569 EXPECT_EQ(DownloadDatabase::kStateInterrupted, statement1.ColumnInt(0));
570 EXPECT_EQ(content::DOWNLOAD_INTERRUPT_REASON_CRASH,
571 statement1.ColumnInt(1));
572 EXPECT_FALSE(statement1.Step());
573 }
574 }
575
519 struct InterruptReasonAssociation { 576 struct InterruptReasonAssociation {
520 std::string name; 577 std::string name;
521 int value; 578 int value;
522 }; 579 };
523 580
524 // Test is dependent on interrupt reasons being listed in header file 581 // Test is dependent on interrupt reasons being listed in header file
525 // in order. 582 // in order.
526 const InterruptReasonAssociation current_reasons[] = { 583 const InterruptReasonAssociation current_reasons[] = {
527 #define INTERRUPT_REASON(a, b) { #a, b }, 584 #define INTERRUPT_REASON(a, b) { #a, b },
528 #include "content/public/browser/download_interrupt_reason_values.h" 585 #include "content/public/browser/download_interrupt_reason_values.h"
(...skipping 1099 matching lines...) Expand 10 before | Expand all | Expand 10 after
1628 1685
1629 std::vector<PageUsageData*> results; 1686 std::vector<PageUsageData*> results;
1630 db_->QuerySegmentUsage(segment_time, 10, &results); 1687 db_->QuerySegmentUsage(segment_time, 10, &results);
1631 ASSERT_EQ(1u, results.size()); 1688 ASSERT_EQ(1u, results.size());
1632 EXPECT_EQ(url, results[0]->GetURL()); 1689 EXPECT_EQ(url, results[0]->GetURL());
1633 EXPECT_EQ(segment_id, results[0]->GetID()); 1690 EXPECT_EQ(segment_id, results[0]->GetID());
1634 EXPECT_EQ(title, results[0]->GetTitle()); 1691 EXPECT_EQ(title, results[0]->GetTitle());
1635 STLDeleteElements(&results); 1692 STLDeleteElements(&results);
1636 } 1693 }
1637 1694
1638 } // namespace
1639
1640 } // namespace history 1695 } // namespace history
OLDNEW
« no previous file with comments | « chrome/browser/history/history_service.cc ('k') | content/browser/download/download_item_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698