#include "async_resp.hpp"
#include "ethernet.hpp"

#include <boost/beast/http/status.hpp>

#include <string>

#include <gtest/gtest.h>

namespace redfish
{
namespace
{

TEST(EthernetHostnameValidation, ValidHostnames)
{
    EXPECT_TRUE(isHostnameValid("bmc"));
    EXPECT_TRUE(isHostnameValid("host1"));
    EXPECT_TRUE(isHostnameValid("a"));
    EXPECT_TRUE(isHostnameValid("host-name"));
    EXPECT_TRUE(isHostnameValid("1host"));
    EXPECT_TRUE(isHostnameValid(std::string(63, 'a')));
}

TEST(EthernetHostnameValidation, InvalidHostnames)
{
    EXPECT_FALSE(isHostnameValid(""));
    EXPECT_FALSE(isHostnameValid("19216811"));
    EXPECT_FALSE(isHostnameValid("-host"));
    EXPECT_FALSE(isHostnameValid("host-"));
    EXPECT_FALSE(isHostnameValid("host.name"));
    EXPECT_FALSE(isHostnameValid(std::string(64, 'a')));
}

TEST(EthernetDomainnameValidation, ValidDomainnames)
{
    EXPECT_TRUE(isDomainnameValid("example.com"));
    EXPECT_TRUE(isDomainnameValid("sub.example.com"));
    EXPECT_TRUE(isDomainnameValid("a.bc"));
}

TEST(EthernetDomainnameValidation, InvalidDomainnames)
{
    EXPECT_FALSE(isDomainnameValid(""));
    EXPECT_FALSE(isDomainnameValid("a"));
    EXPECT_FALSE(isDomainnameValid("a.b"));
    EXPECT_FALSE(isDomainnameValid("-example.com"));
    EXPECT_FALSE(isDomainnameValid("example-.com"));
    EXPECT_FALSE(isDomainnameValid("example.c"));
    EXPECT_FALSE(isDomainnameValid("example.com."));
}

} // namespace
} // namespace redfish
