Index: components/offline_pages/offline_page_metadata_store_impl_unittest.cc |
diff --git a/components/offline_pages/offline_page_metadata_store_impl_unittest.cc b/components/offline_pages/offline_page_metadata_store_impl_unittest.cc |
index 85d97161b33f19b7f2a5d0f609a5a58b60ca8f06..e519f2e9c7c8363d8795c92e12b8d19b44a54842 100644 |
--- a/components/offline_pages/offline_page_metadata_store_impl_unittest.cc |
+++ b/components/offline_pages/offline_page_metadata_store_impl_unittest.cc |
@@ -10,6 +10,7 @@ |
#include "base/files/file_path.h" |
#include "base/files/scoped_temp_dir.h" |
#include "base/memory/scoped_ptr.h" |
+#include "base/strings/string_number_conversions.h" |
#include "base/strings/utf_string_conversions.h" |
#include "base/test/test_simple_task_runner.h" |
#include "base/thread_task_runner_handle.h" |
@@ -32,6 +33,8 @@ const base::FilePath::CharType kFilePath[] = |
FILE_PATH_LITERAL("/offline_pages/example_com.mhtml"); |
int64_t kFileSize = 234567; |
+} // namespace |
+ |
class OfflinePageMetadataStoreImplTest : public testing::Test { |
public: |
enum CalledCallback { NONE, LOAD, ADD, REMOVE, DESTROY }; |
@@ -54,6 +57,11 @@ class OfflinePageMetadataStoreImplTest : public testing::Test { |
void ClearResults(); |
+ void UpdateStoreEntries( |
+ OfflinePageMetadataStoreImpl* store, |
+ scoped_ptr<leveldb_proto::ProtoDatabase<OfflinePageEntry>::KeyEntryVector> |
+ entries_to_save); |
+ |
protected: |
CalledCallback last_called_callback_; |
Status last_status_; |
@@ -112,6 +120,18 @@ void OfflinePageMetadataStoreImplTest::ClearResults() { |
offline_pages_.clear(); |
} |
+void OfflinePageMetadataStoreImplTest::UpdateStoreEntries( |
+ OfflinePageMetadataStoreImpl* store, |
+ scoped_ptr<leveldb_proto::ProtoDatabase<OfflinePageEntry>::KeyEntryVector> |
+ entries_to_save) { |
+ scoped_ptr<std::vector<std::string>> keys_to_remove( |
+ new std::vector<std::string>()); |
+ store->UpdateEntries( |
+ std::move(entries_to_save), std::move(keys_to_remove), |
+ base::Bind(&OfflinePageMetadataStoreImplTest::UpdateCallback, |
+ base::Unretained(this), ADD)); |
+} |
+ |
// Loads empty store and makes sure that there are no offline pages stored in |
// it. |
TEST_F(OfflinePageMetadataStoreImplTest, LoadEmptyStore) { |
@@ -352,8 +372,6 @@ TEST_F(OfflinePageMetadataStoreImplTest, UpdateOfflinePage) { |
EXPECT_EQ(offline_page.client_id, offline_pages_[0].client_id); |
} |
-} // namespace |
- |
// Test that loading a store with a bad value still loads. |
// Needs to be outside of the anonymous namespace in order for FRIEND_TEST |
// to work. |
@@ -375,16 +393,11 @@ TEST_F(OfflinePageMetadataStoreImplTest, LoadCorruptedStore) { |
scoped_ptr<leveldb_proto::ProtoDatabase<OfflinePageEntry>::KeyEntryVector> |
entries_to_save( |
new leveldb_proto::ProtoDatabase<OfflinePageEntry>::KeyEntryVector()); |
- scoped_ptr<std::vector<std::string>> keys_to_remove( |
- new std::vector<std::string>()); |
OfflinePageEntry offline_page_proto; |
entries_to_save->push_back(std::make_pair("0", offline_page_proto)); |
- store->UpdateEntries( |
- std::move(entries_to_save), std::move(keys_to_remove), |
- base::Bind(&OfflinePageMetadataStoreImplTest::UpdateCallback, |
- base::Unretained(this), ADD)); |
+ UpdateStoreEntries(store.get(), std::move(entries_to_save)); |
PumpLoop(); |
EXPECT_EQ(ADD, last_called_callback_); |
@@ -421,17 +434,12 @@ TEST_F(OfflinePageMetadataStoreImplTest, LoadTotallyCorruptedStore) { |
scoped_ptr<leveldb_proto::ProtoDatabase<OfflinePageEntry>::KeyEntryVector> |
entries_to_save( |
new leveldb_proto::ProtoDatabase<OfflinePageEntry>::KeyEntryVector()); |
- scoped_ptr<std::vector<std::string>> keys_to_remove( |
- new std::vector<std::string>()); |
OfflinePageEntry offline_page_proto; |
entries_to_save->push_back(std::make_pair("0", offline_page_proto)); |
entries_to_save->push_back(std::make_pair("1", offline_page_proto)); |
- store->UpdateEntries( |
- std::move(entries_to_save), std::move(keys_to_remove), |
- base::Bind(&OfflinePageMetadataStoreImplTest::UpdateCallback, |
- base::Unretained(this), ADD)); |
+ UpdateStoreEntries(store.get(), std::move(entries_to_save));; |
PumpLoop(); |
EXPECT_EQ(ADD, last_called_callback_); |
@@ -449,4 +457,47 @@ TEST_F(OfflinePageMetadataStoreImplTest, LoadTotallyCorruptedStore) { |
EXPECT_EQ(STATUS_FALSE, last_status_); |
} |
+TEST_F(OfflinePageMetadataStoreImplTest, UpgradeStoreFromBookmarkIdToClientId) { |
+ scoped_ptr<OfflinePageMetadataStoreImpl> store(BuildStore()); |
+ |
+ // Manually write a page referring to legacy bookmark id. |
+ scoped_ptr<leveldb_proto::ProtoDatabase<OfflinePageEntry>::KeyEntryVector> |
+ entries_to_save( |
+ new leveldb_proto::ProtoDatabase<OfflinePageEntry>::KeyEntryVector()); |
+ |
+ OfflinePageEntry offline_page_proto; |
+ offline_page_proto.set_deprecated_bookmark_id(1LL); |
+ offline_page_proto.set_version(1); |
+ offline_page_proto.set_url(kTestURL); |
+ offline_page_proto.set_file_path("/foo/bar"); |
+ entries_to_save->push_back(std::make_pair("1", offline_page_proto)); |
+ |
+ UpdateStoreEntries(store.get(), std::move(entries_to_save)); |
+ PumpLoop(); |
+ |
+ EXPECT_EQ(ADD, last_called_callback_); |
+ EXPECT_EQ(STATUS_TRUE, last_status_); |
+ |
+ ClearResults(); |
+ |
+ // Close the store first to ensure file lock is removed. |
+ store.reset(); |
+ store = BuildStore(); |
+ PumpLoop(); |
+ |
+ // The page should be upgraded with new Client ID format. |
+ EXPECT_EQ(LOAD, last_called_callback_); |
+ EXPECT_EQ(STATUS_TRUE, last_status_); |
+ EXPECT_EQ(1U, offline_pages_.size()); |
+ EXPECT_TRUE(offline_pages_[0].offline_id != 0); |
+ EXPECT_EQ(offline_pages::BOOKMARK_NAMESPACE, |
+ offline_pages_[0].client_id.name_space); |
+ EXPECT_EQ(base::Int64ToString(offline_page_proto.deprecated_bookmark_id()), |
+ offline_pages_[0].client_id.id); |
+ EXPECT_EQ(GURL(kTestURL), offline_pages_[0].url); |
+ EXPECT_EQ(offline_page_proto.version(), offline_pages_[0].version); |
+ EXPECT_EQ(offline_page_proto.file_path(), |
+ offline_pages_[0].file_path.MaybeAsASCII()); |
+} |
+ |
} // namespace offline_pages |