Signed-off-by: Frediano Ziglio <fziglio@xxxxxxxxxx> --- .gitignore | 1 + configure.ac | 2 +- src/tests/Makefile.am | 5 +++ src/tests/options_test.c | 93 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 100 insertions(+), 1 deletion(-) create mode 100644 src/tests/options_test.c diff --git a/.gitignore b/.gitignore index 74e2a87..aee6c93 100644 --- a/.gitignore +++ b/.gitignore @@ -24,6 +24,7 @@ src/tests/run *.log *.trs x11spice_test +options_test *.gcno *.gcda diff --git a/configure.ac b/configure.ac index fa23483..1786416 100644 --- a/configure.ac +++ b/configure.ac @@ -1,5 +1,5 @@ AC_INIT([x11spice], 1.1) -AM_INIT_AUTOMAKE +AM_INIT_AUTOMAKE([subdir-objects]) PKG_CHECK_MODULES(XCB, xcb) PKG_CHECK_MODULES(DAMAGE, xcb-damage) diff --git a/src/tests/Makefile.am b/src/tests/Makefile.am index 38b735d..2b711bb 100644 --- a/src/tests/Makefile.am +++ b/src/tests/Makefile.am @@ -16,6 +16,11 @@ x11spice_test_SOURCES = \ util.h \ main.c +TESTS += options_test +options_test_CPPFLAGS = -I$(top_srcdir)/src +options_test_LDADD = $(GLIB2_LIBS) +options_test_SOURCES = options_test.c ../options.c + noinst_PROGRAMS = $(TESTS) .PHONY: leakcheck.log callgrind.out.x diff --git a/src/tests/options_test.c b/src/tests/options_test.c new file mode 100644 index 0000000..2dc5b7f --- /dev/null +++ b/src/tests/options_test.c @@ -0,0 +1,93 @@ +#undef NDEBUG +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <assert.h> +#include <glib.h> + +#include "options.h" + +static void test(const char *cmd_line, const char *expected) +{ + options_t options; + int argc = 0; + int rc; + + char **argv = g_strsplit_set(cmd_line, " ", 0); + while (argv[argc]) { + ++argc; + } + + options_init(&options); + rc = options_load(&options, argc, argv); + g_strfreev(argv); + if (rc != 0) { + fprintf(stderr, "Unable to load options, rc %d\n", rc); + options_free(&options); + exit(1); + } + + // parse expected fields + for (;;) { + char name[102], value[102], buf[102]; + int pos = -1; + // 2 next token are couple <NAME> <VALUE> + if (sscanf(expected, " %100s %100s %n", name, value, &pos) < 2) + break; + assert(pos > 0); + +#define VAL(fmt, fld) \ + if (strcmp(name, #fld) == 0) \ + snprintf(buf, sizeof(buf), fmt, options.fld); \ + else + + // extract expected value + VAL("%s", display) + VAL("%d", allow_control) + VAL("%s", listen) + VAL("%s", ssl.ca_cert_file) + { + fprintf(stderr, "name '%s' not recognized\n", name); + exit(1); + } + + // compare expected and parsed + if (strcmp(buf, value) != 0) { + fprintf(stderr, "Unexpected results:\n\tcmd:'%s'\n\tfld:%s\n\tout:%s\n\texp:%s\n", + cmd_line, name, buf, value); + exit(1); + } + expected += pos; + } + options_free(&options); +} + +#define TEST(cmd, exp) test("PROGRAM " cmd, exp) + +int main(int argc, char **argv) +{ + FILE *f = fopen("test.conf", "w"); + + fprintf(f, "[spice]\ndisplay=config_display\nlisten=8765\nallow-control=true"); + fclose(f); + + // some test, input and output + test("PROGRAM", "display (null) allow_control 0 listen 5900 ssl.ca_cert_file (null)"); + TEST("--hide", "display (null) allow_control 0 listen 5900 ssl.ca_cert_file (null)"); + TEST("1234", + "display (null) allow_control 0 listen 1234"); + TEST("--config=test.conf", + "display config_display allow_control 1 listen 8765"); + TEST("--config=test.conf 123", + "display config_display allow_control 1 listen 123"); + TEST("--no-allow-control --config=test.conf 123", + "display config_display allow_control 0 listen 123"); + TEST("--display DISPLAY --config=test.conf 123", + "display DISPLAY allow_control 1 listen 123 ssl.ca_cert_file (null)"); + TEST("--ssl=foo", + "display (null) allow_control 0 listen 5900 ssl.ca_cert_file foo"); + + unlink("test.conf"); + return 0; +} -- 2.20.1 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel