xref: /openbmc/phosphor-power/phosphor-power-sequencer/test/gpios_only_device_tests.cpp (revision 7b7a5632c594d60f4620ca14379a766a56faf846)
1*7b7a5632SShawn McCarney /**
2*7b7a5632SShawn McCarney  * Copyright © 2025 IBM Corporation
3*7b7a5632SShawn McCarney  *
4*7b7a5632SShawn McCarney  * Licensed under the Apache License, Version 2.0 (the "License");
5*7b7a5632SShawn McCarney  * you may not use this file except in compliance with the License.
6*7b7a5632SShawn McCarney  * You may obtain a copy of the License at
7*7b7a5632SShawn McCarney  *
8*7b7a5632SShawn McCarney  *     http://www.apache.org/licenses/LICENSE-2.0
9*7b7a5632SShawn McCarney  *
10*7b7a5632SShawn McCarney  * Unless required by applicable law or agreed to in writing, software
11*7b7a5632SShawn McCarney  * distributed under the License is distributed on an "AS IS" BASIS,
12*7b7a5632SShawn McCarney  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*7b7a5632SShawn McCarney  * See the License for the specific language governing permissions and
14*7b7a5632SShawn McCarney  * limitations under the License.
15*7b7a5632SShawn McCarney  */
16*7b7a5632SShawn McCarney 
17*7b7a5632SShawn McCarney #include "gpios_only_device.hpp"
18*7b7a5632SShawn McCarney #include "mock_services.hpp"
19*7b7a5632SShawn McCarney #include "rail.hpp"
20*7b7a5632SShawn McCarney #include "services.hpp"
21*7b7a5632SShawn McCarney 
22*7b7a5632SShawn McCarney #include <cstdint>
23*7b7a5632SShawn McCarney #include <map>
24*7b7a5632SShawn McCarney #include <memory>
25*7b7a5632SShawn McCarney #include <string>
26*7b7a5632SShawn McCarney #include <vector>
27*7b7a5632SShawn McCarney 
28*7b7a5632SShawn McCarney #include <gmock/gmock.h>
29*7b7a5632SShawn McCarney #include <gtest/gtest.h>
30*7b7a5632SShawn McCarney 
31*7b7a5632SShawn McCarney using namespace phosphor::power::sequencer;
32*7b7a5632SShawn McCarney 
TEST(GPIOsOnlyDeviceTests,Constructor)33*7b7a5632SShawn McCarney TEST(GPIOsOnlyDeviceTests, Constructor)
34*7b7a5632SShawn McCarney {
35*7b7a5632SShawn McCarney     std::string powerControlGPIOName{"power-chassis-control"};
36*7b7a5632SShawn McCarney     std::string powerGoodGPIOName{"power-chassis-good"};
37*7b7a5632SShawn McCarney     GPIOsOnlyDevice device{powerControlGPIOName, powerGoodGPIOName};
38*7b7a5632SShawn McCarney 
39*7b7a5632SShawn McCarney     EXPECT_EQ(device.getPowerControlGPIOName(), powerControlGPIOName);
40*7b7a5632SShawn McCarney     EXPECT_EQ(device.getPowerGoodGPIOName(), powerGoodGPIOName);
41*7b7a5632SShawn McCarney }
42*7b7a5632SShawn McCarney 
TEST(GPIOsOnlyDeviceTests,GetName)43*7b7a5632SShawn McCarney TEST(GPIOsOnlyDeviceTests, GetName)
44*7b7a5632SShawn McCarney {
45*7b7a5632SShawn McCarney     std::string powerControlGPIOName{"power-chassis-control"};
46*7b7a5632SShawn McCarney     std::string powerGoodGPIOName{"power-chassis-good"};
47*7b7a5632SShawn McCarney     GPIOsOnlyDevice device{powerControlGPIOName, powerGoodGPIOName};
48*7b7a5632SShawn McCarney 
49*7b7a5632SShawn McCarney     EXPECT_EQ(device.getName(), GPIOsOnlyDevice::deviceName);
50*7b7a5632SShawn McCarney }
51*7b7a5632SShawn McCarney 
TEST(GPIOsOnlyDeviceTests,GetBus)52*7b7a5632SShawn McCarney TEST(GPIOsOnlyDeviceTests, GetBus)
53*7b7a5632SShawn McCarney {
54*7b7a5632SShawn McCarney     std::string powerControlGPIOName{"power-chassis-control"};
55*7b7a5632SShawn McCarney     std::string powerGoodGPIOName{"power-chassis-good"};
56*7b7a5632SShawn McCarney     GPIOsOnlyDevice device{powerControlGPIOName, powerGoodGPIOName};
57*7b7a5632SShawn McCarney 
58*7b7a5632SShawn McCarney     EXPECT_EQ(device.getBus(), 0);
59*7b7a5632SShawn McCarney }
60*7b7a5632SShawn McCarney 
TEST(GPIOsOnlyDeviceTests,GetAddress)61*7b7a5632SShawn McCarney TEST(GPIOsOnlyDeviceTests, GetAddress)
62*7b7a5632SShawn McCarney {
63*7b7a5632SShawn McCarney     std::string powerControlGPIOName{"power-chassis-control"};
64*7b7a5632SShawn McCarney     std::string powerGoodGPIOName{"power-chassis-good"};
65*7b7a5632SShawn McCarney     GPIOsOnlyDevice device{powerControlGPIOName, powerGoodGPIOName};
66*7b7a5632SShawn McCarney 
67*7b7a5632SShawn McCarney     EXPECT_EQ(device.getAddress(), 0);
68*7b7a5632SShawn McCarney }
69*7b7a5632SShawn McCarney 
TEST(GPIOsOnlyDeviceTests,GetPowerControlGPIOName)70*7b7a5632SShawn McCarney TEST(GPIOsOnlyDeviceTests, GetPowerControlGPIOName)
71*7b7a5632SShawn McCarney {
72*7b7a5632SShawn McCarney     std::string powerControlGPIOName{"power-on"};
73*7b7a5632SShawn McCarney     std::string powerGoodGPIOName{"chassis-pgood"};
74*7b7a5632SShawn McCarney     GPIOsOnlyDevice device{powerControlGPIOName, powerGoodGPIOName};
75*7b7a5632SShawn McCarney 
76*7b7a5632SShawn McCarney     EXPECT_EQ(device.getPowerControlGPIOName(), powerControlGPIOName);
77*7b7a5632SShawn McCarney }
78*7b7a5632SShawn McCarney 
TEST(GPIOsOnlyDeviceTests,GetPowerGoodGPIOName)79*7b7a5632SShawn McCarney TEST(GPIOsOnlyDeviceTests, GetPowerGoodGPIOName)
80*7b7a5632SShawn McCarney {
81*7b7a5632SShawn McCarney     std::string powerControlGPIOName{"power-on"};
82*7b7a5632SShawn McCarney     std::string powerGoodGPIOName{"chassis-pgood"};
83*7b7a5632SShawn McCarney     GPIOsOnlyDevice device{powerControlGPIOName, powerGoodGPIOName};
84*7b7a5632SShawn McCarney 
85*7b7a5632SShawn McCarney     EXPECT_EQ(device.getPowerGoodGPIOName(), powerGoodGPIOName);
86*7b7a5632SShawn McCarney }
87*7b7a5632SShawn McCarney 
TEST(GPIOsOnlyDeviceTests,GetRails)88*7b7a5632SShawn McCarney TEST(GPIOsOnlyDeviceTests, GetRails)
89*7b7a5632SShawn McCarney {
90*7b7a5632SShawn McCarney     std::string powerControlGPIOName{"power-on"};
91*7b7a5632SShawn McCarney     std::string powerGoodGPIOName{"chassis-pgood"};
92*7b7a5632SShawn McCarney     GPIOsOnlyDevice device{powerControlGPIOName, powerGoodGPIOName};
93*7b7a5632SShawn McCarney 
94*7b7a5632SShawn McCarney     EXPECT_TRUE(device.getRails().empty());
95*7b7a5632SShawn McCarney }
96*7b7a5632SShawn McCarney 
TEST(GPIOsOnlyDeviceTests,GetGPIOValues)97*7b7a5632SShawn McCarney TEST(GPIOsOnlyDeviceTests, GetGPIOValues)
98*7b7a5632SShawn McCarney {
99*7b7a5632SShawn McCarney     try
100*7b7a5632SShawn McCarney     {
101*7b7a5632SShawn McCarney         std::string powerControlGPIOName{"power-on"};
102*7b7a5632SShawn McCarney         std::string powerGoodGPIOName{"chassis-pgood"};
103*7b7a5632SShawn McCarney         GPIOsOnlyDevice device{powerControlGPIOName, powerGoodGPIOName};
104*7b7a5632SShawn McCarney 
105*7b7a5632SShawn McCarney         MockServices services{};
106*7b7a5632SShawn McCarney         device.getGPIOValues(services);
107*7b7a5632SShawn McCarney         ADD_FAILURE() << "Should not have reached this line.";
108*7b7a5632SShawn McCarney     }
109*7b7a5632SShawn McCarney     catch (const std::exception& e)
110*7b7a5632SShawn McCarney     {
111*7b7a5632SShawn McCarney         EXPECT_STREQ(e.what(), "getGPIOValues() is not supported");
112*7b7a5632SShawn McCarney     }
113*7b7a5632SShawn McCarney }
114*7b7a5632SShawn McCarney 
TEST(GPIOsOnlyDeviceTests,GetStatusWord)115*7b7a5632SShawn McCarney TEST(GPIOsOnlyDeviceTests, GetStatusWord)
116*7b7a5632SShawn McCarney {
117*7b7a5632SShawn McCarney     try
118*7b7a5632SShawn McCarney     {
119*7b7a5632SShawn McCarney         std::string powerControlGPIOName{"power-on"};
120*7b7a5632SShawn McCarney         std::string powerGoodGPIOName{"chassis-pgood"};
121*7b7a5632SShawn McCarney         GPIOsOnlyDevice device{powerControlGPIOName, powerGoodGPIOName};
122*7b7a5632SShawn McCarney 
123*7b7a5632SShawn McCarney         device.getStatusWord(0);
124*7b7a5632SShawn McCarney         ADD_FAILURE() << "Should not have reached this line.";
125*7b7a5632SShawn McCarney     }
126*7b7a5632SShawn McCarney     catch (const std::exception& e)
127*7b7a5632SShawn McCarney     {
128*7b7a5632SShawn McCarney         EXPECT_STREQ(e.what(), "getStatusWord() is not supported");
129*7b7a5632SShawn McCarney     }
130*7b7a5632SShawn McCarney }
131*7b7a5632SShawn McCarney 
TEST(GPIOsOnlyDeviceTests,GetStatusVout)132*7b7a5632SShawn McCarney TEST(GPIOsOnlyDeviceTests, GetStatusVout)
133*7b7a5632SShawn McCarney {
134*7b7a5632SShawn McCarney     try
135*7b7a5632SShawn McCarney     {
136*7b7a5632SShawn McCarney         std::string powerControlGPIOName{"power-on"};
137*7b7a5632SShawn McCarney         std::string powerGoodGPIOName{"chassis-pgood"};
138*7b7a5632SShawn McCarney         GPIOsOnlyDevice device{powerControlGPIOName, powerGoodGPIOName};
139*7b7a5632SShawn McCarney 
140*7b7a5632SShawn McCarney         device.getStatusVout(0);
141*7b7a5632SShawn McCarney         ADD_FAILURE() << "Should not have reached this line.";
142*7b7a5632SShawn McCarney     }
143*7b7a5632SShawn McCarney     catch (const std::exception& e)
144*7b7a5632SShawn McCarney     {
145*7b7a5632SShawn McCarney         EXPECT_STREQ(e.what(), "getStatusVout() is not supported");
146*7b7a5632SShawn McCarney     }
147*7b7a5632SShawn McCarney }
148*7b7a5632SShawn McCarney 
TEST(GPIOsOnlyDeviceTests,GetReadVout)149*7b7a5632SShawn McCarney TEST(GPIOsOnlyDeviceTests, GetReadVout)
150*7b7a5632SShawn McCarney {
151*7b7a5632SShawn McCarney     try
152*7b7a5632SShawn McCarney     {
153*7b7a5632SShawn McCarney         std::string powerControlGPIOName{"power-on"};
154*7b7a5632SShawn McCarney         std::string powerGoodGPIOName{"chassis-pgood"};
155*7b7a5632SShawn McCarney         GPIOsOnlyDevice device{powerControlGPIOName, powerGoodGPIOName};
156*7b7a5632SShawn McCarney 
157*7b7a5632SShawn McCarney         device.getReadVout(0);
158*7b7a5632SShawn McCarney         ADD_FAILURE() << "Should not have reached this line.";
159*7b7a5632SShawn McCarney     }
160*7b7a5632SShawn McCarney     catch (const std::exception& e)
161*7b7a5632SShawn McCarney     {
162*7b7a5632SShawn McCarney         EXPECT_STREQ(e.what(), "getReadVout() is not supported");
163*7b7a5632SShawn McCarney     }
164*7b7a5632SShawn McCarney }
165*7b7a5632SShawn McCarney 
TEST(GPIOsOnlyDeviceTests,GetVoutUVFaultLimit)166*7b7a5632SShawn McCarney TEST(GPIOsOnlyDeviceTests, GetVoutUVFaultLimit)
167*7b7a5632SShawn McCarney {
168*7b7a5632SShawn McCarney     try
169*7b7a5632SShawn McCarney     {
170*7b7a5632SShawn McCarney         std::string powerControlGPIOName{"power-on"};
171*7b7a5632SShawn McCarney         std::string powerGoodGPIOName{"chassis-pgood"};
172*7b7a5632SShawn McCarney         GPIOsOnlyDevice device{powerControlGPIOName, powerGoodGPIOName};
173*7b7a5632SShawn McCarney 
174*7b7a5632SShawn McCarney         device.getVoutUVFaultLimit(0);
175*7b7a5632SShawn McCarney         ADD_FAILURE() << "Should not have reached this line.";
176*7b7a5632SShawn McCarney     }
177*7b7a5632SShawn McCarney     catch (const std::exception& e)
178*7b7a5632SShawn McCarney     {
179*7b7a5632SShawn McCarney         EXPECT_STREQ(e.what(), "getVoutUVFaultLimit() is not supported");
180*7b7a5632SShawn McCarney     }
181*7b7a5632SShawn McCarney }
182*7b7a5632SShawn McCarney 
TEST(GPIOsOnlyDeviceTests,FindPgoodFault)183*7b7a5632SShawn McCarney TEST(GPIOsOnlyDeviceTests, FindPgoodFault)
184*7b7a5632SShawn McCarney {
185*7b7a5632SShawn McCarney     std::string powerControlGPIOName{"power-on"};
186*7b7a5632SShawn McCarney     std::string powerGoodGPIOName{"chassis-pgood"};
187*7b7a5632SShawn McCarney     GPIOsOnlyDevice device{powerControlGPIOName, powerGoodGPIOName};
188*7b7a5632SShawn McCarney 
189*7b7a5632SShawn McCarney     MockServices services{};
190*7b7a5632SShawn McCarney     std::string powerSupplyError{};
191*7b7a5632SShawn McCarney     std::map<std::string, std::string> additionalData{};
192*7b7a5632SShawn McCarney     std::string error =
193*7b7a5632SShawn McCarney         device.findPgoodFault(services, powerSupplyError, additionalData);
194*7b7a5632SShawn McCarney     EXPECT_TRUE(error.empty());
195*7b7a5632SShawn McCarney     EXPECT_EQ(additionalData.size(), 0);
196*7b7a5632SShawn McCarney }
197