text: /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
  
  #include <fluent-bit.h>
  #include "flb_tests_runtime.h"
  
  /* Test data */
  #include "data/common/json_invalid.h" /* JSON_INVALID */
  #include "data/common/json_long.h"    /* JSON_LONG    */
  #include "data/common/json_small.h"   /* JSON_SMALL   */
  
  /* Test functions */
  void flb_test_counter_json_invalid(void);
  void flb_test_counter_json_long(void);
  void flb_test_counter_json_small(void);
  
  /* Test list */
  TEST_LIST = {
      {"json_invalid",    flb_test_counter_json_invalid },
      {"json_long",       flb_test_counter_json_long    },
      {"json_small",      flb_test_counter_json_small   },
      {NULL, NULL}
  };
  
  void flb_test_counter_json_invalid(void)
  {
      int i;
      int ret;
      int bytes;
      char *p = (char *) JSON_INVALID;
      flb_ctx_t *ctx;
      int in_ffd;
      int out_ffd;
  
      ctx = flb_create();
      flb_service_set(ctx, "Flush", "1", "Log_Level", "error", NULL);
  
      in_ffd = flb_input(ctx, (char *) "lib", NULL);
      TEST_CHECK(in_ffd >= 0);
      flb_input_set(ctx, in_ffd, "tag", "test", NULL);
  
      out_ffd = flb_output(ctx, (char *) "counter", NULL);
      TEST_CHECK(out_ffd >= 0);
      flb_output_set(ctx, out_ffd, "match", "test", NULL);
  
      ret = flb_start(ctx);
      TEST_CHECK(ret == 0);
  
      for (i = 0; i < (int) sizeof(JSON_INVALID) - 1; i++) {
          bytes = flb_lib_push(ctx, in_ffd, p + i, 1);
          TEST_CHECK(bytes == 1);
      }
  
      flb_stop(ctx);
      flb_destroy(ctx);
  }
  
  /* It writes a very long JSON map (> 100KB) byte by byte */
  void flb_test_counter_json_long(void)
  {
      int i;
      int ret;
      int bytes;
      char *p = (char *) JSON_LONG;
      flb_ctx_t *ctx;
      int in_ffd;
      int out_ffd;
  
      ctx = flb_create();
      flb_service_set(ctx, "Flush", "1", "Log_Level", "error", NULL);
  
      in_ffd = flb_input(ctx, (char *) "lib", NULL);
      TEST_CHECK(in_ffd >= 0);
      flb_input_set(ctx, in_ffd, "tag", "test", NULL);
  
      out_ffd = flb_output(ctx, (char *) "counter", NULL);
      TEST_CHECK(out_ffd >= 0);
      flb_output_set(ctx, out_ffd, "match", "test", NULL);
  
      ret = flb_start(ctx);
      TEST_CHECK(ret == 0);
  
      for (i = 0; i < (int) sizeof(JSON_LONG) - 1; i++) {
          bytes = flb_lib_push(ctx, in_ffd, p + i, 1);
          TEST_CHECK(bytes == 1);
      }
  
      sleep(1); /* waiting flush */
  
      flb_stop(ctx);
      flb_destroy(ctx);
  }
  
  void flb_test_counter_json_small(void)
  {
      int i;
      int ret;
      int bytes;
      char *p = (char *) JSON_SMALL;
      flb_ctx_t *ctx;
      int in_ffd;
      int out_ffd;
  
      ctx = flb_create();
      flb_service_set(ctx, "Flush", "1", "Log_Level", "error", NULL);
  
      in_ffd = flb_input(ctx, (char *) "lib", NULL);
      TEST_CHECK(in_ffd >= 0);
      flb_input_set(ctx, in_ffd, "tag", "test", NULL);
  
      out_ffd = flb_output(ctx, (char *) "counter", NULL);
      TEST_CHECK(out_ffd >= 0);
      flb_output_set(ctx, out_ffd, "match", "test", NULL);
  
      ret = flb_start(ctx);
      TEST_CHECK(ret == 0);
  
      for (i = 0; i < (int) sizeof(JSON_SMALL) - 1; i++) {
          bytes = flb_lib_push(ctx, in_ffd, p + i, 1);
          TEST_CHECK(bytes == 1);
      }
  
      sleep(1); /* waiting flush */
  
      flb_stop(ctx);
      flb_destroy(ctx);
  }
  