tests: runtime: filter_lua: add testcase for array contains null
@@ -436,11 +436,87 @@ void flb_test_type_array_key(void)
flb_destroy(ctx);
}
+/* https://github.com/fluent/fluent-bit/issues/3433 */
+void flb_test_array_contains_null(void)
+{
+ int ret;
+ flb_ctx_t *ctx;
+ int in_ffd;
+ int out_ffd;
+ int filter_ffd;
+ char *output = NULL;
+ char *input = "[0, {\"hello\": [1, null, \"world\"]}]";
+ char *result;
+ struct flb_lib_out_cb cb_data;
+
+ char *script_body = ""
+ "function lua_main(tag, timestamp, record)\n"
+ " new_record = record\n"
+ " new_record[\"modify\"] = \"yes\"\n"
+ " return 1, timestamp, new_record\n"
+ "end\n";
+
+ /* Create context, flush every second (some checks omitted here) */
+ ctx = flb_create();
+ flb_service_set(ctx, "flush", "1", "grace", "1", NULL);
+
+ /* Prepare output callback context*/
+ cb_data.cb = callback_test;
+ cb_data.data = NULL;
+
+ ret = create_script(script_body, strlen(script_body));
+ TEST_CHECK(ret == 0);
+ /* Filter */
+ filter_ffd = flb_filter(ctx, (char *) "lua", NULL);
+ TEST_CHECK(filter_ffd >= 0);
+ ret = flb_filter_set(ctx, filter_ffd,
+ "Match", "*",
+ "call", "lua_main",
+ "script", TMP_LUA_PATH,
+ NULL);
+
+ /* Input */
+ in_ffd = flb_input(ctx, (char *) "lib", NULL);
+ flb_input_set(ctx, in_ffd, "tag", "test", NULL);
+ TEST_CHECK(in_ffd >= 0);
+
+ /* Lib output */
+ out_ffd = flb_output(ctx, (char *) "lib", (void *)&cb_data);
+ TEST_CHECK(out_ffd >= 0);
+ flb_output_set(ctx, out_ffd,
+ "match", "test",
+ "format", "json",
+ NULL);
+
+ ret = flb_start(ctx);
+ TEST_CHECK(ret==0);
+
+ flb_lib_push(ctx, in_ffd, input, strlen(input));
+ sleep(1);
+ output = get_output();
+ result = strstr(output, "[1,null,\"world\"]");
+ if(!TEST_CHECK(result != NULL)) {
+ TEST_MSG("output:%s\n", output);
+ }
+ result = strstr(output, "\"modify\":\"yes\"");
+ if(!TEST_CHECK(result != NULL)) {
+ TEST_MSG("output:%s\n", output);
+ }
+
+ /* clean up */
+ flb_lib_free(output);
+ delete_script();
+
+ flb_stop(ctx);
+ flb_destroy(ctx);
+}
+
TEST_LIST = {
{"hello_world", flb_test_helloworld},
{"append_tag", flb_test_append_tag},
{"type_int_key", flb_test_type_int_key},
{"type_int_key_multi", flb_test_type_int_key_multi},
{"type_array_key", flb_test_type_array_key},
+ {"array_contains_null", flb_test_array_contains_null},
{NULL, NULL}
};
