From b6b377ffc0169ac770579ab94082f2cd7a80667a Mon Sep 17 00:00:00 2001 From: Bartosz Podrygajlo Date: Mon, 2 Dec 2024 13:32:19 +0100 Subject: [PATCH] Align YAML config getlist with libconfig implementation This aligns the behavior of params_yaml with params_config library so that when a mapping is read using getlist it returns the number of elements in the mapping instead of 0. --- common/config/yaml/config_yaml.cpp | 2 +- common/config/yaml/tests/CMakeLists.txt | 1 + .../yaml/tests/test_read_mapping_as_list.yaml | 4 ++++ common/config/yaml/tests/test_yaml_config.cpp | 17 +++++++++++++++++ 4 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 common/config/yaml/tests/test_read_mapping_as_list.yaml diff --git a/common/config/yaml/config_yaml.cpp b/common/config/yaml/config_yaml.cpp index c2af51e2db..419b187ef9 100644 --- a/common/config/yaml/config_yaml.cpp +++ b/common/config/yaml/config_yaml.cpp @@ -286,10 +286,10 @@ extern "C" int config_yaml_getlist(configmodule_interface_t *cfg, return -1; } + ParamList->numelt = node.size(); if (!node.IsSequence()) { return -1; } - ParamList->numelt = node.size(); if (ParamList->numelt > 0 && params != NULL) { ParamList->paramarray = static_cast(config_allocate_new(cfg, ParamList->numelt * sizeof(paramdef_t *), true)); diff --git a/common/config/yaml/tests/CMakeLists.txt b/common/config/yaml/tests/CMakeLists.txt index b28bb8d47f..6290f2fc15 100644 --- a/common/config/yaml/tests/CMakeLists.txt +++ b/common/config/yaml/tests/CMakeLists.txt @@ -9,3 +9,4 @@ configure_file(test_list.yaml test_list.yaml COPYONLY) configure_file(test_string.yaml test_string.yaml COPYONLY) configure_file(test_list_of_mappings.yml test_list_of_mappings.yml COPYONLY) configure_file(test_int_array.yaml test_int_array.yaml COPYONLY) +configure_file(test_read_mapping_as_list.yaml test_read_mapping_as_list.yaml COPYONLY) diff --git a/common/config/yaml/tests/test_read_mapping_as_list.yaml b/common/config/yaml/tests/test_read_mapping_as_list.yaml new file mode 100644 index 0000000000..2e17dcce36 --- /dev/null +++ b/common/config/yaml/tests/test_read_mapping_as_list.yaml @@ -0,0 +1,4 @@ +fhi_72: + element1: value1 + element2: value2 + element3: value3 diff --git a/common/config/yaml/tests/test_yaml_config.cpp b/common/config/yaml/tests/test_yaml_config.cpp index 921a455dfd..1cc260ffb7 100644 --- a/common/config/yaml/tests/test_yaml_config.cpp +++ b/common/config/yaml/tests/test_yaml_config.cpp @@ -364,6 +364,23 @@ TEST(yaml_config, test_int_array) { end_configmodule(cfg); } +TEST(yaml_config, test_read_mapping_as_list) { + configmodule_interface_t *cfg = static_cast(calloc(1, sizeof(*cfg))); + cfg->cfgP[0] = strdup("test_read_mapping_as_list.yaml"); + EXPECT_EQ(config_yaml_init(cfg), 0); + + + paramlist_def_t pl = {0}; + strncpy(pl.listname, "fhi_72", sizeof(pl.listname) - 1); + config_yaml_getlist(cfg, &pl, NULL, 0, /* prefix */ NULL); + EXPECT_NE(pl.numelt, 0); + EXPECT_EQ(pl.numelt, 3); + + config_yaml_end(cfg); + free(cfg->cfgP[0]); + end_configmodule(cfg); +} + int main(int argc, char** argv) { logInit();