Home | History | Annotate | Download | only in engine
      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:
     22   DownloadUpdatesCommandTest() {}
     23 
     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 
     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 
     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 
    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 
    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