blob: 9d337897e45409e009eb51cb36ceb51324926db4 [file] [log] [blame]
#include "pid/buildjson.hpp"
#include <gmock/gmock.h>
#include <gtest/gtest.h>
TEST(ZoneFromJson, emptyZone)
{
// There is a zone key, but it's empty.
// This is technically invalid.
std::map<int64_t, conf::PIDConf> pidConfig;
std::map<int64_t, struct conf::ZoneConfig> zoneConfig;
auto j2 = R"(
{
"zones": []
}
)"_json;
std::tie(pidConfig, zoneConfig) = buildPIDsFromJson(j2);
EXPECT_TRUE(pidConfig.empty());
EXPECT_TRUE(zoneConfig.empty());
}
TEST(ZoneFromJson, oneZoneOnePid)
{
// Parse a valid configuration with one zone and one PID.
std::map<int64_t, conf::PIDConf> pidConfig;
std::map<int64_t, struct conf::ZoneConfig> zoneConfig;
auto j2 = R"(
{
"zones" : [{
"id": 1,
"minThermalOutput": 3000.0,
"failsafePercent": 75.0,
"pids": [{
"name": "fan1-5",
"type": "fan",
"inputs": ["fan1", "fan5"],
"setpoint": 90.0,
"pid": {
"samplePeriod": 0.1,
"proportionalCoeff": 0.0,
"integralCoeff": 0.0,
"feedFwdOffsetCoeff": 0.0,
"feedFwdGainCoeff": 0.010,
"integralLimit_min": 0.0,
"integralLimit_max": 0.0,
"outLim_min": 30.0,
"outLim_max": 100.0,
"slewNeg": 0.0,
"slewPos": 0.0
}
}]
}]
}
)"_json;
std::tie(pidConfig, zoneConfig) = buildPIDsFromJson(j2);
EXPECT_EQ(pidConfig.size(), 1);
EXPECT_EQ(zoneConfig.size(), 1);
EXPECT_EQ(pidConfig[1]["fan1-5"].type, "fan");
EXPECT_DOUBLE_EQ(zoneConfig[1].minThermalOutput, 3000.0);
}
TEST(ZoneFromJson, oneZoneOnePidWithHysteresis)
{
// Parse a valid configuration with one zone and one PID and the PID uses
// Hysteresis parameters.
std::map<int64_t, conf::PIDConf> pidConfig;
std::map<int64_t, struct conf::ZoneConfig> zoneConfig;
auto j2 = R"(
{
"zones" : [{
"id": 1,
"minThermalOutput": 3000.0,
"failsafePercent": 75.0,
"pids": [{
"name": "fan1-5",
"type": "fan",
"inputs": ["fan1", "fan5"],
"setpoint": 90.0,
"pid": {
"samplePeriod": 0.1,
"proportionalCoeff": 0.0,
"integralCoeff": 0.0,
"feedFwdOffsetCoeff": 0.0,
"feedFwdGainCoeff": 0.010,
"integralLimit_min": 0.0,
"integralLimit_max": 0.0,
"outLim_min": 30.0,
"outLim_max": 100.0,
"slewNeg": 0.0,
"slewPos": 0.0,
"positiveHysteresis": 1000.0,
"negativeHysteresis": 9000.0
}
}]
}]
}
)"_json;
std::tie(pidConfig, zoneConfig) = buildPIDsFromJson(j2);
EXPECT_EQ(pidConfig.size(), 1);
EXPECT_EQ(zoneConfig.size(), 1);
EXPECT_EQ(pidConfig[1]["fan1-5"].type, "fan");
EXPECT_DOUBLE_EQ(pidConfig[1]["fan1-5"].pidInfo.positiveHysteresis, 1000.0);
EXPECT_DOUBLE_EQ(zoneConfig[1].minThermalOutput, 3000.0);
}