1 // Copyright (c) 2010 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/engine/download_updates_command.h"
6 #include "chrome/browser/sync/protocol/autofill_specifics.pb.h"
7 #include "chrome/browser/sync/protocol/bookmark_specifics.pb.h"
8 #include "chrome/browser/sync/protocol/preference_specifics.pb.h"
9 #include "chrome/browser/sync/protocol/sync.pb.h"
10 #include "chrome/browser/sync/syncable/directory_manager.h"
11 #include "chrome/test/sync/engine/proto_extension_validator.h"
12 #include "chrome/test/sync/engine/syncer_command_test.h"
13
14 namespace browser_sync {
15
16 using syncable::FIRST_REAL_MODEL_TYPE;
17 using syncable::MODEL_TYPE_COUNT;
18
19 // A test fixture for tests exercising DownloadUpdatesCommandTest.
20 class DownloadUpdatesCommandTest : public SyncerCommandTest {
21 protected:
DownloadUpdatesCommandTest()22 DownloadUpdatesCommandTest() {}
23
SetUp()24 virtual void SetUp() {
25 workers()->clear();
26 mutable_routing_info()->clear();
27 // GROUP_PASSIVE worker.
28 workers()->push_back(make_scoped_refptr(new ModelSafeWorker()));
29 SyncerCommandTest::SetUp();
30 }
31
SetRoutingInfo(const syncable::ModelTypeSet & types)32 virtual void SetRoutingInfo(const syncable::ModelTypeSet& types) {
33 for (syncable::ModelTypeSet::const_iterator iter = types.begin();
34 iter != types.end(); ++iter) {
35 (*mutable_routing_info())[*iter] = GROUP_PASSIVE;
36 }
37 }
38
39 DownloadUpdatesCommand command_;
40 private:
41 DISALLOW_COPY_AND_ASSIGN(DownloadUpdatesCommandTest);
42 };
43
TEST_F(DownloadUpdatesCommandTest,SetRequestedTypes)44 TEST_F(DownloadUpdatesCommandTest, SetRequestedTypes) {
45 {
46 SCOPED_TRACE("Several enabled datatypes, spread out across groups.");
47 syncable::ModelTypeBitSet enabled_types;
48 enabled_types[syncable::BOOKMARKS] = true;
49 enabled_types[syncable::AUTOFILL] = true;
50 enabled_types[syncable::PREFERENCES] = true;
51 sync_pb::EntitySpecifics get_updates_filter;
52 command_.SetRequestedTypes(enabled_types, &get_updates_filter);
53 ProtoExtensionValidator<sync_pb::EntitySpecifics> v(get_updates_filter);
54 v.ExpectHasExtension(sync_pb::autofill);
55 v.ExpectHasExtension(sync_pb::preference);
56 v.ExpectHasExtension(sync_pb::bookmark);
57 v.ExpectNoOtherFieldsOrExtensions();
58 }
59
60 {
61 SCOPED_TRACE("Top level folders.");
62 syncable::ModelTypeBitSet enabled_types;
63 enabled_types[syncable::TOP_LEVEL_FOLDER] = true;
64 enabled_types[syncable::BOOKMARKS] = true;
65 sync_pb::EntitySpecifics get_updates_filter;
66 command_.SetRequestedTypes(enabled_types, &get_updates_filter);
67 ProtoExtensionValidator<sync_pb::EntitySpecifics> v(get_updates_filter);
68 v.ExpectHasExtension(sync_pb::bookmark);
69 v.ExpectNoOtherFieldsOrExtensions();
70 }
71
72 {
73 SCOPED_TRACE("Bookmarks only.");
74 syncable::ModelTypeBitSet enabled_types;
75 enabled_types[syncable::BOOKMARKS] = true;
76 sync_pb::EntitySpecifics get_updates_filter;
77 command_.SetRequestedTypes(enabled_types, &get_updates_filter);
78 ProtoExtensionValidator<sync_pb::EntitySpecifics> v(get_updates_filter);
79 v.ExpectHasExtension(sync_pb::bookmark);
80 v.ExpectNoOtherFieldsOrExtensions();
81 }
82
83 {
84 SCOPED_TRACE("Autofill only.");
85 syncable::ModelTypeBitSet enabled_types;
86 enabled_types[syncable::AUTOFILL] = true;
87 sync_pb::EntitySpecifics get_updates_filter;
88 command_.SetRequestedTypes(enabled_types, &get_updates_filter);
89 ProtoExtensionValidator<sync_pb::EntitySpecifics> v(get_updates_filter);
90 v.ExpectHasExtension(sync_pb::autofill);
91 v.ExpectNoOtherFieldsOrExtensions();
92 }
93
94 {
95 SCOPED_TRACE("Preferences only.");
96 syncable::ModelTypeBitSet enabled_types;
97 enabled_types[syncable::PREFERENCES] = true;
98 sync_pb::EntitySpecifics get_updates_filter;
99 command_.SetRequestedTypes(enabled_types, &get_updates_filter);
100 ProtoExtensionValidator<sync_pb::EntitySpecifics> v(get_updates_filter);
101 v.ExpectHasExtension(sync_pb::preference);
102 v.ExpectNoOtherFieldsOrExtensions();
103 }
104 }
105
TEST_F(DownloadUpdatesCommandTest,ExecuteNoPayloads)106 TEST_F(DownloadUpdatesCommandTest, ExecuteNoPayloads) {
107 ConfigureMockServerConnection();
108
109 syncable::ModelTypeSet types;
110 types.insert(syncable::AUTOFILL);
111 types.insert(syncable::BOOKMARKS);
112 types.insert(syncable::PREFERENCES);
113 SetRoutingInfo(types);
114 mock_server()->ExpectGetUpdatesRequestTypes(ModelTypeBitSetFromSet(types));
115 command_.ExecuteImpl(session());
116 }
117
TEST_F(DownloadUpdatesCommandTest,ExecuteWithPayloads)118 TEST_F(DownloadUpdatesCommandTest, ExecuteWithPayloads) {
119 ConfigureMockServerConnection();
120
121 syncable::ModelTypeSet types;
122 types.insert(syncable::AUTOFILL);
123 types.insert(syncable::BOOKMARKS);
124 types.insert(syncable::PREFERENCES);
125 SetRoutingInfo(types);
126 sessions::SyncSourceInfo source;
127 source.types[syncable::AUTOFILL] = "autofill_payload";
128 source.types[syncable::BOOKMARKS] = "bookmark_payload";
129 source.types[syncable::PREFERENCES] = "preferences_payload";
130 mock_server()->ExpectGetUpdatesRequestTypes(ModelTypeBitSetFromSet(types));
131 mock_server()->ExpectGetUpdatesRequestPayloads(source.types);
132 command_.ExecuteImpl(session(source));
133 }
134
135 } // namespace browser_sync
136