Skip to content
Open
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions include/fluent-bit/flb_kv.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,5 +41,6 @@ struct flb_kv *flb_kv_item_set(struct mk_list *list,
void flb_kv_item_destroy(struct flb_kv *kv);
void flb_kv_release(struct mk_list *list);
const char *flb_kv_get_key_value(const char *key, struct mk_list *list);
struct flb_kv **flb_kv_get_all_key_values(struct mk_list *list);
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Outdated

#endif
32 changes: 32 additions & 0 deletions src/flb_kv.c
Original file line number Diff line number Diff line change
Expand Up @@ -160,3 +160,35 @@ const char *flb_kv_get_key_value(const char *key, struct mk_list *list)

return NULL;
}

struct flb_kv **flb_kv_get_all_key_values(struct mk_list *list)
{
int count;
int i = 0;
struct mk_list *head;
struct flb_kv *kv;
struct flb_kv **arr;

if (!list) {
return NULL;
}

count = mk_list_size(list);
if (count == 0) {
return NULL;
}

arr = flb_calloc(count, sizeof(struct flb_kv *));
if (!arr) {
flb_errno();
return NULL;
}

mk_list_foreach(head, list) {
kv = mk_list_entry(head, struct flb_kv, _head);
arr[i] = kv;
i++;
}

return arr;
}
37 changes: 37 additions & 0 deletions tests/internal/kv.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */

#include <fluent-bit/flb_kv.h>
#include <fluent-bit/flb_mem.h>
#include "flb_tests_internal.h"

static void test_kv_item_set_duplicate()
Expand Down Expand Up @@ -28,7 +29,43 @@ static void test_kv_item_set_duplicate()
flb_kv_release(&list);
}

static void test_kv_get_all_key_values()
{
struct mk_list list;
struct flb_kv **pairs;

flb_kv_init(&list);

pairs = flb_kv_get_all_key_values(&list);
TEST_CHECK(pairs == NULL);

flb_kv_item_set(&list, "host", "localhost");
flb_kv_item_set(&list, "port", "8080");
flb_kv_item_set(&list, "path", "/api");

pairs = flb_kv_get_all_key_values(&list);
TEST_CHECK(pairs != NULL);

if (pairs) {
TEST_CHECK(pairs[0] != NULL);
TEST_CHECK(strcmp(pairs[0]->key, "host") == 0);
TEST_CHECK(strcmp(pairs[0]->val, "localhost") == 0);

TEST_CHECK(pairs[1] != NULL);
TEST_CHECK(strcmp(pairs[1]->key, "port") == 0);
TEST_CHECK(strcmp(pairs[1]->val, "8080") == 0);

TEST_CHECK(pairs[2] != NULL);
TEST_CHECK(strcmp(pairs[2]->key, "path") == 0);
TEST_CHECK(strcmp(pairs[2]->val, "/api") == 0);
}
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Outdated

flb_kv_release(&list);
flb_free(pairs);
}

TEST_LIST = {
{"kv_item_set_duplicate", test_kv_item_set_duplicate},
{"kv_get_all_key_values", test_kv_get_all_key_values},
{0}
};
Loading