summaryrefslogtreecommitdiffstats
path: root/fluent-bit/lib/jansson-e23f558/test/suites/api/test_load.c
diff options
context:
space:
mode:
Diffstat (limited to 'fluent-bit/lib/jansson-e23f558/test/suites/api/test_load.c')
-rw-r--r--fluent-bit/lib/jansson-e23f558/test/suites/api/test_load.c238
1 files changed, 238 insertions, 0 deletions
diff --git a/fluent-bit/lib/jansson-e23f558/test/suites/api/test_load.c b/fluent-bit/lib/jansson-e23f558/test/suites/api/test_load.c
new file mode 100644
index 000000000..1c64b0c8d
--- /dev/null
+++ b/fluent-bit/lib/jansson-e23f558/test/suites/api/test_load.c
@@ -0,0 +1,238 @@
+/*
+ * Copyright (c) 2009-2016 Petri Lehtinen <petri@digip.org>
+ *
+ * Jansson is free software; you can redistribute it and/or modify
+ * it under the terms of the MIT license. See LICENSE for details.
+ */
+
+#include "util.h"
+#include <jansson.h>
+#include <string.h>
+
+static void file_not_found() {
+ json_t *json;
+ json_error_t error;
+ char *pos;
+
+ json = json_load_file("/path/to/nonexistent/file.json", 0, &error);
+ if (json)
+ fail("json_load_file returned non-NULL for a nonexistent file");
+ if (error.line != -1)
+ fail("json_load_file returned an invalid line number");
+
+ /* The error message is locale specific, only check the beginning
+ of the error message. */
+
+ pos = strchr(error.text, ':');
+ if (!pos)
+ fail("json_load_file returne an invalid error message");
+
+ *pos = '\0';
+
+ if (strcmp(error.text, "unable to open /path/to/nonexistent/file.json") != 0)
+ fail("json_load_file returned an invalid error message");
+ if (json_error_code(&error) != json_error_cannot_open_file)
+ fail("json_load_file returned an invalid error code");
+}
+
+static void very_long_file_name() {
+ json_t *json;
+ json_error_t error;
+
+ json = json_load_file("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+ 0, &error);
+ if (json)
+ fail("json_load_file returned non-NULL for a nonexistent file");
+ if (error.line != -1)
+ fail("json_load_file returned an invalid line number");
+
+ if (strncmp(error.source, "...aaa", 6) != 0)
+ fail("error source was set incorrectly");
+ if (json_error_code(&error) != json_error_cannot_open_file)
+ fail("error code was set incorrectly");
+}
+
+static void reject_duplicates() {
+ json_error_t error;
+
+ if (json_loads("{\"foo\": 1, \"foo\": 2}", JSON_REJECT_DUPLICATES, &error))
+ fail("json_loads did not detect a duplicate key");
+ check_error(json_error_duplicate_key, "duplicate object key near '\"foo\"'",
+ "<string>", 1, 16, 16);
+}
+
+static void disable_eof_check() {
+ json_error_t error;
+ json_t *json;
+
+ const char *text = "{\"foo\": 1} garbage";
+
+ if (json_loads(text, 0, &error))
+ fail("json_loads did not detect garbage after JSON text");
+ check_error(json_error_end_of_input_expected, "end of file expected near 'garbage'",
+ "<string>", 1, 18, 18);
+
+ json = json_loads(text, JSON_DISABLE_EOF_CHECK, &error);
+ if (!json)
+ fail("json_loads failed with JSON_DISABLE_EOF_CHECK");
+
+ json_decref(json);
+}
+
+static void decode_any() {
+ json_t *json;
+ json_error_t error;
+
+ json = json_loads("\"foo\"", JSON_DECODE_ANY, &error);
+ if (!json || !json_is_string(json))
+ fail("json_load decoded any failed - string");
+ json_decref(json);
+
+ json = json_loads("42", JSON_DECODE_ANY, &error);
+ if (!json || !json_is_integer(json))
+ fail("json_load decoded any failed - integer");
+ json_decref(json);
+
+ json = json_loads("true", JSON_DECODE_ANY, &error);
+ if (!json || !json_is_true(json))
+ fail("json_load decoded any failed - boolean");
+ json_decref(json);
+
+ json = json_loads("null", JSON_DECODE_ANY, &error);
+ if (!json || !json_is_null(json))
+ fail("json_load decoded any failed - null");
+ json_decref(json);
+}
+
+static void decode_int_as_real() {
+ json_t *json;
+ json_error_t error;
+
+#if JSON_INTEGER_IS_LONG_LONG
+ const char *imprecise;
+ json_int_t expected;
+#endif
+
+ char big[311];
+
+ json = json_loads("42", JSON_DECODE_INT_AS_REAL | JSON_DECODE_ANY, &error);
+ if (!json || !json_is_real(json) || json_real_value(json) != 42.0)
+ fail("json_load decode int as real failed - int");
+ json_decref(json);
+
+#if JSON_INTEGER_IS_LONG_LONG
+ /* This number cannot be represented exactly by a double */
+ imprecise = "9007199254740993";
+ expected = 9007199254740992ll;
+
+ json = json_loads(imprecise, JSON_DECODE_INT_AS_REAL | JSON_DECODE_ANY, &error);
+ if (!json || !json_is_real(json) || expected != (json_int_t)json_real_value(json))
+ fail("json_load decode int as real failed - expected imprecision");
+ json_decref(json);
+#endif
+
+ /* 1E309 overflows. Here we create 1E309 as a decimal number, i.e.
+ 1000...(309 zeroes)...0. */
+ big[0] = '1';
+ memset(big + 1, '0', 309);
+ big[310] = '\0';
+
+ json = json_loads(big, JSON_DECODE_INT_AS_REAL | JSON_DECODE_ANY, &error);
+ if (json || strcmp(error.text, "real number overflow") != 0 ||
+ json_error_code(&error) != json_error_numeric_overflow)
+ fail("json_load decode int as real failed - expected overflow");
+ json_decref(json);
+}
+
+static void allow_nul() {
+ const char *text = "\"nul byte \\u0000 in string\"";
+ const char *expected = "nul byte \0 in string";
+ size_t len = 20;
+ json_t *json;
+
+ json = json_loads(text, JSON_ALLOW_NUL | JSON_DECODE_ANY, NULL);
+ if (!json || !json_is_string(json))
+ fail("unable to decode embedded NUL byte");
+
+ if (json_string_length(json) != len)
+ fail("decoder returned wrong string length");
+
+ if (memcmp(json_string_value(json), expected, len + 1))
+ fail("decoder returned wrong string content");
+
+ json_decref(json);
+}
+
+static void load_wrong_args() {
+ json_t *json;
+ json_error_t error;
+
+ json = json_loads(NULL, 0, &error);
+ if (json)
+ fail("json_loads should return NULL if the first argument is NULL");
+
+ json = json_loadb(NULL, 0, 0, &error);
+ if (json)
+ fail("json_loadb should return NULL if the first argument is NULL");
+
+ json = json_loadf(NULL, 0, &error);
+ if (json)
+ fail("json_loadf should return NULL if the first argument is NULL");
+
+ json = json_loadfd(-1, 0, &error);
+ if (json)
+ fail("json_loadfd should return NULL if the first argument is < 0");
+
+ json = json_load_file(NULL, 0, &error);
+ if (json)
+ fail("json_load_file should return NULL if the first argument is NULL");
+}
+
+static void position() {
+ json_t *json;
+ size_t flags = JSON_DISABLE_EOF_CHECK;
+ json_error_t error;
+
+ json = json_loads("{\"foo\": \"bar\"}", 0, &error);
+ if (error.position != 14)
+ fail("json_loads returned a wrong position");
+ json_decref(json);
+
+ json = json_loads("{\"foo\": \"bar\"} baz quux", flags, &error);
+ if (error.position != 14)
+ fail("json_loads returned a wrong position");
+ json_decref(json);
+}
+
+static void error_code() {
+ json_error_t error;
+ json_t *json = json_loads("[123] garbage", 0, &error);
+ if (json != NULL)
+ fail("json_loads returned not NULL");
+ if (strlen(error.text) >= JSON_ERROR_TEXT_LENGTH)
+ fail("error.text longer than expected");
+ if (json_error_code(&error) != json_error_end_of_input_expected)
+ fail("json_loads returned incorrect error code");
+
+ json = json_loads("{\"foo\": ", 0, &error);
+ if (json != NULL)
+ fail("json_loads returned not NULL");
+ if (strlen(error.text) >= JSON_ERROR_TEXT_LENGTH)
+ fail("error.text longer than expected");
+ if (json_error_code(&error) != json_error_premature_end_of_input)
+ fail("json_loads returned incorrect error code");
+}
+
+static void run_tests() {
+ file_not_found();
+ very_long_file_name();
+ reject_duplicates();
+ disable_eof_check();
+ decode_any();
+ decode_int_as_real();
+ allow_nul();
+ load_wrong_args();
+ position();
+ error_code();
+}