// Copyright 2017 The Chromium OS 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 <gtest/gtest.h>

#include <base/files/file_util.h>
#include <base/files/scoped_temp_dir.h>

#include "policy/policy_util.h"

namespace em = enterprise_management;

namespace policy {

// Test LoadPolicyFromPath returns correct values and has policy data when
// successful.
TEST(DevicePolicyUtilTest, LoadPolicyFromPath) {
  // Create the temporary directory.
  base::ScopedTempDir temp_dir;
  ASSERT_TRUE(temp_dir.CreateUniqueTempDir());

  base::FilePath invalid_policy_data_path(temp_dir.GetPath().Append("policy"));
  base::FilePath inexistent_file(temp_dir.GetPath().Append("policy.1"));
  base::FilePath good_policy_data_path(temp_dir.GetPath().Append("policy.2"));

  // Create the file with invalid data.
  std::string data = "invalid data";
  ASSERT_TRUE(
      base::WriteFile(invalid_policy_data_path, data.data(), data.size()));

  // Create the file with good policy data.
  em::PolicyData policy_data;
  policy_data.set_username("user@example.com");
  policy_data.set_management_mode(em::PolicyData::LOCAL_OWNER);
  policy_data.set_request_token("codepath-must-ignore-dmtoken");
  std::string policy_blob;
  policy_data.SerializeToString(&policy_blob);
  ASSERT_TRUE(base::WriteFile(good_policy_data_path, policy_blob.data(),
                              policy_blob.size()));

  std::string policy_data_str;
  enterprise_management::PolicyFetchResponse policy;
  EXPECT_EQ(
      LoadPolicyResult::kInvalidPolicyData,
      LoadPolicyFromPath(invalid_policy_data_path, &policy_data_str, &policy));
  EXPECT_EQ(LoadPolicyResult::kFileNotFound,
            LoadPolicyFromPath(inexistent_file, &policy_data_str, &policy));
  EXPECT_EQ(
      LoadPolicyResult::kSuccess,
      LoadPolicyFromPath(good_policy_data_path, &policy_data_str, &policy));
  ASSERT_TRUE(policy.has_policy_data());
}

}  // namespace policy
