From 5bcd96f5317bfdb66fc66ecf1103cd40b5666a2b Mon Sep 17 00:00:00 2001 From: Michal Privoznik Date: Thu, 3 Mar 2016 15:29:51 +0100 Subject: [PATCH] tests: Introduce nsslinktest 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 --- 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 19bb40c9cb..d80b31730a 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 \ @@ -1082,6 +1082,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 0000000000..0232e362a3 --- /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 + * . + * + * Author: Michal Privoznik + */ + +#include + +#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; +}