OLD | NEW |
---|---|
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 |
OLD | NEW |