Add IPMI OEM command LinuxBootDone

Add a new OEM command for LinuxBoot to notify the BMC when it is about
to kexec into the OS. This is intended to give the BMC a chance to
prepare for an untrusted OS, e.g. disable any interfaces it doesn't want
the OS to have access to.

Tested:
Exercised the new OEM command using ipmitool
$ ipmitool raw 0x2e 0x32 0x79 0x2b 0x00 0x11
  79 2b 00 11

Change-Id: Ica76d77cdde48cebfbced32d8e7e860b559074e8
Signed-off-by: John Wedig <johnwedig@google.com>
diff --git a/test/handler_mock.hpp b/test/handler_mock.hpp
index 9e9b71e..f62564e 100644
--- a/test/handler_mock.hpp
+++ b/test/handler_mock.hpp
@@ -63,6 +63,7 @@
                 (const, override));
     MOCK_METHOD(std::vector<uint8_t>, pcieBifurcation, (uint8_t), (override));
     MOCK_METHOD(uint8_t, getBmcMode, (), (override));
+    MOCK_METHOD(void, linuxBootDone, (), (const, override));
 };
 
 } // namespace ipmi
diff --git a/test/linux_boot_done_unittest.cpp b/test/linux_boot_done_unittest.cpp
new file mode 100644
index 0000000..adb80f4
--- /dev/null
+++ b/test/linux_boot_done_unittest.cpp
@@ -0,0 +1,47 @@
+// Copyright 2023 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "commands.hpp"
+#include "handler_mock.hpp"
+#include "helper.hpp"
+#include "linux_boot_done.hpp"
+
+#include <vector>
+
+#include <gtest/gtest.h>
+
+using ::testing::Return;
+
+namespace google
+{
+namespace ipmi
+{
+
+TEST(LinuxBootDoneCommandTest, ValidResponseTest)
+{
+    std::vector<std::uint8_t> request = {};
+
+    HandlerMock hMock;
+    EXPECT_CALL(hMock, linuxBootDone()).Times(1);
+
+    auto reply = linuxBootDone(request, &hMock);
+    auto result = ValidateReply(reply, false);
+    auto& data = result.second;
+
+    EXPECT_EQ(0, data.size());
+    EXPECT_EQ(SysOEMCommands::SysLinuxBootDone, result.first);
+}
+
+} // namespace ipmi
+} // namespace google
diff --git a/test/meson.build b/test/meson.build
index 53064a1..7fa06c4 100644
--- a/test/meson.build
+++ b/test/meson.build
@@ -29,6 +29,7 @@
   'psu',
   'pcie_bifurcation',
   'bmc_mode',
+  'linux_boot_done',
 ]
 
 foreach t : tests