Skip to content

Commit 8f1f2e2

Browse files
committed
Merge master codes
2 parents 9e631c1 + 19529d7 commit 8f1f2e2

14 files changed

Lines changed: 352 additions & 39 deletions

File tree

libs/error_injector/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ add_subdirectory(stat)
3636
add_subdirectory(fts)
3737
add_subdirectory(dlfcn)
3838
add_subdirectory(ifaddrs)
39+
add_subdirectory(celix_array_list)
3940
add_subdirectory(sys_shm)
4041
add_subdirectory(socket)
4142
add_subdirectory(pthread)

libs/error_injector/asprintf/CMakeLists.txt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,7 @@ add_library(asprintf_ei STATIC src/asprintf_ei.cc)
2020
target_include_directories(asprintf_ei PUBLIC ${CMAKE_CURRENT_LIST_DIR}/include)
2121
target_link_libraries(asprintf_ei PUBLIC Celix::error_injector)
2222
# It plays nicely with address sanitizer this way.
23-
target_link_options(asprintf_ei INTERFACE LINKER:--wrap,asprintf)
23+
target_link_options(asprintf_ei INTERFACE
24+
LINKER:--wrap,vasprintf
25+
LINKER:--wrap,asprintf)
2426
add_library(Celix::asprintf_ei ALIAS asprintf_ei)

libs/error_injector/asprintf/include/asprintf_ei.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ extern "C" {
2727

2828
CELIX_EI_DECLARE(asprintf, int);
2929

30+
CELIX_EI_DECLARE(vasprintf, int);
31+
3032
#ifdef __cplusplus
3133
}
3234
#endif

libs/error_injector/asprintf/src/asprintf_ei.cc

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,15 @@
2424

