diff --git a/tests/Makefile.am b/tests/Makefile.am index b3a0e4b2c8f8af50b691f46aeb31e57707b0f98c..cefe8b3cf9d23d68edbfb438e569bfefb52b0041 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -189,7 +189,7 @@ if WITH_REMOTE test_programs += \ virnetmessagetest \ virnetsockettest \ - virnetservertest \ + virnetdaemontest \ virnetserverclienttest \ $(NULL) if WITH_GNUTLS @@ -923,11 +923,11 @@ virnetsockettest_SOURCES = \ virnetsockettest.c testutils.h testutils.c virnetsockettest_LDADD = $(LDADDS) -virnetservertest_SOURCES = \ - virnetservertest.c \ +virnetdaemontest_SOURCES = \ + virnetdaemontest.c \ testutils.h testutils.c -virnetservertest_CFLAGS = $(XDR_CFLAGS) $(AM_CFLAGS) -virnetservertest_LDADD = $(LDADDS) +virnetdaemontest_CFLAGS = $(XDR_CFLAGS) $(AM_CFLAGS) +virnetdaemontest_LDADD = $(LDADDS) virnetserverclienttest_SOURCES = \ virnetserverclienttest.c \ diff --git a/tests/virnetserverdata/README b/tests/virnetdaemondata/README similarity index 100% rename from tests/virnetserverdata/README rename to tests/virnetdaemondata/README diff --git a/tests/virnetdaemondata/input-data-admin-nomdns.json b/tests/virnetdaemondata/input-data-admin-nomdns.json new file mode 100644 index 0000000000000000000000000000000000000000..59bc4714a60b55520bac6fd494b7d05c002b1b54 --- /dev/null +++ b/tests/virnetdaemondata/input-data-admin-nomdns.json @@ -0,0 +1,126 @@ +{ + "servers": [ + { + "min_workers": 10, + "max_workers": 50, + "priority_workers": 5, + "max_clients": 100, + "keepaliveInterval": 120, + "keepaliveCount": 5, + "keepaliveRequired": true, + "services": [ + { + "auth": 0, + "readonly": true, + "nrequests_client_max": 2, + "socks": [ + { + "fd": 100, + "errfd": -1, + "pid": 0, + "isClient": false + } + ] + }, + { + "auth": 2, + "readonly": false, + "nrequests_client_max": 5, + "socks": [ + { + "fd": 101, + "errfd": -1, + "pid": 0, + "isClient": false + } + ] + } + ], + "clients": [ + { + "auth": 1, + "readonly": true, + "nrequests_max": 15, + "sock": { + "fd": 102, + "errfd": -1, + "pid": -1, + "isClient": true + } + }, + { + "auth": 2, + "readonly": true, + "nrequests_max": 66, + "sock": { + "fd": 103, + "errfd": -1, + "pid": -1, + "isClient": true + } + } + ] + }, + { + "min_workers": 2, + "max_workers": 50, + "priority_workers": 5, + "max_clients": 100, + "keepaliveInterval": 120, + "keepaliveCount": 5, + "keepaliveRequired": true, + "services": [ + { + "auth": 0, + "readonly": true, + "nrequests_client_max": 2, + "socks": [ + { + "fd": 100, + "errfd": -1, + "pid": 0, + "isClient": false + } + ] + }, + { + "auth": 2, + "readonly": false, + "nrequests_client_max": 5, + "socks": [ + { + "fd": 101, + "errfd": -1, + "pid": 0, + "isClient": false + } + ] + } + ], + "clients": [ + { + "auth": 1, + "readonly": true, + "nrequests_max": 15, + "sock": { + "fd": 102, + "errfd": -1, + "pid": -1, + "isClient": true + } + }, + { + "auth": 2, + "readonly": true, + "nrequests_max": 66, + "sock": { + "fd": 103, + "errfd": -1, + "pid": -1, + "isClient": true + } + } + ] + } + ] +} diff --git a/tests/virnetserverdata/input-data-anon-clients.json b/tests/virnetdaemondata/input-data-anon-clients.json similarity index 100% rename from tests/virnetserverdata/input-data-anon-clients.json rename to tests/virnetdaemondata/input-data-anon-clients.json diff --git a/tests/virnetserverdata/output-data-anon-clients.json b/tests/virnetdaemondata/input-data-initial-nomdns.json similarity index 97% rename from tests/virnetserverdata/output-data-anon-clients.json rename to tests/virnetdaemondata/input-data-initial-nomdns.json index 8a51ff53d6cfa7796439d5024f54290e4fc1c1bc..02bb42748774560f6ace3929137587b5d949a2dd 100644 --- a/tests/virnetserverdata/output-data-anon-clients.json +++ b/tests/virnetdaemondata/input-data-initial-nomdns.json @@ -3,7 +3,6 @@ "max_workers": 50, "priority_workers": 5, "max_clients": 100, - "max_anonymous_clients": 10, "keepaliveInterval": 120, "keepaliveCount": 5, "keepaliveRequired": true, diff --git a/tests/virnetserverdata/input-data-initial.json b/tests/virnetdaemondata/input-data-initial.json similarity index 100% rename from tests/virnetserverdata/input-data-initial.json rename to tests/virnetdaemondata/input-data-initial.json diff --git a/tests/virnetdaemondata/output-data-admin-nomdns.json b/tests/virnetdaemondata/output-data-admin-nomdns.json new file mode 100644 index 0000000000000000000000000000000000000000..5df71a0d88c8a1162cc9f3d5f8485d7c174c9718 --- /dev/null +++ b/tests/virnetdaemondata/output-data-admin-nomdns.json @@ -0,0 +1,128 @@ +{ + "servers": [ + { + "min_workers": 10, + "max_workers": 50, + "priority_workers": 5, + "max_clients": 100, + "max_anonymous_clients": 100, + "keepaliveInterval": 120, + "keepaliveCount": 5, + "keepaliveRequired": true, + "services": [ + { + "auth": 0, + "readonly": true, + "nrequests_client_max": 2, + "socks": [ + { + "fd": 100, + "errfd": -1, + "pid": 0, + "isClient": false + } + ] + }, + { + "auth": 2, + "readonly": false, + "nrequests_client_max": 5, + "socks": [ + { + "fd": 101, + "errfd": -1, + "pid": 0, + "isClient": false + } + ] + } + ], + "clients": [ + { + "auth": 1, + "readonly": true, + "nrequests_max": 15, + "sock": { + "fd": 102, + "errfd": -1, + "pid": -1, + "isClient": true + } + }, + { + "auth": 2, + "readonly": true, + "nrequests_max": 66, + "sock": { + "fd": 103, + "errfd": -1, + "pid": -1, + "isClient": true + } + } + ] + }, + { + "min_workers": 2, + "max_workers": 50, + "priority_workers": 5, + "max_clients": 100, + "max_anonymous_clients": 100, + "keepaliveInterval": 120, + "keepaliveCount": 5, + "keepaliveRequired": true, + "services": [ + { + "auth": 0, + "readonly": true, + "nrequests_client_max": 2, + "socks": [ + { + "fd": 100, + "errfd": -1, + "pid": 0, + "isClient": false + } + ] + }, + { + "auth": 2, + "readonly": false, + "nrequests_client_max": 5, + "socks": [ + { + "fd": 101, + "errfd": -1, + "pid": 0, + "isClient": false + } + ] + } + ], + "clients": [ + { + "auth": 1, + "readonly": true, + "nrequests_max": 15, + "sock": { + "fd": 102, + "errfd": -1, + "pid": -1, + "isClient": true + } + }, + { + "auth": 2, + "readonly": true, + "nrequests_max": 66, + "sock": { + "fd": 103, + "errfd": -1, + "pid": -1, + "isClient": true + } + } + ] + } + ] +} diff --git a/tests/virnetdaemondata/output-data-anon-clients.json b/tests/virnetdaemondata/output-data-anon-clients.json new file mode 100644 index 0000000000000000000000000000000000000000..4e4332691aa7227fceb7233dec145f02650e05a0 --- /dev/null +++ b/tests/virnetdaemondata/output-data-anon-clients.json @@ -0,0 +1,66 @@ +{ + "servers": [ + { + "min_workers": 10, + "max_workers": 50, + "priority_workers": 5, + "max_clients": 100, + "max_anonymous_clients": 10, + "keepaliveInterval": 120, + "keepaliveCount": 5, + "keepaliveRequired": true, + "services": [ + { + "auth": 0, + "readonly": true, + "nrequests_client_max": 2, + "socks": [ + { + "fd": 100, + "errfd": -1, + "pid": 0, + "isClient": false + } + ] + }, + { + "auth": 2, + "readonly": false, + "nrequests_client_max": 5, + "socks": [ + { + "fd": 101, + "errfd": -1, + "pid": 0, + "isClient": false + } + ] + } + ], + "clients": [ + { + "auth": 1, + "readonly": true, + "nrequests_max": 15, + "sock": { + "fd": 102, + "errfd": -1, + "pid": -1, + "isClient": true + } + }, + { + "auth": 2, + "readonly": true, + "nrequests_max": 66, + "sock": { + "fd": 103, + "errfd": -1, + "pid": -1, + "isClient": true + } + } + ] + } + ] +} diff --git a/tests/virnetdaemondata/output-data-initial-nomdns.json b/tests/virnetdaemondata/output-data-initial-nomdns.json new file mode 100644 index 0000000000000000000000000000000000000000..bef54bf94ad559b3d2dd035f5971746cf9e63103 --- /dev/null +++ b/tests/virnetdaemondata/output-data-initial-nomdns.json @@ -0,0 +1,66 @@ +{ + "servers": [ + { + "min_workers": 10, + "max_workers": 50, + "priority_workers": 5, + "max_clients": 100, + "max_anonymous_clients": 100, + "keepaliveInterval": 120, + "keepaliveCount": 5, + "keepaliveRequired": true, + "services": [ + { + "auth": 0, + "readonly": true, + "nrequests_client_max": 2, + "socks": [ + { + "fd": 100, + "errfd": -1, + "pid": 0, + "isClient": false + } + ] + }, + { + "auth": 2, + "readonly": false, + "nrequests_client_max": 5, + "socks": [ + { + "fd": 101, + "errfd": -1, + "pid": 0, + "isClient": false + } + ] + } + ], + "clients": [ + { + "auth": 1, + "readonly": true, + "nrequests_max": 15, + "sock": { + "fd": 102, + "errfd": -1, + "pid": -1, + "isClient": true + } + }, + { + "auth": 2, + "readonly": true, + "nrequests_max": 66, + "sock": { + "fd": 103, + "errfd": -1, + "pid": -1, + "isClient": true + } + } + ] + } + ] +} diff --git a/tests/virnetdaemondata/output-data-initial.json b/tests/virnetdaemondata/output-data-initial.json new file mode 100644 index 0000000000000000000000000000000000000000..9afa791d91fca427cf298f240e9b38e13e37b4fc --- /dev/null +++ b/tests/virnetdaemondata/output-data-initial.json @@ -0,0 +1,67 @@ +{ + "servers": [ + { + "min_workers": 10, + "max_workers": 50, + "priority_workers": 5, + "max_clients": 100, + "max_anonymous_clients": 100, + "keepaliveInterval": 120, + "keepaliveCount": 5, + "keepaliveRequired": true, + "mdnsGroupName": "libvirtTest", + "services": [ + { + "auth": 0, + "readonly": true, + "nrequests_client_max": 2, + "socks": [ + { + "fd": 100, + "errfd": -1, + "pid": 0, + "isClient": false + } + ] + }, + { + "auth": 2, + "readonly": false, + "nrequests_client_max": 5, + "socks": [ + { + "fd": 101, + "errfd": -1, + "pid": 0, + "isClient": false + } + ] + } + ], + "clients": [ + { + "auth": 1, + "readonly": true, + "nrequests_max": 15, + "sock": { + "fd": 102, + "errfd": -1, + "pid": -1, + "isClient": true + } + }, + { + "auth": 2, + "readonly": true, + "nrequests_max": 66, + "sock": { + "fd": 103, + "errfd": -1, + "pid": -1, + "isClient": true + } + } + ] + } + ] +} diff --git a/tests/virnetservertest.c b/tests/virnetdaemontest.c similarity index 84% rename from tests/virnetservertest.c rename to tests/virnetdaemontest.c index d546f87764c1aeee24fda09107a311f017ca68d4..ef45018f5873c1f93956a48957b5e9c13bf9a573 100644 --- a/tests/virnetservertest.c +++ b/tests/virnetdaemontest.c @@ -22,7 +22,7 @@ #include "testutils.h" #include "virerror.h" -#include "rpc/virnetserver.h" +#include "rpc/virnetdaemon.h" #define VIR_FROM_THIS VIR_FROM_RPC @@ -135,6 +135,7 @@ testCreateServer(const char *host, int family) static char *testGenerateJSON(void) { + virNetDaemonPtr dmn = NULL; virNetServerPtr srv = NULL; virJSONValuePtr json = NULL; char *jsonstr = NULL; @@ -157,27 +158,41 @@ static char *testGenerateJSON(void) has_ipv4 ? AF_INET : AF_INET6))) goto cleanup; - if (!(json = virNetServerPreExecRestart(srv))) + if (!(dmn = virNetDaemonNew())) + goto cleanup; + + if (virNetDaemonAddServer(dmn, srv) < 0) + goto cleanup; + + if (!(json = virNetDaemonPreExecRestart(dmn))) goto cleanup; if (!(jsonstr = virJSONValueToString(json, true))) goto cleanup; + fprintf(stderr, "%s\n", jsonstr); cleanup: virNetServerClose(srv); virObjectUnref(srv); + virObjectUnref(dmn); virJSONValueFree(json); + if (!jsonstr) + virDispatchError(NULL); return jsonstr; } struct testExecRestartData { const char *jsonfile; + int nservers; + bool pass; }; static int testExecRestart(const void *opaque) { + size_t i; int ret = -1; + virNetDaemonPtr dmn = NULL; virNetServerPtr srv = NULL; const struct testExecRestartData *data = opaque; char *infile = NULL, *outfile = NULL; @@ -206,11 +221,11 @@ static int testExecRestart(const void *opaque) dup2(fdclient[0], 102); dup2(fdclient[1], 103); - if (virAsprintf(&infile, "%s/virnetserverdata/input-data-%s.json", + if (virAsprintf(&infile, "%s/virnetdaemondata/input-data-%s.json", abs_srcdir, data->jsonfile) < 0) goto cleanup; - if (virAsprintf(&outfile, "%s/virnetserverdata/output-data-%s.json", + if (virAsprintf(&outfile, "%s/virnetdaemondata/output-data-%s.json", abs_srcdir, data->jsonfile) < 0) goto cleanup; @@ -220,33 +235,46 @@ static int testExecRestart(const void *opaque) if (!(injson = virJSONValueFromString(injsonstr))) goto cleanup; - if (!(srv = virNetServerNewPostExecRestart(injson, - NULL, NULL, NULL, - NULL, NULL))) + if (!(dmn = virNetDaemonNewPostExecRestart(injson))) goto cleanup; - if (!(outjson = virNetServerPreExecRestart(srv))) + for (i = 0; i < data->nservers; i++) { + if (!(srv = virNetDaemonAddServerPostExec(dmn, + NULL, NULL, NULL, + NULL, NULL))) + goto cleanup; + srv = NULL; + } + + if (!(outjson = virNetDaemonPreExecRestart(dmn))) goto cleanup; if (!(outjsonstr = virJSONValueToString(outjson, true))) goto cleanup; if (virtTestCompareToFile(outjsonstr, outfile) < 0) - goto fail; + goto cleanup; - ret = 0; + if (!data->pass) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", "Test should've failed"); + goto cleanup; + } + ret = 0; cleanup: - if (ret < 0) - virDispatchError(NULL); - fail: + if (ret < 0) { + if (!data->pass) + ret = 0; + else + virDispatchError(NULL); + } VIR_FREE(infile); VIR_FREE(outfile); VIR_FREE(injsonstr); VIR_FREE(outjsonstr); virJSONValueFree(injson); virJSONValueFree(outjson); - virObjectUnref(srv); + virObjectUnref(dmn); VIR_FORCE_CLOSE(fdserver[0]); VIR_FORCE_CLOSE(fdserver[1]); VIR_FORCE_CLOSE(fdclient[0]); @@ -273,27 +301,35 @@ mymain(void) */ if (getenv("VIR_GENERATE_JSON")) { char *json = testGenerateJSON(); + if (!json) + return EXIT_FAILURE; + fprintf(stdout, "%s\n", json); VIR_FREE(json); - return EXIT_SUCCESS; + return ret; } -# define EXEC_RESTART_TEST(file) \ +# define EXEC_RESTART_TEST_FULL(file, servers, pass) \ do { \ struct testExecRestartData data = { \ - file \ + file, servers, pass \ }; \ if (virtTestRun("ExecRestart " file, \ testExecRestart, &data) < 0) \ ret = -1; \ } while (0) +# define EXEC_RESTART_TEST(file) EXEC_RESTART_TEST_FULL(file, 1, true) + # ifdef WITH_AVAHI EXEC_RESTART_TEST("initial"); # endif EXEC_RESTART_TEST("initial-nomdns"); EXEC_RESTART_TEST("anon-clients"); + EXEC_RESTART_TEST_FULL("anon-clients", 2, false); + EXEC_RESTART_TEST_FULL("admin-nomdns", 2, true); + return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE; } #else diff --git a/tests/virnetserverdata/output-data-initial.json b/tests/virnetserverdata/output-data-initial.json deleted file mode 100644 index da02aac0aa9f47eda3889eebc7abe64ef5a4a618..0000000000000000000000000000000000000000 --- a/tests/virnetserverdata/output-data-initial.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "min_workers": 10, - "max_workers": 50, - "priority_workers": 5, - "max_clients": 100, - "max_anonymous_clients": 100, - "keepaliveInterval": 120, - "keepaliveCount": 5, - "keepaliveRequired": true, - "mdnsGroupName": "libvirtTest", - "services": [ - { - "auth": 0, - "readonly": true, - "nrequests_client_max": 2, - "socks": [ - { - "fd": 100, - "errfd": -1, - "pid": 0, - "isClient": false - } - ] - }, - { - "auth": 2, - "readonly": false, - "nrequests_client_max": 5, - "socks": [ - { - "fd": 101, - "errfd": -1, - "pid": 0, - "isClient": false - } - ] - } - ], - "clients": [ - { - "auth": 1, - "readonly": true, - "nrequests_max": 15, - "sock": { - "fd": 102, - "errfd": -1, - "pid": -1, - "isClient": true - } - }, - { - "auth": 2, - "readonly": true, - "nrequests_max": 66, - "sock": { - "fd": 103, - "errfd": -1, - "pid": -1, - "isClient": true - } - } - ] -}