[libvirt] [PATCH 05/10] tests: Add test for virErrorMsg message constraints

Peter Krempa pkrempa at redhat.com
Wed Dec 5 16:47:46 UTC 2018


Make sure that we don't add any broken error message strings any more.

This ensures that both the version with and without additional info is
populated, the version without info does not have any formatting
modifiers and the version with info has exactly one.

Signed-off-by: Peter Krempa <pkrempa at redhat.com>
---
 tests/Makefile.am    |   6 +++
 tests/virerrortest.c | 101 +++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 107 insertions(+)
 create mode 100644 tests/virerrortest.c

diff --git a/tests/Makefile.am b/tests/Makefile.am
index d7ec7e3a6f..f2eef2293f 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -207,6 +207,7 @@ test_programs = virshtest sockettest \
 	virnetdevtest \
 	virtypedparamtest \
 	vshtabletest \
+	virerrortest \
 	$(NULL)

 test_libraries = libshunload.la \
@@ -940,6 +941,11 @@ metadatatest_SOURCES = \
 	testutils.c testutils.h
 metadatatest_LDADD = $(LDADDS) $(LIBXML_LIBS)

+virerrortest_SOURCES = \
+	virerrortest.c \
+	testutils.c testutils.h
+virerrortest_LDADD = $(LDADDS)
+
 vshtabletest_SOURCES = \
 	vshtabletest.c \
 	testutils.c testutils.h
diff --git a/tests/virerrortest.c b/tests/virerrortest.c
new file mode 100644
index 0000000000..0d0377bfa8
--- /dev/null
+++ b/tests/virerrortest.c
@@ -0,0 +1,101 @@
+/*
+ * 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"
+
+#define __VIR_ERROR_ALLOW_INCLUDE_PRIV_H__
+#include "virerrorpriv.h"
+
+static int
+virErrorTestMsgFormatInfoOne(const char *msg)
+{
+    bool found = false;
+    char *next;
+    int ret = 0;
+
+    for (next = (char *)msg; (next = strchr(next, '%')); next++) {
+        if (next[1] != 's') {
+            VIR_TEST_VERBOSE("\nerror message '%s' contains disallowed printf modifiers\n", msg);
+            ret = -1;
+        } else {
+            if (found) {
+                VIR_TEST_VERBOSE("\nerror message '%s' contains multiple %%s modifiers\n", msg);
+                ret = -1;
+            } else {
+                found = true;
+            }
+        }
+    }
+
+    if (!found) {
+        VIR_TEST_VERBOSE("\nerror message '%s' does not contain any %%s modifiers\n", msg);
+        ret = -1;
+    }
+
+    return ret;
+}
+
+
+static int
+virErrorTestMsgs(const void *opaque ATTRIBUTE_UNUSED)
+{
+    const char *err_noinfo;
+    const char *err_info;
+    size_t i;
+    int ret = 0;
+
+    for (i = 1; i < VIR_ERR_NUMBER_LAST; i++) {
+        err_noinfo = virErrorMsg(i, NULL);
+        err_info = virErrorMsg(i, "");
+
+        if (!err_noinfo) {
+            VIR_TEST_VERBOSE("\nmissing string without info for error id %zu\n", i);
+            ret = -1;
+        }
+
+        if (!err_info) {
+            VIR_TEST_VERBOSE("\nmissing string with info for error id %zu\n", i);
+            ret = -1;
+        }
+
+        if (strchr(err_noinfo, '%')) {
+            VIR_TEST_VERBOSE("\nerror message id %zu contains formatting characters: '%s'\n",
+                             i, err_noinfo);
+            ret = -1;
+        }
+
+        if (virErrorTestMsgFormatInfoOne(err_info) < 0)
+            ret = -1;
+    }
+
+    return ret;
+}
+
+
+static int
+mymain(void)
+{
+    int ret = 0;
+
+    if (virTestRun("error message strings ", virErrorTestMsgs, NULL) < 0)
+        ret = -1;
+
+    return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
+}
+
+VIR_TEST_MAIN(mymain)
-- 
2.19.2




More information about the libvir-list mailing list