blob: eddce87f19fbd816be7d48767a6df8b41e173088 [file] [log] [blame]
Shawn McCarneyc69a2752019-10-30 17:37:30 -05001/**
2 * Copyright © 2019 IBM Corporation
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16#include "action_environment.hpp"
17#include "device.hpp"
18#include "id_map.hpp"
19#include "rule.hpp"
20
21#include <cstddef> // for size_t
22#include <exception>
23#include <stdexcept>
24
25#include <gtest/gtest.h>
26
27using namespace phosphor::power::regulators;
28
29TEST(ActionEnvironmentTests, Constructor)
30{
31 // Create IDMap
32 IDMap idMap{};
33 Device reg1{"regulator1"};
34 idMap.addDevice(reg1);
35
36 // Verify object state after constructor
37 try
38 {
39 ActionEnvironment env{idMap, "regulator1"};
40 EXPECT_EQ(env.getDevice().getID(), "regulator1");
41 EXPECT_EQ(env.getDeviceID(), "regulator1");
42 EXPECT_EQ(env.getRuleDepth(), 0);
43 EXPECT_THROW(env.getVolts(), std::logic_error);
44 EXPECT_EQ(env.hasVolts(), false);
45 }
46 catch (const std::exception& error)
47 {
48 ADD_FAILURE() << "Should not have caught exception.";
49 }
50}
51
52TEST(ActionEnvironmentTests, DecrementRuleDepth)
53{
54 IDMap idMap{};
55 ActionEnvironment env{idMap, ""};
56 EXPECT_EQ(env.getRuleDepth(), 0);
57 env.incrementRuleDepth();
58 env.incrementRuleDepth();
59 EXPECT_EQ(env.getRuleDepth(), 2);
60 env.decrementRuleDepth();
61 EXPECT_EQ(env.getRuleDepth(), 1);
62 env.decrementRuleDepth();
63 EXPECT_EQ(env.getRuleDepth(), 0);
64 env.decrementRuleDepth();
65 EXPECT_EQ(env.getRuleDepth(), 0);
66}
67
68TEST(ActionEnvironmentTests, GetDevice)
69{
70 // Create IDMap
71 IDMap idMap{};
72 Device reg1{"regulator1"};
73 idMap.addDevice(reg1);
74
75 ActionEnvironment env{idMap, "regulator1"};
76
77 // Test where current device ID is in the IDMap
78 try
79 {
80 Device& device = env.getDevice();
81 EXPECT_EQ(device.getID(), "regulator1");
82 EXPECT_EQ(&device, &reg1);
83 }
84 catch (const std::exception& error)
85 {
86 ADD_FAILURE() << "Should not have caught exception.";
87 }
88
89 // Test where current device ID is not in the IDMap
90 env.setDeviceID("regulator2");
91 try
92 {
93 env.getDevice();
94 ADD_FAILURE() << "Should not have reached this line.";
95 }
96 catch (const std::invalid_argument& ia_error)
97 {
98 EXPECT_STREQ(ia_error.what(),
99 "Unable to find device with ID \"regulator2\"");
100 }
101 catch (const std::exception& error)
102 {
103 ADD_FAILURE() << "Should not have caught exception.";
104 }
105}
106
107TEST(ActionEnvironmentTests, GetDeviceID)
108{
109 IDMap idMap{};
110 ActionEnvironment env{idMap, ""};
111 EXPECT_EQ(env.getDeviceID(), "");
112 env.setDeviceID("regulator1");
113 EXPECT_EQ(env.getDeviceID(), "regulator1");
114}
115
116TEST(ActionEnvironmentTests, GetRule)
117{
118 // Create IDMap
119 IDMap idMap{};
120 Rule setVoltageRule{"set_voltage_rule"};
121 idMap.addRule(setVoltageRule);
122
123 ActionEnvironment env{idMap, ""};
124
125 // Test where rule ID is in the IDMap
126 try
127 {
128 Rule& rule = env.getRule("set_voltage_rule");
129 EXPECT_EQ(rule.getID(), "set_voltage_rule");
130 EXPECT_EQ(&rule, &setVoltageRule);
131 }
132 catch (const std::exception& error)
133 {
134 ADD_FAILURE() << "Should not have caught exception.";
135 }
136
137 // Test where rule ID is not in the IDMap
138 try
139 {
140 env.getRule("set_voltage_rule2");
141 ADD_FAILURE() << "Should not have reached this line.";
142 }
143 catch (const std::invalid_argument& ia_error)
144 {
145 EXPECT_STREQ(ia_error.what(),
146 "Unable to find rule with ID \"set_voltage_rule2\"");
147 }
148 catch (const std::exception& error)
149 {
150 ADD_FAILURE() << "Should not have caught exception.";
151 }
152}
153
154TEST(ActionEnvironmentTests, GetRuleDepth)
155{
156 IDMap idMap{};
157 ActionEnvironment env{idMap, ""};
158 EXPECT_EQ(env.getRuleDepth(), 0);
159 env.incrementRuleDepth();
160 EXPECT_EQ(env.getRuleDepth(), 1);
161 env.incrementRuleDepth();
162 EXPECT_EQ(env.getRuleDepth(), 2);
163 env.decrementRuleDepth();
164 EXPECT_EQ(env.getRuleDepth(), 1);
165 env.decrementRuleDepth();
166 EXPECT_EQ(env.getRuleDepth(), 0);
167}
168
169TEST(ActionEnvironmentTests, GetVolts)
170{
171 IDMap idMap{};
172 ActionEnvironment env{idMap, ""};
173 EXPECT_EQ(env.hasVolts(), false);
174
175 // Test where a volts value has not been set
176 try
177 {
178 env.getVolts();
179 }
180 catch (const std::logic_error& l_error)
181 {
182 EXPECT_STREQ(l_error.what(), "No volts value has been set.");
183 }
184 catch (const std::exception& error)
185 {
186 ADD_FAILURE() << "Should not have caught exception.";
187 }
188
189 // Test where a volts value has been set
190 env.setVolts(1.31);
191 try
192 {
193 double volts = env.getVolts();
194 EXPECT_EQ(volts, 1.31);
195 }
196 catch (const std::exception& error)
197 {
198 ADD_FAILURE() << "Should not have caught exception.";
199 }
200}
201
202TEST(ActionEnvironmentTests, HasVolts)
203{
204 IDMap idMap{};
205 ActionEnvironment env{idMap, ""};
206 EXPECT_EQ(env.hasVolts(), false);
207 env.setVolts(1.31);
208 EXPECT_EQ(env.hasVolts(), true);
209}
210
211TEST(ActionEnvironmentTests, IncrementRuleDepth)
212{
213 IDMap idMap{};
214 ActionEnvironment env{idMap, ""};
215 EXPECT_EQ(env.getRuleDepth(), 0);
216
217 // Test where rule depth has not exceeded maximum
218 try
219 {
220 for (size_t i = 1; i <= env.maxRuleDepth; ++i)
221 {
222 env.incrementRuleDepth();
223 EXPECT_EQ(env.getRuleDepth(), i);
224 }
225 }
226 catch (const std::exception& error)
227 {
228 ADD_FAILURE() << "Should not have caught exception.";
229 }
230
231 // Test where rule depth has exceeded maximum
232 try
233 {
234 env.incrementRuleDepth();
235 }
236 catch (const std::runtime_error& r_error)
237 {
238 EXPECT_STREQ(r_error.what(), "Maximum rule depth exceeded.");
239 }
240 catch (const std::exception& error)
241 {
242 ADD_FAILURE() << "Should not have caught exception.";
243 }
244}
245
246TEST(ActionEnvironmentTests, SetDeviceID)
247{
248 IDMap idMap{};
249 Device reg1{"regulator1"};
250 idMap.addDevice(reg1);
251 ActionEnvironment env{idMap, "regulator1"};
252
253 EXPECT_EQ(env.getDeviceID(), "regulator1");
254 env.setDeviceID("regulator2");
255 EXPECT_EQ(env.getDeviceID(), "regulator2");
256}
257
258TEST(ActionEnvironmentTests, SetVolts)
259{
260 try
261 {
262 IDMap idMap{};
263 ActionEnvironment env{idMap, ""};
264 EXPECT_EQ(env.hasVolts(), false);
265 env.setVolts(2.35);
266 EXPECT_EQ(env.hasVolts(), true);
267 EXPECT_EQ(env.getVolts(), 2.35);
268 }
269 catch (const std::exception& error)
270 {
271 ADD_FAILURE() << "Should not have caught exception.";
272 }
273}