diff options
author | Nathaniel McCallum <npmccallum@redhat.com> | 2017-01-26 17:23:31 +0100 |
---|---|---|
committer | Nathaniel McCallum <npmccallum@redhat.com> | 2017-01-27 09:15:18 +0100 |
commit | 1672bb5a65b711d84c8adb12144bb997a4da02d4 (patch) | |
tree | 97ea7f5edc6348c3b669985ccfbbca13a4cc6a38 /test/suites/api/test_dump.c | |
parent | b900967f6fbfae098ced9dfeab7b2b51e1a22c0a (diff) | |
download | jansson-1672bb5a65b711d84c8adb12144bb997a4da02d4.zip jansson-1672bb5a65b711d84c8adb12144bb997a4da02d4.tar.gz jansson-1672bb5a65b711d84c8adb12144bb997a4da02d4.tar.bz2 |
Implement json_dumpfd() and json_loadfd()
The primary use of these functions is easy loading
and dumping from stream sockets.
Signed-off-by: Nathaniel McCallum <npmccallum@redhat.com>
Diffstat (limited to 'test/suites/api/test_dump.c')
-rw-r--r-- | test/suites/api/test_dump.c | 48 |
1 files changed, 45 insertions, 3 deletions
diff --git a/test/suites/api/test_dump.c b/test/suites/api/test_dump.c index e528031..8d59d40 100644 --- a/test/suites/api/test_dump.c +++ b/test/suites/api/test_dump.c @@ -5,8 +5,13 @@ * it under the terms of the MIT license. See LICENSE for details. */ +#include "jansson_private_config.h" + #include <jansson.h> #include <string.h> +#ifdef HAVE_UNISTD_H +#include <unistd.h> +#endif #include "util.h" static int encode_null_callback(const char *buffer, size_t size, void *data) @@ -28,6 +33,11 @@ static void encode_null() if(json_dumpf(NULL, stderr, JSON_ENCODE_ANY) != -1) fail("json_dumpf didn't fail for NULL"); +#ifdef HAVE_UNISTD_H + if(json_dumpfd(NULL, STDERR_FILENO, JSON_ENCODE_ANY) != -1) + fail("json_dumpfd didn't fail for NULL"); +#endif + /* Don't test json_dump_file to avoid creating a file */ if(json_dump_callback(NULL, encode_null_callback, NULL, JSON_ENCODE_ANY) != -1) @@ -127,14 +137,15 @@ static void encode_other_than_array_or_object() * succeed if the JSON_ENCODE_ANY flag is used */ json_t *json; - FILE *fp = NULL; char *result; json = json_string("foo"); if(json_dumps(json, 0) != NULL) fail("json_dumps encoded a string!"); - if(json_dumpf(json, fp, 0) == 0) + if(json_dumpf(json, NULL, 0) == 0) fail("json_dumpf encoded a string!"); + if(json_dumpfd(json, -1, 0) == 0) + fail("json_dumpfd encoded a string!"); result = json_dumps(json, JSON_ENCODE_ANY); if(!result || strcmp(result, "\"foo\"") != 0) @@ -146,8 +157,10 @@ static void encode_other_than_array_or_object() json = json_integer(42); if(json_dumps(json, 0) != NULL) fail("json_dumps encoded an integer!"); - if(json_dumpf(json, fp, 0) == 0) + if(json_dumpf(json, NULL, 0) == 0) fail("json_dumpf encoded an integer!"); + if(json_dumpfd(json, -1, 0) == 0) + fail("json_dumpfd encoded an integer!"); result = json_dumps(json, JSON_ENCODE_ANY); if(!result || strcmp(result, "42") != 0) @@ -237,6 +250,34 @@ static void dumpb() json_decref(obj); } +static void dumpfd() +{ +#ifdef HAVE_UNISTD_H + int fds[2] = {-1, -1}; + json_t *a, *b; + + if(pipe(fds)) + fail("pipe() failed"); + + a = json_pack("{s:s}", "foo", "bar"); + + if(json_dumpfd(a, fds[1], 0)) + fail("json_dumpfd() failed"); + close(fds[1]); + + b = json_loadfd(fds[0], 0, NULL); + if (!b) + fail("json_loadfd() failed"); + close(fds[0]); + + if (!json_equal(a, b)) + fail("json_equal() failed for fd test"); + + json_decref(a); + json_decref(b); +#endif +} + static void run_tests() { encode_null(); @@ -247,4 +288,5 @@ static void run_tests() encode_nul_byte(); dump_file(); dumpb(); + dumpfd(); } |