blob: 6e8193c655b8ec1c41401ef1d71bda151a9d87d6 [file] [log] [blame]
// Copyright 2013 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 "chrome/browser/sync_file_system/drive_backend/drive_backend_test_util.h"
#include <set>
#include "chrome/browser/google_apis/drive_api_parser.h"
#include "chrome/browser/sync_file_system/drive_backend/metadata_database.h"
#include "chrome/browser/sync_file_system/drive_backend/metadata_database.pb.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace sync_file_system {
namespace drive_backend {
namespace test_util {
void ExpectEquivalentServiceMetadata(const ServiceMetadata& left,
const ServiceMetadata& right) {
EXPECT_EQ(left.largest_change_id(), right.largest_change_id());
EXPECT_EQ(left.sync_root_tracker_id(), right.sync_root_tracker_id());
EXPECT_EQ(left.next_tracker_id(), right.next_tracker_id());
}
void ExpectEquivalentDetails(const FileDetails& left,
const FileDetails& right) {
std::set<std::string> parents;
for (int i = 0; i < left.parent_folder_ids_size(); ++i)
EXPECT_TRUE(parents.insert(left.parent_folder_ids(i)).second);
for (int i = 0; i < right.parent_folder_ids_size(); ++i)
EXPECT_EQ(1u, parents.erase(left.parent_folder_ids(i)));
EXPECT_TRUE(parents.empty());
EXPECT_EQ(left.title(), right.title());
EXPECT_EQ(left.file_kind(), right.file_kind());
EXPECT_EQ(left.md5(), right.md5());
EXPECT_EQ(left.etag(), right.etag());
EXPECT_EQ(left.creation_time(), right.creation_time());
EXPECT_EQ(left.modification_time(), right.modification_time());
EXPECT_EQ(left.deleted(), right.deleted());
EXPECT_EQ(left.change_id(), right.change_id());
}
void ExpectEquivalentMetadata(const FileMetadata& left,
const FileMetadata& right) {
EXPECT_EQ(left.file_id(), right.file_id());
ExpectEquivalentDetails(left.details(), right.details());
}
void ExpectEquivalentTrackers(const FileTracker& left,
const FileTracker& right) {
EXPECT_EQ(left.tracker_id(), right.tracker_id());
EXPECT_EQ(left.parent_tracker_id(), right.parent_tracker_id());
EXPECT_EQ(left.file_id(), right.file_id());
EXPECT_EQ(left.app_id(), right.app_id());
EXPECT_EQ(left.tracker_kind(), right.tracker_kind());
ExpectEquivalentDetails(left.synced_details(), right.synced_details());
EXPECT_EQ(left.dirty(), right.dirty());
EXPECT_EQ(left.active(), right.active());
EXPECT_EQ(left.needs_folder_listing(), right.needs_folder_listing());
}
void ExpectCompatibleResourceAndMetadata(
const google_apis::FileResource& resource,
const FileMetadata& metadata) {
EXPECT_EQ(resource.file_id(), metadata.file_id());
const FileDetails& details = metadata.details();
EXPECT_EQ(resource.title(), details.title());
google_apis::DriveEntryKind resource_kind = resource.GetKind();
switch (details.file_kind()) {
case FILE_KIND_UNSUPPORTED:
EXPECT_NE(google_apis::ENTRY_KIND_FILE, resource_kind);
EXPECT_NE(google_apis::ENTRY_KIND_FOLDER, resource_kind);
break;
case FILE_KIND_FILE:
EXPECT_EQ(google_apis::ENTRY_KIND_FILE, resource_kind);
break;
case FILE_KIND_FOLDER:
EXPECT_EQ(google_apis::ENTRY_KIND_FOLDER, resource_kind);
break;
}
EXPECT_EQ(resource.md5_checksum(), details.md5());
EXPECT_EQ(resource.etag(), details.etag());
EXPECT_EQ(resource.created_date(),
base::Time::FromInternalValue(details.creation_time()));
EXPECT_EQ(resource.modified_date(),
base::Time::FromInternalValue(details.modification_time()));
EXPECT_EQ(resource.labels().is_trashed(), details.deleted());
}
void ExpectCompatibleMetadataAndTracker(const FileMetadata& metadata,
const FileTracker& tracker) {
EXPECT_EQ(metadata.file_id(), tracker.file_id());
if (!tracker.dirty())
ExpectEquivalentDetails(metadata.details(), tracker.synced_details());
}
void SyncStatusResultCallback(SyncStatusCode* status_out,
SyncStatusCode status) {
EXPECT_EQ(SYNC_STATUS_UNKNOWN, *status_out);
*status_out = status;
}
void DatabaseCreateResultCallback(SyncStatusCode* status_out,
scoped_ptr<MetadataDatabase>* database_out,
SyncStatusCode status,
scoped_ptr<MetadataDatabase> database) {
EXPECT_EQ(SYNC_STATUS_UNKNOWN, *status_out);
*status_out = status;
*database_out = database.Pass();
}
void ResourceEntryResultCallback(
google_apis::GDataErrorCode* error_out,
scoped_ptr<google_apis::ResourceEntry>* entry_out,
google_apis::GDataErrorCode error,
scoped_ptr<google_apis::ResourceEntry> entry) {
ASSERT_TRUE(error_out);
ASSERT_TRUE(entry_out);
EXPECT_EQ(google_apis::GDATA_OTHER_ERROR, *error_out);
*error_out = error;
*entry_out = entry.Pass();
}
} // namespace test_util
} // namespace drive_backend
} // namespace sync_file_system