10f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
20f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
30f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// found in the LICENSE file.
40f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
50f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include <string>
60f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
70f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "base/prefs/pref_value_map.h"
80f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "base/values.h"
90f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "chrome/browser/net/disk_cache_dir_policy_handler.h"
100f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "chrome/common/pref_names.h"
11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/policy/core/common/policy_map.h"
120f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "policy/policy_constants.h"
130f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
140f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
150f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)namespace policy {
160f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
170f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)class DiskCacheDirPolicyTest : public testing::Test {
180f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) protected:
190f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  PolicyMap policy_;
200f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  DiskCacheDirPolicyHandler handler_;
210f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  PrefValueMap prefs_;
220f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)};
230f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
240f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)TEST_F(DiskCacheDirPolicyTest, Default) {
250f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  handler_.ApplyPolicySettings(policy_, &prefs_);
260f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_FALSE(prefs_.GetValue(prefs::kDiskCacheDir, NULL));
270f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)}
280f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
290f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)TEST_F(DiskCacheDirPolicyTest, SetPolicyInvalid) {
300f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  // DiskCacheDir policy expects a string; give it a boolean.
310f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  policy_.Set(key::kDiskCacheDir,
320f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)              POLICY_LEVEL_MANDATORY,
330f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)              POLICY_SCOPE_USER,
34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch              new base::FundamentalValue(false),
350f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)              NULL);
360f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  handler_.ApplyPolicySettings(policy_, &prefs_);
370f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_FALSE(prefs_.GetValue(prefs::kDiskCacheDir, NULL));
380f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)}
390f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
400f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)TEST_F(DiskCacheDirPolicyTest, SetPolicyValid) {
410f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  // Use a variable in the value. It should be expanded by the handler.
420f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  const std::string in = "${user_name}/foo";
430f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  policy_.Set(key::kDiskCacheDir,
440f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)              POLICY_LEVEL_MANDATORY,
450f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)              POLICY_SCOPE_USER,
465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)              new base::StringValue(in),
470f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)              NULL);
480f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  handler_.ApplyPolicySettings(policy_, &prefs_);
490f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
500f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  const base::Value* value;
510f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  ASSERT_TRUE(prefs_.GetValue(prefs::kDiskCacheDir, &value));
520f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  std::string out;
530f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  ASSERT_TRUE(value->GetAsString(&out));
540f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_NE(std::string::npos, out.find("foo"));
550f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)  EXPECT_EQ(std::string::npos, out.find("${user_name}"));
560f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)}
570f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)
580f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)}  // namespace policy
59