• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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