mirror of
https://github.com/eclipse-openvehicle-api/openvehicle-api.git
synced 2026-07-02 05:35:11 +00:00
22
tests/unit_tests/ipc_connect/CMakeLists.txt
Normal file
22
tests/unit_tests/ipc_connect/CMakeLists.txt
Normal 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)
|
||||
294
tests/unit_tests/ipc_connect/ipc_connect.cpp
Normal file
294
tests/unit_tests/ipc_connect/ipc_connect.cpp
Normal 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();
|
||||
}
|
||||
19
tests/unit_tests/ipc_connect/main.cpp
Normal file
19
tests/unit_tests/ipc_connect/main.cpp
Normal 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();
|
||||
}
|
||||
Reference in New Issue
Block a user