// Copyright 2017 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 <gtest/gtest.h>
#include <peridot/lib/testing/test_with_ledger.h>
#include <peridot/lib/util/pseudo_dir_server.h>
#include <peridot/lib/util/pseudo_dir_utils.h>
#include <src/lib/files/directory.h>
#include <src/lib/files/file.h>

namespace modular {
namespace {

constexpr int kDefaultBufferSize = 1024;

class PseudoDirUtilsTest : public testing::TestWithLedger {
 public:
  PseudoDirUtilsTest() = default;
  ~PseudoDirUtilsTest() override = default;

  void test_make_file_with_contents_sizes(int content_size) {
    const std::string path = "test.config";
    std::string contentWritten(content_size, 'T');
    auto file_path = MakeFilePathWithContents(path, contentWritten);
    modular::PseudoDirServer server(std::move(file_path));
    auto fd = server.OpenAt(".");
    EXPECT_TRUE(files::IsFileAt(fd.get(), path));
    std::string contentRead;
    EXPECT_TRUE(files::ReadFileToStringAt(fd.get(), path, &contentRead));
    EXPECT_EQ(contentWritten, contentRead);
  }
};

TEST_F(PseudoDirUtilsTest, FileSmallerThanDefaultBuffer) {
  test_make_file_with_contents_sizes(kDefaultBufferSize - 10);
}

TEST_F(PseudoDirUtilsTest, FileLargerThanDefaultBuffer) {
  test_make_file_with_contents_sizes(kDefaultBufferSize + 10);
}

}  // namespace
}  // namespace modular
