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

Unified Diff: chrome/browser/policy/cloud/component_cloud_policy_service_unittest.cc

Issue 72793003: ComponentCloudPolicyService tracks the signin state. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 7 years, 1 month 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/policy/cloud/component_cloud_policy_service_unittest.cc
diff --git a/chrome/browser/policy/cloud/component_cloud_policy_service_unittest.cc b/chrome/browser/policy/cloud/component_cloud_policy_service_unittest.cc
index 5c3a22326750e35f21c83396acdd65288bb8f92f..5885d1c3478609a059eeafc53dd14873a52629d9 100644
--- a/chrome/browser/policy/cloud/component_cloud_policy_service_unittest.cc
+++ b/chrome/browser/policy/cloud/component_cloud_policy_service_unittest.cc
@@ -4,6 +4,9 @@
#include "chrome/browser/policy/cloud/component_cloud_policy_service.h"
+#include <map>
+#include <string>
+
#include "base/callback.h"
#include "base/files/scoped_temp_dir.h"
#include "base/message_loop/message_loop.h"
@@ -68,7 +71,6 @@ class MockComponentCloudPolicyDelegate
public:
virtual ~MockComponentCloudPolicyDelegate() {}
- MOCK_METHOD0(OnComponentCloudPolicyRefreshNeeded, void());
MOCK_METHOD0(OnComponentCloudPolicyUpdated, void());
};
@@ -95,7 +97,11 @@ class TestURLRequestContextGetter : public net::URLRequestContextGetter {
class ComponentCloudPolicyServiceTest : public testing::Test {
protected:
- ComponentCloudPolicyServiceTest() {}
+ ComponentCloudPolicyServiceTest()
+ : client_(NULL),
+ core_(PolicyNamespaceKey(GetChromeUserPolicyType(), ""),
+ &store_,
+ loop_.message_loop_proxy()) {}
virtual void SetUp() OVERRIDE {
ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
@@ -106,9 +112,8 @@ class ComponentCloudPolicyServiceTest : public testing::Test {
service_.reset(new ComponentCloudPolicyService(
&delegate_,
&registry_,
- &store_,
+ &core_,
make_scoped_ptr(cache_),
- &client_,
request_context_,
loop_.message_loop_proxy(),
loop_.message_loop_proxy()));
@@ -123,8 +128,6 @@ class ComponentCloudPolicyServiceTest : public testing::Test {
base::Value::CreateStringValue("disabled"), NULL);
expected_policy_.Set("Second", POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER,
base::Value::CreateStringValue("maybe"), NULL);
-
- EXPECT_EQ(0u, client_.namespaces_to_fetch_.size());
}
virtual void TearDown() OVERRIDE {
@@ -137,6 +140,31 @@ class ComponentCloudPolicyServiceTest : public testing::Test {
base::RunLoop().RunUntilIdle();
}
+ void Connect(size_t expected_namespaces_in_client) {
+ client_ = new MockCloudPolicyClient();
+ client_->SetDMToken(ComponentPolicyBuilder::kFakeToken);
+ EXPECT_EQ(0u, client_->namespaces_to_fetch_.size());
+
+ core_.Connect(scoped_ptr<CloudPolicyClient>(client_));
+
+ // |expected_namespaces_in_client| is the expected number of components
+ // that the ComponentCloudPolicyService will set at the |client_| at
+ // OnCoreConnected.
+ EXPECT_EQ(expected_namespaces_in_client,
+ client_->namespaces_to_fetch_.size());
+
+ // Also initialize the refresh scheduler, so that calls to
+ // core()->RefreshSoon() trigger a FetchPolicy() call on the mock |client_|.
+ // Expect the initial refresh now, if the store doesn't have policy (if it
+ // does then the CloudPolicyRefreshScheduler won't start refreshing until
+ // invalidations are available, or a timeout elapses).
+ if (!store_.has_policy())
+ EXPECT_CALL(*client_, FetchPolicy());
+ core_.StartRefreshScheduler();
+ RunUntilIdle();
+ Mock::VerifyAndClearExpectations(client_);
+ }
+
void LoadStore() {
EXPECT_FALSE(store_.is_initialized());
@@ -196,8 +224,9 @@ class ComponentCloudPolicyServiceTest : public testing::Test {
// |cache_| is owned by the |service_| and is invalid once the |service_|
// is destroyed.
ResourceCache* cache_;
- MockCloudPolicyClient client_;
+ MockCloudPolicyClient* client_;
MockCloudPolicyStore store_;
+ CloudPolicyCore core_;
SchemaRegistry registry_;
scoped_ptr<ComponentCloudPolicyService> service_;
ComponentPolicyBuilder builder_;
@@ -206,78 +235,89 @@ class ComponentCloudPolicyServiceTest : public testing::Test {
TEST_F(ComponentCloudPolicyServiceTest, InitializedAtConstructionTime) {
service_.reset();
+ Connect(1u);
LoadStore();
InitializeRegistry();
cache_ = new ResourceCache(temp_dir_.path(), loop_.message_loop_proxy());
service_.reset(new ComponentCloudPolicyService(&delegate_,
&registry_,
- &store_,
+ &core_,
make_scoped_ptr(cache_),
- &client_,
request_context_,
loop_.message_loop_proxy(),
loop_.message_loop_proxy()));
EXPECT_FALSE(service_->is_initialized());
- EXPECT_CALL(delegate_, OnComponentCloudPolicyRefreshNeeded());
EXPECT_CALL(delegate_, OnComponentCloudPolicyUpdated());
+ EXPECT_CALL(*client_, FetchPolicy());
RunUntilIdle();
+ Mock::VerifyAndClearExpectations(&client_);
Mock::VerifyAndClearExpectations(&delegate_);
EXPECT_TRUE(service_->is_initialized());
- EXPECT_EQ(1u, client_.namespaces_to_fetch_.size());
+ EXPECT_EQ(2u, client_->namespaces_to_fetch_.size());
const PolicyBundle empty_bundle;
EXPECT_TRUE(service_->policy().Equals(empty_bundle));
}
TEST_F(ComponentCloudPolicyServiceTest, InitializeStoreThenRegistry) {
- EXPECT_CALL(delegate_, OnComponentCloudPolicyRefreshNeeded()).Times(0);
+ Connect(1u);
+
EXPECT_CALL(delegate_, OnComponentCloudPolicyUpdated()).Times(0);
+ EXPECT_CALL(*client_, FetchPolicy()).Times(0);
LoadStore();
+ Mock::VerifyAndClearExpectations(client_);
Mock::VerifyAndClearExpectations(&delegate_);
EXPECT_FALSE(service_->is_initialized());
- EXPECT_CALL(delegate_, OnComponentCloudPolicyRefreshNeeded());
EXPECT_CALL(delegate_, OnComponentCloudPolicyUpdated());
+ EXPECT_CALL(*client_, FetchPolicy());
InitializeRegistry();
RunUntilIdle();
+ Mock::VerifyAndClearExpectations(client_);
Mock::VerifyAndClearExpectations(&delegate_);
EXPECT_TRUE(service_->is_initialized());
- EXPECT_EQ(1u, client_.namespaces_to_fetch_.size());
+
const PolicyBundle empty_bundle;
EXPECT_TRUE(service_->policy().Equals(empty_bundle));
}
TEST_F(ComponentCloudPolicyServiceTest, InitializeRegistryThenStore) {
- EXPECT_CALL(delegate_, OnComponentCloudPolicyRefreshNeeded()).Times(0);
+ Connect(1u);
+
EXPECT_CALL(delegate_, OnComponentCloudPolicyUpdated()).Times(0);
+ EXPECT_CALL(*client_, FetchPolicy()).Times(0);
InitializeRegistry();
RunUntilIdle();
+ Mock::VerifyAndClearExpectations(client_);
Mock::VerifyAndClearExpectations(&delegate_);
EXPECT_FALSE(service_->is_initialized());
- EXPECT_CALL(delegate_, OnComponentCloudPolicyRefreshNeeded());
EXPECT_CALL(delegate_, OnComponentCloudPolicyUpdated());
+ EXPECT_CALL(*client_, FetchPolicy());
LoadStore();
+ Mock::VerifyAndClearExpectations(client_);
Mock::VerifyAndClearExpectations(&delegate_);
EXPECT_TRUE(service_->is_initialized());
- EXPECT_EQ(1u, client_.namespaces_to_fetch_.size());
+ EXPECT_EQ(2u, client_->namespaces_to_fetch_.size());
const PolicyBundle empty_bundle;
EXPECT_TRUE(service_->policy().Equals(empty_bundle));
}
TEST_F(ComponentCloudPolicyServiceTest, InitializeWithCachedPolicy) {
PopulateCache();
+ Connect(1u);
- EXPECT_CALL(delegate_, OnComponentCloudPolicyRefreshNeeded());
EXPECT_CALL(delegate_, OnComponentCloudPolicyUpdated());
+ EXPECT_CALL(*client_, FetchPolicy());
InitializeRegistry();
LoadStore();
+ Mock::VerifyAndClearExpectations(client_);
Mock::VerifyAndClearExpectations(&delegate_);
EXPECT_TRUE(service_->is_initialized());
- EXPECT_EQ(1u, client_.namespaces_to_fetch_.size());
+ EXPECT_EQ(2u, client_->namespaces_to_fetch_.size());
// kTestExtension2 is not in the registry so it was dropped.
std::map<std::string, std::string> contents;
@@ -292,29 +332,31 @@ TEST_F(ComponentCloudPolicyServiceTest, InitializeWithCachedPolicy) {
}
TEST_F(ComponentCloudPolicyServiceTest, FetchPolicy) {
+ Connect(1u);
// Initialize the store and create the backend.
// A refresh is not needed, because no components are registered yet.
- EXPECT_CALL(delegate_, OnComponentCloudPolicyRefreshNeeded()).Times(0);
EXPECT_CALL(delegate_, OnComponentCloudPolicyUpdated());
+ EXPECT_CALL(*client_, FetchPolicy()).Times(0);
registry_.SetReady(POLICY_DOMAIN_CHROME);
registry_.SetReady(POLICY_DOMAIN_EXTENSIONS);
LoadStore();
+ Mock::VerifyAndClearExpectations(client_);
Mock::VerifyAndClearExpectations(&delegate_);
EXPECT_TRUE(service_->is_initialized());
// Register the components to fetch.
- EXPECT_CALL(delegate_, OnComponentCloudPolicyRefreshNeeded());
+ EXPECT_CALL(*client_, FetchPolicy());
registry_.RegisterComponent(
PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, kTestExtension),
CreateTestSchema());
RunUntilIdle();
- Mock::VerifyAndClearExpectations(&delegate_);
+ Mock::VerifyAndClearExpectations(client_);
// Send back a fake policy fetch response.
- client_.SetPolicy(PolicyNamespaceKey(dm_protocol::kChromeExtensionPolicyType,
- kTestExtension),
- *CreateResponse());
- service_->OnPolicyFetched(&client_);
+ client_->SetPolicy(PolicyNamespaceKey(dm_protocol::kChromeExtensionPolicyType,
+ kTestExtension),
+ *CreateResponse());
+ service_->OnPolicyFetched(client_);
RunUntilIdle();
// That should have triggered the download fetch.
@@ -337,6 +379,7 @@ TEST_F(ComponentCloudPolicyServiceTest, FetchPolicy) {
}
TEST_F(ComponentCloudPolicyServiceTest, LoadAndPurgeCache) {
+ Connect(1u);
// Insert data in the cache.
PopulateCache();
registry_.RegisterComponent(
@@ -346,8 +389,9 @@ TEST_F(ComponentCloudPolicyServiceTest, LoadAndPurgeCache) {
// Load the initial cache.
EXPECT_CALL(delegate_, OnComponentCloudPolicyUpdated());
- EXPECT_CALL(delegate_, OnComponentCloudPolicyRefreshNeeded());
+ EXPECT_CALL(*client_, FetchPolicy());
LoadStore();
+ Mock::VerifyAndClearExpectations(client_);
Mock::VerifyAndClearExpectations(&delegate_);
PolicyBundle expected_bundle;
@@ -378,10 +422,9 @@ TEST_F(ComponentCloudPolicyServiceTest, SignInAfterStartup) {
registry_.SetReady(POLICY_DOMAIN_CHROME);
registry_.SetReady(POLICY_DOMAIN_EXTENSIONS);
- // Do the same as LoadStore() but without the initial credentials.
+ // Initialize the store without credentials.
EXPECT_FALSE(store_.is_initialized());
EXPECT_FALSE(service_->is_initialized());
- store_.policy_.reset(new em::PolicyData()); // No credentials.
EXPECT_CALL(delegate_, OnComponentCloudPolicyUpdated());
store_.NotifyStoreLoaded();
RunUntilIdle();
@@ -389,22 +432,24 @@ TEST_F(ComponentCloudPolicyServiceTest, SignInAfterStartup) {
EXPECT_TRUE(service_->is_initialized());
// Register an extension.
- EXPECT_CALL(delegate_, OnComponentCloudPolicyRefreshNeeded());
registry_.RegisterComponent(
PolicyNamespace(POLICY_DOMAIN_EXTENSIONS, kTestExtension),
CreateTestSchema());
RunUntilIdle();
- Mock::VerifyAndClearExpectations(&delegate_);
+
+ // Now signin. A fetch will be requested for the new extension.
+ Connect(2u);
// Send the response to the service. The response data will be ignored,
// because the store doesn't have the updated credentials yet.
- client_.SetPolicy(PolicyNamespaceKey(dm_protocol::kChromeExtensionPolicyType,
- kTestExtension),
- *CreateResponse());
- service_->OnPolicyFetched(&client_);
+ client_->SetPolicy(PolicyNamespaceKey(dm_protocol::kChromeExtensionPolicyType,
+ kTestExtension),
+ *CreateResponse());
+ service_->OnPolicyFetched(client_);
RunUntilIdle();
- // The policy was ignored, and no download is started.
+ // The policy was ignored and no download is started because the store
+ // doesn't have credentials.
net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(0);
EXPECT_FALSE(fetcher);
@@ -436,4 +481,39 @@ TEST_F(ComponentCloudPolicyServiceTest, SignInAfterStartup) {
EXPECT_TRUE(service_->policy().Equals(expected_bundle));
}
+TEST_F(ComponentCloudPolicyServiceTest, SignOut) {
+ // Initialize everthing and serve policy for a component.
+ PopulateCache();
+ LoadStore();
+ InitializeRegistry();
+
+ // The initial, cached policy will be served once the backend is initialized.
+ EXPECT_CALL(delegate_, OnComponentCloudPolicyUpdated());
+ RunUntilIdle();
+ Mock::VerifyAndClearExpectations(&delegate_);
+ PolicyBundle expected_bundle;
+ const PolicyNamespace ns(POLICY_DOMAIN_EXTENSIONS, kTestExtension);
+ expected_bundle.Get(ns).CopyFrom(expected_policy_);
+ EXPECT_TRUE(service_->policy().Equals(expected_bundle));
+ std::map<std::string, std::string> contents;
+ cache_->LoadAllSubkeys("extension-policy", &contents);
+ ASSERT_EQ(1u, contents.size());
+
+ // Now sign in.
+ Connect(2u);
+
+ // Signing out removes all of the component policies from the service and
+ // from the cache. It does not trigger a refresh.
+ EXPECT_CALL(delegate_, OnComponentCloudPolicyUpdated());
+ core_.Disconnect();
+ store_.policy_.reset();
+ store_.NotifyStoreLoaded();
+ RunUntilIdle();
+ Mock::VerifyAndClearExpectations(&delegate_);
+ const PolicyBundle empty_bundle;
+ EXPECT_TRUE(service_->policy().Equals(empty_bundle));
+ cache_->LoadAllSubkeys("extension-policy", &contents);
+ ASSERT_EQ(0u, contents.size());
+}
+
} // namespace policy

Powered by Google App Engine
This is Rietveld 408576698