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

#include "brillo/scoped_umask.h"

#include <fcntl.h>

#include <base/check.h>
#include <base/files/file_path.h>
#include <base/files/file_util.h>
#include <base/files/scoped_file.h>
#include <base/files/scoped_temp_dir.h>
#include <gtest/gtest.h>

namespace brillo {
namespace {

constexpr int kPermissions600 =
    base::FILE_PERMISSION_READ_BY_USER | base::FILE_PERMISSION_WRITE_BY_USER;
constexpr int kPermissions700 = base::FILE_PERMISSION_USER_MASK;
constexpr mode_t kMask700 = ~(0700);
constexpr mode_t kMask600 = ~(0600);

void CheckFilePermissions(const base::FilePath& path,
                          int expected_permissions) {
  int mode = 0;
  // Try to create a file with broader permissions than the mask may provide.
  base::ScopedFD fd(
      HANDLE_EINTR(open(path.value().c_str(), O_WRONLY | O_CREAT, 0777)));
  EXPECT_TRUE(fd.is_valid());
  EXPECT_TRUE(base::GetPosixFilePermissions(path, &mode));
  EXPECT_EQ(mode, expected_permissions);
}

}  // namespace

TEST(ScopedUmask, CheckUmaskScope) {
  base::ScopedTempDir tmpdir;
  CHECK(tmpdir.CreateUniqueTempDir());

  brillo::ScopedUmask outer_scoped_umask_(kMask700);
  CheckFilePermissions(tmpdir.GetPath().AppendASCII("file1.txt"),
                       kPermissions700);
  {
    // A new scoped umask should result in different permissions for files
    // created in this scope.
    brillo::ScopedUmask inner_scoped_umask_(kMask600);
    CheckFilePermissions(tmpdir.GetPath().AppendASCII("file2.txt"),
                         kPermissions600);
  }
  // Since inner_scoped_umask_ has been deconstructed, permissions on all new
  // files should now use outer_scoped_umask_.
  CheckFilePermissions(tmpdir.GetPath().AppendASCII("file3.txt"),
                       kPermissions700);
}

}  // namespace brillo
