update vss_util tool (#2)

This commit is contained in:
tompzf
2025-11-12 15:40:23 +01:00
committed by GitHub
parent 6ed4b1534e
commit 2fb043b2be
37 changed files with 485 additions and 179 deletions

View File

@@ -0,0 +1,59 @@
# Define project
project (VSSComponentsFormulaTests VERSION 1.0 LANGUAGES CXX)
# Use new policy for project version settings and default warning level
cmake_policy(SET CMP0048 NEW) # requires CMake 3.14
cmake_policy(SET CMP0092 NEW) # requires CMake 3.15
set(CMAKE_CXX_STANDARD 17)
# Libary symbols are hidden by default
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
# Include directory to the core framework
include_directories(${SDV_FRAMEWORK_DEV_INCLUDE})
file (COPY ${PROJECT_SOURCE_DIR}/config/rxformulatypeint32.toml DESTINATION ${CMAKE_BINARY_DIR}/bin/config/)
file (COPY ${PROJECT_SOURCE_DIR}/config/rxformulatypestring.toml DESTINATION ${CMAKE_BINARY_DIR}/bin/config/)
# VSS util component formula test executable
add_executable(ComponentFormulaTest_VSSComponents load_components_test.cpp)
include_directories(${CMAKE_CURRENT_LIST_DIR}/../vss_util/generated/with_formula/vss_files/)
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
set(THREADS_PREFER_PTHREAD_FLAG ON)
target_link_libraries(ComponentFormulaTest_VSSComponents ${CMAKE_THREAD_LIBS_INIT} GTest::GTest)
if (WIN32)
target_link_libraries(ComponentFormulaTest_VSSComponents Ws2_32 Winmm Rpcrt4.lib)
else()
target_link_libraries(ComponentFormulaTest_VSSComponents ${CMAKE_DL_LIBS} rt)
endif()
else()
target_link_libraries(ComponentFormulaTest_VSSComponents GTest::GTest Rpcrt4.lib)
endif()
# Add the VSS utility component formula test
add_test(NAME ComponentFormulaTest_VSSComponents COMMAND ComponentFormulaTest_VSSComponents WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
# Execute the test
add_custom_command(TARGET ComponentFormulaTest_VSSComponents POST_BUILD
COMMAND ${CMAKE_COMMAND} -E env TEST_EXECUTION_MODE=CMake "$<TARGET_FILE:ComponentFormulaTest_VSSComponents>" --gtest_output=xml:${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ComponentFormulaTest_VSSComponents.xml
VERBATIM
)
# Build dependencies
add_dependencies(ComponentFormulaTest_VSSComponents
testcase5_vd_rxclassforint32_rx testcase5_vd_rxclassforint32_rx
testcase5_vd_rxclassforstring_rx testcase5_vd_rxclassforstring_rx)

View File

@@ -0,0 +1,6 @@
[Configuration]
Version = 100
[[Component]]
Path = "data_dispatch_service.sdv"
Class = "DataDispatchService"

View File

@@ -0,0 +1,11 @@
[Configuration]
Version = 100
[[Component]]
Path = "testcase5_vd_rxclassforint32_rx.sdv"
Class = "Vehicle.Chassis.Body.Int32_Device"
[[Component]]
Path = "testcase5_bs_rxclassforint32_rx.sdv"
Class = "Vehicle.Chassis.Body.Int32_Service"

View File

@@ -0,0 +1,11 @@
[Configuration]
Version = 100
[[Component]]
Path = "testcase5_vd_rxclassforstring_rx.sdv"
Class = "Vehicle.Chassis.Body.String_Device"
[[Component]]
Path = "testcase5_bs_rxclassforstring_rx.sdv"
Class = "Vehicle.Chassis.Body.String_Service"

View File

@@ -0,0 +1,104 @@
#include <gtest/gtest.h>
#include <fstream>
#include <sstream>
#include <algorithm>
#include <support/signal_support.h>
#include <interfaces/dispatch.h>
#include <support/app_control.h>
#include <signal_identifier.h>
#include <vss_vehiclechassisbodyint32_vd_rx.h>
#include <vss_vehiclechassisbodystring_vd_rx.h>
#include <vss_vehiclechassisbodyint32_bs_rx.h>
#include <vss_vehiclechassisbodystring_bs_rx.h>
#ifdef _WIN32
#include <windows.h>
#endif
bool InitializeAppControl(sdv::app::CAppControl* appControl, const std::string& configFileName)
{
auto bResult = appControl->AddModuleSearchDir("../../bin");
bResult &= appControl->Startup("");
appControl->SetConfigMode();
bResult &= appControl->AddConfigSearchDir("../../tests/bin/config");
if (!configFileName.empty())
{
bResult &= appControl->LoadConfig(configFileName.c_str()) == sdv::core::EConfigProcessResult::successful;
}
return bResult;
}
TEST(VSSComponentTest, RXInt32)
{
sdv::app::CAppControl appControl;
auto bResult = InitializeAppControl(&appControl, "data_dispatch_service.toml");
ASSERT_EQ(bResult, true);
sdv::core::CDispatchService dispatch;
sdv::core::CSignal signalRx;
signalRx = dispatch.RegisterRxSignal(testcase5::dsSignalInt32);
ASSERT_TRUE(signalRx);
bResult &= appControl.LoadConfig("rxformulatypeint32.toml") == sdv::core::EConfigProcessResult::successful;
ASSERT_EQ(bResult, true);
auto basicService = sdv::core::GetObject("Vehicle.Chassis.Body.Int32_Service").GetInterface<vss::Vehicle::Chassis::Body::Int32Service::IVSS_GetSignalTypeInt32>();
ASSERT_TRUE(basicService);
appControl.SetRunningMode();
const int32_t expected = 123;
signalRx.Write(expected);
std::this_thread::sleep_for(std::chrono::milliseconds(3));
ASSERT_EQ(expected * 2, basicService->GetSignalTypeInt32());
signalRx.Reset();
appControl.Shutdown();
}
TEST(VSSComponentTest, RXString)
{
sdv::app::CAppControl appControl;
auto bResult = InitializeAppControl(&appControl, "data_dispatch_service.toml");
ASSERT_EQ(bResult, true);
sdv::core::CDispatchService dispatch;
sdv::core::CSignal signalRx;
signalRx = dispatch.RegisterRxSignal(testcase5::dsSignalString);
ASSERT_TRUE(signalRx);
bResult &= appControl.LoadConfig("rxformulatypestring.toml") == sdv::core::EConfigProcessResult::successful;
ASSERT_EQ(bResult, true);
auto basicService = sdv::core::GetObject("Vehicle.Chassis.Body.String_Service").GetInterface<vss::Vehicle::Chassis::Body::StringService::IVSS_GetSignalTypeString>();
ASSERT_TRUE(basicService);
appControl.SetRunningMode();
std::string expected = "some text written";
signalRx.Write(expected);
expected.append("_string_added");
std::this_thread::sleep_for(std::chrono::milliseconds(3));
ASSERT_EQ(expected, basicService->GetSignalTypeString());
signalRx.Reset();
appControl.Shutdown();
}
extern "C" int main(int argc, char* argv[])
{
::testing::InitGoogleTest(&argc, argv);
int result = RUN_ALL_TESTS();
return result;
}
#ifdef __GNUC__
#pragma GCC diagnostic pop
#endif