blob: 9043aa3e0f32b35aec17044e9cea55bb47004ae5 [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>
Ravi Tejaea7c3f02020-09-15 03:03:51 -05006#include <string>
7#include <xyz/openbmc_project/Certs/error.hpp>
8#include <xyz/openbmc_project/Common/error.hpp>
9
10#include <gtest/gtest.h>
11
Nan Zhoue1289ad2021-12-28 11:02:56 -080012namespace ca::cert
13{
14namespace
15{
Ravi Tejaea7c3f02020-09-15 03:03:51 -050016using InvalidArgument =
17 sdbusplus::xyz::openbmc_project::Common::Error::InvalidArgument;
Ravi Tejaea7c3f02020-09-15 03:03:51 -050018
19class MockCACertMgr : public CACertMgr
20{
21 public:
Patrick Williamsb3dbfb32022-07-22 19:26:57 -050022 MockCACertMgr(sdbusplus::bus_t& bus, const char* path) :
Nan Zhoucf06ccd2021-12-28 16:25:45 -080023 CACertMgr(bus, path)
Ravi Tejaea7c3f02020-09-15 03:03:51 -050024 {
25 }
26
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:
54 TestCACertMgr() : bus(sdbusplus::bus::new_default())
55 {
56 }
57
58 protected:
Patrick Williamsb3dbfb32022-07-22 19:26:57 -050059 sdbusplus::bus_t bus;
Ravi Tejaea7c3f02020-09-15 03:03:51 -050060};
61
62TEST_F(TestCACertMgr, testObjectCreation)
63{
64 auto bus = sdbusplus::bus::new_default();
65 std::string objPath = "/xyz/openbmc_project/certs/ca";
Nan Zhoucf06ccd2021-12-28 16:25:45 -080066 MockCACertMgr manager(bus, objPath.c_str());
Ravi Tejaea7c3f02020-09-15 03:03:51 -050067
68 std::string csrString = "csr string";
69 EXPECT_NO_THROW(objPath = manager.createCSRObject(csrString));
70 EXPECT_TRUE(manager.getNumOfEntries() == 1);
71}
72
73TEST_F(TestCACertMgr, testInvalidArgument)
74{
75 auto bus = sdbusplus::bus::new_default();
76 std::string objPath = "/xyz/openbmc_project/certs/ca";
Nan Zhoucf06ccd2021-12-28 16:25:45 -080077 MockCACertMgr manager(bus, objPath.c_str());
Ravi Tejaea7c3f02020-09-15 03:03:51 -050078
79 std::string csrString(4097, 'C');
80
81 EXPECT_THROW(objPath = manager.createCSRObject(csrString), InvalidArgument);
82}
83TEST_F(TestCACertMgr, DeleteAllCSRObjects)
84{
85 auto bus = sdbusplus::bus::new_default();
86 std::string objPath = "/xyz/openbmc_project/certs/ca";
Ravi Tejaea7c3f02020-09-15 03:03:51 -050087
Nan Zhoucf06ccd2021-12-28 16:25:45 -080088 MockCACertMgr manager(bus, objPath.c_str());
Ravi Tejaea7c3f02020-09-15 03:03:51 -050089
90 std::string csrString = "csr string";
91
92 objPath = manager.createCSRObject(csrString);
93 objPath = manager.createCSRObject(csrString);
94 EXPECT_TRUE(manager.getNumOfEntries() == 2);
95 manager.deleteAll();
96
97 EXPECT_TRUE(manager.getNumOfEntries() == 0);
98}
99TEST_F(TestCACertMgr, DeleteObjectEntry)
100{
101
102 auto bus = sdbusplus::bus::new_default();
103 std::string objPath = "/xyz/openbmc_project/certs/ca";
Nan Zhoucf06ccd2021-12-28 16:25:45 -0800104 MockCACertMgr manager(bus, objPath.c_str());
Ravi Tejaea7c3f02020-09-15 03:03:51 -0500105
106 std::string csrString = "csr string";
107 std::string entryPath = manager.createCSRObject(csrString);
108 std::size_t pos = entryPath.rfind("/");
109
110 std::string id;
111 if (pos != std::string::npos)
112 {
113 id = entryPath.substr(pos + 1);
114 }
115
116 manager.erase(std::stoi(id));
117 EXPECT_TRUE(manager.getNumOfEntries() == 0);
118}
Nan Zhoue1289ad2021-12-28 11:02:56 -0800119} // namespace
120} // namespace ca::cert