blob: 92b9624d3a943c650e7909a9fa2a98c4120462f7 [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
Ravi Tejaea7c3f02020-09-15 03:03:51 -05005#include <xyz/openbmc_project/Certs/error.hpp>
6#include <xyz/openbmc_project/Common/error.hpp>
7
Patrick Williams223e4602023-05-10 07:51:11 -05008#include <iterator>
9#include <string>
10
Ravi Tejaea7c3f02020-09-15 03:03:51 -050011#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:
Patrick Williamsb3dbfb32022-07-22 19:26:57 -050023 MockCACertMgr(sdbusplus::bus_t& bus, const char* path) :
Nan Zhoucf06ccd2021-12-28 16:25:45 -080024 CACertMgr(bus, path)
Patrick Williams223e4602023-05-10 07:51:11 -050025 {}
Ravi Tejaea7c3f02020-09-15 03:03:51 -050026
27 void deleteAll()
28 {
29 CACertMgr::deleteAll();
30 }
31
32 void erase(uint32_t entryId)
33 {
34 CACertMgr::erase(entryId);
35 }
36 std::string createCSRObject(std::string csrString)
37 {
38 return (signCSR(csrString));
39 }
40
41 uint32_t getNumOfEntries()
42 {
43 return entries.size();
44 }
45
46 friend class TestCACertMgr;
47};
48/**
49 * Class to create certificate authority manager unit testcases.
50 */
51class TestCACertMgr : public ::testing::Test
52{
53 public:
Patrick Williams223e4602023-05-10 07:51:11 -050054 TestCACertMgr() : bus(sdbusplus::bus::new_default()) {}
Ravi Tejaea7c3f02020-09-15 03:03:51 -050055
56 protected:
Patrick Williamsb3dbfb32022-07-22 19:26:57 -050057 sdbusplus::bus_t bus;
Ravi Tejaea7c3f02020-09-15 03:03:51 -050058};
59
60TEST_F(TestCACertMgr, testObjectCreation)
61{
62 auto bus = sdbusplus::bus::new_default();
63 std::string objPath = "/xyz/openbmc_project/certs/ca";
Nan Zhoucf06ccd2021-12-28 16:25:45 -080064 MockCACertMgr manager(bus, objPath.c_str());
Ravi Tejaea7c3f02020-09-15 03:03:51 -050065
66 std::string csrString = "csr string";
67 EXPECT_NO_THROW(objPath = manager.createCSRObject(csrString));
68 EXPECT_TRUE(manager.getNumOfEntries() == 1);
69}
70
71TEST_F(TestCACertMgr, testInvalidArgument)
72{
73 auto bus = sdbusplus::bus::new_default();
74 std::string objPath = "/xyz/openbmc_project/certs/ca";
Nan Zhoucf06ccd2021-12-28 16:25:45 -080075 MockCACertMgr manager(bus, objPath.c_str());
Ravi Tejaea7c3f02020-09-15 03:03:51 -050076
77 std::string csrString(4097, 'C');
78
79 EXPECT_THROW(objPath = manager.createCSRObject(csrString), InvalidArgument);
80}
81TEST_F(TestCACertMgr, DeleteAllCSRObjects)
82{
83 auto bus = sdbusplus::bus::new_default();
84 std::string objPath = "/xyz/openbmc_project/certs/ca";
Ravi Tejaea7c3f02020-09-15 03:03:51 -050085
Nan Zhoucf06ccd2021-12-28 16:25:45 -080086 MockCACertMgr manager(bus, objPath.c_str());
Ravi Tejaea7c3f02020-09-15 03:03:51 -050087
88 std::string csrString = "csr string";
89
90 objPath = manager.createCSRObject(csrString);
91 objPath = manager.createCSRObject(csrString);
92 EXPECT_TRUE(manager.getNumOfEntries() == 2);
93 manager.deleteAll();
94
95 EXPECT_TRUE(manager.getNumOfEntries() == 0);
96}
97TEST_F(TestCACertMgr, DeleteObjectEntry)
98{
Ravi Tejaea7c3f02020-09-15 03:03:51 -050099 auto bus = sdbusplus::bus::new_default();
100 std::string objPath = "/xyz/openbmc_project/certs/ca";
Nan Zhoucf06ccd2021-12-28 16:25:45 -0800101 MockCACertMgr manager(bus, objPath.c_str());
Ravi Tejaea7c3f02020-09-15 03:03:51 -0500102
103 std::string csrString = "csr string";
104 std::string entryPath = manager.createCSRObject(csrString);
105 std::size_t pos = entryPath.rfind("/");
106
107 std::string id;
108 if (pos != std::string::npos)
109 {
110 id = entryPath.substr(pos + 1);
111 }
112
113 manager.erase(std::stoi(id));
114 EXPECT_TRUE(manager.getNumOfEntries() == 0);
115}
Nan Zhoue1289ad2021-12-28 11:02:56 -0800116} // namespace
117} // namespace ca::cert