This is an automated email from the ASF dual-hosted git repository. pnoltes pushed a commit to branch feature/674-improve-properties in repository https://gitbox.apache.org/repos/asf/celix.git
commit f41a0f6ed12c91a16ef473facfa0d20b73998bcf Author: Pepijn Noltes <[email protected]> AuthorDate: Sun Jan 7 16:07:55 2024 +0100 Fix convert utils ei tests --- libs/utils/gtest/src/ConvertUtilsErrorInjectionTestSuite.cc | 11 ++++++----- libs/utils/include/celix_convert_utils.h | 7 ++++++- libs/utils/src/celix_convert_utils.c | 6 ++++-- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/libs/utils/gtest/src/ConvertUtilsErrorInjectionTestSuite.cc b/libs/utils/gtest/src/ConvertUtilsErrorInjectionTestSuite.cc index d1f4d07b..ecd160f5 100644 --- a/libs/utils/gtest/src/ConvertUtilsErrorInjectionTestSuite.cc +++ b/libs/utils/gtest/src/ConvertUtilsErrorInjectionTestSuite.cc @@ -30,7 +30,7 @@ public: ~ConvertUtilsWithErrorInjectionTestSuite() override { celix_ei_expect_celix_version_copy(nullptr, 0, nullptr); celix_ei_expect_celix_version_createVersionFromString(nullptr, 0, CELIX_SUCCESS); - celix_ei_expect_celix_arrayList_create(nullptr, 0, nullptr); + celix_ei_expect_celix_arrayList_createWithOptions(nullptr, 0, nullptr); celix_ei_expect_celix_arrayList_addLong(nullptr, 0, CELIX_SUCCESS); celix_ei_expect_open_memstream(nullptr, 0, nullptr); celix_ei_expect_fputs(nullptr, 0, 0); @@ -66,15 +66,16 @@ TEST_F(ConvertUtilsWithErrorInjectionTestSuite, ConvertToVersionTest) { TEST_F(ConvertUtilsWithErrorInjectionTestSuite, ConvertToLongArrayTest) { //Given an error injection for celix_arrayList_create - celix_ei_expect_celix_arrayList_create((void*)celix_utils_convertStringToLongArrayList, 0, nullptr); + celix_ei_expect_celix_arrayList_createWithOptions((void*)celix_utils_convertStringToLongArrayList, 1, nullptr); //When calling celix_utils_convertStringToLongArrayList celix_array_list_t* result; celix_status_t status = celix_utils_convertStringToLongArrayList("1,2,3", nullptr, &result); //Then the result is null and the status is ENOMEM EXPECT_EQ(status, CELIX_ENOMEM); + EXPECT_EQ(nullptr, result); //Given an error injection for celix_arrayList_addLong - celix_ei_expect_celix_arrayList_addLong((void*)celix_utils_convertStringToLongArrayList, 0, CELIX_ENOMEM); + celix_ei_expect_celix_arrayList_addLong((void*)celix_utils_convertStringToLongArrayList, 2, CELIX_ENOMEM); //When calling celix_utils_convertStringToLongArrayList status = celix_utils_convertStringToLongArrayList("1,2,3", nullptr, &result); //Then the result is null and the status is ENOMEM @@ -83,14 +84,14 @@ TEST_F(ConvertUtilsWithErrorInjectionTestSuite, ConvertToLongArrayTest) { celix_autoptr(celix_array_list_t) defaultList = celix_arrayList_create(); //Given an error injection for celix_arrayList_copy - celix_ei_expect_celix_arrayList_copy((void*)celix_utils_convertStringToLongArrayList, 0, nullptr); + celix_ei_expect_celix_arrayList_copy((void*)celix_utils_convertStringToLongArrayList, 1, nullptr); //When calling celix_utils_convertStringToLongArrayList with a nullptr as value status = celix_utils_convertStringToLongArrayList(nullptr, defaultList, &result); //Then the result is null and the status is ENOMEM EXPECT_EQ(status, CELIX_ENOMEM); //Given an error injection for celix_arrayList_copy - celix_ei_expect_celix_arrayList_copy((void*)celix_utils_convertStringToLongArrayList, 0, nullptr); + celix_ei_expect_celix_arrayList_copy((void*)celix_utils_convertStringToLongArrayList, 1, nullptr); //When calling celix_utils_convertStringToLongArrayList with an invalid value status = celix_utils_convertStringToLongArrayList("invalid", defaultList, &result); //Then the result is null and the status is ENOMEM diff --git a/libs/utils/include/celix_convert_utils.h b/libs/utils/include/celix_convert_utils.h index 8fc73f6e..d5fa6e23 100644 --- a/libs/utils/include/celix_convert_utils.h +++ b/libs/utils/include/celix_convert_utils.h @@ -170,6 +170,9 @@ char* celix_utils_boolArrayListToString(const celix_array_list_t* list); * * @param[in] val The string to convert. * @param[in] defaultValue The default value if the string is not a valid "," separated list of strings. + * Note that the defaultValue is copied if the string is not a valid list of string entries + * and the defaultValue is expected to be configured with a removed entry callback so the + * strings are freed. * @param[out] list The converted list. If the string is not a valid list, the list will be set to a copy of the * defaultValue. */ @@ -196,7 +199,9 @@ char* celix_utils_stringArrayListToString(const celix_array_list_t* list); * * @param[in] val The string to convert. * @param[in] defaultValue The default value if the string is not a valid "," separated list of string parseable to - * celix_version_t entries. + * celix_version_t entries. Note that the defaultValue is copied if the string is not a valid + * list of version entries and the defaultValue + * is expected to be configured with a removed entry callback so the versions are freed. * @param[out] list The converted list. If the string is not a valid list, the list will be set to a copy of the * defaultValue. */ diff --git a/libs/utils/src/celix_convert_utils.c b/libs/utils/src/celix_convert_utils.c index eb3eb5c4..b3484444 100644 --- a/libs/utils/src/celix_convert_utils.c +++ b/libs/utils/src/celix_convert_utils.c @@ -278,7 +278,7 @@ static char* celix_utils_arrayListToString(const celix_array_list_t* list, int (*printCb)(FILE* stream, const celix_array_list_entry_t* entry)) { char* result = NULL; size_t len; - celix_autoptr(FILE) stream = open_memstream(&result, &len); + FILE* stream = open_memstream(&result, &len); if (!stream) { celix_err_push("Cannot open memstream"); return NULL; @@ -293,10 +293,12 @@ static char* celix_utils_arrayListToString(const celix_array_list_t* list, } if (rc < 0) { celix_err_push("Cannot print to stream"); + fclose(stream); + free(result); return NULL; } } - fclose(celix_steal_ptr(stream)); + fclose(stream); return result; }
