Skip to content

Commit dd5789e

Browse files
rjarrytmonjalo
authored andcommitted
telemetry: fix adding dict in container array
Currently, adding TEL_DICT containers in TEL_ARRAY_CONTAINER containers is not supported by rte_tel_data_add_array_container. It wrongfully returns -EINVAL where it should allow it. This is supported by the JSON formatter. Allow the same value types than rte_tel_data_add_dict_container(). Add test case to verify it works as expected. Fixes: c933bb5 ("telemetry: support array values in data object") Cc: stable@dpdk.org Signed-off-by: Robin Jarry <rjarry@redhat.com> Acked-by: Bruce Richardson <bruce.richardson@intel.com> Acked-by: Chengwen Feng <fengchengwen@huawei.com>
1 parent de74d16 commit dd5789e

File tree

2 files changed

+24
-3
lines changed

2 files changed

+24
-3
lines changed

app/test/test_telemetry_data.c

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -405,6 +405,26 @@ test_array_with_array_uint_hex_values_nopadding(void)
405405
return CHECK_OUTPUT("[[\"0x888\"],[\"0x8888\"]]");
406406
}
407407

408+
static int
409+
test_array_with_dict_values(void)
410+
{
411+
rte_tel_data_start_array(&response_data, RTE_TEL_CONTAINER);
412+
413+
struct rte_tel_data *d1 = rte_tel_data_alloc();
414+
rte_tel_data_start_dict(d1);
415+
rte_tel_data_add_dict_string(d1, "name", "foo");
416+
rte_tel_data_add_dict_uint(d1, "size", 42);
417+
rte_tel_data_add_array_container(&response_data, d1, 0);
418+
419+
struct rte_tel_data *d2 = rte_tel_data_alloc();
420+
rte_tel_data_start_dict(d2);
421+
rte_tel_data_add_dict_string(d2, "name", "bar");
422+
rte_tel_data_add_dict_uint(d2, "size", 666);
423+
rte_tel_data_add_array_container(&response_data, d2, 0);
424+
425+
return CHECK_OUTPUT("[{\"name\":\"foo\",\"size\":42},{\"name\":\"bar\",\"size\":666}]");
426+
}
427+
408428
static int
409429
test_case_array_u64(void)
410430
{
@@ -597,6 +617,7 @@ telemetry_data_autotest(void)
597617
test_array_with_array_string_values,
598618
test_array_with_array_uint_hex_values_padding,
599619
test_array_with_array_uint_hex_values_nopadding,
620+
test_array_with_dict_values,
600621
test_string_char_escaping,
601622
test_array_char_escaping,
602623
test_dict_char_escaping,

lib/telemetry/telemetry_data.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -96,10 +96,10 @@ int
9696
rte_tel_data_add_array_container(struct rte_tel_data *d,
9797
struct rte_tel_data *val, int keep)
9898
{
99-
if (d->type != TEL_ARRAY_CONTAINER ||
100-
(val->type != TEL_ARRAY_UINT
99+
if (d->type != TEL_ARRAY_CONTAINER || (val->type != TEL_ARRAY_UINT
101100
&& val->type != TEL_ARRAY_INT
102-
&& val->type != TEL_ARRAY_STRING))
101+
&& val->type != TEL_ARRAY_STRING
102+
&& val->type != TEL_DICT))
103103
return -EINVAL;
104104
if (d->data_len >= RTE_TEL_MAX_ARRAY_ENTRIES)
105105
return -ENOSPC;

0 commit comments

Comments
 (0)