1// Copyright 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "chrome/browser/sync_file_system/drive_backend/drive_backend_test_util.h"
6
7#include <set>
8#include <string>
9
10#include "chrome/browser/drive/drive_api_util.h"
11#include "chrome/browser/sync_file_system/drive_backend/drive_backend_constants.h"
12#include "chrome/browser/sync_file_system/drive_backend/metadata_database.h"
13#include "chrome/browser/sync_file_system/drive_backend/metadata_database.pb.h"
14#include "google_apis/drive/drive_api_parser.h"
15#include "google_apis/drive/gdata_wapi_parser.h"
16#include "testing/gtest/include/gtest/gtest.h"
17
18namespace sync_file_system {
19namespace drive_backend {
20namespace test_util {
21
22void ExpectEquivalentDetails(const FileDetails& left,
23                             const FileDetails& right) {
24  std::set<std::string> parents;
25  for (int i = 0; i < left.parent_folder_ids_size(); ++i)
26    EXPECT_TRUE(parents.insert(left.parent_folder_ids(i)).second);
27
28  for (int i = 0; i < right.parent_folder_ids_size(); ++i)
29    EXPECT_EQ(1u, parents.erase(left.parent_folder_ids(i)));
30  EXPECT_TRUE(parents.empty());
31
32  EXPECT_EQ(left.title(), right.title());
33  EXPECT_EQ(left.file_kind(), right.file_kind());
34  EXPECT_EQ(left.md5(), right.md5());
35  EXPECT_EQ(left.etag(), right.etag());
36  EXPECT_EQ(left.creation_time(), right.creation_time());
37  EXPECT_EQ(left.modification_time(), right.modification_time());
38  EXPECT_EQ(left.missing(), right.missing());
39  EXPECT_EQ(left.change_id(), right.change_id());
40}
41
42void ExpectEquivalentMetadata(const FileMetadata& left,
43                              const FileMetadata& right) {
44  EXPECT_EQ(left.file_id(), right.file_id());
45  ExpectEquivalentDetails(left.details(), right.details());
46}
47
48void ExpectEquivalentTrackers(const FileTracker& left,
49                              const FileTracker& right) {
50  EXPECT_EQ(left.tracker_id(), right.tracker_id());
51  EXPECT_EQ(left.parent_tracker_id(), right.parent_tracker_id());
52  EXPECT_EQ(left.file_id(), right.file_id());
53  EXPECT_EQ(left.app_id(), right.app_id());
54  EXPECT_EQ(left.tracker_kind(), right.tracker_kind());
55  ExpectEquivalentDetails(left.synced_details(), right.synced_details());
56  EXPECT_EQ(left.dirty(), right.dirty());
57  EXPECT_EQ(left.active(), right.active());
58  EXPECT_EQ(left.needs_folder_listing(), right.needs_folder_listing());
59}
60
61scoped_ptr<FileMetadata> CreateFolderMetadata(const std::string& file_id,
62                                              const std::string& title) {
63  FileDetails details;
64  details.set_title(title);
65  details.set_file_kind(FILE_KIND_FOLDER);
66  details.set_missing(false);
67
68  scoped_ptr<FileMetadata> metadata(new FileMetadata);
69  metadata->set_file_id(file_id);
70  *metadata->mutable_details() = details;
71
72  return metadata.Pass();
73}
74
75scoped_ptr<FileMetadata> CreateFileMetadata(const std::string& file_id,
76                                            const std::string& title,
77                                            const std::string& md5) {
78  FileDetails details;
79  details.set_title(title);
80  details.set_file_kind(FILE_KIND_FILE);
81  details.set_missing(false);
82  details.set_md5(md5);
83
84  scoped_ptr<FileMetadata> metadata(new FileMetadata);
85  metadata->set_file_id(file_id);
86  *metadata->mutable_details() = details;
87
88  return metadata.Pass();
89}
90
91scoped_ptr<FileTracker> CreateTracker(const FileMetadata& metadata,
92                                      int64 tracker_id,
93                                      const FileTracker* parent_tracker) {
94  scoped_ptr<FileTracker> tracker(new FileTracker);
95  tracker->set_tracker_id(tracker_id);
96  int64 parent_id = parent_tracker ?
97      parent_tracker->tracker_id() : kInvalidTrackerID;
98  tracker->set_parent_tracker_id(parent_id);
99  tracker->set_file_id(metadata.file_id());
100  if (parent_tracker)
101    tracker->set_app_id(parent_tracker->app_id());
102  tracker->set_tracker_kind(TRACKER_KIND_REGULAR);
103  *tracker->mutable_synced_details() = metadata.details();
104  tracker->set_dirty(false);
105  tracker->set_active(true);
106  tracker->set_needs_folder_listing(false);
107  return tracker.Pass();
108}
109
110scoped_ptr<FileTracker> CreatePlaceholderTracker(
111    const std::string& file_id,
112    int64 tracker_id,
113    const FileTracker* parent_tracker) {
114  scoped_ptr<FileTracker> tracker(new FileTracker);
115  tracker->set_tracker_id(tracker_id);
116  if (parent_tracker)
117    tracker->set_parent_tracker_id(parent_tracker->tracker_id());
118  tracker->set_file_id(file_id);
119  if (parent_tracker)
120    tracker->set_app_id(parent_tracker->app_id());
121  tracker->set_tracker_kind(TRACKER_KIND_REGULAR);
122  tracker->set_dirty(true);
123  tracker->set_active(false);
124  tracker->set_needs_folder_listing(false);
125  return tracker.Pass();
126}
127
128}  // namespace test_util
129}  // namespace drive_backend
130}  // namespace sync_file_system
131