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