Index: chrome/browser/policy/device_policy_cache_unittest.cc |
diff --git a/chrome/browser/policy/device_policy_cache_unittest.cc b/chrome/browser/policy/device_policy_cache_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..79c2c822fe6d3b18a9d7d1cb5adf6f5b275ee871 |
--- /dev/null |
+++ b/chrome/browser/policy/device_policy_cache_unittest.cc |
@@ -0,0 +1,142 @@ |
+// 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/policy/device_policy_cache.h" |
+ |
+#include "policy/configuration_policy_type.h" |
+#include "testing/gmock/include/gmock/gmock.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+namespace policy { |
+ |
+namespace { |
+ |
+using ::chromeos::SignedSettings; |
+using ::chromeos::SignedSettingsHelper; |
+using ::testing::_; |
+using ::testing::InSequence; |
+ |
+class MockSignedSettingsHelper : public SignedSettingsHelper { |
+ public: |
+ MockSignedSettingsHelper() {} |
+ virtual ~MockSignedSettingsHelper() {} |
+ |
+ MOCK_METHOD2(StartStorePolicyOp, void(const em::PolicyFetchResponse&, |
+ SignedSettingsHelper::Callback*)); |
+ MOCK_METHOD1(StartRetrievePolicyOp, void(SignedSettingsHelper::Callback*)); |
+ MOCK_METHOD1(CancelCallback, void(SignedSettingsHelper::Callback*)); |
+ |
+ // This test doesn't need these methods, but since they're pure virtual in |
+ // SignedSettingsHelper, they must be implemented: |
+ MOCK_METHOD2(StartCheckWhitelistOp, void(const std::string&, |
+ SignedSettingsHelper::Callback*)); |
+ MOCK_METHOD3(StartWhitelistOp, void(const std::string&, bool, |
+ SignedSettingsHelper::Callback*)); |
+ MOCK_METHOD3(StartStorePropertyOp, void(const std::string&, |
+ const std::string&, |
+ SignedSettingsHelper::Callback*)); |
+ MOCK_METHOD2(StartRetrieveProperty, void(const std::string&, |
+ SignedSettingsHelper::Callback*)); |
+ |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(MockSignedSettingsHelper); |
+}; |
+ |
+ACTION_P(MockSignedSettingsHelperStorePolicy, status_code) { |
+ arg1->OnStorePolicyCompleted(status_code); |
+} |
+ |
+ACTION_P2(MockSignedSettingsHelperRetrievePolicy, status_code, policy) { |
+ arg0->OnRetrievePolicyCompleted(status_code, policy); |
+} |
+ |
+em::PolicyFetchResponse* CreateProxyPolicy(const std::string& proxy) { |
+ // This method omits a few fields which currently aren't needed by tests: |
+ // timestamp, machine_name, request_token, policy_type, public key info. |
+ em::PolicyData signed_response; |
+ em::ChromeDeviceSettingsProto settings; |
+ em::DeviceProxySettingsProto* proxy_proto = |
+ settings.mutable_device_proxy_settings(); |
+ proxy_proto->set_proxy_server(proxy); |
+ proxy_proto->set_proxy_mode("fixed_servers"); |
+ EXPECT_TRUE( |
+ settings.SerializeToString(signed_response.mutable_policy_value())); |
+ std::string serialized_signed_response; |
+ EXPECT_TRUE(signed_response.SerializeToString(&serialized_signed_response)); |
+ em::PolicyFetchResponse* response = new em::PolicyFetchResponse; |
+ response->set_policy_data(serialized_signed_response); |
+ return response; |
+} |
+ |
+} // namespace |
+ |
+class DevicePolicyCacheTest : public testing::Test { |
+ protected: |
+ DevicePolicyCacheTest() { |
+ } |
+ |
+ virtual void SetUp() { |
+ cache_.reset(new DevicePolicyCache(&signed_settings_helper_)); |
+ } |
+ |
+ virtual void TearDown() { |
+ EXPECT_CALL(signed_settings_helper_, CancelCallback(_)); |
+ cache_.reset(); |
+ } |
+ |
+ const PolicyMap& mandatory_policy(const DevicePolicyCache& cache) { |
+ return cache.mandatory_policy_; |
+ } |
+ |
+ scoped_ptr<DevicePolicyCache> cache_; |
+ MockSignedSettingsHelper signed_settings_helper_; |
+ |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(DevicePolicyCacheTest); |
+}; |
+ |
+TEST_F(DevicePolicyCacheTest, Startup) { |
+ scoped_ptr<em::PolicyFetchResponse> policy_response( |
+ CreateProxyPolicy("proxy.server")); |
+ EXPECT_CALL(signed_settings_helper_, StartRetrievePolicyOp(_)).WillOnce( |
+ MockSignedSettingsHelperRetrievePolicy(SignedSettings::SUCCESS, |
+ *policy_response)); |
+ cache_->Load(); |
+ // TODO(jkummerow): This will be EXPECT_GT once policy decoding is |
+ // implemented in DevicePolicyCache::DecodeDevicePolicy(...). |
+ EXPECT_EQ(mandatory_policy(*cache_).size(), 0U); |
+} |
+ |
+TEST_F(DevicePolicyCacheTest, SetPolicy) { |
+ InSequence s; |
+ // Startup. |
+ scoped_ptr<em::PolicyFetchResponse> policy_response( |
+ CreateProxyPolicy("proxy.server.old")); |
+ EXPECT_CALL(signed_settings_helper_, StartRetrievePolicyOp(_)).WillOnce( |
+ MockSignedSettingsHelperRetrievePolicy(SignedSettings::SUCCESS, |
+ *policy_response)); |
+ cache_->Load(); |
+ scoped_ptr<Value> expected(Value::CreateStringValue("proxy.server.old")); |
+ // TODO(jkummerow): This will be EXPECT_TRUE once policy decoding is |
+ // implemented in DevicePolicyCache::DecodeDevicePolicy(...). |
+ EXPECT_FALSE(Value::Equals( |
+ mandatory_policy(*cache_).Get(kPolicyProxyServer), expected.get())); |
+ testing::Mock::VerifyAndClearExpectations(&signed_settings_helper_); |
+ // Set new policy information. |
+ scoped_ptr<em::PolicyFetchResponse> new_policy_response( |
+ CreateProxyPolicy("proxy.server.new")); |
+ EXPECT_CALL(signed_settings_helper_, StartStorePolicyOp(_, _)).WillOnce( |
+ MockSignedSettingsHelperStorePolicy(chromeos::SignedSettings::SUCCESS)); |
+ EXPECT_CALL(signed_settings_helper_, StartRetrievePolicyOp(_)).WillOnce( |
+ MockSignedSettingsHelperRetrievePolicy(SignedSettings::SUCCESS, |
+ *new_policy_response)); |
+ cache_->SetPolicy(*new_policy_response); |
+ expected.reset(Value::CreateStringValue("proxy.server.new")); |
+ // TODO(jkummerow): This will be EXPECT_TRUE once policy decoding is |
+ // implemented in DevicePolicyCache::DecodeDevicePolicy(...). |
+ EXPECT_FALSE(Value::Equals( |
+ mandatory_policy(*cache_).Get(kPolicyProxyServer), expected.get())); |
+} |
+ |
+} // namespace policy |