Skip to content

Commit dfdfe9c

Browse files
brawnerahcorde
authored andcommitted
Add fault injection macros and test (#509)
* Add fault injection macros and test Signed-off-by: Stephen Brawner <brawner@gmail.com> * target definitions Signed-off-by: Stephen Brawner <brawner@gmail.com>
1 parent e9857ad commit dfdfe9c

6 files changed

+53
-1
lines changed

rosidl_runtime_c/CMakeLists.txt

+9-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
1212
endif()
1313

1414
find_package(ament_cmake_ros REQUIRED)
15+
find_package(rcutils REQUIRED)
1516
find_package(rosidl_typesupport_interface REQUIRED)
1617

1718
add_library(${PROJECT_NAME}
@@ -26,6 +27,7 @@ target_include_directories(${PROJECT_NAME} PUBLIC
2627
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>"
2728
"$<INSTALL_INTERFACE:include>")
2829
ament_target_dependencies(${PROJECT_NAME}
30+
"rcutils"
2931
"rosidl_typesupport_interface")
3032
if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
3133
set_target_properties(${PROJECT_NAME} PROPERTIES
@@ -36,7 +38,11 @@ if(WIN32)
3638
PRIVATE "ROSIDL_GENERATOR_C_BUILDING_DLL")
3739
endif()
3840

39-
ament_export_dependencies(rosidl_typesupport_interface)
41+
if(BUILD_TESTING AND NOT RCUTILS_DISABLE_FAULT_INJECTION)
42+
target_compile_definitions(${PROJECT_NAME} PUBLIC RCUTILS_ENABLE_FAULT_INJECTION)
43+
endif()
44+
45+
ament_export_dependencies(rcutils rosidl_typesupport_interface)
4046
ament_export_include_directories(include)
4147
ament_export_libraries(${PROJECT_NAME})
4248
ament_export_targets(${PROJECT_NAME})
@@ -86,12 +92,14 @@ if(BUILD_TESTING)
8692
if(TARGET test_string_functions)
8793
target_include_directories(test_string_functions PUBLIC include)
8894
target_link_libraries(test_string_functions ${PROJECT_NAME})
95+
target_compile_definitions(test_string_functions PUBLIC RCUTILS_ENABLE_FAULT_INJECTION)
8996
endif()
9097

9198
ament_add_gtest(test_u16string_functions test/test_u16string_functions.cpp)
9299
if(TARGET test_u16string_functions)
93100
target_include_directories(test_u16string_functions PUBLIC include)
94101
target_link_libraries(test_u16string_functions ${PROJECT_NAME})
102+
target_compile_definitions(test_u16string_functions PUBLIC RCUTILS_ENABLE_FAULT_INJECTION)
95103
endif()
96104
endif()
97105

rosidl_runtime_c/package.xml

+1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
<buildtool_export_depend>ament_cmake</buildtool_export_depend>
1515

16+
<build_export_depend>rcutils</build_export_depend>
1617
<build_export_depend>rosidl_typesupport_interface</build_export_depend>
1718

1819
<test_depend>ament_lint_auto</test_depend>

rosidl_runtime_c/src/string_functions.c

+6
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,13 @@
1919
#include <string.h>
2020
#include <stdio.h>
2121

22+
#include "rcutils/macros.h"
23+
2224
bool
2325
rosidl_runtime_c__String__init(rosidl_runtime_c__String * str)
2426
{
27+
RCUTILS_CAN_RETURN_WITH_ERROR_OF(false);
28+
2529
if (!str) {
2630
return false;
2731
}
@@ -113,6 +117,8 @@ bool
113117
rosidl_runtime_c__String__Sequence__init(
114118
rosidl_runtime_c__String__Sequence * sequence, size_t size)
115119
{
120+
RCUTILS_CAN_RETURN_WITH_ERROR_OF(false);
121+
116122
if (!sequence) {
117123
return false;
118124
}

rosidl_runtime_c/src/u16string_functions.c

+6
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,13 @@
1919
#include <string.h>
2020
#include <stdio.h>
2121

22+
#include "rcutils/macros.h"
23+
2224
bool
2325
rosidl_runtime_c__U16String__init(rosidl_runtime_c__U16String * str)
2426
{
27+
RCUTILS_CAN_RETURN_WITH_ERROR_OF(false);
28+
2529
if (!str) {
2630
return false;
2731
}
@@ -156,6 +160,8 @@ bool
156160
rosidl_runtime_c__U16String__Sequence__init(
157161
rosidl_runtime_c__U16String__Sequence * sequence, size_t size)
158162
{
163+
RCUTILS_CAN_RETURN_WITH_ERROR_OF(false);
164+
159165
if (!sequence) {
160166
return false;
161167
}

rosidl_runtime_c/test/test_string_functions.cpp

+16
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
#include "rosidl_runtime_c/string.h"
1717
#include "rosidl_runtime_c/string_functions.h"
1818

19+
#include "rcutils/testing/fault_injection.h"
20+
1921
TEST(string_functions, init_fini_empty_string) {
2022
rosidl_runtime_c__String empty_string;
2123
EXPECT_TRUE(rosidl_runtime_c__String__init(&empty_string));
@@ -152,3 +154,17 @@ TEST(string_functions, create_destroy_sequence) {
152154
EXPECT_EQ(sequence->capacity, seq_size);
153155
rosidl_runtime_c__String__Sequence__destroy(sequence);
154156
}
157+
158+
TEST(string_functions, create_destroy_sequence_maybe_fail) {
159+
rosidl_runtime_c__String__Sequence * sequence = nullptr;
160+
constexpr size_t seq_size = 10u;
161+
162+
RCUTILS_FAULT_INJECTION_TEST(
163+
{
164+
sequence = rosidl_runtime_c__String__Sequence__create(seq_size);
165+
if (nullptr != sequence) {
166+
rosidl_runtime_c__String__Sequence__destroy(sequence);
167+
sequence = nullptr;
168+
}
169+
});
170+
}

rosidl_runtime_c/test/test_u16string_functions.cpp

+15
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
#include "rosidl_runtime_c/u16string.h"
1717
#include "rosidl_runtime_c/u16string_functions.h"
1818

19+
#include "rcutils/testing/fault_injection.h"
20+
1921
TEST(u16string_functions, init_fini_empty_string) {
2022
rosidl_runtime_c__U16String empty_string;
2123
EXPECT_TRUE(rosidl_runtime_c__U16String__init(&empty_string));
@@ -182,3 +184,16 @@ TEST(u16string_functions, create_destroy_sequence) {
182184
EXPECT_EQ(sequence->capacity, seq_size);
183185
rosidl_runtime_c__U16String__Sequence__destroy(sequence);
184186
}
187+
188+
TEST(string_functions, create_destroy_sequence_maybe_fail) {
189+
rosidl_runtime_c__U16String__Sequence * sequence = nullptr;
190+
constexpr size_t seq_size = 10u;
191+
RCUTILS_FAULT_INJECTION_TEST(
192+
{
193+
sequence = rosidl_runtime_c__U16String__Sequence__create(seq_size);
194+
if (nullptr != sequence) {
195+
rosidl_runtime_c__U16String__Sequence__destroy(sequence);
196+
sequence = nullptr;
197+
}
198+
});
199+
}

0 commit comments

Comments
 (0)