1 #include "pid/buildjson.hpp"
2 
3 #include <gmock/gmock.h>
4 #include <gtest/gtest.h>
5 
6 TEST(ZoneFromJson, emptyZone)
7 {
8     // There is a zone key, but it's empty.
9     // This is technically invalid.
10 
11     std::map<int64_t, conf::PIDConf> pidConfig;
12     std::map<int64_t, struct conf::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 
26 TEST(ZoneFromJson, oneZoneOnePid)
27 {
28     // Parse a valid configuration with one zone and one PID.
29 
30     std::map<int64_t, conf::PIDConf> pidConfig;
31     std::map<int64_t, struct conf::ZoneConfig> zoneConfig;
32 
33     auto j2 = R"(
34       {
35         "zones" : [{
36           "id": 1,
37           "minThermalOutput": 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               "feedFwdOffsetCoeff": 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].minThermalOutput, 3000.0);
68 }
69