1a2056e9cSWilly Tu // Copyright 2021 Google LLC
2a2056e9cSWilly Tu //
3a2056e9cSWilly Tu // Licensed under the Apache License, Version 2.0 (the "License");
4a2056e9cSWilly Tu // you may not use this file except in compliance with the License.
5a2056e9cSWilly Tu // You may obtain a copy of the License at
6a2056e9cSWilly Tu //
7a2056e9cSWilly Tu //      http://www.apache.org/licenses/LICENSE-2.0
8a2056e9cSWilly Tu //
9a2056e9cSWilly Tu // Unless required by applicable law or agreed to in writing, software
10a2056e9cSWilly Tu // distributed under the License is distributed on an "AS IS" BASIS,
11a2056e9cSWilly Tu // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12a2056e9cSWilly Tu // See the License for the specific language governing permissions and
13a2056e9cSWilly Tu // limitations under the License.
14a2056e9cSWilly Tu 
150e9aae5dSPatrick Venture #include "commands.hpp"
16bb90d4fdSPatrick Venture #include "cpld.hpp"
17bb90d4fdSPatrick Venture #include "handler_mock.hpp"
18*ff3cd8e9SWilly Tu #include "helper.hpp"
19bb90d4fdSPatrick Venture 
20bb90d4fdSPatrick Venture #include <cstdint>
21bb90d4fdSPatrick Venture #include <tuple>
22bb90d4fdSPatrick Venture #include <vector>
23bb90d4fdSPatrick Venture 
24bb90d4fdSPatrick Venture #include <gtest/gtest.h>
25bb90d4fdSPatrick Venture 
26bb90d4fdSPatrick Venture using ::testing::Return;
27bb90d4fdSPatrick Venture 
28bb90d4fdSPatrick Venture namespace google
29bb90d4fdSPatrick Venture {
30bb90d4fdSPatrick Venture namespace ipmi
31bb90d4fdSPatrick Venture {
32bb90d4fdSPatrick Venture 
TEST(CpldCommandTest,RequestTooSmall)33bb90d4fdSPatrick Venture TEST(CpldCommandTest, RequestTooSmall)
34bb90d4fdSPatrick Venture {
35*ff3cd8e9SWilly Tu     std::vector<std::uint8_t> request = {};
36bb90d4fdSPatrick Venture     HandlerMock hMock;
37*ff3cd8e9SWilly Tu 
38*ff3cd8e9SWilly Tu     EXPECT_EQ(::ipmi::responseReqDataLenInvalid(),
39*ff3cd8e9SWilly Tu               cpldVersion(request, &hMock));
40bb90d4fdSPatrick Venture }
41bb90d4fdSPatrick Venture 
TEST(CpldCommandTest,ValidRequestReturnsHappy)42bb90d4fdSPatrick Venture TEST(CpldCommandTest, ValidRequestReturnsHappy)
43bb90d4fdSPatrick Venture {
44*ff3cd8e9SWilly Tu     std::vector<std::uint8_t> request = {0x04};
45*ff3cd8e9SWilly Tu 
46bb90d4fdSPatrick Venture     std::uint8_t expectedMaj = 0x5;
47bb90d4fdSPatrick Venture     std::uint8_t expectedMin = 0x3;
48bb90d4fdSPatrick Venture     std::uint8_t expectedPt = 0x7;
49bb90d4fdSPatrick Venture     std::uint8_t expectedSbPtr = 0x9;
50bb90d4fdSPatrick Venture 
51bb90d4fdSPatrick Venture     HandlerMock hMock;
52bb90d4fdSPatrick Venture     EXPECT_CALL(hMock, getCpldVersion(0x04))
53bb90d4fdSPatrick Venture         .WillOnce(Return(std::make_tuple(expectedMaj, expectedMin, expectedPt,
54bb90d4fdSPatrick Venture                                          expectedSbPtr)));
55bb90d4fdSPatrick Venture 
56*ff3cd8e9SWilly Tu     // Reply is in the form of
57*ff3cd8e9SWilly Tu     // std::tuple<ipmi::Cc, std::optional<std::tuple<RetTypes...>>>
58*ff3cd8e9SWilly Tu     auto reply = cpldVersion(request, &hMock);
59*ff3cd8e9SWilly Tu     auto result = ValidateReply(reply);
60*ff3cd8e9SWilly Tu     auto& data = result.second;
61*ff3cd8e9SWilly Tu 
62*ff3cd8e9SWilly Tu     EXPECT_EQ(sizeof(struct CpldReply), data.size());
63*ff3cd8e9SWilly Tu     EXPECT_EQ(SysOEMCommands::SysCpldVersion, result.first);
64*ff3cd8e9SWilly Tu     EXPECT_EQ(expectedMaj, data[0]);
65*ff3cd8e9SWilly Tu     EXPECT_EQ(expectedMin, data[1]);
66*ff3cd8e9SWilly Tu     EXPECT_EQ(expectedPt, data[2]);
67*ff3cd8e9SWilly Tu     EXPECT_EQ(expectedSbPtr, data[3]);
68bb90d4fdSPatrick Venture }
69bb90d4fdSPatrick Venture 
70bb90d4fdSPatrick Venture } // namespace ipmi
71bb90d4fdSPatrick Venture } // namespace google
72