mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-04 08:04:04 +00:00
tests: Add test for virErrorMsg message constraints
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@redhat.com> Reviewed-by: Erik Skultety <eskultet@redhat.com>
This commit is contained in:
parent
631f72fc7b
commit
d9baf0d75b
@ -208,6 +208,7 @@ test_programs = virshtest sockettest \
|
||||
virnetdevtest \
|
||||
virtypedparamtest \
|
||||
vshtabletest \
|
||||
virerrortest \
|
||||
$(NULL)
|
||||
|
||||
test_libraries = libshunload.la \
|
||||
@ -952,6 +953,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
|
||||
|
102
tests/virerrortest.c
Normal file
102
tests/virerrortest.c
Normal file
@ -0,0 +1,102 @@
|
||||
/*
|
||||
* 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 LIBVIRT_VIRERRORPRIV_H_ALLOW
|
||||
#include "virerrorpriv.h"
|
||||
#undef LIBVIRT_VIRERRORPRIV_H_ALLOW
|
||||
|
||||
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)
|
Loading…
x
Reference in New Issue
Block a user