Chromium Code Reviews| 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 |