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