[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[PATCH v2 5/9] tests: Add simple test for virDomainMigrateCheckNotLocal



For this we need to make the function accessible (at least privately).  The
behaviour will change in following patches and the test helps explaining the
change.

Signed-off-by: Martin Kletzander <mkletzan redhat com>
---
 scripts/apibuild.py      |  1 +
 src/libvirt-domain.c     |  3 +-
 src/libvirt_internal.h   |  2 +
 src/libvirt_private.syms |  1 +
 tests/meson.build        |  1 +
 tests/virmigtest.c       | 91 ++++++++++++++++++++++++++++++++++++++++
 6 files changed, 97 insertions(+), 2 deletions(-)
 create mode 100644 tests/virmigtest.c

diff --git a/scripts/apibuild.py b/scripts/apibuild.py
index 58ae76d29cfc..b94c0f6c09dd 100755
--- a/scripts/apibuild.py
+++ b/scripts/apibuild.py
@@ -81,6 +81,7 @@ ignored_words = {
 
 ignored_functions = {
     "virConnectSupportsFeature": "private function for remote access",
+    "virDomainMigrateCheckNotLocal": "private function for migration",
     "virDomainMigrateFinish": "private function for migration",
     "virDomainMigrateFinish2": "private function for migration",
     "virDomainMigratePerform": "private function for migration",
diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c
index ad60a92da879..da5a21e4c4d4 100644
--- a/src/libvirt-domain.c
+++ b/src/libvirt-domain.c
@@ -3269,8 +3269,7 @@ virDomainMigrateVersion3Params(virDomainPtr domain,
                                         params, nparams, true, flags);
 }
 
-
-static int
+int
 virDomainMigrateCheckNotLocal(const char *dconnuri)
 {
     g_autoptr(virURI) tempuri = NULL;
diff --git a/src/libvirt_internal.h b/src/libvirt_internal.h
index 72c61274a74e..cb239b3c1c44 100644
--- a/src/libvirt_internal.h
+++ b/src/libvirt_internal.h
@@ -129,6 +129,8 @@ typedef enum {
 
 int virConnectSupportsFeature(virConnectPtr conn, int feature);
 
+int virDomainMigrateCheckNotLocal(const char *dconnuri);
+
 int virDomainMigratePrepare (virConnectPtr dconn,
                              char **cookie,
                              int *cookielen,
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index f950a681792c..2f6d67cebe07 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -1481,6 +1481,7 @@ virHostdevUpdateActiveUSBDevices;
 virConnectSupportsFeature;
 virDomainMigrateBegin3;
 virDomainMigrateBegin3Params;
+virDomainMigrateCheckNotLocal;
 virDomainMigrateConfirm3;
 virDomainMigrateConfirm3Params;
 virDomainMigrateFinish;
diff --git a/tests/meson.build b/tests/meson.build
index b5f6e2267aaf..49bcf5eb8a8d 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -331,6 +331,7 @@ tests += [
   { 'name': 'virtypedparamtest' },
   { 'name': 'viruritest' },
   { 'name': 'vshtabletest', 'link_with': [ libvirt_shell_lib ] },
+  { 'name': 'virmigtest' },
 ]
 
 if host_machine.system() == 'linux'
diff --git a/tests/virmigtest.c b/tests/virmigtest.c
new file mode 100644
index 000000000000..df8d51bab94b
--- /dev/null
+++ b/tests/virmigtest.c
@@ -0,0 +1,91 @@
+/*
+ * Copyright (C) 2020 Red Hat, Inc.
+ *
+ * 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 "libvirt_internal.h"
+
+#include "testutils.h"
+#include "virlog.h"
+#include "viruri.h"
+
+#define VIR_FROM_THIS VIR_FROM_RPC
+
+VIR_LOG_INIT("tests.migtest");
+
+struct migLocalData {
+    const char *uri;
+    bool fail;
+};
+
+
+static int
+testMigNotLocal(const void *args)
+{
+    int ret = -1;
+    const struct migLocalData *data = args;
+
+    ret = virDomainMigrateCheckNotLocal(data->uri);
+
+    if (ret == -1) {
+        if (data->fail) {
+            virResetLastError();
+            return 0;
+        }
+        return -1;
+    }
+
+    if (data->fail) {
+        VIR_TEST_DEBUG("passed instead of expected failure");
+        return -1;
+    }
+
+    return ret;
+}
+
+
+static int
+mymain(void)
+{
+    int ret = 0;
+
+#define TEST_FULL(uri, fail) \
+    do  { \
+        const struct migLocalData data = { \
+            uri, fail \
+        }; \
+        if (virTestRun("Test URI " # uri, testMigNotLocal, &data) < 0) \
+            ret = -1; \
+    } while (0)
+
+#define TEST(uri) TEST_FULL(uri, false)
+#define TEST_FAIL(uri) TEST_FULL(uri, true)
+
+    TEST_FAIL("qemu:///system");
+
+    TEST_FAIL("//localhost");
+    TEST_FAIL("tcp://localhost.localdomain/");
+
+    TEST("scheme://some.cryptorandom.fqdn.tld");
+
+    TEST_FAIL("hehe+unix:///?socket=/path/to/some-sock");
+
+    return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
+}
+
+VIR_TEST_MAIN(mymain)
-- 
2.28.0


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]