blob: 797b9baf989accb09d1329ad04e31d8937e5d2ba [file] [log] [blame]
// Copyright (c) 2012 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 "base/basictypes.h"
#include "sync/engine/store_timestamps_command.h"
#include "sync/internal_api/public/base/model_type.h"
#include "sync/protocol/sync.pb.h"
#include "sync/test/engine/syncer_command_test.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace syncer {
namespace {
// Adds a progress marker to |response| for the given field number and
// token.
void AddProgressMarkerForFieldNumber(
sync_pb::GetUpdatesResponse* response,
int field_number, const std::string& token) {
sync_pb::DataTypeProgressMarker* marker =
response->add_new_progress_marker();
marker->set_data_type_id(field_number);
marker->set_token(token);
}
// Adds a progress marker to |response| for the given model type and
// token.
void AddProgressMarkerForModelType(
sync_pb::GetUpdatesResponse* response,
ModelType model_type, const std::string& token) {
AddProgressMarkerForFieldNumber(
response, GetSpecificsFieldNumberFromModelType(model_type), token);
}
class StoreTimestampsCommandTest : public SyncerCommandTest {
protected:
// Gets the directory's progress marker's token for the given model
// type.
std::string GetProgessMarkerToken(ModelType model_type) {
sync_pb::DataTypeProgressMarker progress_marker;
session()->context()->directory()->GetDownloadProgress(
model_type, &progress_marker);
EXPECT_EQ(
GetSpecificsFieldNumberFromModelType(model_type),
progress_marker.data_type_id());
return progress_marker.token();
}
};
// Builds a GetUpdatesResponse with some progress markers, including
// invalid ones. ProcessNewProgressMarkers() should return the model
// types for the valid progress markers and fill in the progress
// markers in the directory.
TEST_F(StoreTimestampsCommandTest, ProcessNewProgressMarkers) {
sync_pb::GetUpdatesResponse response;
AddProgressMarkerForModelType(&response, BOOKMARKS, "token1");
AddProgressMarkerForModelType(&response,
HISTORY_DELETE_DIRECTIVES, "token2");
AddProgressMarkerForFieldNumber(&response, -1, "bad token");
ModelTypeSet forward_progress_types =
ProcessNewProgressMarkers(
response, session()->context()->directory());
EXPECT_TRUE(
forward_progress_types.Equals(
ModelTypeSet(BOOKMARKS, HISTORY_DELETE_DIRECTIVES)));
EXPECT_EQ("token1", GetProgessMarkerToken(BOOKMARKS));
EXPECT_EQ("token2", GetProgessMarkerToken(HISTORY_DELETE_DIRECTIVES));
ModelTypeSet non_forward_progress_types =
Difference(ModelTypeSet::All(), forward_progress_types);
for (ModelTypeSet::Iterator it = non_forward_progress_types.First();
it.Good(); it.Inc()) {
EXPECT_TRUE(GetProgessMarkerToken(it.Get()).empty());
}
}
} // namespace
} // namespace syncer