Add multi-host support
This refactoring includes:
- added multi-host mode support;
- added support for graceful shutdown of the service;
- added support to flush the log buffer as it fills;
- D-Bus service xyz.openbmc_project.HostLogger replaced with SIGUSR1
signal handler;
- self diagnostic messages now registered via phosphor-logging;
- added unit tests;
- build system migrated from autotools to meson;
- source code aligned with OpenBMC conventions.
Change-Id: If6c1dfde278af685d8563450543a6587a282c7e4
Signed-off-by: Artem Senichev <a.senichev@yadro.com>
diff --git a/test/host_console_test.cpp b/test/host_console_test.cpp
new file mode 100644
index 0000000..1581725
--- /dev/null
+++ b/test/host_console_test.cpp
@@ -0,0 +1,88 @@
+// SPDX-License-Identifier: Apache-2.0
+// Copyright (C) 2020 YADRO
+
+#include "host_console.hpp"
+
+#include <sys/socket.h>
+#include <sys/un.h>
+
+#include <gtest/gtest.h>
+
+static constexpr char socketPath[] = "\0obmc-console";
+
+/**
+ * @class HostConsoleTest
+ * @brief Persistent file storage tests.
+ */
+class HostConsoleTest : public ::testing::Test
+{
+ protected:
+ void startServer(const char* socketId)
+ {
+ // Start server
+ serverSocket = socket(AF_UNIX, SOCK_STREAM, 0);
+ ASSERT_NE(serverSocket, -1);
+ std::string path(socketPath, socketPath + sizeof(socketPath) - 1);
+ if (*socketId)
+ {
+ path += '.';
+ path += socketId;
+ }
+ sockaddr_un sa;
+ sa.sun_family = AF_UNIX;
+ memcpy(&sa.sun_path, path.c_str(), path.length());
+ const socklen_t len = sizeof(sa) - sizeof(sa.sun_path) + path.length();
+ ASSERT_NE(
+ bind(serverSocket, reinterpret_cast<const sockaddr*>(&sa), len),
+ -1);
+ ASSERT_NE(listen(serverSocket, 1), -1);
+ }
+
+ void TearDown() override
+ {
+ // Stop server
+ if (serverSocket != -1)
+ {
+ close(serverSocket);
+ }
+ }
+
+ int serverSocket = -1;
+};
+
+TEST_F(HostConsoleTest, SingleHost)
+{
+ const char* socketId = "";
+ startServer(socketId);
+
+ HostConsole con(socketId);
+ con.connect();
+
+ const int clientSocket = accept(serverSocket, nullptr, nullptr);
+ EXPECT_NE(clientSocket, -1);
+ close(clientSocket);
+}
+
+TEST_F(HostConsoleTest, MultiHost)
+{
+ const char* socketId = "host123";
+ startServer(socketId);
+
+ HostConsole con(socketId);
+ con.connect();
+
+ const int clientSocket = accept(serverSocket, nullptr, nullptr);
+ EXPECT_NE(clientSocket, -1);
+
+ const char* data = "test data";
+ const size_t len = strlen(data);
+ EXPECT_EQ(send(clientSocket, data, len, 0), len);
+
+ char buf[64];
+ memset(buf, 0, sizeof(buf));
+ EXPECT_EQ(con.read(buf, sizeof(buf)), len);
+ EXPECT_STREQ(buf, data);
+ EXPECT_EQ(con.read(buf, sizeof(buf)), 0);
+
+ close(clientSocket);
+}