Precommit (#1)

* first commit

* cleanup
This commit is contained in:
tompzf
2025-11-04 13:28:06 +01:00
committed by GitHub
parent dba45dc636
commit 6ed4b1534e
898 changed files with 256340 additions and 0 deletions

View File

@@ -0,0 +1,22 @@
# Define project
project (UnitTest_IPC_Connect VERSION 1.0 LANGUAGES CXX)
# Compile the source code
add_executable(UnitTest_IPC_Connect
"main.cpp"
"ipc_connect.cpp"
)
target_link_libraries(UnitTest_IPC_Connect ${CMAKE_DL_LIBS} GTest::GTest)
# Add the IDL Compiler unittest
add_test(NAME UnitTest_IPC_Connect COMMAND UnitTest_IPC_Connect)
# Execute the test
add_custom_command(TARGET UnitTest_IPC_Connect POST_BUILD
COMMAND ${CMAKE_COMMAND} -E env TEST_EXECUTION_MODE=CMake "$<TARGET_FILE:UnitTest_IPC_Connect>" --gtest_output=xml:${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/UnitTest_IPC_Connect.xml
VERBATIM
)
# Build dependencies
add_dependencies(UnitTest_IPC_Connect dependency_sdv_components)

View File

@@ -0,0 +1,294 @@
#include "../../include/gtest_custom.h"
#include <support/sdv_core.h>
#include <support/app_control.h>
#include <support/pssup.h>
#include "../../../sdv_services/ipc_connect/listener.h"
#include "../../../sdv_services/ipc_connect/client.h"
TEST(IPC_Connect_Test, InstantiateLocalDefaultListener)
{
// Initialize system
sdv::app::CAppControl appcontrol;
ASSERT_TRUE(appcontrol.Startup(R"config(
[Application]
Mode = "Essential"
[LogHandler]
ViewFilter = "Fatal"
)config"));
ASSERT_TRUE(appcontrol.IsRunning());
sdv::core::IModuleControl* pModuleControl = sdv::core::GetObject<sdv::core::IModuleControl>("ModuleControlService");
ASSERT_NE(pModuleControl, nullptr);
EXPECT_NE(pModuleControl->Load("ipc_com.sdv"), 0);
EXPECT_NE(pModuleControl->Load("ipc_shared_mem.sdv"), 0);
EXPECT_NE(pModuleControl->Load("core_ps.sdv"), 0);
sdv::core::IRepositoryControl* pRepositoryControl = sdv::core::GetObject<sdv::core::IRepositoryControl>("RepositoryService");
ASSERT_NE(pRepositoryControl, nullptr);
EXPECT_NE(pRepositoryControl->CreateObject("CommunicationControl", {}, {}), 0);
EXPECT_NE(pRepositoryControl->CreateObject("DefaultSharedMemoryChannelControl", {}, {}), 0);
// Start listener
CListener listener;
EXPECT_EQ(listener.GetStatus(), sdv::EObjectStatus::initialization_pending);
listener.Initialize(R"code([Listener]
Type = "Local"
)code");
EXPECT_EQ(listener.GetStatus(), sdv::EObjectStatus::initialized);
// Shutdown
listener.Shutdown();
EXPECT_EQ(listener.GetStatus(), sdv::EObjectStatus::destruction_pending);
appcontrol.Shutdown();
}
TEST(IPC_Connect_Test, InstantiateLocalDedicatedListener)
{
// Initialize system
sdv::app::CAppControl appcontrol;
ASSERT_TRUE(appcontrol.Startup(R"config(
[Application]
Mode = "Essential"
[LogHandler]
ViewFilter = "Fatal"
)config"));
ASSERT_TRUE(appcontrol.IsRunning());
sdv::core::IModuleControl* pModuleControl = sdv::core::GetObject<sdv::core::IModuleControl>("ModuleControlService");
ASSERT_NE(pModuleControl, nullptr);
EXPECT_NE(pModuleControl->Load("ipc_com.sdv"), 0);
EXPECT_NE(pModuleControl->Load("ipc_shared_mem.sdv"), 0);
EXPECT_NE(pModuleControl->Load("core_ps.sdv"), 0);
sdv::core::IRepositoryControl* pRepositoryControl = sdv::core::GetObject<sdv::core::IRepositoryControl>("RepositoryService");
ASSERT_NE(pRepositoryControl, nullptr);
EXPECT_NE(pRepositoryControl->CreateObject("CommunicationControl", {}, {}), 0);
EXPECT_NE(pRepositoryControl->CreateObject("DefaultSharedMemoryChannelControl", {}, {}), 0);
// Start listener
CListener listener;
EXPECT_EQ(listener.GetStatus(), sdv::EObjectStatus::initialization_pending);
listener.Initialize(R"code([Listener]
Type = "Local"
Instance = 1234
)code");
EXPECT_EQ(listener.GetStatus(), sdv::EObjectStatus::initialized);
// Shutdown
listener.Shutdown();
EXPECT_EQ(listener.GetStatus(), sdv::EObjectStatus::destruction_pending);
appcontrol.Shutdown();
}
TEST(IPC_Connect_Test, InstantiateLocalDefaultClientNoListener)
{
// Initialize system
sdv::app::CAppControl appcontrol;
ASSERT_TRUE(appcontrol.Startup(R"config(
[Application]
Mode = "Essential"
[LogHandler]
ViewFilter = "Fatal"
)config"));
ASSERT_TRUE(appcontrol.IsRunning());
sdv::core::IModuleControl* pModuleControl = sdv::core::GetObject<sdv::core::IModuleControl>("ModuleControlService");
ASSERT_NE(pModuleControl, nullptr);
EXPECT_NE(pModuleControl->Load("ipc_com.sdv"), 0);
EXPECT_NE(pModuleControl->Load("ipc_shared_mem.sdv"), 0);
EXPECT_NE(pModuleControl->Load("core_ps.sdv"), 0);
sdv::core::IRepositoryControl* pRepositoryControl = sdv::core::GetObject<sdv::core::IRepositoryControl>("RepositoryService");
ASSERT_NE(pRepositoryControl, nullptr);
EXPECT_NE(pRepositoryControl->CreateObject("CommunicationControl", {}, {}), 0);
EXPECT_NE(pRepositoryControl->CreateObject("DefaultSharedMemoryChannelControl", {}, {}), 0);
// Start client
CClient client;
EXPECT_EQ(client.GetStatus(), sdv::EObjectStatus::initialization_pending);
client.Initialize("");
EXPECT_EQ(client.GetStatus(), sdv::EObjectStatus::initialized);
sdv::TObjectPtr ptrClient = client.Connect(R"code([Client]
Type = "local"
)code");
EXPECT_FALSE(ptrClient);
// Shutdown
ptrClient.Clear();
client.Shutdown();
EXPECT_EQ(client.GetStatus(), sdv::EObjectStatus::destruction_pending);
appcontrol.Shutdown();
}
TEST(IPC_Connect_Test, InstantiateLocalSpecificClientNoListener)
{
// Initialize system
sdv::app::CAppControl appcontrol;
ASSERT_TRUE(appcontrol.Startup(R"config(
[Application]
Mode = "Essential"
[LogHandler]
ViewFilter = "Fatal"
)config"));
ASSERT_TRUE(appcontrol.IsRunning());
sdv::core::IModuleControl* pModuleControl = sdv::core::GetObject<sdv::core::IModuleControl>("ModuleControlService");
ASSERT_NE(pModuleControl, nullptr);
EXPECT_NE(pModuleControl->Load("ipc_com.sdv"), 0);
EXPECT_NE(pModuleControl->Load("ipc_shared_mem.sdv"), 0);
EXPECT_NE(pModuleControl->Load("core_ps.sdv"), 0);
sdv::core::IRepositoryControl* pRepositoryControl = sdv::core::GetObject<sdv::core::IRepositoryControl>("RepositoryService");
ASSERT_NE(pRepositoryControl, nullptr);
EXPECT_NE(pRepositoryControl->CreateObject("CommunicationControl", {}, {}), 0);
EXPECT_NE(pRepositoryControl->CreateObject("DefaultSharedMemoryChannelControl", {}, {}), 0);
// Start client
CClient client;
EXPECT_EQ(client.GetStatus(), sdv::EObjectStatus::initialization_pending);
client.Initialize("");
EXPECT_EQ(client.GetStatus(), sdv::EObjectStatus::initialized);
sdv::TObjectPtr ptrClient = client.Connect(R"code([Client]
Type = "local"
Instance = 1234
)code");
EXPECT_FALSE(ptrClient);
// Shutdown
ptrClient.Clear();
client.Shutdown();
EXPECT_EQ(client.GetStatus(), sdv::EObjectStatus::destruction_pending);
appcontrol.Shutdown();
}
// Disabled the following test due to an unidentified crash/heap corruption occurring with MINGW on the build-server.
// Bug-report #610009 describes this issue: https://dev.azure.com/SW4ZF/AZP-074_DivDI_SofDCarResearch/_workitems/edit/610009
#ifdef _WIN32
TEST(IPC_Connect_Test, DISABLED_InstantiateLocalDefaultClientAndListener)
#else
TEST(IPC_Connect_Test, InstantiateLocalDefaultClientAndListener)
#endif
{
// Initialize system
sdv::app::CAppControl appcontrol;
ASSERT_TRUE(appcontrol.Startup(R"config(
[Application]
Mode = "Essential"
[LogHandler]
ViewFilter = "Fatal"
)config"));
ASSERT_TRUE(appcontrol.IsRunning());
sdv::core::IModuleControl* pModuleControl = sdv::core::GetObject<sdv::core::IModuleControl>("ModuleControlService");
ASSERT_NE(pModuleControl, nullptr);
EXPECT_NE(pModuleControl->Load("ipc_com.sdv"), 0);
EXPECT_NE(pModuleControl->Load("ipc_shared_mem.sdv"), 0);
EXPECT_NE(pModuleControl->Load("core_ps.sdv"), 0);
sdv::core::IRepositoryControl* pRepositoryControl = sdv::core::GetObject<sdv::core::IRepositoryControl>("RepositoryService");
ASSERT_NE(pRepositoryControl, nullptr);
EXPECT_NE(pRepositoryControl->CreateObject("CommunicationControl", {}, {}), 0);
EXPECT_NE(pRepositoryControl->CreateObject("DefaultSharedMemoryChannelControl", {}, {}), 0);
// Start listener
CListener listener;
EXPECT_EQ(listener.GetStatus(), sdv::EObjectStatus::initialization_pending);
listener.Initialize(R"code([Listener]
Type = "Local"
)code");
EXPECT_EQ(listener.GetStatus(), sdv::EObjectStatus::initialized);
// Start client
CClient client;
EXPECT_EQ(client.GetStatus(), sdv::EObjectStatus::initialization_pending);
client.Initialize("");
EXPECT_EQ(client.GetStatus(), sdv::EObjectStatus::initialized);
sdv::TObjectPtr ptrClient = client.Connect(R"code([Client]
Type = "Local"
)code");
EXPECT_TRUE(ptrClient);
// The client is a pointer to the repository. Request the module control service
sdv::core::IObjectAccess* pObjectAccess = ptrClient.GetInterface<sdv::core::IObjectAccess>();
EXPECT_NE(pObjectAccess, nullptr);
sdv::core::IModuleInfo* pModuleInfo = nullptr;
if (pObjectAccess)
pModuleInfo = sdv::TInterfaceAccessPtr(pObjectAccess->GetObject("ModuleControlService")).GetInterface<sdv::core::IModuleInfo>();
EXPECT_NE(pModuleInfo, nullptr);
if (pModuleInfo)
{
EXPECT_FALSE(pModuleInfo->GetModuleList().empty());
}
// Shutdown
ptrClient.Clear();
client.Shutdown();
EXPECT_EQ(client.GetStatus(), sdv::EObjectStatus::destruction_pending);
listener.Shutdown();
EXPECT_EQ(listener.GetStatus(), sdv::EObjectStatus::destruction_pending);
appcontrol.Shutdown();
}
// Disabled the following test due to an unidentified crash/heap corruption occurring with MINGW on the build-server.
// Bug-report #610009 describes this issue: https://dev.azure.com/SW4ZF/AZP-074_DivDI_SofDCarResearch/_workitems/edit/610009
#ifdef _WIN32
TEST(IPC_Connect_Test, DISABLED_InstantiateLocalSpecificClientAndListener)
#else
TEST(IPC_Connect_Test, InstantiateLocalSpecificClientAndListener)
#endif
{
// Initialize system
sdv::app::CAppControl appcontrol;
ASSERT_TRUE(appcontrol.Startup(R"config(
[Application]
Mode = "Essential"
[LogHandler]
ViewFilter = "Fatal"
)config"));
ASSERT_TRUE(appcontrol.IsRunning());
sdv::core::IModuleControl* pModuleControl = sdv::core::GetObject<sdv::core::IModuleControl>("ModuleControlService");
ASSERT_NE(pModuleControl, nullptr);
EXPECT_NE(pModuleControl->Load("ipc_com.sdv"), 0);
EXPECT_NE(pModuleControl->Load("ipc_shared_mem.sdv"), 0);
EXPECT_NE(pModuleControl->Load("core_ps.sdv"), 0);
sdv::core::IRepositoryControl* pRepositoryControl = sdv::core::GetObject<sdv::core::IRepositoryControl>("RepositoryService");
ASSERT_NE(pRepositoryControl, nullptr);
EXPECT_NE(pRepositoryControl->CreateObject("CommunicationControl", {}, {}), 0);
EXPECT_NE(pRepositoryControl->CreateObject("DefaultSharedMemoryChannelControl", {}, {}), 0);
// Start listener
CListener listener;
EXPECT_EQ(listener.GetStatus(), sdv::EObjectStatus::initialization_pending);
listener.Initialize(R"code([Listener]
Type = "Local"
Instance = 1234
)code");
EXPECT_EQ(listener.GetStatus(), sdv::EObjectStatus::initialized);
// Start client
CClient client;
EXPECT_EQ(client.GetStatus(), sdv::EObjectStatus::initialization_pending);
client.Initialize("");
EXPECT_EQ(client.GetStatus(), sdv::EObjectStatus::initialized);
sdv::TObjectPtr ptrClient = client.Connect(R"code([Client]
Type = "Local"
Instance = 1234
)code");
EXPECT_TRUE(ptrClient);
// The client is a pointer to the repository. Request the module control service
sdv::core::IObjectAccess* pObjectAccess = ptrClient.GetInterface<sdv::core::IObjectAccess>();
EXPECT_NE(pObjectAccess, nullptr);
sdv::core::IModuleInfo* pModuleInfo = nullptr;
if (pObjectAccess)
pModuleInfo = sdv::TInterfaceAccessPtr(pObjectAccess->GetObject("ModuleControlService")).GetInterface<sdv::core::IModuleInfo>();
EXPECT_NE(pModuleInfo, nullptr);
if (pModuleInfo)
{
EXPECT_FALSE(pModuleInfo->GetModuleList().empty());
}
// Shutdown
ptrClient.Clear();
client.Shutdown();
EXPECT_EQ(client.GetStatus(), sdv::EObjectStatus::destruction_pending);
listener.Shutdown();
EXPECT_EQ(listener.GetStatus(), sdv::EObjectStatus::destruction_pending);
appcontrol.Shutdown();
}

View File

@@ -0,0 +1,19 @@
#include <gtest/gtest.h>
#include "../../../global/process_watchdog.h"
#include "../../../sdv_services/ipc_connect/listener.cpp"
#include "../../../sdv_services/ipc_connect/client.cpp"
/**
* @brief Main function
*/
#if defined(_WIN32) && defined(_UNICODE)
extern "C" int wmain(int argc, wchar_t* argv[])
#else
extern "C" int main(int argc, char* argv[])
#endif
{
CProcessWatchdog watchdog;
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}