1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2009 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/sync/sessions/sync_session.h"
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/test/sync/engine/test_id_factory.h"
7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "testing/gtest/include/gtest/gtest.h"
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace browser_sync {
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace sessions {
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass StatusControllerTest : public testing::Test {
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void SetUp() {
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    routes_[syncable::BOOKMARKS] = GROUP_UI;
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected:
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ModelSafeRoutingInfo routes_;
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(StatusControllerTest, GetsDirty) {
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  StatusController status(routes_);
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  status.increment_num_conflicting_commits_by(1);
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(status.TestAndClearIsDirty());
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_FALSE(status.TestAndClearIsDirty());  // Test that it actually resets.
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  status.increment_num_conflicting_commits_by(0);
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_FALSE(status.TestAndClearIsDirty());
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  status.increment_num_conflicting_commits_by(1);
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(status.TestAndClearIsDirty());
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  status.set_num_consecutive_transient_error_commits(1);
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(status.TestAndClearIsDirty());
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  status.increment_num_consecutive_transient_error_commits_by(1);
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(status.TestAndClearIsDirty());
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  status.increment_num_consecutive_transient_error_commits_by(0);
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_FALSE(status.TestAndClearIsDirty());
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  status.set_num_consecutive_errors(10);
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(status.TestAndClearIsDirty());
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  status.set_num_consecutive_errors(10);
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_FALSE(status.TestAndClearIsDirty());  // Only dirty if value changed.
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  status.increment_num_consecutive_errors();
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(status.TestAndClearIsDirty());
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  status.increment_num_consecutive_errors_by(1);
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(status.TestAndClearIsDirty());
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  status.increment_num_consecutive_errors_by(0);
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_FALSE(status.TestAndClearIsDirty());
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  status.set_num_server_changes_remaining(30);
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(status.TestAndClearIsDirty());
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  status.set_invalid_store(true);
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(status.TestAndClearIsDirty());
55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  status.set_invalid_store(false);
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(status.TestAndClearIsDirty());
57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  status.set_syncer_stuck(true);
59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(status.TestAndClearIsDirty());
60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  status.set_syncer_stuck(false);
61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(status.TestAndClearIsDirty());
62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  status.set_syncing(true);
64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(status.TestAndClearIsDirty());
65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  status.set_syncing(false);
66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(status.TestAndClearIsDirty());
67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  status.increment_num_successful_commits();
69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(status.TestAndClearIsDirty());
70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  status.increment_num_successful_commits();
71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(status.TestAndClearIsDirty());
72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  {
74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ScopedModelSafeGroupRestriction r(&status, GROUP_UI);
75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    status.mutable_conflict_progress()->AddConflictingItemById(syncable::Id());
76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(status.TestAndClearIsDirty());
78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::vector<int64> v;
80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  v.push_back(1);
81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  status.set_unsynced_handles(v);
82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(status.TestAndClearIsDirty());
83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::vector<int64> v2;
84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  v2.push_back(1);
85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  status.set_unsynced_handles(v2);
86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_FALSE(status.TestAndClearIsDirty());  // Test for deep comparison.
87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
89c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(StatusControllerTest, StaysClean) {
90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  StatusController status(routes_);
91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  status.update_conflict_sets_built(true);
92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_FALSE(status.TestAndClearIsDirty());
93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  status.update_conflicts_resolved(true);
94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_FALSE(status.TestAndClearIsDirty());
95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  status.set_items_committed();
97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_FALSE(status.TestAndClearIsDirty());
98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  OrderedCommitSet commits(routes_);
100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  commits.AddCommitItem(0, syncable::Id(), syncable::BOOKMARKS);
101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  status.set_commit_set(commits);
102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_FALSE(status.TestAndClearIsDirty());
103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// This test is useful, as simple as it sounds, due to the copy-paste prone
106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// nature of status_controller.cc (we have had bugs in the past where a set_foo
107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// method was actually setting |bar_| instead!).
108c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(StatusControllerTest, ReadYourWrites) {
109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  StatusController status(routes_);
110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  status.increment_num_conflicting_commits_by(1);
111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(1, status.error_counters().num_conflicting_commits);
112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  status.set_num_consecutive_transient_error_commits(6);
114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(6, status.error_counters().consecutive_transient_error_commits);
115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  status.increment_num_consecutive_transient_error_commits_by(1);
116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(7, status.error_counters().consecutive_transient_error_commits);
117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  status.increment_num_consecutive_transient_error_commits_by(0);
118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(7, status.error_counters().consecutive_transient_error_commits);
119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  status.set_num_consecutive_errors(8);
121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(8, status.error_counters().consecutive_errors);
122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  status.increment_num_consecutive_errors();
123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(9, status.error_counters().consecutive_errors);
124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  status.increment_num_consecutive_errors_by(2);
125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(11, status.error_counters().consecutive_errors);
126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  status.set_num_server_changes_remaining(13);
128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(13, status.num_server_changes_remaining());
129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_FALSE(status.syncer_status().invalid_store);
131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  status.set_invalid_store(true);
132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(status.syncer_status().invalid_store);
133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_FALSE(status.syncer_status().syncer_stuck);
135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  status.set_syncer_stuck(true);
136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(status.syncer_status().syncer_stuck);
137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_FALSE(status.syncer_status().syncing);
139c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  status.set_syncing(true);
140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(status.syncer_status().syncing);
141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  for (int i = 0; i < 14; i++)
143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    status.increment_num_successful_commits();
144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(14, status.syncer_status().num_successful_commits);
145c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::vector<int64> v;
147c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  v.push_back(16);
148c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  status.set_unsynced_handles(v);
149c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(16, v[0]);
150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
151c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
152c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(StatusControllerTest, HasConflictingUpdates) {
153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  StatusController status(routes_);
154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_FALSE(status.HasConflictingUpdates());
155c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  {
156c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ScopedModelSafeGroupRestriction r(&status, GROUP_UI);
157c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_FALSE(status.update_progress().HasConflictingUpdates());
158c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    status.mutable_update_progress()->AddAppliedUpdate(SUCCESS,
159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        syncable::Id());
160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    status.mutable_update_progress()->AddAppliedUpdate(CONFLICT,
161c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        syncable::Id());
162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_TRUE(status.update_progress().HasConflictingUpdates());
163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
164c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
165c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(status.HasConflictingUpdates());
166c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  {
168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ScopedModelSafeGroupRestriction r(&status, GROUP_PASSIVE);
169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_FALSE(status.update_progress().HasConflictingUpdates());
170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
172c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
173c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(StatusControllerTest, CountUpdates) {
174c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  StatusController status(routes_);
175c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(0, status.CountUpdates());
176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ClientToServerResponse* response(status.mutable_updates_response());
177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  sync_pb::SyncEntity* entity1 = response->mutable_get_updates()->add_entries();
178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  sync_pb::SyncEntity* entity2 = response->mutable_get_updates()->add_entries();
179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(entity1 != NULL && entity2 != NULL);
180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(2, status.CountUpdates());
181c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
182c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
183c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Test TotalNumConflictingItems
184c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(StatusControllerTest, TotalNumConflictingItems) {
185c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  StatusController status(routes_);
186c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  TestIdFactory f;
187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  {
188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ScopedModelSafeGroupRestriction r(&status, GROUP_UI);
189c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    status.mutable_conflict_progress()->AddConflictingItemById(f.NewLocalId());
190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    status.mutable_conflict_progress()->AddConflictingItemById(f.NewLocalId());
191c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ(2, status.conflict_progress().ConflictingItemsSize());
192c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
193c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(2, status.TotalNumConflictingItems());
194c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  {
195c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ScopedModelSafeGroupRestriction r(&status, GROUP_DB);
196c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ(0, status.conflict_progress().ConflictingItemsSize());
197c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    status.mutable_conflict_progress()->AddConflictingItemById(f.NewLocalId());
198c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    status.mutable_conflict_progress()->AddConflictingItemById(f.NewLocalId());
199c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ(2, status.conflict_progress().ConflictingItemsSize());
200c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
201c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(4, status.TotalNumConflictingItems());
202c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
203c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
204c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Basic test that non group-restricted state accessors don't cause violations.
205c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(StatusControllerTest, Unrestricted) {
206c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  StatusController status(routes_);
207c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  status.GetUnrestrictedUpdateProgress(
208c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      GROUP_UI)->SuccessfullyAppliedUpdateCount();
209c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  status.mutable_commit_message();
210c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  status.commit_response();
211c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  status.mutable_commit_response();
212c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  status.updates_response();
213c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  status.mutable_updates_response();
214c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  status.error_counters();
215c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  status.syncer_status();
216c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  status.num_server_changes_remaining();
217c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  status.commit_ids();
218c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  status.HasBookmarkCommitActivity();
219c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  status.download_updates_succeeded();
220c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  status.ServerSaysNothingMoreToDownload();
221c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  status.group_restriction();
222c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
223c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
224c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}  // namespace sessions
225c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}  // namespace browser_sync
226