// Copyright 2018 The Fuchsia 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 "src/modular/lib/scoped_tmpfs/scoped_tmpfs.h"

#include <fcntl.h>
#include <unistd.h>

#include <gtest/gtest.h>

#include "src/lib/files/unique_fd.h"

namespace scoped_tmpfs {
namespace {

TEST(ScopedTmpFsTest, ScopedTmpFs) {
  ScopedTmpFS scoped_tmpfs;

  EXPECT_GE(scoped_tmpfs.root_fd(), 0);

  fbl::unique_fd fd(openat(scoped_tmpfs.root_fd(), "foo", O_WRONLY | O_CREAT | O_EXCL));
  ASSERT_TRUE(fd.is_valid());
  EXPECT_GT(write(fd.get(), "Hello", 6), 0);
  fd.reset(openat(scoped_tmpfs.root_fd(), "foo", O_RDONLY));
  ASSERT_TRUE(fd.is_valid());
  char b;
  EXPECT_EQ(1, read(fd.get(), &b, 1));
  EXPECT_EQ('H', b);
}

}  // namespace
}  // namespace scoped_tmpfs
