blob: 6f9f5deeb6cb53a58dab548dde04a5f57cfa5956 [file] [log] [blame]
#include "occ_manager.hpp"
#include <stdlib.h>
#include <filesystem>
#include <fstream>
#include <gtest/gtest.h>
constexpr auto num_error_files = 8;
constexpr auto device = "occ-hwmon.1";
constexpr auto error = "occ_error";
constexpr auto errorMem = "occ_mem_throttle";
constexpr auto errorPower = "occ_dvfs_power";
constexpr auto errorTemp = "occ_dvfs_overtemp";
constexpr auto legacyDevice = "occ-hwmon.2";
constexpr auto legacyErrorTemp = "occ_dvfs_ot";
constexpr auto noError = "0";
namespace fs = std::filesystem;
using namespace open_power::occ;
class ErrorFiles : public ::testing::Test
{
public:
ErrorFiles() :
rc(sd_event_default(&event)), pEvent(event), manager(pEvent),
status(pEvent, "/dummy1", manager
#ifdef POWER10
,
powerMode
#endif
)
{
EXPECT_GE(rc, 0);
event = nullptr;
}
virtual void SetUp()
{
fs::path files[num_error_files];
char tmpDirTemplate[64];
strcpy(tmpDirTemplate, "/tmp/occXXXXXX");
auto path = mkdtemp(tmpDirTemplate);
assert(path != nullptr);
occPath = path;
devicePath = occPath / device;
legacyDevicePath = occPath / legacyDevice;
fs::create_directory(devicePath);
fs::create_directory(legacyDevicePath);
files[0] = devicePath / error;
files[1] = devicePath / errorMem;
files[2] = devicePath / errorPower;
files[3] = devicePath / errorTemp;
files[4] = legacyDevicePath / error;
files[5] = legacyDevicePath / errorMem;
files[6] = legacyDevicePath / errorPower;
files[7] = legacyDevicePath / legacyErrorTemp;
for (const fs::path& f : files)
{
auto stream = std::ofstream(f.c_str());
if (stream)
{
stream << noError;
}
}
}
virtual void TearDown()
{
fs::remove_all(occPath);
}
sd_event* event;
int rc;
open_power::occ::EventPtr pEvent;
#ifdef POWER10
std::unique_ptr<powermode::PowerMode> powerMode = nullptr;
#endif
Manager manager;
Status status;
fs::path devicePath;
fs::path legacyDevicePath;
fs::path occPath;
};
TEST_F(ErrorFiles, AddDeviceErrorWatch)
{
Device occDevice(pEvent, devicePath, manager, status
#ifdef POWER10
,
powerMode
#endif
);
occDevice.addErrorWatch(false);
occDevice.removeErrorWatch();
}
TEST_F(ErrorFiles, AddLegacyDeviceErrorWatch)
{
Device legacyOccDevice(pEvent, legacyDevicePath, manager, status
#ifdef POWER10
,
powerMode
#endif
);
legacyOccDevice.addErrorWatch(false);
legacyOccDevice.removeErrorWatch();
}