2525
extern "C" {
2626

27+
int __real_vasprintf(char** buf, const char* format, va_list args);
28+
CELIX_EI_DEFINE(vasprintf, int)
29+
int __wrap_vasprintf(char** buf, const char* format, va_list args) {
30+
errno = ENOMEM;
31+
CELIX_EI_IMPL(vasprintf);
32+
errno = 0;
33+
return __real_vasprintf(buf, format, args);
34+
}
35+
2736
int __real_asprintf(char** buf, const char* format, ...);
2837
CELIX_EI_DEFINE(asprintf, int)
2938
int __wrap_asprintf(char** buf, const char* format, ...) {
@@ -32,7 +41,7 @@ int __wrap_asprintf(char** buf, const char* format, ...) {
3241
errno = 0;
3342
va_list args;
3443
va_start(args, format);
35-
int rc = vasprintf(buf, format, args);
44+
int rc = __real_vasprintf(buf, format, args);
3645
va_end(args);
3746
return rc;
3847
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# Licensed to the Apache Software Foundation (ASF) under one
2+
# or more contributor license agreements. See the NOTICE file
3+
# distributed with this work for additional information
4+
# regarding copyright ownership. The ASF licenses this file
5+
# to you under the Apache License, Version 2.0 (the
6+
# "License"); you may not use this file except in compliance
7+
# with the License. You may obtain a copy of the License at
8+
#
9+
# http://www.apache.org/licenses/LICENSE-2.0
10+
#
11+
# Unless required by applicable law or agreed to in writing,
12+
# software distributed under the License is distributed on an
13+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14+
# KIND, either express or implied. See the License for the
15+
# specific language governing permissions and limitations
16+
# under the License.
17+
18+
add_library(array_list_ei STATIC src/celix_array_list_ei.cc)
19+
20+
target_include_directories(array_list_ei PUBLIC ${CMAKE_CURRENT_LIST_DIR}/include)
21+
target_link_libraries(array_list_ei PUBLIC Celix::error_injector Celix::utils)
22+
target_link_options(array_list_ei INTERFACE
23+
LINKER:--wrap,celix_arrayList_create
24+
LINKER:--wrap,celix_arrayList_createWithOptions
25+
LINKER:--wrap,celix_arrayList_add
26+
LINKER:--wrap,celix_arrayList_addInt
27+
LINKER:--wrap,celix_arrayList_addLong
28+
LINKER:--wrap,celix_arrayList_addUInt
29+
LINKER:--wrap,celix_arrayList_addULong
30+
LINKER:--wrap,celix_arrayList_addFloat
31+
LINKER:--wrap,celix_arrayList_addDouble
32+
LINKER:--wrap,celix_arrayList_addBool
33+
LINKER:--wrap,celix_arrayList_addSize
34+
)
35+
add_library(Celix::array_list_ei ALIAS array_list_ei)
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
/*
2+
Licensed to the Apache Software Foundation (ASF) under one
3+
or more contributor license agreements. See the NOTICE file
4+
distributed with this work for additional information
5+
regarding copyright ownership. The ASF licenses this file
6+
to you under the Apache License, Version 2.0 (the
7+
"License"); you may not use this file except in compliance
8+
with the License. You may obtain a copy of the License at
9+
10+
http://www.apache.org/licenses/LICENSE-2.0
11+
12+
Unless required by applicable law or agreed to in writing,
13+
software distributed under the License is distributed on an
14+
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
KIND, either express or implied. See the License for the
16+
specific language governing permissions and limitations
17+
under the License.
18+
*/
19+
20+
#ifndef CELIX_CELIX_ARRAY_LIST_EI_H
21+
#define CELIX_CELIX_ARRAY_LIST_EI_H
22+
#ifdef __cplusplus
23+
extern "C" {
24+
#endif
25+
26+
#include "celix_array_list.h"
27+
#include "celix_error_injector.h"
28+
29+
CELIX_EI_DECLARE(celix_arrayList_create, celix_array_list_t*);
30+
31+
CELIX_EI_DECLARE(celix_arrayList_createWithOptions, celix_array_list_t*);
32+
33+
CELIX_EI_DECLARE(celix_arrayList_add, celix_status_t);
34+
35+
CELIX_EI_DECLARE(celix_arrayList_addInt, celix_status_t);
36+
37+
CELIX_EI_DECLARE(celix_arrayList_addLong, celix_status_t);
38+
39+
CELIX_EI_DECLARE(celix_arrayList_addUInt, celix_status_t);
40+
41+
CELIX_EI_DECLARE(celix_arrayList_addULong, celix_status_t);
42+
43+
CELIX_EI_DECLARE(celix_arrayList_addFloat, celix_status_t);
44+
45+
CELIX_EI_DECLARE(celix_arrayList_addDouble, celix_status_t);
46+
47+
CELIX_EI_DECLARE(celix_arrayList_addBool, celix_status_t);
48+
49+
CELIX_EI_DECLARE(celix_arrayList_addSize, celix_status_t);
50+
51+
#ifdef __cplusplus
52+
}
53+
#endif
54+
#endif //CELIX_CELIX_ARRAY_LIST_EI_H
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
/*
2+
Licensed to the Apache Software Foundation (ASF) under one
3+
or more contributor license agreements. See the NOTICE file
4+
distributed with this work for additional information
5+
regarding copyright ownership. The ASF licenses this file
6+
to you under the Apache License, Version 2.0 (the
7+
"License"); you may not use this file except in compliance
8+
with the License. You may obtain a copy of the License at
9+
10+
http://www.apache.org/licenses/LICENSE-2.0
11+
12+
Unless required by applicable law or agreed to in writing,
13+
software distributed under the License is distributed on an
14+
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
KIND, either express or implied. See the License for the
16+
specific language governing permissions and limitations
17+
under the License.
18+
*/
19+
20+
#include "celix_array_list_ei.h"
21+
22+
extern "C" {
23+
24+
void *__real_celix_arrayList_create(void);
25+
CELIX_EI_DEFINE(celix_arrayList_create, celix_array_list_t*)
26+
void *__wrap_celix_arrayList_create(void) {
27+
CELIX_EI_IMPL(celix_arrayList_create);
28+
return __real_celix_arrayList_create();
29+
}
30+
31+
void *__real_celix_arrayList_createWithOptions(const celix_array_list_create_options_t* opts);
32+
CELIX_EI_DEFINE(celix_arrayList_createWithOptions, celix_array_list_t*)
33+
void *__wrap_celix_arrayList_createWithOptions(const celix_array_list_create_options_t* opts) {
34+
CELIX_EI_IMPL(celix_arrayList_createWithOptions);
35+
return __real_celix_arrayList_createWithOptions(opts);
36+
}
37+
38+
celix_status_t __real_celix_arrayList_add(celix_array_list_t* list, void* value);
39+
CELIX_EI_DEFINE(celix_arrayList_add, celix_status_t)
40+
celix_status_t __wrap_celix_arrayList_add(celix_array_list_t* list, void* value) {
41+
CELIX_EI_IMPL(celix_arrayList_add);
42+
return __real_celix_arrayList_add(list, value);
43+
}
44+
45+
celix_status_t __real_celix_arrayList_addInt(celix_array_list_t* list, int value);
46+
CELIX_EI_DEFINE(celix_arrayList_addInt, celix_status_t)
47+
celix_status_t __wrap_celix_arrayList_addInt(celix_array_list_t* list, int value) {
48+
CELIX_EI_IMPL(celix_arrayList_addInt);
49+
return __real_celix_arrayList_addInt(list, value);
50+
}
51+
52+
celix_status_t __real_celix_arrayList_addLong(celix_array_list_t* list, long value);
53+
CELIX_EI_DEFINE(celix_arrayList_addLong, celix_status_t)
54+
celix_status_t __wrap_celix_arrayList_addLong(celix_array_list_t* list, long value) {
55+
CELIX_EI_IMPL(celix_arrayList_addLong);
56+
return __real_celix_arrayList_addLong(list, value);
57+
}
58+
59+
celix_status_t __real_celix_arrayList_addUInt(celix_array_list_t* list, unsigned int value);
60+
CELIX_EI_DEFINE(celix_arrayList_addUInt, celix_status_t)
61+
celix_status_t __wrap_celix_arrayList_addUInt(celix_array_list_t* list, unsigned int value) {
62+
CELIX_EI_IMPL(celix_arrayList_addUInt);
63+
return __real_celix_arrayList_addUInt(list, value);
64+
}
65+
66+
celix_status_t __real_celix_arrayList_addULong(celix_array_list_t* list, unsigned long value);
67+
CELIX_EI_DEFINE(celix_arrayList_addULong, celix_status_t)
68+
celix_status_t __wrap_celix_arrayList_addULong(celix_array_list_t* list, unsigned long value) {
69+
CELIX_EI_IMPL(celix_arrayList_addULong);
70+
return __real_celix_arrayList_addULong(list, value);
71+
}
72+
73+
celix_status_t __real_celix_arrayList_addFloat(celix_array_list_t* list, float value);
74+
CELIX_EI_DEFINE(celix_arrayList_addFloat, celix_status_t)
75+
celix_status_t __wrap_celix_arrayList_addFloat(celix_array_list_t* list, float value) {
76+
CELIX_EI_IMPL(celix_arrayList_addFloat);
77+
return __real_celix_arrayList_addFloat(list, value);
78+
}
79+
80+
celix_status_t __real_celix_arrayList_addDouble(celix_array_list_t* list, double value);
81+
CELIX_EI_DEFINE(celix_arrayList_addDouble, celix_status_t)
82+
celix_status_t __wrap_celix_arrayList_addDouble(celix_array_list_t* list, double value) {
83+
CELIX_EI_IMPL(celix_arrayList_addDouble);
84+
return __real_celix_arrayList_addDouble(list, value);
85+
}
86+
87+
celix_status_t __real_celix_arrayList_addBool(celix_array_list_t* list, bool value);
88+
CELIX_EI_DEFINE(celix_arrayList_addBool, celix_status_t)
89+
celix_status_t __wrap_celix_arrayList_addBool(celix_array_list_t* list, bool value) {
90+
CELIX_EI_IMPL(celix_arrayList_addBool);
91+
return __real_celix_arrayList_addBool(list, value);
92+
}
93+
94+
celix_status_t __real_celix_arrayList_addSize(celix_array_list_t* list, size_t value);
95+
CELIX_EI_DEFINE(celix_arrayList_addSize, celix_status_t)
96+
celix_status_t __wrap_celix_arrayList_addSize(celix_array_list_t* list, size_t value) {
97+
CELIX_EI_IMPL(celix_arrayList_addSize);
98+
return __real_celix_arrayList_addSize(list, value);
99+
}
100+
101+
}

libs/utils/gtest/CMakeLists.txt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,9 @@ if (LINKER_WRAP_SUPPORTED)
8282
src/FileUtilsErrorInjectionTestSuite.cc
8383
src/ConvertUtilsErrorInjectionTestSuite.cc
8484
src/IpUtilsErrorInjectionTestSuite.cc
85-
)
86-
target_link_libraries(test_utils_with_ei PRIVATE Celix::zip_ei Celix::stdio_ei Celix::stat_ei Celix::fts_ei Celix::utils_obj Celix::utils_ei Celix::ifaddrs_ei GTest::gtest GTest::gtest_main)
85+
src/ArrayListErrorInjectionTestSuite.cc
86+
)
87+
target_link_libraries(test_utils_with_ei PRIVATE Celix::zip_ei Celix::stdio_ei Celix::stat_ei Celix::fts_ei Celix::utils_obj Celix::utils_ei Celix::ifaddrs_ei Celix::malloc_ei GTest::gtest GTest::gtest_main)
8788
target_include_directories(test_utils_with_ei PRIVATE ../src) #for version_private (needs refactoring of test)
8889
celix_deprecated_utils_headers(test_utils_with_ei)
8990
add_dependencies(test_utils_with_ei test_utils_resources)
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one
3+
* or more contributor license agreements. See the NOTICE file
4+
* distributed with this work for additional information
5+
* regarding copyright ownership. The ASF licenses this file
6+
* to you under the Apache License, Version 2.0 (the
7+
* "License"); you may not use this file except in compliance
8+
* with the License. You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing,
13+
* software distributed under the License is distributed on an
14+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
* KIND, either express or implied. See the License for the
16+
* specific language governing permissions and limitations
17+
* under the License.
18+
*/
19+
20+
#include <gtest/gtest.h>
21+
22+
#include "celix_array_list.h"
23+
#include "malloc_ei.h"
24+
25+
class ArrayListErrorInjectionTestSuite : public ::testing::Test {
26+
public:
27+
ArrayListErrorInjectionTestSuite() = default;
28+
~ArrayListErrorInjectionTestSuite() noexcept override {
29+
celix_ei_expect_realloc(nullptr, 0, nullptr);
30+
}
31+
};
32+
33+
TEST_F(ArrayListErrorInjectionTestSuite, TestAddFunctions) {
34+
//Given an array list with a capacity of 10 (whitebox knowledge)
35+
auto* list = celix_arrayList_create();
36+
37+
//When adding 10 elements, no error is expected
38+
for (int i = 0; i < 10; ++i) {
39+
EXPECT_EQ(CELIX_SUCCESS, celix_arrayList_addInt(list, i));
40+
}
41+
EXPECT_EQ(10, celix_arrayList_size(list));
42+
43+
//And realloc is primed to fail
44+
celix_ei_expect_realloc(CELIX_EI_UNKNOWN_CALLER, 1, nullptr);
45+
46+
//Then adding an element should fail
47+
EXPECT_EQ(CELIX_ENOMEM, celix_arrayList_addInt(list, 10));
48+
EXPECT_EQ(10, celix_arrayList_size(list));
49+
50+
celix_arrayList_destroy(list);
51+
}

libs/utils/gtest/src/ArrayListTestSuite.cc

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,3 +230,30 @@ TEST_F(ArrayListTestSuite, TestSortForArrayList) {
230230

231231
celix_arrayList_destroy(list);
232232
}
233+
234+
TEST_F(ArrayListTestSuite, TestReturnStatusAddFunctions) {
235+
auto* list = celix_arrayList_create();
236+
ASSERT_TRUE(list != nullptr);
237+
EXPECT_EQ(0, celix_arrayList_size(list));
238+
239+
//no error, return status is CELIX_SUCCESS
240+
EXPECT_EQ(CELIX_SUCCESS, celix_arrayList_addInt(list, 1));
241+
EXPECT_EQ(1, celix_arrayList_size(list));
242+
243+
EXPECT_EQ(CELIX_SUCCESS, celix_arrayList_addLong(list, 2L));
244+
EXPECT_EQ(2, celix_arrayList_size(list));
245+
246+
EXPECT_EQ(CELIX_SUCCESS, celix_arrayList_addFloat(list, 3.0f));
247+
EXPECT_EQ(3, celix_arrayList_size(list));
248+
249+
EXPECT_EQ(CELIX_SUCCESS, celix_arrayList_addDouble(list, 4.0));
250+
EXPECT_EQ(4, celix_arrayList_size(list));
251+
252+
EXPECT_EQ(CELIX_SUCCESS, celix_arrayList_addBool(list, true));
253+
EXPECT_EQ(5, celix_arrayList_size(list));
254+
255+
EXPECT_EQ(CELIX_SUCCESS, celix_arrayList_add(list, (void*)0x42));
256+
EXPECT_EQ(6, celix_arrayList_size(list));
257+
258+
celix_arrayList_destroy(list);
259+
}

0 commit comments

Comments
 (0)