// Copyright 2019 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.

// Filesystem-related utility functions.

#ifndef LIBBRILLO_BRILLO_FILES_FILE_UTIL_TEST_H_
#define LIBBRILLO_BRILLO_FILES_FILE_UTIL_TEST_H_

#include <string>
#include <vector>

#include <base/files/scoped_temp_dir.h>
#include <brillo/files/safe_fd.h>
#include <gtest/gtest.h>

namespace brillo {

// Convert the SafeFD::Error enum class to a string for readability of
// test results.
std::string to_string(brillo::SafeFD::Error err);

// Helper to enable gtest to print SafeFD::Error results in a way that is easier
// to read.
std::ostream& operator<<(std::ostream& os, const brillo::SafeFD::Error err);

// Gets a short random string that can be used as part of a file name.
std::string GetRandomSuffix();

class FileTest : public testing::Test {
 public:
  static constexpr char kFileName[] = "test.temp";
  static constexpr char kSubdirName[] = "test_dir";
  static constexpr char kSymbolicFileName[] = "sym_test.temp";
  static constexpr char kSymbolicDirName[] = "sym_dir";

  static void SetUpTestCase();

  FileTest();

 protected:
  std::vector<char> temp_dir_path_;
  base::FilePath file_path_;
  base::FilePath sub_dir_path_;
  base::FilePath symlink_file_path_;
  base::FilePath symlink_dir_path_;
  base::ScopedTempDir temp_dir_;
  SafeFD root_;

  bool SetupSubdir() WARN_UNUSED_RESULT;

  bool SetupSymlinks() WARN_UNUSED_RESULT;

  // Writes |contents| to |file_path_|. Pulled into a separate function just
  // to improve readability of tests.
  bool WriteFile(const std::string& contents) WARN_UNUSED_RESULT;

  // Verifies that the file at |file_path_| exists and contains |contents|.
  void ExpectFileContains(const std::string& contents);

  // Verifies that the file at |file_path_| has |permissions|.
  void ExpectPermissions(base::FilePath path, int permissions);

  // Creates a file with a random name in the temporary directory.
  base::FilePath GetTempName() WARN_UNUSED_RESULT;
};

}  // namespace brillo

#endif  // LIBBRILLO_BRILLO_FILES_FILE_UTIL_TEST_H_
