172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Use of this source code is governed by a BSD-style license that can be
372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// found in the LICENSE file.
472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/sync/sessions/session_state.h"
672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include <string>
872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "base/base64.h"
10ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_ptr.h"
1172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "base/values.h"
1272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/test/values_test_util.h"
1372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "testing/gtest/include/gtest/gtest.h"
1472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
1572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsennamespace browser_sync {
1672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsennamespace sessions {
1772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsennamespace {
1872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
1972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenusing test::ExpectBooleanValue;
2072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenusing test::ExpectDictionaryValue;
2172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenusing test::ExpectIntegerValue;
2272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenusing test::ExpectListValue;
2372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenusing test::ExpectStringValue;
2472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
2572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenclass SessionStateTest : public testing::Test {};
2672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
2772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenTEST_F(SessionStateTest, SyncSourceInfoToValue) {
2872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  sync_pb::GetUpdatesCallerInfo::GetUpdatesSource updates_source =
2972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      sync_pb::GetUpdatesCallerInfo::PERIODIC;
30ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  syncable::ModelTypePayloadMap types;
3172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  types[syncable::PREFERENCES] = "preferencespayload";
3272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  types[syncable::EXTENSIONS] = "";
3372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  scoped_ptr<DictionaryValue> expected_types_value(
34ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      syncable::ModelTypePayloadMapToValue(types));
3572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
3672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  SyncSourceInfo source_info(updates_source, types);
3772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
3872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  scoped_ptr<DictionaryValue> value(source_info.ToValue());
3972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  EXPECT_EQ(2u, value->size());
4072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ExpectStringValue("PERIODIC", *value, "updatesSource");
4172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ExpectDictionaryValue(*expected_types_value, *value, "types");
4272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}
4372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
4472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenTEST_F(SessionStateTest, SyncerStatusToValue) {
4572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  SyncerStatus status;
4672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  status.invalid_store = true;
4772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  status.syncer_stuck = false;
4872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  status.syncing = true;
4972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  status.num_successful_commits = 5;
5072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  status.num_successful_bookmark_commits = 10;
5172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  status.num_updates_downloaded_total = 100;
5272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  status.num_tombstone_updates_downloaded_total = 200;
5372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
5472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  scoped_ptr<DictionaryValue> value(status.ToValue());
5572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  EXPECT_EQ(7u, value->size());
5672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ExpectBooleanValue(status.invalid_store, *value, "invalidStore");
5772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ExpectBooleanValue(status.syncer_stuck, *value, "syncerStuck");
5872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ExpectBooleanValue(status.syncing, *value, "syncing");
5972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ExpectIntegerValue(status.num_successful_commits,
6072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                     *value, "numSuccessfulCommits");
6172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ExpectIntegerValue(status.num_successful_bookmark_commits,
6272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                     *value, "numSuccessfulBookmarkCommits");
6372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ExpectIntegerValue(status.num_updates_downloaded_total,
6472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                     *value, "numUpdatesDownloadedTotal");
6572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ExpectIntegerValue(status.num_tombstone_updates_downloaded_total,
6672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                     *value, "numTombstoneUpdatesDownloadedTotal");
6772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}
6872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
6972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenTEST_F(SessionStateTest, ErrorCountersToValue) {
7072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ErrorCounters counters;
7172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  counters.num_conflicting_commits = 1;
7272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  counters.consecutive_transient_error_commits = 5;
7372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  counters.consecutive_errors = 3;
7472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
7572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  scoped_ptr<DictionaryValue> value(counters.ToValue());
7672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  EXPECT_EQ(3u, value->size());
7772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ExpectIntegerValue(counters.num_conflicting_commits,
7872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                     *value, "numConflictingCommits");
7972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ExpectIntegerValue(counters.consecutive_transient_error_commits,
8072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                     *value, "consecutiveTransientErrorCommits");
8172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ExpectIntegerValue(counters.consecutive_errors,
8272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                     *value, "consecutiveErrors");
8372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}
8472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
8572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenTEST_F(SessionStateTest, DownloadProgressMarkersToValue) {
8672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  std::string download_progress_markers[syncable::MODEL_TYPE_COUNT];
8772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  for (int i = syncable::FIRST_REAL_MODEL_TYPE;
8872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen       i < syncable::MODEL_TYPE_COUNT; ++i) {
8972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    std::string marker(i, i);
9072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    download_progress_markers[i] = marker;
9172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  }
9272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
9372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  scoped_ptr<DictionaryValue> value(
9472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      DownloadProgressMarkersToValue(download_progress_markers));
9572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  EXPECT_EQ(syncable::MODEL_TYPE_COUNT - syncable::FIRST_REAL_MODEL_TYPE,
9672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen            static_cast<int>(value->size()));
9772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  for (int i = syncable::FIRST_REAL_MODEL_TYPE;
9872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen       i < syncable::MODEL_TYPE_COUNT; ++i) {
9972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    syncable::ModelType model_type = syncable::ModelTypeFromInt(i);
10072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    std::string marker(i, i);
10172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    std::string expected_value;
10272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    EXPECT_TRUE(base::Base64Encode(marker, &expected_value));
10372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    ExpectStringValue(expected_value,
10472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                      *value, syncable::ModelTypeToString(model_type));
10572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  }
10672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}
10772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
10872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenTEST_F(SessionStateTest, SyncSessionSnapshotToValue) {
10972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  SyncerStatus syncer_status;
11072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  syncer_status.num_successful_commits = 500;
11172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  scoped_ptr<DictionaryValue> expected_syncer_status_value(
11272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      syncer_status.ToValue());
11372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
11472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ErrorCounters errors;
11572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  errors.num_conflicting_commits = 250;
11672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  scoped_ptr<DictionaryValue> expected_errors_value(
11772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      errors.ToValue());
11872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
11972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  const int kNumServerChangesRemaining = 105;
12072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  const bool kIsShareUsable = true;
12172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
12272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  syncable::ModelTypeBitSet initial_sync_ended;
12372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  initial_sync_ended.set(syncable::BOOKMARKS);
12472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  initial_sync_ended.set(syncable::PREFERENCES);
12572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  scoped_ptr<ListValue> expected_initial_sync_ended_value(
12672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      syncable::ModelTypeBitSetToValue(initial_sync_ended));
12772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
12872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  std::string download_progress_markers[syncable::MODEL_TYPE_COUNT];
12972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  download_progress_markers[syncable::BOOKMARKS] = "test";
13072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  download_progress_markers[syncable::APPS] = "apps";
13172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  scoped_ptr<DictionaryValue> expected_download_progress_markers_value(
13272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      DownloadProgressMarkersToValue(download_progress_markers));
13372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
13472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  const bool kHasMoreToSync = false;
13572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  const bool kIsSilenced = true;
13672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  const int kUnsyncedCount = 1053;
13772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  const int kNumConflictingUpdates = 1055;
13872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  const bool kDidCommitItems = true;
13972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
14072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  SyncSourceInfo source;
14172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  scoped_ptr<DictionaryValue> expected_source_value(source.ToValue());
14272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
14372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  SyncSessionSnapshot snapshot(syncer_status,
14472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                               errors,
14572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                               kNumServerChangesRemaining,
14672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                               kIsShareUsable,
14772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                               initial_sync_ended,
14872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                               download_progress_markers,
14972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                               kHasMoreToSync,
15072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                               kIsSilenced,
15172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                               kUnsyncedCount,
15272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                               kNumConflictingUpdates,
15372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                               kDidCommitItems,
15472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                               source);
15572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  scoped_ptr<DictionaryValue> value(snapshot.ToValue());
15672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  EXPECT_EQ(12u, value->size());
15772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ExpectDictionaryValue(*expected_syncer_status_value, *value,
15872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                        "syncerStatus");
15972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ExpectDictionaryValue(*expected_errors_value, *value, "errors");
16072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ExpectIntegerValue(kNumServerChangesRemaining, *value,
16172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                     "numServerChangesRemaining");
16272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ExpectBooleanValue(kIsShareUsable, *value, "isShareUsable");
16372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ExpectListValue(*expected_initial_sync_ended_value, *value,
16472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                  "initialSyncEnded");
16572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ExpectDictionaryValue(*expected_download_progress_markers_value,
16672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                        *value, "downloadProgressMarkers");
16772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ExpectBooleanValue(kHasMoreToSync, *value, "hasMoreToSync");
16872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ExpectBooleanValue(kIsSilenced, *value, "isSilenced");
16972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ExpectIntegerValue(kUnsyncedCount, *value, "unsyncedCount");
17072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ExpectIntegerValue(kNumConflictingUpdates, *value,
17172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                     "numConflictingUpdates");
17272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ExpectBooleanValue(kDidCommitItems, *value,
17372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                     "didCommitItems");
17472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ExpectDictionaryValue(*expected_source_value, *value, "source");
17572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}
17672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
17772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}  // namespace
17872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}  // namespace sessions
17972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}  // namespace browser_sync
180