| // Copyright (c) 2011 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 "chrome/browser/sync/sessions/session_state.h" |
| |
| #include <string> |
| |
| #include "base/base64.h" |
| #include "base/memory/scoped_ptr.h" |
| #include "base/values.h" |
| #include "chrome/test/values_test_util.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| namespace browser_sync { |
| namespace sessions { |
| namespace { |
| |
| using test::ExpectBooleanValue; |
| using test::ExpectDictionaryValue; |
| using test::ExpectIntegerValue; |
| using test::ExpectListValue; |
| using test::ExpectStringValue; |
| |
| class SessionStateTest : public testing::Test {}; |
| |
| TEST_F(SessionStateTest, SyncSourceInfoToValue) { |
| sync_pb::GetUpdatesCallerInfo::GetUpdatesSource updates_source = |
| sync_pb::GetUpdatesCallerInfo::PERIODIC; |
| syncable::ModelTypePayloadMap types; |
| types[syncable::PREFERENCES] = "preferencespayload"; |
| types[syncable::EXTENSIONS] = ""; |
| scoped_ptr<DictionaryValue> expected_types_value( |
| syncable::ModelTypePayloadMapToValue(types)); |
| |
| SyncSourceInfo source_info(updates_source, types); |
| |
| scoped_ptr<DictionaryValue> value(source_info.ToValue()); |
| EXPECT_EQ(2u, value->size()); |
| ExpectStringValue("PERIODIC", *value, "updatesSource"); |
| ExpectDictionaryValue(*expected_types_value, *value, "types"); |
| } |
| |
| TEST_F(SessionStateTest, SyncerStatusToValue) { |
| SyncerStatus status; |
| status.invalid_store = true; |
| status.syncer_stuck = false; |
| status.syncing = true; |
| status.num_successful_commits = 5; |
| status.num_successful_bookmark_commits = 10; |
| status.num_updates_downloaded_total = 100; |
| status.num_tombstone_updates_downloaded_total = 200; |
| |
| scoped_ptr<DictionaryValue> value(status.ToValue()); |
| EXPECT_EQ(7u, value->size()); |
| ExpectBooleanValue(status.invalid_store, *value, "invalidStore"); |
| ExpectBooleanValue(status.syncer_stuck, *value, "syncerStuck"); |
| ExpectBooleanValue(status.syncing, *value, "syncing"); |
| ExpectIntegerValue(status.num_successful_commits, |
| *value, "numSuccessfulCommits"); |
| ExpectIntegerValue(status.num_successful_bookmark_commits, |
| *value, "numSuccessfulBookmarkCommits"); |
| ExpectIntegerValue(status.num_updates_downloaded_total, |
| *value, "numUpdatesDownloadedTotal"); |
| ExpectIntegerValue(status.num_tombstone_updates_downloaded_total, |
| *value, "numTombstoneUpdatesDownloadedTotal"); |
| } |
| |
| TEST_F(SessionStateTest, ErrorCountersToValue) { |
| ErrorCounters counters; |
| counters.num_conflicting_commits = 1; |
| counters.consecutive_transient_error_commits = 5; |
| counters.consecutive_errors = 3; |
| |
| scoped_ptr<DictionaryValue> value(counters.ToValue()); |
| EXPECT_EQ(3u, value->size()); |
| ExpectIntegerValue(counters.num_conflicting_commits, |
| *value, "numConflictingCommits"); |
| ExpectIntegerValue(counters.consecutive_transient_error_commits, |
| *value, "consecutiveTransientErrorCommits"); |
| ExpectIntegerValue(counters.consecutive_errors, |
| *value, "consecutiveErrors"); |
| } |
| |
| TEST_F(SessionStateTest, DownloadProgressMarkersToValue) { |
| std::string download_progress_markers[syncable::MODEL_TYPE_COUNT]; |
| for (int i = syncable::FIRST_REAL_MODEL_TYPE; |
| i < syncable::MODEL_TYPE_COUNT; ++i) { |
| std::string marker(i, i); |
| download_progress_markers[i] = marker; |
| } |
| |
| scoped_ptr<DictionaryValue> value( |
| DownloadProgressMarkersToValue(download_progress_markers)); |
| EXPECT_EQ(syncable::MODEL_TYPE_COUNT - syncable::FIRST_REAL_MODEL_TYPE, |
| static_cast<int>(value->size())); |
| for (int i = syncable::FIRST_REAL_MODEL_TYPE; |
| i < syncable::MODEL_TYPE_COUNT; ++i) { |
| syncable::ModelType model_type = syncable::ModelTypeFromInt(i); |
| std::string marker(i, i); |
| std::string expected_value; |
| EXPECT_TRUE(base::Base64Encode(marker, &expected_value)); |
| ExpectStringValue(expected_value, |
| *value, syncable::ModelTypeToString(model_type)); |
| } |
| } |
| |
| TEST_F(SessionStateTest, SyncSessionSnapshotToValue) { |
| SyncerStatus syncer_status; |
| syncer_status.num_successful_commits = 500; |
| scoped_ptr<DictionaryValue> expected_syncer_status_value( |
| syncer_status.ToValue()); |
| |
| ErrorCounters errors; |
| errors.num_conflicting_commits = 250; |
| scoped_ptr<DictionaryValue> expected_errors_value( |
| errors.ToValue()); |
| |
| const int kNumServerChangesRemaining = 105; |
| const bool kIsShareUsable = true; |
| |
| syncable::ModelTypeBitSet initial_sync_ended; |
| initial_sync_ended.set(syncable::BOOKMARKS); |
| initial_sync_ended.set(syncable::PREFERENCES); |
| scoped_ptr<ListValue> expected_initial_sync_ended_value( |
| syncable::ModelTypeBitSetToValue(initial_sync_ended)); |
| |
| std::string download_progress_markers[syncable::MODEL_TYPE_COUNT]; |
| download_progress_markers[syncable::BOOKMARKS] = "test"; |
| download_progress_markers[syncable::APPS] = "apps"; |
| scoped_ptr<DictionaryValue> expected_download_progress_markers_value( |
| DownloadProgressMarkersToValue(download_progress_markers)); |
| |
| const bool kHasMoreToSync = false; |
| const bool kIsSilenced = true; |
| const int kUnsyncedCount = 1053; |
| const int kNumConflictingUpdates = 1055; |
| const bool kDidCommitItems = true; |
| |
| SyncSourceInfo source; |
| scoped_ptr<DictionaryValue> expected_source_value(source.ToValue()); |
| |
| SyncSessionSnapshot snapshot(syncer_status, |
| errors, |
| kNumServerChangesRemaining, |
| kIsShareUsable, |
| initial_sync_ended, |
| download_progress_markers, |
| kHasMoreToSync, |
| kIsSilenced, |
| kUnsyncedCount, |
| kNumConflictingUpdates, |
| kDidCommitItems, |
| source); |
| scoped_ptr<DictionaryValue> value(snapshot.ToValue()); |
| EXPECT_EQ(12u, value->size()); |
| ExpectDictionaryValue(*expected_syncer_status_value, *value, |
| "syncerStatus"); |
| ExpectDictionaryValue(*expected_errors_value, *value, "errors"); |
| ExpectIntegerValue(kNumServerChangesRemaining, *value, |
| "numServerChangesRemaining"); |
| ExpectBooleanValue(kIsShareUsable, *value, "isShareUsable"); |
| ExpectListValue(*expected_initial_sync_ended_value, *value, |
| "initialSyncEnded"); |
| ExpectDictionaryValue(*expected_download_progress_markers_value, |
| *value, "downloadProgressMarkers"); |
| ExpectBooleanValue(kHasMoreToSync, *value, "hasMoreToSync"); |
| ExpectBooleanValue(kIsSilenced, *value, "isSilenced"); |
| ExpectIntegerValue(kUnsyncedCount, *value, "unsyncedCount"); |
| ExpectIntegerValue(kNumConflictingUpdates, *value, |
| "numConflictingUpdates"); |
| ExpectBooleanValue(kDidCommitItems, *value, |
| "didCommitItems"); |
| ExpectDictionaryValue(*expected_source_value, *value, "source"); |
| } |
| |
| } // namespace |
| } // namespace sessions |
| } // namespace browser_sync |