#include "bmc/proto_reader.h"

#include <cstdio>
#include <string>

#include "gtest/gtest.h"
#include "absl/status/status.h"


namespace {
TEST(ProtoReaderTest, ReadWriteBinary) {
  std::string file_name = std::tmpnam(nullptr);
  std::string test_data = "0123456789ABCDEF";
  EXPECT_EQ(proto_reader::WriteBinaryFile(file_name, test_data),
            absl::OkStatus());
  auto val = proto_reader::ReadBinaryFile(file_name);
  EXPECT_EQ(val.value(), test_data);
}

TEST(ProtoReaderTest, ReadBinaryFailOpen) {
  std::string file_name = std::tmpnam(nullptr);
  std::string test_data = "0123456789ABCDEF";
  auto val = proto_reader::ReadBinaryFile(file_name);
  EXPECT_FALSE(val.ok());
}

TEST(ProtoReaderTest, ReadBinaryFailRead) {
  std::string file_name = "";
  auto val = proto_reader::ReadBinaryFile(file_name);
  EXPECT_FALSE(val.ok());
}

TEST(ProtoReaderTest, WriteBinaryFailOpen) {
  std::string file_name = "";
  std::string test_data = "0123456789ABCDEF";
  EXPECT_FALSE(proto_reader::WriteBinaryFile(file_name, test_data).ok());
}

}  // namespace
