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