blob: 5bdad5698760f727e7f2877cdcf5b66dd88c2472 [file] [log] [blame]
Ravi Tejaea7c3f02020-09-15 03:03:51 -05001#include "config.h"
2
3#include "bmc-vmi-ca/ca_certs_manager.hpp"
4
5#include <iterator>
6#include <sdeventplus/event.hpp>
7#include <string>
8#include <xyz/openbmc_project/Certs/error.hpp>
9#include <xyz/openbmc_project/Common/error.hpp>
10
11#include <gtest/gtest.h>
12
Nan Zhoue1289ad2021-12-28 11:02:56 -080013namespace ca::cert
14{
15namespace
16{
Ravi Tejaea7c3f02020-09-15 03:03:51 -050017using InvalidArgument =
18 sdbusplus::xyz::openbmc_project::Common::Error::InvalidArgument;
Ravi Tejaea7c3f02020-09-15 03:03:51 -050019
20class MockCACertMgr : public CACertMgr
21{
22 public:
23 MockCACertMgr(sdbusplus::bus::bus& bus, sdeventplus::Event& event,
24 const char* path) :
25 CACertMgr(bus, event, path)
26 {
27 }
28
29 void deleteAll()
30 {
31 CACertMgr::deleteAll();
32 }
33
34 void erase(uint32_t entryId)
35 {
36 CACertMgr::erase(entryId);
37 }
38 std::string createCSRObject(std::string csrString)
39 {
40 return (signCSR(csrString));
41 }
42
43 uint32_t getNumOfEntries()
44 {
45 return entries.size();
46 }
47
48 friend class TestCACertMgr;
49};
50/**
51 * Class to create certificate authority manager unit testcases.
52 */
53class TestCACertMgr : public ::testing::Test
54{
55 public:
56 TestCACertMgr() : bus(sdbusplus::bus::new_default())
57 {
58 }
59
60 protected:
61 sdbusplus::bus::bus bus;
62};
63
64TEST_F(TestCACertMgr, testObjectCreation)
65{
66 auto bus = sdbusplus::bus::new_default();
67 std::string objPath = "/xyz/openbmc_project/certs/ca";
68 auto event = sdeventplus::Event::get_default();
69 bus.attach_event(event.get(), SD_EVENT_PRIORITY_NORMAL);
70 MockCACertMgr manager(bus, event, objPath.c_str());
71
72 std::string csrString = "csr string";
73 EXPECT_NO_THROW(objPath = manager.createCSRObject(csrString));
74 EXPECT_TRUE(manager.getNumOfEntries() == 1);
75}
76
77TEST_F(TestCACertMgr, testInvalidArgument)
78{
79 auto bus = sdbusplus::bus::new_default();
80 std::string objPath = "/xyz/openbmc_project/certs/ca";
81 auto event = sdeventplus::Event::get_default();
82 bus.attach_event(event.get(), SD_EVENT_PRIORITY_NORMAL);
83 MockCACertMgr manager(bus, event, objPath.c_str());
84
85 std::string csrString(4097, 'C');
86
87 EXPECT_THROW(objPath = manager.createCSRObject(csrString), InvalidArgument);
88}
89TEST_F(TestCACertMgr, DeleteAllCSRObjects)
90{
91 auto bus = sdbusplus::bus::new_default();
92 std::string objPath = "/xyz/openbmc_project/certs/ca";
93 auto event = sdeventplus::Event::get_default();
94
95 bus.attach_event(event.get(), SD_EVENT_PRIORITY_NORMAL);
96 MockCACertMgr manager(bus, event, objPath.c_str());
97
98 std::string csrString = "csr string";
99
100 objPath = manager.createCSRObject(csrString);
101 objPath = manager.createCSRObject(csrString);
102 EXPECT_TRUE(manager.getNumOfEntries() == 2);
103 manager.deleteAll();
104
105 EXPECT_TRUE(manager.getNumOfEntries() == 0);
106}
107TEST_F(TestCACertMgr, DeleteObjectEntry)
108{
109
110 auto bus = sdbusplus::bus::new_default();
111 std::string objPath = "/xyz/openbmc_project/certs/ca";
112 auto event = sdeventplus::Event::get_default();
113 bus.attach_event(event.get(), SD_EVENT_PRIORITY_NORMAL);
114 MockCACertMgr manager(bus, event, objPath.c_str());
115
116 std::string csrString = "csr string";
117 std::string entryPath = manager.createCSRObject(csrString);
118 std::size_t pos = entryPath.rfind("/");
119
120 std::string id;
121 if (pos != std::string::npos)
122 {
123 id = entryPath.substr(pos + 1);
124 }
125
126 manager.erase(std::stoi(id));
127 EXPECT_TRUE(manager.getNumOfEntries() == 0);
128}
Nan Zhoue1289ad2021-12-28 11:02:56 -0800129} // namespace
130} // namespace ca::cert