xref: /openbmc/libpldm/tests/utils.cpp (revision d7b942418a9db85e550f6765b9efbff608a72e49)
1 #include <libpldm/pldm_types.h>
2 #include <libpldm/utils.h>
3 
4 #include <cstring>
5 #include <vector>
6 
7 #include <gtest/gtest.h>
8 
TEST(Crc32,CheckSumTest)9 TEST(Crc32, CheckSumTest)
10 {
11     const char* password = "123456789";
12     auto checksum = pldm_edac_crc32(password, 9);
13     EXPECT_EQ(checksum, 0xcbf43926);
14 }
15 
16 #ifdef LIBPLDM_API_TESTING
TEST(Crc32,CumulativeCheckSumTest)17 TEST(Crc32, CumulativeCheckSumTest)
18 {
19     const char* password = "123456789";
20     auto partial_checksum = pldm_edac_crc32_extend(password, 4, 0);
21     auto final_checksum =
22         pldm_edac_crc32_extend(password + 4, 5, partial_checksum);
23     EXPECT_EQ(final_checksum, 0xcbf43926);
24 }
25 #endif
26 
TEST(Crc8,CheckSumTest)27 TEST(Crc8, CheckSumTest)
28 {
29     const char* data = "123456789";
30     auto checksum = pldm_edac_crc8(data, 9);
31     EXPECT_EQ(checksum, 0xf4);
32 }
33 
TEST(Ver2string,Ver2string)34 TEST(Ver2string, Ver2string)
35 {
36     ver32_t version{0x61, 0x10, 0xf7, 0xf3};
37     const char* vstr = "3.7.10a";
38     char buffer[1024];
39     auto rc = ver2str(&version, buffer, sizeof(buffer));
40     EXPECT_EQ(rc, (signed)std::strlen(vstr));
41     EXPECT_STREQ(vstr, buffer);
42 
43     version = {0x00, 0xf0, 0xf0, 0xf1};
44     vstr = "1.0.0";
45     rc = ver2str(&version, buffer, sizeof(buffer));
46     EXPECT_EQ(rc, (signed)std::strlen(vstr));
47     EXPECT_STREQ(vstr, buffer);
48 
49     version = {0x00, 0xf7, 0x01, 0x10};
50     vstr = "10.01.7";
51     rc = ver2str(&version, buffer, sizeof(buffer));
52     EXPECT_EQ(rc, (signed)std::strlen(vstr));
53     EXPECT_STREQ(vstr, buffer);
54 
55     version = {0x00, 0xff, 0xf1, 0xf3};
56     vstr = "3.1";
57     rc = ver2str(&version, buffer, sizeof(buffer));
58     EXPECT_EQ(rc, (signed)std::strlen(vstr));
59     EXPECT_STREQ(vstr, buffer);
60 
61     version = {0x61, 0xff, 0xf0, 0xf1};
62     vstr = "1.0a";
63     rc = ver2str(&version, buffer, sizeof(buffer));
64     EXPECT_EQ(rc, (signed)std::strlen(vstr));
65     EXPECT_STREQ(vstr, buffer);
66 
67     rc = ver2str(&version, buffer, 3);
68     EXPECT_EQ(rc, 2);
69     EXPECT_STREQ("1.", buffer);
70 
71     rc = ver2str(&version, buffer, 1);
72     EXPECT_EQ(rc, 0);
73 
74     rc = ver2str(&version, buffer, 0);
75     EXPECT_EQ(rc, -1);
76 }
77 
TEST(BcdConversion,BcdCoversion)78 TEST(BcdConversion, BcdCoversion)
79 {
80     EXPECT_EQ(12u, bcd2dec8(0x12));
81     EXPECT_EQ(99u, bcd2dec8(0x99));
82     EXPECT_EQ(1234u, bcd2dec16(0x1234));
83     EXPECT_EQ(9999u, bcd2dec16(0x9999));
84     EXPECT_EQ(12345678u, bcd2dec32(0x12345678));
85     EXPECT_EQ(99999999u, bcd2dec32(0x99999999));
86 
87     EXPECT_EQ(0x12u, dec2bcd8(12));
88     EXPECT_EQ(0x99u, dec2bcd8(99));
89     EXPECT_EQ(0x1234u, dec2bcd16(1234));
90     EXPECT_EQ(0x9999u, dec2bcd16(9999));
91     EXPECT_EQ(0x12345678u, dec2bcd32(12345678));
92     EXPECT_EQ(0x99999999u, dec2bcd32(99999999));
93 }
94 
TEST(TimeLegal,TimeLegal)95 TEST(TimeLegal, TimeLegal)
96 {
97     EXPECT_EQ(true, is_time_legal(30, 25, 16, 18, 8, 2019));
98     EXPECT_EQ(true, is_time_legal(30, 25, 16, 29, 2, 2020)); // leap year
99 
100     EXPECT_EQ(false, is_time_legal(30, 25, 16, 18, 8, 1960));  // year illegal
101     EXPECT_EQ(false, is_time_legal(30, 25, 16, 18, 15, 2019)); // month illegal
102     EXPECT_EQ(false, is_time_legal(30, 25, 16, 18, 0, 2019));  // month illegal
103     EXPECT_EQ(false, is_time_legal(30, 25, 16, 0, 8, 2019));   // day illegal
104     EXPECT_EQ(false, is_time_legal(30, 25, 16, 29, 2, 2019));  // day illegal
105     EXPECT_EQ(false, is_time_legal(30, 25, 25, 18, 8, 2019));  // hours illegal
106     EXPECT_EQ(false, is_time_legal(30, 70, 16, 18, 8, 2019)); // minutes illegal
107     EXPECT_EQ(false, is_time_legal(80, 25, 16, 18, 8, 2019)); // seconds illegal
108 }
109