blob: 2dfbe59c29766d9981b652d7f6db646c250ad41a [file] [log] [blame]
Patrick Venture5c4b17b2018-10-04 10:32:22 -07001#include "ipmi.hpp"
2
3#include <blobs-ipmid/test/manager_mock.hpp>
4#include <cstring>
5
6#include <gtest/gtest.h>
7
8namespace blobs
9{
10using ::testing::ElementsAreArray;
11using ::testing::Return;
12
13// ipmid.hpp isn't installed where we can grab it and this value is per BMC
14// SoC.
15#define MAX_IPMI_BUFFER 64
16
17TEST(BlobWriteMetaTest, ManagerReturnsFailureReturnsFailure)
18{
19 // This verifies a failure from the manager is passed back.
20
21 ManagerMock mgr;
22 size_t dataLen;
23 uint8_t request[MAX_IPMI_BUFFER] = {0};
24 uint8_t reply[MAX_IPMI_BUFFER] = {0};
25 auto req = reinterpret_cast<struct BmcBlobWriteMetaTx*>(request);
26
27 req->cmd = BlobOEMCommands::bmcBlobWrite;
28 req->crc = 0;
29 req->sessionId = 0x54;
30 req->offset = 0x100;
31
32 uint8_t expectedBytes[2] = {0x66, 0x67};
33 std::memcpy(req->data, &expectedBytes[0], sizeof(expectedBytes));
34
35 dataLen = sizeof(struct BmcBlobWriteMetaTx) + sizeof(expectedBytes);
36
37 EXPECT_CALL(
38 mgr, writeMeta(req->sessionId, req->offset,
39 ElementsAreArray(expectedBytes, sizeof(expectedBytes))))
40 .WillOnce(Return(false));
41
42 EXPECT_EQ(IPMI_CC_INVALID, writeMeta(&mgr, request, reply, &dataLen));
43}
44
45TEST(BlobWriteMetaTest, ManagerReturnsTrueWriteSucceeds)
46{
47 // The case where everything works.
48
49 ManagerMock mgr;
50 size_t dataLen;
51 uint8_t request[MAX_IPMI_BUFFER] = {0};
52 uint8_t reply[MAX_IPMI_BUFFER] = {0};
53 auto req = reinterpret_cast<struct BmcBlobWriteMetaTx*>(request);
54
55 req->cmd = BlobOEMCommands::bmcBlobWrite;
56 req->crc = 0;
57 req->sessionId = 0x54;
58 req->offset = 0x100;
59
60 uint8_t expectedBytes[2] = {0x66, 0x67};
61 std::memcpy(req->data, &expectedBytes[0], sizeof(expectedBytes));
62
63 dataLen = sizeof(struct BmcBlobWriteMetaTx) + sizeof(expectedBytes);
64
65 EXPECT_CALL(
66 mgr, writeMeta(req->sessionId, req->offset,
67 ElementsAreArray(expectedBytes, sizeof(expectedBytes))))
68 .WillOnce(Return(true));
69
70 EXPECT_EQ(IPMI_CC_OK, writeMeta(&mgr, request, reply, &dataLen));
71}
72} // namespace blobs