#include "bmc/gmi_reader.h"

#include <cstdio>
#include <string>

#include "gmi/machine_identity.pb.h"
#include "bmc/proto_reader.h"
#include "gmock/gmock.h"
#include "gtest/gtest.h"
#include "absl/status/status.h"

#include "bmc/test_util.h"

namespace {

using ::testing::status::StatusIs;

using security_prodid::GoogleMachineIdentityProto;

// TODO (b/352080861)create a static file for testing, rather than creating a
// new file during test. Creating a file during the test, allows us to ignore
// the file path that must be correct for static files

TEST(gmi_read_test, read_fqdn) {
  GoogleMachineIdentityProto id;
  std::string test_fqdn = "jrxi100";
  std::string file_name = std::tmpnam(nullptr);
  id.set_fqdn(test_fqdn);
  EXPECT_TRUE(proto_reader::WriteProto(file_name, id).ok());
  EXPECT_EQ(gmi_reader::ReadGmiHostName(file_name).value(), test_fqdn);
}

TEST(gmi_empty_string_test, read_fqdn) {
  GoogleMachineIdentityProto id;
  std::string test_fqdn = "";
  std::string file_name = std::tmpnam(nullptr);
  id.set_fqdn(test_fqdn);
  EXPECT_TRUE(proto_reader::WriteProto(file_name, id).ok());
  EXPECT_EQ(gmi_reader::ReadGmiHostName(file_name).value(), test_fqdn);
}

TEST(gmi_file_not_found_test, read_fqdn) {
  std::string file_name = std::tmpnam(nullptr);
  absl::Status status = gmi_reader::ReadGmiHostName(file_name).status();
  EXPECT_THAT(gmi_reader::ReadGmiHostName(file_name).status(),
              StatusIs(absl::StatusCode::kInvalidArgument));
}

}  // namespace
