#pragma once

#include "config.h"

#include "hyp_sys_config.hpp"

#include <gmock/gmock.h>

namespace phosphor
{
namespace network
{

class MockHypSysConfig : public phosphor::network::HypSysConfig
{
  public:
    MockHypSysConfig(sdbusplus::bus_t& bus, const std::string& objPath,
                     HypNetworkMgr& parent) :
        HypSysConfig(bus, objPath, parent)
    {
    }

    void setHostname(std::string hn)
    {
        SysConfigIntf::hostName(hn);
        manager.setBIOSTableAttr("vmi_hostname", hn, "String");
    }

    const std::string getHostname()
    {
        return SysConfigIntf::hostName();
    }
};
} // namespace network
} // namespace phosphor
