[libvirt] [PATCH v5 9/9] tests: Introduce nsslinktest

Michal Privoznik mprivozn at redhat.com
Tue Mar 15 17:05:56 UTC 2016


The only purpose of this test is to catch possible linking
problems with libnss_libvirt.so.2.
One of the problems I faced was that the NSS plugin was unloaded
immediately after it got loaded and the name resolution process
continued with next configured option. Without any error. It was
very hard to debug why until I created this simple test and found
out immediately that there were some symbols missing. The reason
why problem was not caught in nsstest is that in the test we want
to use all the fancy stuff and therefore link it with libvirt.la.
So even if there's a symbol missing in the NSS plugin it will be
found in the libvirt.la.
But even after I resolved the issue we still need this test
because files the NSS plugin is built from are still live (mostly
those under utils/ dir). So as they change new symbol might be
required which would render the NSS plugin unusable.

Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
---
 tests/Makefile.am   | 11 ++++++++++-
 tests/nsslinktest.c | 39 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 49 insertions(+), 1 deletion(-)
 create mode 100644 tests/nsslinktest.c

diff --git a/tests/Makefile.am b/tests/Makefile.am
index 2bb9d28..6d040b1 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -158,7 +158,7 @@ EXTRA_DIST =		\
 	xml2sexprdata \
 	xml2vmxdata
 
-test_helpers = commandhelper ssh test_conf
+test_helpers = commandhelper ssh test_conf nsslinktest
 test_programs = virshtest sockettest \
 	nodeinfotest virbuftest \
 	commandtest seclabeltest \
@@ -1085,6 +1085,15 @@ nssmock_la_CFLAGS = $(AM_CFLAGS)
 nssmock_la_LDFLAGS = $(MOCKLIBS_LDFLAGS)
 nssmock_la_LIBADD = $(MOCKLIBS_LIBS)
 
+## Intentionaly not linking with anything else.
+## See the test source for more detailed explanation.
+nsslinktest_SOURCES = nsslinktest.c
+nsslinktest_CFLAGS = 	\
+	$(AM_CFLAGS)		\
+	-I$(top_srcdir)/tools/nss
+nsslinktest_LDADD = ../tools/nss/libnss_libvirt_impl.la
+nsslinktest_LDFLAGS = $(NULL)
+
 virnetdevtest_SOURCES = \
 	virnetdevtest.c testutils.h testutils.c
 virnetdevtest_CFLAGS = $(AM_CFLAGS) $(LIBNL_CFLAGS)
diff --git a/tests/nsslinktest.c b/tests/nsslinktest.c
new file mode 100644
index 0000000..0232e36
--- /dev/null
+++ b/tests/nsslinktest.c
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2016 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/>.
+ *
+ * Author: Michal Privoznik <mprivozn at redhat.com>
+ */
+
+#include <config.h>
+
+#include "internal.h"
+#include "libvirt_nss.h"
+
+int main(int argc ATTRIBUTE_UNUSED,
+         char *argv[] ATTRIBUTE_UNUSED)
+{
+    int err, herrno; /* Dummy variables to prevent SIGSEGV */
+
+    /* The only aim of this test is to catch link errors as those
+     * are hard to trace for resulting .so library. Therefore,
+     * the fact this test has been built successfully means
+     * there's no linkage problem and therefore success is
+     * returned. */
+    _nss_libvirt_gethostbyname_r(NULL, NULL, NULL, 0, &err, &herrno);
+
+    return EXIT_SUCCESS;
+}
-- 
2.4.10




More information about the libvir-list mailing list