// Copyright 2016 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 "run_oci/container_config_parser.h"

#include <sys/mount.h>

#include <vector>

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

#include "run_oci/run_oci_utils.h"

namespace {

TEST(OciUtilsTest, TestGetMountpointsUnder) {
  base::ScopedTempDir temp_dir;
  ASSERT_TRUE(temp_dir.CreateUniqueTempDir());

  constexpr char kSelfProcMountsData[] =
      R"(
/dev/root / ext2 rw 0 0
devtmpfs /dev devtmpfs rw 0 0
none /proc proc rw,nosuid,nodev,noexec,relatime 0 0
none /sys sysfs rw,seclabel,nosuid,nodev,noexec,relatime 0 0
none /sys/fs/selinux selinuxfs rw,nosuid,noexec,relatime 0 0
tmp /tmp tmpfs rw,seclabel,nodev,relatime 0 0
run /run tmpfs rw,seclabel,nosuid,nodev,noexec,relatime,mode=755 0 0
/dev/loop1 /run/containers/android-master-33lymv/rootfs/root squashfs ro 0 0
/dev/loop2 /run/containers/android-master-33lymv/vendor squashfs ro 0 0
tmpfs /run/containers/android-master-33lymv/rootfs/root/dev )"
      R"(tmpfs rw,seclabel,nosuid,relatime,mode=755,uid=655360,gid=655360 0 0
debugfs /run/sync_export debugfs rw 0 0
  )";
  base::FilePath mounts = temp_dir.GetPath().Append("mounts");
  EXPECT_EQ(
      base::WriteFile(mounts, kSelfProcMountsData, sizeof(kSelfProcMountsData)),
      sizeof(kSelfProcMountsData));

  std::vector<run_oci::Mountpoint> mountpoints = run_oci::GetMountpointsUnder(
      base::FilePath("/run/containers/android-master-33lymv"), mounts);

  EXPECT_EQ(
      mountpoints,
      (std::vector<run_oci::Mountpoint>{
          run_oci::Mountpoint{
              base::FilePath(
                  "/run/containers/android-master-33lymv/rootfs/root"),
              MS_RDONLY, std::string()},
          run_oci::Mountpoint{
              base::FilePath("/run/containers/android-master-33lymv/vendor"),
              MS_RDONLY, std::string()},
          run_oci::Mountpoint{
              base::FilePath(
                  "/run/containers/android-master-33lymv/rootfs/root/dev"),
              MS_NOSUID | MS_RELATIME,
              "seclabel,mode=755,uid=655360,gid=655360"}}));
}

}  // namespace
