| Index: remoting/host/policy_hack/policy_watcher_unittest.cc
|
| diff --git a/remoting/host/policy_hack/policy_watcher_unittest.cc b/remoting/host/policy_hack/policy_watcher_unittest.cc
|
| index cb9415485e8bc961f1d9678cfa0f2d9cbaa65a09..6c7d385d95ae8228020541168260ca0af3dfa69f 100644
|
| --- a/remoting/host/policy_hack/policy_watcher_unittest.cc
|
| +++ b/remoting/host/policy_hack/policy_watcher_unittest.cc
|
| @@ -2,6 +2,8 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| +#include <iostream>
|
| +
|
| #include "base/basictypes.h"
|
| #include "base/bind.h"
|
| #include "base/message_loop/message_loop.h"
|
| @@ -19,8 +21,7 @@ namespace policy_hack {
|
|
|
| class PolicyWatcherTest : public testing::Test {
|
| public:
|
| - PolicyWatcherTest() {
|
| - }
|
| + PolicyWatcherTest() : message_loop_(base::MessageLoop::TYPE_IO) {}
|
|
|
| void SetUp() override {
|
| message_loop_proxy_ = base::MessageLoopProxy::current();
|
| @@ -448,5 +449,78 @@ TEST_F(PolicyWatcherTest, PolicyUpdateResetsTransientErrorsCounter) {
|
| StopWatching();
|
| }
|
|
|
| +// Unit tests cannot instantiate PolicyWatcher on ChromeOS
|
| +// (as this requires running inside a browser process).
|
| +#ifndef OS_CHROMEOS
|
| +
|
| +namespace {
|
| +
|
| +void OnPolicyUpdatedDumpPolicy(scoped_ptr<base::DictionaryValue> policies) {
|
| + if (!VLOG_IS_ON(1)) {
|
| + return;
|
| + }
|
| +
|
| + std::cout << "OnPolicyUpdated callback received the following policies:"
|
| + << std::endl;
|
| +
|
| + for (base::DictionaryValue::Iterator iter(*policies); !iter.IsAtEnd();
|
| + iter.Advance()) {
|
| + std::cout << iter.key() << " = ";
|
| + switch (iter.value().GetType()) {
|
| + case base::Value::Type::TYPE_STRING: {
|
| + std::string value;
|
| + CHECK(iter.value().GetAsString(&value));
|
| + std::cout << "string: " << '"' << value << '"';
|
| + break;
|
| + }
|
| + case base::Value::Type::TYPE_BOOLEAN: {
|
| + bool value;
|
| + CHECK(iter.value().GetAsBoolean(&value));
|
| + std::cout << "boolean: " << (value ? "True" : "False");
|
| + break;
|
| + }
|
| + default: {
|
| + std::cout << "unrecognized type";
|
| + break;
|
| + }
|
| + }
|
| + std::cout << std::endl;
|
| + }
|
| +}
|
| +
|
| +} // anonymous namespace
|
| +
|
| +// To dump policy contents, run unit tests with the following flags:
|
| +// --gtest_filter=*TestRealChromotingPolicy* -v=1
|
| +TEST_F(PolicyWatcherTest, TestRealChromotingPolicy) {
|
| + scoped_refptr<base::SingleThreadTaskRunner> task_runner =
|
| + base::MessageLoop::current()->task_runner();
|
| + scoped_ptr<PolicyWatcher> policy_watcher(
|
| + PolicyWatcher::Create(nullptr, task_runner));
|
| +
|
| + {
|
| + base::RunLoop run_loop;
|
| + policy_watcher->StartWatching(base::Bind(OnPolicyUpdatedDumpPolicy),
|
| + base::Bind(base::DoNothing));
|
| + run_loop.RunUntilIdle();
|
| + }
|
| +
|
| + {
|
| + base::RunLoop run_loop;
|
| + PolicyWatcher* raw_policy_watcher = policy_watcher.release();
|
| + raw_policy_watcher->StopWatching(
|
| + base::Bind(base::IgnoreResult(
|
| + &base::SequencedTaskRunner::DeleteSoon<PolicyWatcher>),
|
| + task_runner, FROM_HERE, raw_policy_watcher));
|
| + run_loop.RunUntilIdle();
|
| + }
|
| +
|
| + // Today, the only verification offered by this test is:
|
| + // - Manual verification of policy values dumped by OnPolicyUpdatedDumpPolicy
|
| + // - Automated verification that nothing crashed
|
| +}
|
| +
|
| +#endif
|
| +
|
| } // namespace policy_hack
|
| } // namespace remoting
|
|
|