blob: f0effbd56f1dbdf8d0e7f5c65b8970f513e71e14 [file] [log] [blame]
Patrick Ventured1491722019-02-08 14:37:45 -08001#include "pid/buildjson.hpp"
2
3#include <gmock/gmock.h>
4#include <gtest/gtest.h>
5
6TEST(ZoneFromJson, emptyZone)
7{
8 // There is a zone key, but it's empty.
9 // This is technically invalid.
10
11 std::map<int64_t, PIDConf> pidConfig;
12 std::map<int64_t, struct ZoneConfig> zoneConfig;
13
14 auto j2 = R"(
15 {
16 "zones": []
17 }
18 )"_json;
19
20 std::tie(pidConfig, zoneConfig) = buildPIDsFromJson(j2);
21
22 EXPECT_TRUE(pidConfig.empty());
23 EXPECT_TRUE(zoneConfig.empty());
24}
25
26TEST(ZoneFromJson, oneZoneOnePid)
27{
28 // Parse a valid configuration with one zone and one PID.
29
30 std::map<int64_t, PIDConf> pidConfig;
31 std::map<int64_t, struct ZoneConfig> zoneConfig;
32
33 auto j2 = R"(
34 {
35 "zones" : [{
36 "id": 1,
37 "minThermalRpm": 3000.0,
38 "failsafePercent": 75.0,
39 "pids": [{
40 "name": "fan1-5",
41 "type": "fan",
42 "inputs": ["fan1", "fan5"],
43 "setpoint": 90.0,
44 "pid": {
45 "samplePeriod": 0.1,
46 "proportionalCoeff": 0.0,
47 "integralCoeff": 0.0,
48 "feedFwdOffOffsetCoeff": 0.0,
49 "feedFwdGainCoeff": 0.010,
50 "integralLimit_min": 0.0,
51 "integralLimit_max": 0.0,
52 "outLim_min": 30.0,
53 "outLim_max": 100.0,
54 "slewNeg": 0.0,
55 "slewPos": 0.0
56 }
57 }]
58 }]
59 }
60 )"_json;
61
62 std::tie(pidConfig, zoneConfig) = buildPIDsFromJson(j2);
63 EXPECT_EQ(pidConfig.size(), 1);
64 EXPECT_EQ(zoneConfig.size(), 1);
65
66 EXPECT_EQ(pidConfig[1]["fan1-5"].type, "fan");
67 EXPECT_DOUBLE_EQ(zoneConfig[1].minThermalRpm, 3000.0);
68}