]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
tests: add a test for driver.c:virConnectValidateURIPath()
authorDaniel Henrique Barboza <danielhb413@gmail.com>
Wed, 9 Oct 2019 19:11:44 +0000 (16:11 -0300)
committerCole Robinson <crobinso@redhat.com>
Fri, 11 Oct 2019 16:20:08 +0000 (12:20 -0400)
Reviewed-by: Cole Robinson <crobinso@redhat.com>
Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
tests/Makefile.am
tests/virdriverconnvalidatetest.c [new file with mode: 0644]

index 10e1a5d78deeec3aebb58eeef3e0b8acab169006..7158db07654be966869f5141776755cd27ffad0c 100644 (file)
@@ -429,7 +429,8 @@ test_scripts += $(libvirtd_test_scripts)
 
 test_programs += \
        eventtest \
-       virdrivermoduletest
+       virdrivermoduletest \
+       virdriverconnvalidatetest
 else ! WITH_LIBVIRTD
 EXTRA_DIST += $(libvirtd_test_scripts)
 endif ! WITH_LIBVIRTD
@@ -1481,6 +1482,10 @@ if WITH_LIBVIRTD
 virdrivermoduletest_SOURCES = \
        virdrivermoduletest.c testutils.h testutils.c
 virdrivermoduletest_LDADD = $(LDADDS)
+
+virdriverconnvalidatetest_SOURCES = \
+       virdriverconnvalidatetest.c testutils.h testutils.c
+virdriverconnvalidatetest_LDADD = $(LDADDS)
 endif WITH_LIBVIRTD
 
 if WITH_LIBVIRTD
diff --git a/tests/virdriverconnvalidatetest.c b/tests/virdriverconnvalidatetest.c
new file mode 100644 (file)
index 0000000..6f4cefb
--- /dev/null
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 2019 IBM Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library.  If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#include "testutils.h"
+#include "virerror.h"
+#include "viralloc.h"
+#include "virlog.h"
+#include "driver.h"
+
+#define VIR_FROM_THIS VIR_FROM_NONE
+
+VIR_LOG_INIT("tests.driverconnvalidatetest");
+
+struct testDriverConnValidateData {
+    const char *uriPath;
+    const char *entityName;
+    bool privileged;
+    bool expectFailure;
+};
+
+
+static int testDriverConnValidate(const void *args)
+{
+    const struct testDriverConnValidateData *data = args;
+
+    bool ret = virConnectValidateURIPath(data->uriPath,
+                                         data->entityName,
+                                         data->privileged);
+    if (data->expectFailure)
+        ret = !ret;
+
+    return ret ? 0 : -1;
+}
+
+
+static int
+mymain(void)
+{
+    int ret = 0;
+
+#define DO_TEST_INTERNAL(name, entity, uri, _privileged, expectFail) \
+    do { \
+        static struct testDriverConnValidateData data = { \
+            .entityName = entity, \
+            .uriPath = uri, \
+            .privileged = _privileged, \
+            .expectFailure = expectFail, \
+        }; \
+        if (virTestRun("Test conn URI path validate ok " name, \
+                       testDriverConnValidate, &data) < 0) \
+            ret = -1; \
+    } while (0)
+
+#define DO_TEST_SUCCESS(name, entity, uri, _privileged) \
+    DO_TEST_INTERNAL(name, entity, uri, _privileged, false)
+
+#define DO_TEST_FAIL(name, entity, uri, _privileged) \
+    DO_TEST_INTERNAL(name, entity, uri, _privileged, true)
+
+    DO_TEST_SUCCESS("non-privileged /session", "any", "/session", false);
+    DO_TEST_FAIL("non-privileged non-session fail", "any", "/system", false);
+
+    DO_TEST_SUCCESS("privileged /system", "any", "/system", true);
+    DO_TEST_FAIL("privileged non-system fail", "any", "any", true);
+
+    DO_TEST_SUCCESS("privileged qemu /session", "qemu", "/session", true);
+    DO_TEST_SUCCESS("privileged vbox /session", "vbox", "/session", true);
+    DO_TEST_FAIL("privileged other /session fail", "any", "/session", true);
+
+    return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
+}
+
+VIR_TEST_MAIN(mymain)