1 #include "FruUtils.hpp"
2 
3 #include <array>
4 
5 #include "gtest/gtest.h"
6 
7 extern "C"
8 {
9 // Include for I2C_SMBUS_BLOCK_MAX
10 #include <linux/i2c.h>
11 }
12 
13 TEST(ValidateHeaderTest, InvalidFruVersionReturnsFalse)
14 {
15     // Validates the FruVersion is checked for the only legal value.
16     constexpr std::array<uint8_t, I2C_SMBUS_BLOCK_MAX> fru_header = {
17         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
18 
19     EXPECT_FALSE(validateHeader(fru_header));
20 }
21 
22 TEST(VerifyOffsetTest, EmptyFruDataReturnsFalse)
23 {
24     // Validates the FruData size is checked for non empty.
25     std::vector<uint8_t> fru_data = {};
26 
27     EXPECT_FALSE(verifyOffset(fru_data, fruAreas::fruAreaChassis, 0));
28 }
29 
30 TEST(VerifyOffsetTest, AreaOutOfRangeReturnsFalse)
31 {
32     // Validates the FruArea value, check if it is within range.
33     const std::vector<uint8_t> fru_data = {0x01, 0x00, 0x00, 0x00, 0x00,
34                                            0x00, 0x00, 0x00, 0x00};
35 
36     unsigned int areaOutOfRange = 8;
37     EXPECT_FALSE(
38         verifyOffset(fru_data, static_cast<fruAreas>(areaOutOfRange), 0));
39 }
40 
41 TEST(VerifyOffsetTest, OverlapNextAreaReturnsFalse)
42 {
43     // Validates the Overlap of offsets with overlapped values.
44     const std::vector<uint8_t> fru_data = {0x01, 0x00, 0x01, 0x02, 0x03,
45                                            0x04, 0x00, 0x00, 0x00};
46 
47     EXPECT_FALSE(verifyOffset(fru_data, fruAreas::fruAreaChassis, 2));
48 }
49 
50 TEST(VerifyOffsetTest, OverlapPrevAreaReturnsFalse)
51 {
52     // Validates the Overlap of offsets with overlapped values.
53     const std::vector<uint8_t> fru_data = {0x01, 0x00, 0x01, 0x03, 0x02,
54                                            0x07, 0x00, 0x00, 0x00};
55 
56     EXPECT_FALSE(verifyOffset(fru_data, fruAreas::fruAreaProduct, 2));
57 }
58 
59 TEST(VerifyOffsetTest, ValidInputDataNoOverlapReturnsTrue)
60 {
61     // Validates all inputs with expected value and no overlap.
62     const std::vector<uint8_t> fru_data = {0x01, 0x00, 0x01, 0x02, 0x03,
63                                            0x04, 0x00, 0x00, 0x00};
64 
65     EXPECT_TRUE(verifyOffset(fru_data, fruAreas::fruAreaChassis, 1));
66 }
67