Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(464)

Side by Side Diff: chrome/browser/chromeos/policy/server_backed_state_keys_broker_unittest.cc

Issue 2657013002: Introduce ThreadTaskRunnerHandle::OverrideForTesting and TestMockTimeTaskRunner::ScopedContext. (Closed)
Patch Set: fix RecentTabHelperTest crash? Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/chromeos/policy/server_backed_state_keys_broker.h" 5 #include "chrome/browser/chromeos/policy/server_backed_state_keys_broker.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/macros.h" 9 #include "base/macros.h"
10 #include "base/message_loop/message_loop.h" 10 #include "base/message_loop/message_loop.h"
11 #include "base/run_loop.h" 11 #include "base/run_loop.h"
12 #include "base/test/test_simple_task_runner.h" 12 #include "base/test/scoped_mock_time_message_loop_task_runner.h"
13 #include "chromeos/dbus/fake_session_manager_client.h" 13 #include "chromeos/dbus/fake_session_manager_client.h"
14 #include "testing/gtest/include/gtest/gtest.h" 14 #include "testing/gtest/include/gtest/gtest.h"
15 15
16 namespace policy { 16 namespace policy {
17 17
18 class ServerBackedStateKeysBrokerTest : public testing::Test { 18 class ServerBackedStateKeysBrokerTest : public testing::Test {
19 public: 19 public:
20 ServerBackedStateKeysBrokerTest() 20 ServerBackedStateKeysBrokerTest()
21 : task_runner_(new base::TestSimpleTaskRunner()), 21 : broker_(&fake_session_manager_client_),
22 broker_(&fake_session_manager_client_, task_runner_),
23 updated_(false), 22 updated_(false),
24 callback_invoked_(false) { 23 callback_invoked_(false) {
25 state_keys_.push_back("1"); 24 state_keys_.push_back("1");
26 state_keys_.push_back("2"); 25 state_keys_.push_back("2");
27 state_keys_.push_back("3"); 26 state_keys_.push_back("3");
28 fake_session_manager_client_.set_server_backed_state_keys(state_keys_); 27 fake_session_manager_client_.set_server_backed_state_keys(state_keys_);
29 } 28 }
30 ~ServerBackedStateKeysBrokerTest() override {} 29 ~ServerBackedStateKeysBrokerTest() override {}
31 30
32 void StateKeysUpdated() { 31 void StateKeysUpdated() {
33 updated_ = true; 32 updated_ = true;
34 } 33 }
35 34
36 void ExpectGood() { 35 void ExpectGood() {
37 EXPECT_FALSE(broker_.pending()); 36 EXPECT_FALSE(broker_.pending());
38 EXPECT_TRUE(broker_.available()); 37 EXPECT_TRUE(broker_.available());
39 EXPECT_EQ(state_keys_, broker_.state_keys()); 38 EXPECT_EQ(state_keys_, broker_.state_keys());
40 EXPECT_EQ(state_keys_.front(), broker_.current_state_key()); 39 EXPECT_EQ(state_keys_.front(), broker_.current_state_key());
41 } 40 }
42 41
43 void HandleStateKeysCallback(const std::vector<std::string>& state_keys) { 42 void HandleStateKeysCallback(const std::vector<std::string>& state_keys) {
44 callback_invoked_ = true; 43 callback_invoked_ = true;
45 callback_state_keys_ = state_keys; 44 callback_state_keys_ = state_keys;
46 } 45 }
47 46
48 protected: 47 protected:
49 base::MessageLoop loop_; 48 base::MessageLoop loop_;
50 scoped_refptr<base::TestSimpleTaskRunner> task_runner_; 49 base::ScopedMockTimeMessageLoopTaskRunner mocked_main_runner_;
51 chromeos::FakeSessionManagerClient fake_session_manager_client_; 50 chromeos::FakeSessionManagerClient fake_session_manager_client_;
52 ServerBackedStateKeysBroker broker_; 51 ServerBackedStateKeysBroker broker_;
53 std::vector<std::string> state_keys_; 52 std::vector<std::string> state_keys_;
54 bool updated_; 53 bool updated_;
55 std::vector<std::string> callback_state_keys_; 54 std::vector<std::string> callback_state_keys_;
56 bool callback_invoked_; 55 bool callback_invoked_;
57 56
58 private: 57 private:
59 DISALLOW_COPY_AND_ASSIGN(ServerBackedStateKeysBrokerTest); 58 DISALLOW_COPY_AND_ASSIGN(ServerBackedStateKeysBrokerTest);
60 }; 59 };
61 60
62 TEST_F(ServerBackedStateKeysBrokerTest, Load) { 61 TEST_F(ServerBackedStateKeysBrokerTest, Load) {
63 EXPECT_TRUE(broker_.pending()); 62 EXPECT_TRUE(broker_.pending());
64 EXPECT_FALSE(broker_.available()); 63 EXPECT_FALSE(broker_.available());
65 EXPECT_TRUE(broker_.state_keys().empty()); 64 EXPECT_TRUE(broker_.state_keys().empty());
66 EXPECT_TRUE(broker_.current_state_key().empty()); 65 EXPECT_TRUE(broker_.current_state_key().empty());
67 66
68 ServerBackedStateKeysBroker::Subscription subscription = 67 ServerBackedStateKeysBroker::Subscription subscription =
69 broker_.RegisterUpdateCallback( 68 broker_.RegisterUpdateCallback(
70 base::Bind(&ServerBackedStateKeysBrokerTest::StateKeysUpdated, 69 base::Bind(&ServerBackedStateKeysBrokerTest::StateKeysUpdated,
71 base::Unretained(this))); 70 base::Unretained(this)));
72 base::RunLoop().RunUntilIdle(); 71 mocked_main_runner_->RunUntilIdle();
emaxx 2017/03/01 14:43:53 nit: #include "base/test/test_mock_time_task_runne
gab 2017/03/02 00:33:31 We had a similar discussion @ https://bugs.chromiu
emaxx 2017/03/02 02:39:39 The definition of the ScopedMockTimeMessageLoopTas
gab 2017/03/02 03:24:44 In pure IWYU sense you're right, but as was conclu
73 EXPECT_TRUE(updated_); 72 EXPECT_TRUE(updated_);
74 ExpectGood(); 73 ExpectGood();
75 } 74 }
76 75
77 TEST_F(ServerBackedStateKeysBrokerTest, Retry) { 76 TEST_F(ServerBackedStateKeysBrokerTest, Retry) {
78 fake_session_manager_client_.set_server_backed_state_keys( 77 fake_session_manager_client_.set_server_backed_state_keys(
79 std::vector<std::string>()); 78 std::vector<std::string>());
80 79
81 ServerBackedStateKeysBroker::Subscription subscription = 80 ServerBackedStateKeysBroker::Subscription subscription =
82 broker_.RegisterUpdateCallback( 81 broker_.RegisterUpdateCallback(
83 base::Bind(&ServerBackedStateKeysBrokerTest::StateKeysUpdated, 82 base::Bind(&ServerBackedStateKeysBrokerTest::StateKeysUpdated,
84 base::Unretained(this))); 83 base::Unretained(this)));
85 base::RunLoop().RunUntilIdle(); 84 mocked_main_runner_->RunUntilIdle();
86 EXPECT_TRUE(updated_); 85 EXPECT_TRUE(updated_);
87 86
88 EXPECT_FALSE(broker_.pending()); 87 EXPECT_FALSE(broker_.pending());
89 EXPECT_FALSE(broker_.available()); 88 EXPECT_FALSE(broker_.available());
90 EXPECT_TRUE(broker_.state_keys().empty()); 89 EXPECT_TRUE(broker_.state_keys().empty());
91 EXPECT_TRUE(broker_.current_state_key().empty()); 90 EXPECT_TRUE(broker_.current_state_key().empty());
92 91
93 fake_session_manager_client_.set_server_backed_state_keys(state_keys_); 92 fake_session_manager_client_.set_server_backed_state_keys(state_keys_);
94 updated_ = false; 93 updated_ = false;
95 ServerBackedStateKeysBroker::Subscription subscription2 = 94 ServerBackedStateKeysBroker::Subscription subscription2 =
96 broker_.RegisterUpdateCallback(base::Bind(&base::DoNothing)); 95 broker_.RegisterUpdateCallback(base::Bind(&base::DoNothing));
97 base::RunLoop().RunUntilIdle(); 96 mocked_main_runner_->RunUntilIdle();
98 EXPECT_TRUE(updated_); 97 EXPECT_TRUE(updated_);
99 ExpectGood(); 98 ExpectGood();
100 } 99 }
101 100
102 TEST_F(ServerBackedStateKeysBrokerTest, Refresh) { 101 TEST_F(ServerBackedStateKeysBrokerTest, Refresh) {
103 ServerBackedStateKeysBroker::Subscription subscription = 102 ServerBackedStateKeysBroker::Subscription subscription =
104 broker_.RegisterUpdateCallback( 103 broker_.RegisterUpdateCallback(
105 base::Bind(&ServerBackedStateKeysBrokerTest::StateKeysUpdated, 104 base::Bind(&ServerBackedStateKeysBrokerTest::StateKeysUpdated,
106 base::Unretained(this))); 105 base::Unretained(this)));
107 base::RunLoop().RunUntilIdle(); 106 mocked_main_runner_->RunUntilIdle();
108 EXPECT_TRUE(updated_); 107 EXPECT_TRUE(updated_);
109 ExpectGood(); 108 ExpectGood();
110 109
111 // Update callbacks get fired if the keys change. 110 // Update callbacks get fired if the keys change.
112 state_keys_.erase(state_keys_.begin()); 111 state_keys_.erase(state_keys_.begin());
113 state_keys_.push_back("4"); 112 state_keys_.push_back("4");
114 fake_session_manager_client_.set_server_backed_state_keys(state_keys_); 113 fake_session_manager_client_.set_server_backed_state_keys(state_keys_);
115 updated_ = false; 114 updated_ = false;
116 task_runner_->RunPendingTasks(); 115 mocked_main_runner_->FastForwardBy(
117 base::RunLoop().RunUntilIdle(); 116 ServerBackedStateKeysBroker::GetPollIntervalForTesting());
118 EXPECT_TRUE(updated_); 117 EXPECT_TRUE(updated_);
119 ExpectGood(); 118 ExpectGood();
120 119
121 // No update callback if the keys are unchanged. 120 // No update callback if the keys are unchanged.
122 updated_ = false; 121 updated_ = false;
123 task_runner_->RunPendingTasks(); 122 mocked_main_runner_->FastForwardBy(
124 base::RunLoop().RunUntilIdle(); 123 ServerBackedStateKeysBroker::GetPollIntervalForTesting());
125 EXPECT_FALSE(updated_); 124 EXPECT_FALSE(updated_);
126 ExpectGood(); 125 ExpectGood();
127 } 126 }
128 127
129 TEST_F(ServerBackedStateKeysBrokerTest, Request) { 128 TEST_F(ServerBackedStateKeysBrokerTest, Request) {
130 broker_.RequestStateKeys( 129 broker_.RequestStateKeys(
131 base::Bind(&ServerBackedStateKeysBrokerTest::HandleStateKeysCallback, 130 base::Bind(&ServerBackedStateKeysBrokerTest::HandleStateKeysCallback,
132 base::Unretained(this))); 131 base::Unretained(this)));
133 base::RunLoop().RunUntilIdle(); 132 mocked_main_runner_->RunUntilIdle();
134 ExpectGood(); 133 ExpectGood();
135 EXPECT_TRUE(callback_invoked_); 134 EXPECT_TRUE(callback_invoked_);
136 EXPECT_EQ(state_keys_, callback_state_keys_); 135 EXPECT_EQ(state_keys_, callback_state_keys_);
137 } 136 }
138 137
139 TEST_F(ServerBackedStateKeysBrokerTest, RequestFailure) { 138 TEST_F(ServerBackedStateKeysBrokerTest, RequestFailure) {
140 fake_session_manager_client_.set_server_backed_state_keys( 139 fake_session_manager_client_.set_server_backed_state_keys(
141 std::vector<std::string>()); 140 std::vector<std::string>());
142 141
143 broker_.RequestStateKeys( 142 broker_.RequestStateKeys(
144 base::Bind(&ServerBackedStateKeysBrokerTest::HandleStateKeysCallback, 143 base::Bind(&ServerBackedStateKeysBrokerTest::HandleStateKeysCallback,
145 base::Unretained(this))); 144 base::Unretained(this)));
146 base::RunLoop().RunUntilIdle(); 145 mocked_main_runner_->RunUntilIdle();
147 EXPECT_TRUE(callback_invoked_); 146 EXPECT_TRUE(callback_invoked_);
148 EXPECT_TRUE(callback_state_keys_.empty()); 147 EXPECT_TRUE(callback_state_keys_.empty());
149 } 148 }
150 149
151 } // namespace policy 150 } // namespace policy
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698