10529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 20529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// Use of this source code is governed by a BSD-style license that can be 30529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// found in the LICENSE file. 40529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 50529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "sync/internal_api/sync_rollback_manager_base.h" 60529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 70529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "base/bind.h" 80529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "sync/internal_api/public/read_node.h" 90529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "sync/internal_api/public/read_transaction.h" 100529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "sync/internal_api/public/test/test_internal_components_factory.h" 110529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "testing/gtest/include/gtest/gtest.h" 125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "url/gurl.h" 130529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 140529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochnamespace syncer { 150529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 160529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochnamespace { 170529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 180529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochvoid OnConfigDone(bool success) { 190529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch EXPECT_TRUE(success); 200529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} 210529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class SyncTestRollbackManager : public SyncRollbackManagerBase { 235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) public: 246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual void Init(InitArgs* args) OVERRIDE { 256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) SyncRollbackManagerBase::InitInternal( 266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) args->database_location, 276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) args->internal_components_factory.get(), 286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) InternalComponentsFactory::STORAGE_IN_MEMORY, 296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) args->unrecoverable_error_handler.Pass(), 306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) args->report_unrecoverable_error_function); 315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}; 335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 340529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochclass SyncRollbackManagerBaseTest : public testing::Test { 350529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch protected: 360529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch virtual void SetUp() OVERRIDE { 376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) SyncManager::InitArgs args; 386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) args.database_location = base::FilePath(base::FilePath::kCurrentDirectory); 396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) args.service_url = GURL("https://example.com/"); 406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) args.internal_components_factory.reset(new TestInternalComponentsFactory( 416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) InternalComponentsFactory::Switches(), 426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) InternalComponentsFactory::STORAGE_IN_MEMORY, 436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) &storage_used_)); 446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) manager_.Init(&args); 456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(InternalComponentsFactory::STORAGE_IN_MEMORY, storage_used_); 460529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch } 470529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) SyncTestRollbackManager manager_; 490529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch base::MessageLoop loop_; // Needed for WeakHandle 506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) InternalComponentsFactory::StorageOption storage_used_; 510529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch}; 520529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 530529e5d033099cbfc42635f6f6183833b09dff6eBen MurdochTEST_F(SyncRollbackManagerBaseTest, InitTypeOnConfiguration) { 540529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch EXPECT_TRUE(manager_.InitialSyncEndedTypes().Empty()); 550529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 560529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch manager_.ConfigureSyncer( 570529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch CONFIGURE_REASON_NEW_CLIENT, 580529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ModelTypeSet(PREFERENCES, BOOKMARKS), 590529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ModelTypeSet(), ModelTypeSet(), ModelTypeSet(), ModelSafeRoutingInfo(), 600529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch base::Bind(&OnConfigDone, true), 610529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch base::Bind(&OnConfigDone, false)); 620529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 630529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ReadTransaction trans(FROM_HERE, manager_.GetUserShare()); 640529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ReadNode pref_root(&trans); 650529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch EXPECT_EQ(BaseNode::INIT_OK, 6646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) pref_root.InitTypeRoot(PREFERENCES)); 670529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 680529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ReadNode bookmark_root(&trans); 690529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch EXPECT_EQ(BaseNode::INIT_OK, 7046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) bookmark_root.InitTypeRoot(BOOKMARKS)); 710529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ReadNode bookmark_bar(&trans); 720529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch EXPECT_EQ(BaseNode::INIT_OK, 7346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) bookmark_bar.InitByTagLookupForBookmarks("bookmark_bar")); 740529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ReadNode bookmark_mobile(&trans); 75116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ(BaseNode::INIT_FAILED_ENTRY_NOT_GOOD, 7646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) bookmark_mobile.InitByTagLookupForBookmarks("synced_bookmarks")); 770529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ReadNode bookmark_other(&trans); 780529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch EXPECT_EQ(BaseNode::INIT_OK, 7946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) bookmark_other.InitByTagLookupForBookmarks("other_bookmarks")); 800529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} 810529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 820529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} // anonymous namespace 830529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 840529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} // namespace syncer 85