summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorÁlvaro Neira Ayuso <alvaroneay@gmail.com>2013-07-25 22:52:24 +0200
committerPablo Neira Ayuso <pablo@netfilter.org>2013-07-25 23:03:20 +0200
commitc4ce40d95dc27d10b6bb6f4a23d26cfd359387ad (patch)
tree60f97201527097604af3bb4a0269c2709a43fd09
parentc8b97360470c25007d3675474c636ca1ce95599a (diff)
tests: table: test json parsing support
Test the functions for parsing tables in JSON Support Signed-off-by: Alvaro Neira Ayuso <alvaroneay@gmail.com> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
-rw-r--r--tests/Makefile.am2
-rw-r--r--tests/jsonfiles/01-table.json1
-rw-r--r--tests/jsonfiles/02-table.json1
-rw-r--r--tests/nft-parsing-test.c49
4 files changed, 52 insertions, 1 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 6941c3c..cfa4e8e 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -3,4 +3,4 @@ include $(top_srcdir)/Make_global.am
check_PROGRAMS = nft-parsing-test
nft_parsing_test_SOURCES = nft-parsing-test.c
-nft_parsing_test_LDADD = ../src/libnftables.la ${LIBMNL_LIBS} ${LIBXML_LIBS}
+nft_parsing_test_LDADD = ../src/libnftables.la ${LIBMNL_LIBS} ${LIBXML_LIBS} ${LIBJSON_LIBS}
diff --git a/tests/jsonfiles/01-table.json b/tests/jsonfiles/01-table.json
new file mode 100644
index 0000000..ec496b9
--- /dev/null
+++ b/tests/jsonfiles/01-table.json
@@ -0,0 +1 @@
+{"table" : {"name" : "filter","version" : 0,"properties" : {"family" : "ip","table_flags" : 0}}}
diff --git a/tests/jsonfiles/02-table.json b/tests/jsonfiles/02-table.json
new file mode 100644
index 0000000..03f4d5a
--- /dev/null
+++ b/tests/jsonfiles/02-table.json
@@ -0,0 +1 @@
+{"table" : {"name" : "filter2","version" : 0,"properties" : {"family" : "ip6","table_flags" : 0}}}
diff --git a/tests/nft-parsing-test.c b/tests/nft-parsing-test.c
index 4fe60c3..83a627c 100644
--- a/tests/nft-parsing-test.c
+++ b/tests/nft-parsing-test.c
@@ -14,6 +14,47 @@
#include <mxml.h>
#endif
+#ifdef JSON_PARSING
+#include <jansson.h>
+#endif
+
+static int test_json(const char *filename)
+{
+#ifdef JSON_PARSING
+ int ret = -1;
+ struct nft_table *t = NULL;
+ json_t *root;
+ json_error_t error;
+ char *json = NULL;
+
+ root = json_load_file(filename, 0, &error);
+ if (!root) {
+ printf("Error on the line %d : %s", error.line, error.text);
+ return -1;
+ }
+
+ if (root == NULL)
+ return -1;
+
+ json = json_dumps(root, JSON_INDENT(0));
+
+ if (json_object_get(root, "table") != NULL) {
+ t = nft_table_alloc();
+ if (t != NULL) {
+ if (nft_table_parse(t, NFT_TABLE_PARSE_JSON, json) == 0)
+ ret = 0;
+
+ nft_table_free(t);
+ }
+ }
+
+ return ret;
+#else
+ errno = EOPNOTSUPP;
+ return -1;
+#endif
+}
+
static int test_xml(const char *filename)
{
#ifdef XML_PARSING
@@ -104,6 +145,14 @@ int main(int argc, char *argv[])
else
printf("\033[32mOK\e[0m\n");
}
+ if (strcmp(&dent->d_name[len-5], ".json") == 0) {
+ printf("parsing %s: ", path);
+ if (test_json(path) < 0)
+ printf("\033[31mFAILED\e[0m (%s)\n",
+ strerror(errno));
+ else
+ printf("\033[32mOK\e[0m\n");
+ }
}
closedir(d);