Skip to content

Commit e2a5b8b

Browse files
committed
tests: internal: record_accessor: add tests for binary/string, copy and ref
Signed-off-by: Eduardo Silva <[email protected]>
1 parent fafb9e0 commit e2a5b8b

File tree

1 file changed

+178
-0
lines changed

1 file changed

+178
-0
lines changed

tests/internal/record_accessor.c

Lines changed: 178 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
#include <fluent-bit/flb_sds.h>
2727
#include <fluent-bit/flb_sds_list.h>
2828
#include <fluent-bit/flb_record_accessor.h>
29+
#include <fluent-bit/flb_ra_key.h>
2930
#include <fluent-bit/record_accessor/flb_ra_parser.h>
3031
#include <msgpack.h>
3132

@@ -2213,6 +2214,179 @@ void cb_nested_failure_recovery()
22132214
flb_free(out_buf);
22142215
}
22152216

2217+
/* --- binary/reference record accessor tests --- */
2218+
2219+
static const unsigned char BIN_DATA[4] = {0x01, 0x02, 0x03, 0x04};
2220+
2221+
static void build_ra_map(msgpack_sbuffer *sbuf, const char **bin_ptr)
2222+
{
2223+
msgpack_packer pck;
2224+
2225+
msgpack_sbuffer_init(sbuf);
2226+
msgpack_packer_init(&pck, sbuf, msgpack_sbuffer_write);
2227+
2228+
/* map {"bin": <bin>, "str": "abc"} */
2229+
msgpack_pack_map(&pck, 2);
2230+
2231+
msgpack_pack_str(&pck, 3);
2232+
msgpack_pack_str_body(&pck, "bin", 3);
2233+
msgpack_pack_bin(&pck, sizeof(BIN_DATA));
2234+
msgpack_pack_bin_body(&pck, BIN_DATA, sizeof(BIN_DATA));
2235+
2236+
msgpack_pack_str(&pck, 3);
2237+
msgpack_pack_str_body(&pck, "str", 3);
2238+
msgpack_pack_str(&pck, 3);
2239+
msgpack_pack_str_body(&pck, "abc", 3);
2240+
2241+
if (bin_ptr) {
2242+
*bin_ptr = NULL;
2243+
for (size_t i = 0; i + sizeof(BIN_DATA) <= sbuf->size; i++) {
2244+
if (memcmp(sbuf->data + i, BIN_DATA, sizeof(BIN_DATA)) == 0) {
2245+
*bin_ptr = sbuf->data + i;
2246+
break;
2247+
}
2248+
}
2249+
}
2250+
}
2251+
2252+
static void destroy_sbuf(msgpack_sbuffer *sbuf)
2253+
{
2254+
msgpack_sbuffer_destroy(sbuf);
2255+
}
2256+
2257+
static void cb_ra_binary_copy()
2258+
{
2259+
msgpack_sbuffer sbuf;
2260+
const char *dummy;
2261+
msgpack_unpacked result;
2262+
msgpack_object map;
2263+
struct flb_record_accessor *ra;
2264+
struct flb_ra_value *val;
2265+
size_t off = 0, len;
2266+
const char *buf;
2267+
2268+
build_ra_map(&sbuf, &dummy);
2269+
2270+
msgpack_unpacked_init(&result);
2271+
TEST_CHECK(msgpack_unpack_next(&result, sbuf.data, sbuf.size, &off) == MSGPACK_UNPACK_SUCCESS);
2272+
map = result.data;
2273+
2274+
ra = flb_ra_create("bin", FLB_TRUE);
2275+
TEST_CHECK(ra != NULL);
2276+
val = flb_ra_get_value_object(ra, map);
2277+
TEST_CHECK(val != NULL && val->type == FLB_RA_BINARY && val->storage == FLB_RA_COPY);
2278+
buf = flb_ra_value_buffer(val, &len);
2279+
TEST_CHECK(len == sizeof(BIN_DATA));
2280+
TEST_CHECK(memcmp(buf, BIN_DATA, sizeof(BIN_DATA)) == 0);
2281+
2282+
flb_ra_key_value_destroy(val);
2283+
flb_ra_destroy(ra);
2284+
msgpack_unpacked_destroy(&result);
2285+
destroy_sbuf(&sbuf);
2286+
}
2287+
2288+
static void cb_ra_binary_ref()
2289+
{
2290+
msgpack_sbuffer sbuf;
2291+
const char *bin_in_map;
2292+
msgpack_unpacked result;
2293+
msgpack_object map;
2294+
struct flb_record_accessor *ra;
2295+
struct flb_ra_value *val;
2296+
size_t off = 0, len;
2297+
const char *buf;
2298+
2299+
build_ra_map(&sbuf, &bin_in_map);
2300+
2301+
msgpack_unpacked_init(&result);
2302+
TEST_CHECK(msgpack_unpack_next(&result, sbuf.data, sbuf.size, &off) == MSGPACK_UNPACK_SUCCESS);
2303+
map = result.data;
2304+
2305+
ra = flb_ra_create("bin", FLB_TRUE);
2306+
TEST_CHECK(ra != NULL);
2307+
val = flb_ra_get_value_object_ref(ra, map);
2308+
TEST_CHECK(val != NULL && val->type == FLB_RA_BINARY && val->storage == FLB_RA_REF);
2309+
buf = flb_ra_value_buffer(val, &len);
2310+
TEST_CHECK(len == sizeof(BIN_DATA));
2311+
TEST_CHECK(memcmp(buf, BIN_DATA, sizeof(BIN_DATA)) == 0);
2312+
TEST_CHECK(buf == bin_in_map);
2313+
2314+
flb_ra_key_value_destroy(val);
2315+
flb_ra_destroy(ra);
2316+
msgpack_unpacked_destroy(&result);
2317+
destroy_sbuf(&sbuf);
2318+
}
2319+
2320+
static void cb_ra_string_copy()
2321+
{
2322+
msgpack_sbuffer sbuf;
2323+
const char *dummy;
2324+
msgpack_unpacked result;
2325+
msgpack_object map;
2326+
struct flb_record_accessor *ra;
2327+
struct flb_ra_value *val;
2328+
size_t off = 0, len;
2329+
const char *buf;
2330+
2331+
build_ra_map(&sbuf, &dummy);
2332+
2333+
msgpack_unpacked_init(&result);
2334+
TEST_CHECK(msgpack_unpack_next(&result, sbuf.data, sbuf.size, &off) == MSGPACK_UNPACK_SUCCESS);
2335+
map = result.data;
2336+
2337+
ra = flb_ra_create("str", FLB_TRUE);
2338+
TEST_CHECK(ra != NULL);
2339+
val = flb_ra_get_value_object(ra, map);
2340+
TEST_CHECK(val != NULL && val->type == FLB_RA_STRING && val->storage == FLB_RA_COPY);
2341+
buf = flb_ra_value_buffer(val, &len);
2342+
TEST_CHECK(len == 3 && strncmp(buf, "abc", 3) == 0);
2343+
2344+
flb_ra_key_value_destroy(val);
2345+
flb_ra_destroy(ra);
2346+
msgpack_unpacked_destroy(&result);
2347+
destroy_sbuf(&sbuf);
2348+
}
2349+
2350+
static void cb_ra_string_ref()
2351+
{
2352+
msgpack_sbuffer sbuf;
2353+
const char *dummy;
2354+
msgpack_unpacked result;
2355+
msgpack_object map;
2356+
struct flb_record_accessor *ra;
2357+
struct flb_ra_value *val;
2358+
size_t off = 0, len;
2359+
const char *buf;
2360+
const char *expected;
2361+
2362+
build_ra_map(&sbuf, &dummy);
2363+
2364+
expected = NULL;
2365+
for (size_t i = 0; i + 3 <= sbuf.size; i++) {
2366+
if (memcmp(sbuf.data + i, "abc", 3) == 0) {
2367+
expected = sbuf.data + i;
2368+
break;
2369+
}
2370+
}
2371+
2372+
msgpack_unpacked_init(&result);
2373+
TEST_CHECK(msgpack_unpack_next(&result, sbuf.data, sbuf.size, &off) == MSGPACK_UNPACK_SUCCESS);
2374+
map = result.data;
2375+
2376+
ra = flb_ra_create("str", FLB_TRUE);
2377+
TEST_CHECK(ra != NULL);
2378+
val = flb_ra_get_value_object_ref(ra, map);
2379+
TEST_CHECK(val != NULL && val->type == FLB_RA_STRING && val->storage == FLB_RA_REF);
2380+
buf = flb_ra_value_buffer(val, &len);
2381+
TEST_CHECK(len == 3 && strncmp(buf, "abc", 3) == 0);
2382+
TEST_CHECK(buf == expected);
2383+
2384+
flb_ra_key_value_destroy(val);
2385+
flb_ra_destroy(ra);
2386+
msgpack_unpacked_destroy(&result);
2387+
destroy_sbuf(&sbuf);
2388+
}
2389+
22162390
TEST_LIST = {
22172391
{ "keys" , cb_keys},
22182392
{ "dash_key" , cb_dash_key},
@@ -2246,5 +2420,9 @@ TEST_LIST = {
22462420
{ "nonexistent_key_access", cb_nonexistent_key_access },
22472421
{ "wrong_type_access", cb_wrong_type_access },
22482422
{ "nested_failure_recovery", cb_nested_failure_recovery },
2423+
{ "ra_binary_copy", cb_ra_binary_copy },
2424+
{ "ra_binary_ref", cb_ra_binary_ref },
2425+
{ "ra_string_copy", cb_ra_string_copy },
2426+
{ "ra_string_ref", cb_ra_string_ref },
22492427
{ NULL }
22502428
};

0 commit comments

Comments
 (0)