diff --git a/test/ca_certs_manager_test.cpp b/test/ca_certs_manager_test.cpp
index 9043aa3..92b9624 100644
--- a/test/ca_certs_manager_test.cpp
+++ b/test/ca_certs_manager_test.cpp
@@ -2,11 +2,12 @@
 
 #include "bmc-vmi-ca/ca_certs_manager.hpp"
 
-#include <iterator>
-#include <string>
 #include <xyz/openbmc_project/Certs/error.hpp>
 #include <xyz/openbmc_project/Common/error.hpp>
 
+#include <iterator>
+#include <string>
+
 #include <gtest/gtest.h>
 
 namespace ca::cert
@@ -21,8 +22,7 @@
   public:
     MockCACertMgr(sdbusplus::bus_t& bus, const char* path) :
         CACertMgr(bus, path)
-    {
-    }
+    {}
 
     void deleteAll()
     {
@@ -51,9 +51,7 @@
 class TestCACertMgr : public ::testing::Test
 {
   public:
-    TestCACertMgr() : bus(sdbusplus::bus::new_default())
-    {
-    }
+    TestCACertMgr() : bus(sdbusplus::bus::new_default()) {}
 
   protected:
     sdbusplus::bus_t bus;
@@ -98,7 +96,6 @@
 }
 TEST_F(TestCACertMgr, DeleteObjectEntry)
 {
-
     auto bus = sdbusplus::bus::new_default();
     std::string objPath = "/xyz/openbmc_project/certs/ca";
     MockCACertMgr manager(bus, objPath.c_str());
diff --git a/test/certs_manager_test.cpp b/test/certs_manager_test.cpp
index 9caa9d3..f30abad 100644
--- a/test/certs_manager_test.cpp
+++ b/test/certs_manager_test.cpp
@@ -11,6 +11,11 @@
 #include <systemd/sd-event.h>
 #include <unistd.h>
 
+#include <sdbusplus/bus.hpp>
+#include <sdeventplus/event.hpp>
+#include <xyz/openbmc_project/Certs/error.hpp>
+#include <xyz/openbmc_project/Common/error.hpp>
+
 #include <cstdint>
 #include <cstdio>
 #include <cstdlib>
@@ -20,14 +25,10 @@
 #include <iterator>
 #include <memory>
 #include <new>
-#include <sdbusplus/bus.hpp>
-#include <sdeventplus/event.hpp>
 #include <string>
 #include <unordered_set>
 #include <utility>
 #include <vector>
-#include <xyz/openbmc_project/Certs/error.hpp>
-#include <xyz/openbmc_project/Common/error.hpp>
 
 #include <gmock/gmock.h>
 #include <gtest/gtest.h>
@@ -71,9 +72,7 @@
 class TestCertificates : public ::testing::Test
 {
   public:
-    TestCertificates() : bus(sdbusplus::bus::new_default())
-    {
-    }
+    TestCertificates() : bus(sdbusplus::bus::new_default()) {}
     void SetUp() override
     {
         char dirTemplate[] = "/tmp/FakeCerts.XXXXXX";
@@ -218,8 +217,7 @@
             phosphor::certs::CSR* csr = nullptr) :
         manager(manager),
         csr_(csr)
-    {
-    }
+    {}
     void install(std::string& path)
     {
         manager->install(path);
@@ -260,8 +258,7 @@
                   const char* path, CertificateType type,
                   const std::string& unit, const std::string& installPath) :
         Manager(bus, event, path, type, unit, installPath)
-    {
-    }
+    {}
 
     MOCK_METHOD(void, reloadOrReset, (const std::string&), (override));
 };
@@ -344,8 +341,8 @@
     EXPECT_EQ(certs.front()->subject(), "O=openbmc-project.xyz,CN=localhost");
     EXPECT_EQ(certs.front()->issuer(), "O=openbmc-project.xyz,CN=localhost");
 
-    std::string verifyPath =
-        verifyDir + "/" + getCertSubjectNameHash(certificateFile) + ".0";
+    std::string verifyPath = verifyDir + "/" +
+                             getCertSubjectNameHash(certificateFile) + ".0";
 
     // Check that certificate has been created at installation directory
     EXPECT_FALSE(fs::is_empty(verifyDir));
@@ -384,8 +381,8 @@
     EXPECT_EQ(certs.front()->validNotBefore(), 0);
     EXPECT_EQ(certs.front()->validNotAfter(), 253402300799ULL);
 
-    std::string verifyPath =
-        verifyDir + "/" + getCertSubjectNameHash(certificateFile) + ".0";
+    std::string verifyPath = verifyDir + "/" +
+                             getCertSubjectNameHash(certificateFile) + ".0";
 
     // Check that certificate has been created at installation directory
     EXPECT_FALSE(fs::is_empty(verifyDir));
@@ -422,8 +419,8 @@
     EXPECT_FALSE(certs.empty());
 
     // Check that certificate has been created at installation directory
-    std::string verifyPath =
-        verifyDir + "/" + getCertSubjectNameHash(certificateFile) + ".0";
+    std::string verifyPath = verifyDir + "/" +
+                             getCertSubjectNameHash(certificateFile) + ".0";
     EXPECT_FALSE(fs::is_empty(verifyDir));
     EXPECT_TRUE(fs::exists(verifyPath));
 
@@ -479,8 +476,8 @@
     EXPECT_FALSE(certs.empty());
 
     // Check that certificate has been created at installation directory
-    std::string verifyPath0 =
-        verifyDir + "/" + getCertSubjectNameHash(certificateFile) + ".0";
+    std::string verifyPath0 = verifyDir + "/" +
+                              getCertSubjectNameHash(certificateFile) + ".0";
     EXPECT_FALSE(fs::is_empty(verifyDir));
     EXPECT_TRUE(fs::exists(verifyPath0));
 
@@ -497,8 +494,8 @@
     EXPECT_EQ(certs.size(), 2);
 
     // Check that certificate has been created at installation directory
-    std::string verifyPath1 =
-        verifyDir + "/" + getCertSubjectNameHash(certificateFile) + ".1";
+    std::string verifyPath1 = verifyDir + "/" +
+                              getCertSubjectNameHash(certificateFile) + ".1";
     EXPECT_TRUE(fs::exists(verifyPath1));
 
     // Check that installed cert is identical to input one
@@ -547,8 +544,8 @@
         EXPECT_EQ(certs.size(), i + 1);
 
         // Check that certificate has been created at installation directory
-        std::string verifyPath =
-            verifyDir + "/" + getCertSubjectNameHash(certificateFile) + ".0";
+        std::string verifyPath = verifyDir + "/" +
+                                 getCertSubjectNameHash(certificateFile) + ".0";
         EXPECT_FALSE(fs::is_empty(verifyDir));
         EXPECT_TRUE(fs::exists(verifyPath));
 
@@ -703,8 +700,8 @@
         // Certificate successfully installed
         EXPECT_FALSE(certs.empty());
 
-        std::string verifyPath =
-            verifyDir + "/" + getCertSubjectNameHash(certificateFile) + ".0";
+        std::string verifyPath = verifyDir + "/" +
+                                 getCertSubjectNameHash(certificateFile) + ".0";
 
         // Check that certificate has been created at installation directory
         EXPECT_FALSE(fs::is_empty(verifyDir));
@@ -859,9 +856,7 @@
 class TestInvalidCertificate : public ::testing::Test
 {
   public:
-    TestInvalidCertificate() : bus(sdbusplus::bus::new_default())
-    {
-    }
+    TestInvalidCertificate() : bus(sdbusplus::bus::new_default()) {}
     void SetUp() override
     {
         char dirTemplate[] = "/tmp/FakeCerts.XXXXXX";
@@ -1665,8 +1660,8 @@
         std::string name = "root_" + std::to_string(i);
         EXPECT_EQ(certs[i]->subject(), "O=openbmc-project.xyz,CN=" + name);
         EXPECT_EQ(certs[i]->issuer(), "O=openbmc-project.xyz,CN=" + name);
-        std::string symbolLink =
-            authoritiesListFolder / (certs[i]->getCertId().substr(0, 8) + ".0");
+        std::string symbolLink = authoritiesListFolder /
+                                 (certs[i]->getCertId().substr(0, 8) + ".0");
         expectedFiles.insert(symbolLink);
         expectedFiles.insert(certs[i]->getCertFilePath());
         ASSERT_TRUE(fs::exists(symbolLink));
