@@ -182,3 +182,35 @@ TEST(TestYamlVariant, copy_string_array_values) {
182182 src_variant.string_array_value ->data [i], dest_variant.string_array_value ->data [i]);
183183 }
184184}
185+
186+ TEST (TestYamlVariant, copy_string_array_maybe_fail) {
187+ rcl_variant_t src_variant{};
188+ rcutils_allocator_t allocator = rcutils_get_default_allocator ();
189+ constexpr size_t size = 3u ;
190+ src_variant.string_array_value =
191+ static_cast <rcutils_string_array_t *>(
192+ allocator.allocate (sizeof (rcutils_string_array_t ), allocator.state ));
193+ ASSERT_NE (nullptr , src_variant.string_array_value );
194+ OSRF_TESTING_TOOLS_CPP_SCOPE_EXIT (
195+ {
196+ rcl_yaml_variant_fini (&src_variant, allocator);
197+ });
198+ *src_variant.string_array_value = rcutils_get_zero_initialized_string_array ();
199+ ASSERT_EQ (
200+ RCUTILS_RET_OK, rcutils_string_array_init (src_variant.string_array_value , size, &allocator));
201+ src_variant.string_array_value ->size = size;
202+ src_variant.string_array_value ->data [0 ] = rcutils_strdup (" string1" , allocator);
203+ src_variant.string_array_value ->data [1 ] = rcutils_strdup (" string2" , allocator);
204+ src_variant.string_array_value ->data [2 ] = rcutils_strdup (" string3" , allocator);
205+ for (size_t i = 0 ; i < size; ++i) {
206+ ASSERT_NE (nullptr , src_variant.string_array_value ->data [i]);
207+ }
208+
209+ RCUTILS_FAULT_INJECTION_TEST (
210+ {
211+ rcl_variant_t dest_variant{};
212+ rcutils_ret_t ret = rcl_yaml_variant_copy (&dest_variant, &src_variant, allocator);
213+ (void )ret;
214+ rcl_yaml_variant_fini (&dest_variant, allocator);
215+ });
216+ }
0 commit comments