blob: a09e04c46984c5705cac3d2d4f29de2cca83edcb [file] [log] [blame]
Andrew Jefferyb0c1d202023-11-07 22:08:44 +10301#include <libpldm/pldm_types.h>
2#include <libpldm/utils.h>
3
Andrew Jeffery9c766792022-08-10 23:12:49 +09304#include <cstring>
5#include <vector>
6
Andrew Jeffery9c766792022-08-10 23:12:49 +09307#include <gtest/gtest.h>
8
9TEST(Crc32, CheckSumTest)
10{
11 const char* password = "123456789";
Andrew Jefferya3863482025-04-05 20:11:02 +103012 auto checksum = pldm_edac_crc32(password, 9);
Andrew Jeffery9c766792022-08-10 23:12:49 +093013 EXPECT_EQ(checksum, 0xcbf43926);
14}
15
Kasun Athukoralad7b94242025-06-19 01:02:38 +000016#ifdef LIBPLDM_API_TESTING
17TEST(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
Andrew Jeffery9c766792022-08-10 23:12:49 +093027TEST(Crc8, CheckSumTest)
28{
29 const char* data = "123456789";
Andrew Jefferyd0c9ae72025-04-05 20:11:02 +103030 auto checksum = pldm_edac_crc8(data, 9);
Andrew Jeffery9c766792022-08-10 23:12:49 +093031 EXPECT_EQ(checksum, 0xf4);
32}
33
34TEST(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
78TEST(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
95TEST(TimeLegal, TimeLegal)
96{
97 EXPECT_EQ(true, is_time_legal(30, 25, 16, 18, 8, 2019));
Andrew Jeffery01731472023-06-13 10:33:18 +093098 EXPECT_EQ(true, is_time_legal(30, 25, 16, 29, 2, 2020)); // leap year
Andrew Jeffery9c766792022-08-10 23:12:49 +093099
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}