blob: af2e03ebbc047b84141bed0a42deecc66d795038 [file] [log] [blame]
Patrick Ventureef3aead2018-09-12 08:53:29 -07001#include "ipmi.hpp"
Patrick Venturecd8dab42019-01-15 19:57:38 -08002#include "manager_mock.hpp"
Patrick Ventureef3aead2018-09-12 08:53:29 -07003
Patrick Ventureef3aead2018-09-12 08:53:29 -07004#include <cstring>
5#include <string>
6
7#include <gtest/gtest.h>
8
9namespace blobs
10{
11
Patrick Ventureef3aead2018-09-12 08:53:29 -070012using ::testing::Return;
Patrick Ventureef3aead2018-09-12 08:53:29 -070013
14// ipmid.hpp isn't installed where we can grab it and this value is per BMC
15// SoC.
16#define MAX_IPMI_BUFFER 64
17
18TEST(BlobCloseTest, ManagerRejectsCloseReturnsFailure)
19{
20 // The session manager returned failure to close, which we need to pass on.
21
22 ManagerMock mgr;
23 uint16_t sessionId = 0x54;
24 size_t dataLen;
25 uint8_t request[MAX_IPMI_BUFFER] = {0};
26 uint8_t reply[MAX_IPMI_BUFFER] = {0};
27 struct BmcBlobCloseTx req;
28
Patrick Venture00d5f0d2019-05-17 19:21:35 -070029 req.cmd = static_cast<std::uint8_t>(BlobOEMCommands::bmcBlobClose);
Patrick Ventureef3aead2018-09-12 08:53:29 -070030 req.crc = 0;
31 req.sessionId = sessionId;
32
33 dataLen = sizeof(req);
34
35 std::memcpy(request, &req, sizeof(req));
36
37 EXPECT_CALL(mgr, close(sessionId)).WillOnce(Return(false));
Patrick Venture41258802018-11-12 10:46:30 -080038 EXPECT_EQ(IPMI_CC_UNSPECIFIED_ERROR,
39 closeBlob(&mgr, request, reply, &dataLen));
Patrick Ventureef3aead2018-09-12 08:53:29 -070040}
41
42TEST(BlobCloseTest, BlobClosedReturnsSuccess)
43{
44 // Verify that if all goes right, success is returned.
45
46 ManagerMock mgr;
47 uint16_t sessionId = 0x54;
48 size_t dataLen;
49 uint8_t request[MAX_IPMI_BUFFER] = {0};
50 uint8_t reply[MAX_IPMI_BUFFER] = {0};
51 struct BmcBlobCloseTx req;
52
Patrick Venture00d5f0d2019-05-17 19:21:35 -070053 req.cmd = static_cast<std::uint8_t>(BlobOEMCommands::bmcBlobClose);
Patrick Ventureef3aead2018-09-12 08:53:29 -070054 req.crc = 0;
55 req.sessionId = sessionId;
56
57 dataLen = sizeof(req);
58
59 std::memcpy(request, &req, sizeof(req));
60
61 EXPECT_CALL(mgr, close(sessionId)).WillOnce(Return(true));
62 EXPECT_EQ(IPMI_CC_OK, closeBlob(&mgr, request, reply, &dataLen));
63}
64} // namespace blobs