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