blob: e71964e37f4726564244e5ee5470c49fefce263c [file] [log] [blame]
// Copyright 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "sync/test/engine/test_directory_setter_upper.h"
#include "base/compiler_specific.h"
#include "base/files/file_util.h"
#include "base/location.h"
#include "base/strings/string_util.h"
#include "sync/syncable/directory.h"
#include "sync/syncable/in_memory_directory_backing_store.h"
#include "sync/syncable/mutable_entry.h"
#include "sync/syncable/syncable_read_transaction.h"
#include "sync/syncable/syncable_write_transaction.h"
#include "sync/test/test_transaction_observer.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace syncer {
TestDirectorySetterUpper::TestDirectorySetterUpper() : name_("Test") {}
TestDirectorySetterUpper::~TestDirectorySetterUpper() {}
void TestDirectorySetterUpper::SetUp() {
test_transaction_observer_.reset(new syncable::TestTransactionObserver());
WeakHandle<syncable::TransactionObserver> transaction_observer =
MakeWeakHandle(test_transaction_observer_->AsWeakPtr());
directory_.reset(new syncable::Directory(
new syncable::InMemoryDirectoryBackingStore(name_),
MakeWeakHandle(handler_.GetWeakPtr()), base::Closure(),
&encryption_handler_, encryption_handler_.cryptographer()));
ASSERT_EQ(syncable::OPENED, directory_->Open(
name_, &delegate_, transaction_observer));
}
void TestDirectorySetterUpper::SetUpWith(
syncer::syncable::DirectoryBackingStore* directory_store) {
CHECK(directory_store);
test_transaction_observer_.reset(new syncable::TestTransactionObserver());
WeakHandle<syncable::TransactionObserver> transaction_observer =
MakeWeakHandle(test_transaction_observer_->AsWeakPtr());
directory_.reset(new syncable::Directory(
directory_store, MakeWeakHandle(handler_.GetWeakPtr()), base::Closure(),
&encryption_handler_, encryption_handler_.cryptographer()));
ASSERT_EQ(syncable::OPENED, directory_->Open(
name_, &delegate_, transaction_observer));
}
void TestDirectorySetterUpper::TearDown() {
if (!directory()->good())
return;
RunInvariantCheck();
directory()->SaveChanges();
RunInvariantCheck();
directory()->SaveChanges();
directory_.reset();
}
void TestDirectorySetterUpper::RunInvariantCheck() {
// Check invariants for all items.
syncable::ReadTransaction trans(FROM_HERE, directory());
// The TestUnrecoverableErrorHandler that this directory was constructed with
// will handle error reporting, so we can safely ignore the return value.
directory()->FullyCheckTreeInvariants(&trans);
}
} // namespace syncer