diff options
Diffstat (limited to 'src/fluent-bit/lib/jansson-e23f558/test/suites/api/test_fixed_size.c')
-rw-r--r-- | src/fluent-bit/lib/jansson-e23f558/test/suites/api/test_fixed_size.c | 228 |
1 files changed, 228 insertions, 0 deletions
diff --git a/src/fluent-bit/lib/jansson-e23f558/test/suites/api/test_fixed_size.c b/src/fluent-bit/lib/jansson-e23f558/test/suites/api/test_fixed_size.c new file mode 100644 index 000000000..4ae9e079c --- /dev/null +++ b/src/fluent-bit/lib/jansson-e23f558/test/suites/api/test_fixed_size.c @@ -0,0 +1,228 @@ +/* + * Copyright (c) 2020 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 test_keylen_iterator(json_t *object) { + const char key1[] = {'t', 'e', 's', 't', '1'}; + const char key2[] = {'t', 'e', 's', 't'}; + const char key3[] = {'t', 'e', 's', '\0', 't'}; + const char key4[] = {'t', 'e', 's', 't', '\0'}; + const char *reference_keys[] = {key1, key2, key3, key4}; + const size_t reference_keys_len[] = {sizeof(key1), sizeof(key2), sizeof(key3), + sizeof(key4)}; + size_t index = 0; + json_t *value; + const char *key; + size_t keylen; + + json_object_keylen_foreach(object, key, keylen, value) { + if (keylen != reference_keys_len[index]) + fail("invalid key len in iterator"); + if (memcmp(key, reference_keys[index], reference_keys_len[index]) != 0) + fail("invalid key in iterator"); + + index++; + } +} + +static void test_keylen(void) { + json_t *obj = json_object(); + const char key[] = {'t', 'e', 's', 't', '1'}; + const char key2[] = {'t', 'e', 's', 't'}; + const char key3[] = {'t', 'e', 's', '\0', 't'}; + const char key4[] = {'t', 'e', 's', 't', '\0'}; + + if (json_object_size(obj) != 0) + fail("incorrect json"); + + json_object_set_new_nocheck(obj, "test1", json_true()); + + if (json_object_size(obj) != 1) + fail("incorrect json"); + + if (json_object_getn(obj, key, sizeof(key)) != json_true()) + fail("json_object_getn failed"); + + if (json_object_getn(obj, key2, sizeof(key2)) != NULL) + fail("false positive json_object_getn by key2"); + + if (json_object_setn_nocheck(obj, key2, sizeof(key2), json_false())) + fail("json_object_setn_nocheck for key2 failed"); + + if (json_object_size(obj) != 2) + fail("incorrect json"); + + if (json_object_get(obj, "test") != json_false()) + fail("json_object_setn_nocheck for key2 failed"); + + if (json_object_getn(obj, key2, sizeof(key2)) != json_false()) + fail("json_object_getn by key 2 failed"); + + if (json_object_getn(obj, key3, sizeof(key3)) != NULL) + fail("false positive json_object_getn by key3"); + + if (json_object_setn_nocheck(obj, key3, sizeof(key3), json_false())) + fail("json_object_setn_nocheck for key3 failed"); + + if (json_object_size(obj) != 3) + fail("incorrect json"); + + if (json_object_getn(obj, key3, sizeof(key3)) != json_false()) + fail("json_object_getn by key 3 failed"); + + if (json_object_getn(obj, key4, sizeof(key4)) != NULL) + fail("false positive json_object_getn by key3"); + + if (json_object_setn_nocheck(obj, key4, sizeof(key4), json_false())) + fail("json_object_setn_nocheck for key3 failed"); + + if (json_object_size(obj) != 4) + fail("incorrect json"); + + test_keylen_iterator(obj); + + if (json_object_getn(obj, key4, sizeof(key4)) != json_false()) + fail("json_object_getn by key 3 failed"); + + if (json_object_size(obj) != 4) + fail("incorrect json"); + + if (json_object_deln(obj, key4, sizeof(key4))) + fail("json_object_deln failed"); + if (json_object_getn(obj, key4, sizeof(key4)) != NULL) + fail("json_object_deln failed"); + if (json_object_size(obj) != 3) + fail("incorrect json"); + + if (json_object_deln(obj, key3, sizeof(key3))) + fail("json_object_deln failed"); + if (json_object_getn(obj, key3, sizeof(key3)) != NULL) + fail("json_object_deln failed"); + if (json_object_size(obj) != 2) + fail("incorrect json"); + + if (json_object_deln(obj, key2, sizeof(key2))) + fail("json_object_deln failed"); + if (json_object_getn(obj, key2, sizeof(key2)) != NULL) + fail("json_object_deln failed"); + if (json_object_size(obj) != 1) + fail("incorrect json"); + + if (json_object_deln(obj, key, sizeof(key))) + fail("json_object_deln failed"); + if (json_object_getn(obj, key, sizeof(key)) != NULL) + fail("json_object_deln failed"); + if (json_object_size(obj) != 0) + fail("incorrect json"); + + json_decref(obj); +} + +static void test_invalid_keylen(void) { + json_t *obj = json_object(); + json_t *empty_obj = json_object(); + const char key[] = {'t', 'e', 's', 't', '1'}; + + json_object_set_new_nocheck(obj, "test1", json_true()); + + if (json_object_getn(NULL, key, sizeof(key)) != NULL) + fail("json_object_getn on NULL failed"); + + if (json_object_getn(obj, NULL, sizeof(key)) != NULL) + fail("json_object_getn on NULL failed"); + + if (json_object_getn(obj, key, 0) != NULL) + fail("json_object_getn on NULL failed"); + + if (!json_object_setn_new(obj, NULL, sizeof(key), json_true())) + fail("json_object_setn_new with NULL key failed"); + + if (!json_object_setn_new_nocheck(obj, NULL, sizeof(key), json_true())) + fail("json_object_setn_new_nocheck with NULL key failed"); + + if (!json_object_del(obj, NULL)) + fail("json_object_del with NULL failed"); + + if (!json_object_deln(empty_obj, key, sizeof(key))) + fail("json_object_deln with empty object failed"); + + if (!json_object_deln(obj, key, sizeof(key) - 1)) + fail("json_object_deln with incomplete key failed"); + + json_decref(obj); + json_decref(empty_obj); +} + +static void test_binary_keys(void) { + json_t *obj = json_object(); + int key1 = 0; + int key2 = 1; + + json_object_setn_nocheck(obj, (const char *)&key1, sizeof(key1), json_true()); + json_object_setn_nocheck(obj, (const char *)&key2, sizeof(key2), json_true()); + + if (!json_is_true(json_object_getn(obj, (const char *)&key1, sizeof(key1)))) + fail("cannot get integer key1"); + + if (!json_is_true(json_object_getn(obj, (const char *)&key1, sizeof(key2)))) + fail("cannot get integer key2"); + + if (json_object_size(obj) != 2) + fail("binary object size missmatch"); + + if (json_object_deln(obj, (const char *)&key1, sizeof(key1))) + fail("cannot del integer key1"); + + if (json_object_size(obj) != 1) + fail("binary object size missmatch"); + + if (json_object_deln(obj, (const char *)&key2, sizeof(key2))) + fail("cannot del integer key2"); + + if (json_object_size(obj) != 0) + fail("binary object size missmatch"); + + json_decref(obj); +} + +static void test_dump_order(void) { + json_t *obj = json_object(); + char key1[] = {'k', '\0', '-', '2'}; + char key2[] = {'k', '\0', '-', '1'}; + const char expected_sorted_str[] = + "{\"k\\u0000-1\": \"first\", \"k\\u0000-2\": \"second\"}"; + const char expected_nonsorted_str[] = + "{\"k\\u0000-2\": \"second\", \"k\\u0000-1\": \"first\"}"; + char *out; + + json_object_setn_new_nocheck(obj, key1, sizeof(key1), json_string("second")); + json_object_setn_new_nocheck(obj, key2, sizeof(key2), json_string("first")); + + out = malloc(512); + + json_dumpb(obj, out, 512, 0); + + if (memcmp(expected_nonsorted_str, out, sizeof(expected_nonsorted_str) - 1) != 0) + fail("preserve order failed"); + + json_dumpb(obj, out, 512, JSON_SORT_KEYS); + if (memcmp(expected_sorted_str, out, sizeof(expected_sorted_str) - 1) != 0) + fail("utf-8 sort failed"); + + free(out); + json_decref(obj); +} + +static void run_tests() { + test_keylen(); + test_invalid_keylen(); + test_binary_keys(); + test_dump_order(); +} |