1 #include "ipmi.hpp"
2 
3 #include <cstring>
4 
5 #include <gtest/gtest.h>
6 
7 namespace blobs
8 {
9 
10 // ipmid.hpp isn't installed where we can grab it and this value is per BMC
11 // SoC.
12 #define MAX_IPMI_BUFFER 64
13 
14 TEST(StringInputTest, NullPointerInput)
15 {
16     // The method should verify it did receive a non-null input pointer.
17 
18     EXPECT_STREQ("", stringFromBuffer(NULL, 5).c_str());
19 }
20 
21 TEST(StringInputTest, ZeroBytesInput)
22 {
23     // Verify that if the input length is 0 that it'll return the empty string.
24 
25     const char* request = "asdf";
26     EXPECT_STREQ("", stringFromBuffer(request, 0).c_str());
27 }
28 
29 TEST(StringInputTest, NulTerminatorNotFound)
30 {
31     // Verify that if there isn't a nul-terminator found in an otherwise valid
32     // string, it'll return the emptry string.
33 
34     char request[MAX_IPMI_BUFFER];
35     std::memset(request, 'a', sizeof(request));
36     EXPECT_STREQ("", stringFromBuffer(request, sizeof(request)).c_str());
37 }
38 
39 TEST(StringInputTest, TwoNulsFound)
40 {
41     // Verify it makes you use the entire data region for the string.
42     char request[MAX_IPMI_BUFFER];
43     request[0] = 'a';
44     request[1] = 0;
45     std::memset(&request[2], 'b', sizeof(request) - 2);
46     request[MAX_IPMI_BUFFER - 1] = 0;
47 
48     // This case has two strings, and the last character is a nul-terminator.
49     EXPECT_STREQ("", stringFromBuffer(request, sizeof(request)).c_str());
50 }
51 
52 TEST(StringInputTest, NulTerminatorFound)
53 {
54     // Verify that if it's provided a valid nul-terminated string, it'll
55     // return it.
56 
57     const char* request = "asdf";
58     EXPECT_STREQ("asdf", stringFromBuffer(request, 5).c_str());
59 }
60 } // namespace blobs
61