summaryrefslogtreecommitdiffstats
path: root/test/ipmi_getcount_unittest.cpp
blob: 34fc33d7caa1705451b90b67d3f48a902328a448 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include "ipmi.hpp"
#include "manager_mock.hpp"

#include <cstring>
#include <vector>

#include <gtest/gtest.h>

namespace blobs
{

using ::testing::Return;

// ipmid.hpp isn't installed where we can grab it and this value is per BMC
// SoC.
#define MAX_IPMI_BUFFER 64

// the request here is only the subcommand byte and therefore there's no invalid
// length check, etc to handle within the method.

TEST(BlobCountTest, ReturnsZeroBlobs)
{
    // Calling BmcBlobGetCount if there are no handlers registered should just
    // return that there are 0 blobs.

    ManagerMock mgr;
    size_t dataLen;
    uint8_t reply[MAX_IPMI_BUFFER] = {0};
    struct BmcBlobCountTx req;
    struct BmcBlobCountRx rep;
    uint8_t* request = reinterpret_cast<uint8_t*>(&req);

    req.cmd = static_cast<std::uint8_t>(BlobOEMCommands::bmcBlobGetCount);
    dataLen = sizeof(req);

    rep.crc = 0;
    rep.blobCount = 0;

    EXPECT_CALL(mgr, buildBlobList()).WillOnce(Return(0));

    EXPECT_EQ(IPMI_CC_OK, getBlobCount(&mgr, request, reply, &dataLen));

    EXPECT_EQ(sizeof(rep), dataLen);
    EXPECT_EQ(0, std::memcmp(reply, &rep, sizeof(rep)));
}

TEST(BlobCountTest, ReturnsTwoBlobs)
{
    // Calling BmcBlobGetCount with one handler registered that knows of two
    // blobs will return that it found two blobs.

    ManagerMock mgr;
    size_t dataLen;
    uint8_t reply[MAX_IPMI_BUFFER] = {0};
    struct BmcBlobCountTx req;
    struct BmcBlobCountRx rep;
    uint8_t* request = reinterpret_cast<uint8_t*>(&req);

    req.cmd = static_cast<std::uint8_t>(BlobOEMCommands::bmcBlobGetCount);
    dataLen = sizeof(req);

    rep.crc = 0;
    rep.blobCount = 2;

    EXPECT_CALL(mgr, buildBlobList()).WillOnce(Return(2));

    EXPECT_EQ(IPMI_CC_OK, getBlobCount(&mgr, request, reply, &dataLen));

    EXPECT_EQ(sizeof(rep), dataLen);
    EXPECT_EQ(0, std::memcmp(reply, &rep, sizeof(rep)));
}
} // namespace blobs
OpenPOWER on IntegriCloud