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