[Libvir] using gnulib: starting with the physmem and getaddrinfo modules

Jim Meyering jim at meyering.net
Tue Dec 4 23:33:24 UTC 2007


Recently, I heard of two tricky portability problems in libvirt that
are easy to solve with gnulib.  Of course, gnulib provides a lot more,
and is not exactly lightweight if you count "lines of code imported", but
once the framework (this patch) is installed, adding an additional module
is as easy as adding the module name to a list.  Keep in mind that what
matters with a portability library is that it stay out of your way -- and
of course do its job well.  To that end, gnulib has many per-module unit
tests.  Since a large part of its job is portability, and insulating your
code from bugs (be they bugs in the very latest glibc printf functions, or
in the regexp library, or just protection against that crufty old SunOS4
free function that can't deal with NULL), it provides a mechanism to let
you conveniently include its self tests in your own package and run them
when users run "make check" for your project.  This is pretty important,
so that if someone builds your package on an unusual or poorly-configured
system, often the gnulib tests will fail right away, and that will save
you the trouble of digging through your own package's code.

For those of you who don't know, gnulib is the GNU Portability Library.

    http://www.gnu.org/software/gnulib/

and it is used in many widely-used packages:

    http://git.sv.gnu.org/gitweb/?p=gnulib.git;a=blob;f=users.txt;hb=HEAD

Of course, there's no guarantee that the code is bug-free,
but in practice, the few bugs being fixed these days involve
portability to relatively unusual systems.  With so many widely-used
packages using gnulib, you can imagine that if there are bugs, they
will be encountered, reported, and fixed pretty quickly.

One of the biggest advantages of using gnulib is that you can add
new modules and get all the benefits with *no* additional tweaking.
I.e., you don't have to write .m4 macros, modify configure.ac or
any Makefile.am.  It just works.  If something doesn't, or if the
documentation is unclear, you can report it to bug-gnulib at gnu.org
and usually get a fix or an explanation pretty quickly.
----------
Enough of the hype.

The first portability problem was to determine the total physical memory
available on the current system.  Currently the code works only on
Linux-like systems that have /proc/meminfo of an expected form.  However,
the gnulib physmem module handles 13 distinct types of systems and is
well tested:

    http://www.gnu.org/software/gnulib/MODULES.html#module=physmem

The second portability problem was to find a robust and LGPL-compatible
getaddrinfo function to be used on systems lacking it.  Here's the
gnulib module:

    http://www.gnu.org/software/gnulib/MODULES.html#module=getaddrinfo

Once the few gnulib hooks are in your configure.ac and Makefile.am
files, there is very little extra work required to use the new
functions.  In the case of physmem, just use the function and
include "physmem.h".  For getaddrinfo, merely include "getaddrinfo.h"
from the two files that use the function.

This change brings in a lot of code, but many of the lib/.[ch] files
are used only on systems that lack some required functionality.  For
example, the getaddrinfo.c file isn't even compiled when it's not
needed.

In the patch below, I've included a new script called bootstrap.
It is a wrapper around gnulib-tool that pulls into libvirt the
files selected by the (currently two) modules in use.  Those new
files go in three places:

  m4/*.m4
  lib/*.[ch] and a few template .h.in files
  gl-tests/ for unit test C programs and Bourne shell scripts

However, note that gettextize and libtoolize (run by autogen.sh)
also deposit many *.m4 files in m4.  I compared and found that 8
of the files that are already pulled in by the *ize programs are
also pulled in (potentially newer versions) from gnulib.  But currently,
using gettext-0.16.1 or gettext-0.17, there is no difference in any
of the overlapping files.

Re Licenses: the two modules (and all of their dependent modules)
are LGPL-compatible.  This is enforced by running gnulib-tool
with the --lgpl option.  If you were to request a module with
an incompatible license (say GPL or LGPLv3), it would fail.

----------------------
Here's the patch that shows what existing parts of libvirt have to
be modified to use these two new modules.  To try it out, just apply
the patch and then run this:

    ./autogen.sh && ./bootstrap && make && make check

Running bootstrap creates the new lib/ and gl-tests/ directories.

Personally, I prefer not to add generated files to version control
systems, because it can lead to problems with version skew if all
developers don't use the same releases of the tools that do the
generating.  Perhaps more importantly, when there are massive diffs in
the generated files, that can obscure real changes in non-generated parts
of the code.  That already happens to me whenever the .po files change.

But if people prefer to add all of these imported files to CVS, just
say the word and I'll prepare the patch.  If so, do you guys want the
gettextize- and libtoolize-added files to be version-controlled, now, too?


Use gnulib, starting with physmem and getaddrinfo modules.
* bootstrap: A wrapper around gnulib-tool.
* configure.in: Invoke gl_EARLY and gl_INIT, being careful to put gl_EARLY
before any macro that uses AC_COMPILE_IFELSE.
(AC_OUTPUT): Add lib/Makefile and gl-tests/Makefile.  Remove m4/Makefile.
* Makefile.am (SUBDIRS): Add lib and gl-tests.  Remove m4.
* m4/Makefile.am: Remove file.  Not needed.
* src/Makefile.am (INCLUDES): Add -I$(top_srcdir)/lib -I../lib.
(LDADDS, libvirt_la_LIBADD): Add ../lib/libgnu.la.
* src/nodeinfo.c: Include "physmem.h".
* qemud/qemud.c, src/remote_internal.c: Include "getaddrinfo.h".
(MEMINFO_PATH, linuxNodeInfoMemPopulate): Remove definitions.
(virNodeInfoPopulate): Use physmem_total, not linuxNodeInfoMemPopulate.
* tests/Makefile.am (INCLUDES): Add -I$(top_srcdir)/lib -I../lib.
(LDADDS): Add ../lib/libgnu.la.
* qemud/Makefile.am (libvirtd_LDADD): Add ../lib/libgnu.la.
* tests/nodeinfotest.c (linuxTestCompareFiles): No longer read total
memory from a file.
Update expected output not to include "Memory: NNNN"
* tests/nodeinfodata/linux-nodeinfo-1.txt:
* tests/nodeinfodata/linux-nodeinfo-2.txt:
* tests/nodeinfodata/linux-nodeinfo-3.txt:
* tests/nodeinfodata/linux-nodeinfo-4.txt:
* tests/nodeinfodata/linux-nodeinfo-5.txt:
* tests/nodeinfodata/linux-nodeinfo-6.txt:
* src/test.c [WITH_TEST]: Remove definition of _GNU_SOURCE that
would conflict with the one now in "config.h".

Signed-off-by: Jim Meyering <meyering at redhat.com>
---
 Makefile.am                             |    3 +-
 bootstrap                               |   90 +++++++++++++++++++++++++++++++
 configure.in                            |   11 +++-
 m4/Makefile.am                          |    3 -
 qemud/Makefile.am                       |    3 +-
 qemud/qemud.c                           |    1 +
 src/Makefile.am                         |    8 ++-
 src/nodeinfo.c                          |   55 +++----------------
 src/remote_internal.c                   |    1 +
 src/test.c                              |    2 -
 tests/Makefile.am                       |    2 +
 tests/nodeinfodata/linux-nodeinfo-1.txt |    2 +-
 tests/nodeinfodata/linux-nodeinfo-2.txt |    2 +-
 tests/nodeinfodata/linux-nodeinfo-3.txt |    2 +-
 tests/nodeinfodata/linux-nodeinfo-4.txt |    2 +-
 tests/nodeinfodata/linux-nodeinfo-5.txt |    2 +-
 tests/nodeinfodata/linux-nodeinfo-6.txt |    2 +-
 tests/nodeinfotest.c                    |   23 ++------
 18 files changed, 131 insertions(+), 83 deletions(-)
 create mode 100755 bootstrap
 delete mode 100644 m4/Makefile.am

diff --git a/Makefile.am b/Makefile.am
index eaa204e..fcf0eb6 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,6 +1,7 @@
 ## Process this file with automake to produce Makefile.in
 
-SUBDIRS = src qemud proxy include docs @PYTHON_SUBDIR@ tests po m4 scripts
+SUBDIRS = lib src qemud proxy include docs @PYTHON_SUBDIR@ \
+  gl-tests tests po scripts
 
 ACLOCAL_AMFLAGS = -I m4
 
diff --git a/bootstrap b/bootstrap
new file mode 100755
index 0000000..b49378d
--- /dev/null
+++ b/bootstrap
@@ -0,0 +1,90 @@
+#!/bin/sh
+# Run this after autogen.sh, to pull in all of the gnulib-related bits.
+# It's important to run *after* autogen.sh, since it updates some of
+# the same files autogen.sh does, yet those from gnulib are newer,
+# and match the tests.  So if a gnulib bug has been fixed since the
+# snapshot taken for whatever gettext release you're using, yet you
+# run "make check" against the wrong version, the corresponding unit
+# test in gl-tests/ may well fail.
+
+usage() {
+  echo >&2 "\
+Usage: $0 [OPTION]...
+Bootstrap this package from the checked-out sources.
+
+Options:
+ --gnulib-srcdir=DIRNAME  Specify the local directory where gnulib
+                          sources reside.  Use this if you already
+                          have gnulib sources on your machine, and
+                          do not want to waste your bandwidth downloading
+                          them again.
+
+If the file bootstrap.conf exists in the current working directory, its
+contents are read as shell variables to configure the bootstrap.
+
+Running without arguments will suffice in most cases.
+"
+}
+
+for option
+do
+  case $option in
+  --help)
+    usage
+    exit;;
+  --gnulib-srcdir=*)
+    GNULIB_SRCDIR=`expr "$option" : '--gnulib-srcdir=\(.*\)'`;;
+  *)
+    echo >&2 "$0: $option: unknown option"
+    exit 1;;
+  esac
+done
+
+case ${GNULIB_SRCDIR--} in
+-)
+  if [ ! -d gnulib ]; then
+    echo "$0: getting gnulib files..."
+
+    trap cleanup_gnulib 1 2 13 15
+
+    git clone --depth 1 git://git.sv.gnu.org/gnulib ||
+      cleanup_gnulib
+
+    trap - 1 2 13 15
+  fi
+  GNULIB_SRCDIR=gnulib
+esac
+
+gnulib_tool=$GNULIB_SRCDIR/gnulib-tool
+<$gnulib_tool || exit
+
+# Tell gnulib to:
+#   put tests in new gl-tests/ dir
+#   put m4/*.m4 files in existing m4/ dir
+#   lib/*.[ch] files in new lib/ dir.
+# With --avoid=snprintf, we pull in about 30 fewer files
+# With the current gnulib and gettext-0.17, the following
+# files are added to m4/ by both.  But gnulib is stable enough
+# and gettext-0.16.1 is new enough that they are identical.
+#   compiler-flags.m4
+#   inttypes_h.m4
+#   longlong.m4
+#   size_max.m4
+#   stdint_h.m4
+#   wchar_t.m4
+#   wint_t.m4
+#   xsize.m4
+
+# Note that if we don't exclude the snprintf module, there are two tests
+# that have incompatible licenses, so we would have to exclude them.  Even
+# excluding those two test modules, find reports a total of 94 added files.
+# Yes, snprintf has some heavy-duty dependents.
+#  --avoid=snprintf-tests
+#  --avoid=vasnprintf-tests
+
+$gnulib_tool			\
+  --lgpl			\
+  --avoid=snprintf		\
+  --with-tests			\
+  --tests-base=gl-tests		\
+  --import physmem getaddrinfo
diff --git a/configure.in b/configure.in
index a845720..18a533f 100644
--- a/configure.in
+++ b/configure.in
@@ -28,11 +28,15 @@ AVAHI_REQUIRED="0.6.0"
 
 dnl Checks for C compiler.
 AC_PROG_CC
-AM_PROG_CC_STDC
-AC_C_CONST
 AC_PROG_INSTALL
 AC_PROG_CPP
 
+gl_EARLY
+gl_INIT
+
+AM_PROG_CC_STDC
+AC_C_CONST
+
 dnl Make sure we have an ANSI compiler
 AM_C_PROTOTYPES
 test "x$U" != "x" && AC_MSG_ERROR(Compiler not ANSI compliant)
@@ -562,11 +566,12 @@ cp COPYING.LIB COPYING
 AC_OUTPUT(Makefile src/Makefile include/Makefile docs/Makefile \
           docs/examples/Makefile docs/devhelp/Makefile \
 	  docs/examples/python/Makefile \
+	  lib/Makefile gl-tests/Makefile \
           libvirt.pc libvirt.spec \
           po/Makefile.in scripts/Makefile \
 	  include/libvirt/Makefile include/libvirt/libvirt.h \
 	  python/Makefile python/tests/Makefile \
-          qemud/Makefile m4/Makefile \
+          qemud/Makefile \
           tests/Makefile proxy/Makefile \
           tests/xml2sexprdata/Makefile \
           tests/sexpr2xmldata/Makefile \
diff --git a/m4/Makefile.am b/m4/Makefile.am
deleted file mode 100644
index 188b2fe..0000000
--- a/m4/Makefile.am
+++ /dev/null
@@ -1,3 +0,0 @@
-
-EXTRA_DIST = compiler-flags.m4
-
diff --git a/qemud/Makefile.am b/qemud/Makefile.am
index 1737176..267b43e 100644
--- a/qemud/Makefile.am
+++ b/qemud/Makefile.am
@@ -27,6 +27,7 @@ libvirtd_SOURCES = \
 
 #-D_XOPEN_SOURCE=600 -D_XOPEN_SOURCE_EXTENDED=1 -D_POSIX_C_SOURCE=199506L
 libvirtd_CFLAGS = \
+        -I$(top_srcdir)/lib -I../lib \
         -I$(top_srcdir)/include -I$(top_builddir)/include \
         $(LIBXML_CFLAGS) $(GNUTLS_CFLAGS) \
         $(WARN_CFLAGS) -DLOCAL_STATE_DIR="\"$(localstatedir)\"" \
@@ -37,7 +38,7 @@ libvirtd_CFLAGS = \
 
 libvirtd_LDFLAGS = $(WARN_CFLAGS) $(LIBXML_LIBS) $(GNUTLS_LIBS)
 libvirtd_DEPENDENCIES = ../src/libvirt.la
-libvirtd_LDADD = ../src/libvirt.la
+libvirtd_LDADD = ../src/libvirt.la ../lib/libgnu.la
 
 if HAVE_AVAHI
 libvirtd_SOURCES += mdns.c mdns.h
diff --git a/qemud/qemud.c b/qemud/qemud.c
index f88ed42..caccd29 100644
--- a/qemud/qemud.c
+++ b/qemud/qemud.c
@@ -53,6 +53,7 @@
 #include <libvirt/virterror.h>
 
 #include "internal.h"
+#include "getaddrinfo.h"
 #include "../src/internal.h"
 #include "../src/remote_internal.h"
 #include "../src/conf.h"
diff --git a/src/Makefile.am b/src/Makefile.am
index 52ffbaf..efea233 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1,6 +1,8 @@
 ## Process this file with automake to produce Makefile.in
 
-INCLUDES = -I$(top_builddir)/include \
+INCLUDES = \
+	   -I$(top_srcdir)/lib -I../lib \
+	   -I../include \
 	   -I at top_srcdir@/include \
 	   -I at top_srcdir@/qemud \
 	   $(LIBXML_CFLAGS) \
@@ -14,7 +16,7 @@ INCLUDES = -I$(top_builddir)/include \
 	   $(WARN_CFLAGS) \
 	   $(LIBVIRT_FEATURES)
 DEPS = libvirt.la
-LDADDS = @STATIC_BINARIES@ $(WARN_CFLAGS) libvirt.la
+LDADDS = @STATIC_BINARIES@ $(WARN_CFLAGS) libvirt.la ../lib/libgnu.la
 VIRSH_LIBS = @VIRSH_LIBS@
 
 confdir = $(sysconfdir)/libvirt/
@@ -60,7 +62,7 @@ SERVER_SOURCES = 						\
 
 libvirt_la_SOURCES = $(CLIENT_SOURCES) $(SERVER_SOURCES)
 libvirt_la_LIBADD = $(LIBXML_LIBS) $(GNUTLS_LIBS) $(LTLIBOBJS) \
-		    @CYGWIN_EXTRA_LIBADD@
+		    @CYGWIN_EXTRA_LIBADD@ ../lib/libgnu.la
 libvirt_la_LDFLAGS = -Wl,--version-script=$(srcdir)/libvirt_sym.version \
                      -version-info @LIBVIRT_VERSION_INFO@ \
                     $(COVERAGE_CFLAGS:-f%=-Wc,-f%) \
diff --git a/src/nodeinfo.c b/src/nodeinfo.c
index a0a26eb..2ef49cb 100644
--- a/src/nodeinfo.c
+++ b/src/nodeinfo.c
@@ -29,14 +29,14 @@
 #include <ctype.h>
 
 #include "nodeinfo.h"
+#include "physmem.h"
 
 #ifdef __linux__
-#define MEMINFO_PATH "/proc/meminfo"
 #define CPUINFO_PATH "/proc/cpuinfo"
 
 /* NB, these are not static as we need to call them from testsuite */
-int linuxNodeInfoCPUPopulate(virConnectPtr conn, FILE *cpuinfo, virNodeInfoPtr nodeinfo);
-int linuxNodeInfoMemPopulate(virConnectPtr conn, FILE *meminfo, virNodeInfoPtr nodeinfo);
+int linuxNodeInfoCPUPopulate(virConnectPtr conn, FILE *cpuinfo,
+                             virNodeInfoPtr nodeinfo);
 
 int linuxNodeInfoCPUPopulate(virConnectPtr conn, FILE *cpuinfo, virNodeInfoPtr nodeinfo) {
     char line[1024];
@@ -114,44 +114,11 @@ int linuxNodeInfoCPUPopulate(virConnectPtr conn, FILE *cpuinfo, virNodeInfoPtr n
     return 0;
 }
 
-
-int linuxNodeInfoMemPopulate(virConnectPtr conn, FILE *meminfo,
-                             virNodeInfoPtr nodeinfo) {
-    char line[1024];
-
-    nodeinfo->memory = 0;
-
-    while (fgets(line, sizeof(line), meminfo) != NULL) {
-        if (STREQLEN(line, "MemTotal:", 9)) {
-            char *p;
-            unsigned int ui;
-            if (xstrtol_ui(line + 10, &p, 10, &ui) == 0
-                && (*p == '\0' || isspace(*p))) {
-                nodeinfo->memory = ui;
-                break;
-            }
-        }
-    }
-    if (!nodeinfo->memory) {
-        __virRaiseError(conn, NULL, NULL, 0, VIR_ERR_INTERNAL_ERROR,
-                        VIR_ERR_ERROR, NULL, NULL, NULL, 0, 0,
-                        "no memory found");
-        return -1;
-    }
-
-    return 0;
-}
-
-
 #endif
 
 int virNodeInfoPopulate(virConnectPtr conn,
                         virNodeInfoPtr nodeinfo) {
     struct utsname info;
-#ifdef __linux__
-    int ret;
-    FILE *cpuinfo, *meminfo;
-#endif
 
     if (uname(&info) < 0) {
         __virRaiseError(conn, NULL, NULL, 0, VIR_ERR_INTERNAL_ERROR,
@@ -164,7 +131,9 @@ int virNodeInfoPopulate(virConnectPtr conn,
     nodeinfo->model[sizeof(nodeinfo->model)-1] = '\0';
 
 #ifdef __linux__
-    cpuinfo = fopen(CPUINFO_PATH, "r");
+    {
+    int ret;
+    FILE *cpuinfo = fopen(CPUINFO_PATH, "r");
     if (!cpuinfo) {
         __virRaiseError(conn, NULL, NULL, 0, VIR_ERR_INTERNAL_ERROR,
                         VIR_ERR_ERROR, NULL, NULL, NULL, 0, 0,
@@ -176,17 +145,11 @@ int virNodeInfoPopulate(virConnectPtr conn,
     if (ret < 0)
         return -1;
 
-    meminfo = fopen(MEMINFO_PATH, "r");
-    if (!meminfo) {
-        __virRaiseError(conn, NULL, NULL, 0, VIR_ERR_INTERNAL_ERROR,
-                        VIR_ERR_ERROR, NULL, NULL, NULL, 0, 0,
-                        "cannot open %s %s", MEMINFO_PATH, strerror(errno));
-        return -1;
-    }
-    ret = linuxNodeInfoMemPopulate(conn, meminfo, nodeinfo);
-    fclose(meminfo);
+    /* Convert to KB. */
+    nodeinfo->memory = physmem_total () / 1024;
 
     return ret;
+    }
 #else
     /* XXX Solaris will need an impl later if they port QEMU driver */
     __virRaiseError(conn, NULL, NULL, 0, VIR_ERR_INTERNAL_ERROR,
diff --git a/src/remote_internal.c b/src/remote_internal.c
index a8227f3..275405a 100644
--- a/src/remote_internal.c
+++ b/src/remote_internal.c
@@ -52,6 +52,7 @@
 
 #include "internal.h"
 #include "driver.h"
+#include "getaddrinfo.h"
 #include "remote_internal.h"
 #include "remote_protocol.h"
 
diff --git a/src/test.c b/src/test.c
index 010ea15..bab280f 100644
--- a/src/test.c
+++ b/src/test.c
@@ -25,8 +25,6 @@
 
 #ifdef WITH_TEST
 
-#define _GNU_SOURCE /* for asprintf */
-
 #include <stdio.h>
 #include <string.h>
 #include <sys/time.h>
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 512162b..4de0c45 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -11,6 +11,7 @@ SUBDIRS = virshdata confdata sexpr2xmldata xml2sexprdata xmconfigdata xencapsdat
 LIBVIRT = $(wildcard $(top_builddir)/src/.libs/libvirt_la-*.o)
 
 INCLUDES = \
+	-I$(top_srcdir)/lib -I../lib \
 	-I$(top_builddir)/include \
 	-I$(top_builddir)/src \
 	-I$(top_srcdir)/include \
@@ -29,6 +30,7 @@ LDADDS = \
         $(GNUTLS_LIBS) \
         $(WARN_CFLAGS) \
 	$(LIBVIRT) \
+	../lib/libgnu.la \
         $(COVERAGE_LDFLAGS)
 
 EXTRA_DIST =		\
diff --git a/tests/nodeinfodata/linux-nodeinfo-1.txt b/tests/nodeinfodata/linux-nodeinfo-1.txt
index 1a38ad1..e52e20a 100644
--- a/tests/nodeinfodata/linux-nodeinfo-1.txt
+++ b/tests/nodeinfodata/linux-nodeinfo-1.txt
@@ -1 +1 @@
-CPUs: 2, MHz: 2800, Nodes: 1, Sockets: 1, Cores: 2, Threads: 1, Memory: 2053960
+CPUs: 2, MHz: 2800, Nodes: 1, Sockets: 1, Cores: 2, Threads: 1
diff --git a/tests/nodeinfodata/linux-nodeinfo-2.txt b/tests/nodeinfodata/linux-nodeinfo-2.txt
index 1c31a0c..12e819b 100644
--- a/tests/nodeinfodata/linux-nodeinfo-2.txt
+++ b/tests/nodeinfodata/linux-nodeinfo-2.txt
@@ -1 +1 @@
-CPUs: 2, MHz: 2211, Nodes: 1, Sockets: 1, Cores: 2, Threads: 1, Memory: 4059540
+CPUs: 2, MHz: 2211, Nodes: 1, Sockets: 1, Cores: 2, Threads: 1
diff --git a/tests/nodeinfodata/linux-nodeinfo-3.txt b/tests/nodeinfodata/linux-nodeinfo-3.txt
index e2cc841..d285781 100644
--- a/tests/nodeinfodata/linux-nodeinfo-3.txt
+++ b/tests/nodeinfodata/linux-nodeinfo-3.txt
@@ -1 +1 @@
-CPUs: 4, MHz: 1595, Nodes: 1, Sockets: 2, Cores: 2, Threads: 1, Memory: 4059272
+CPUs: 4, MHz: 1595, Nodes: 1, Sockets: 2, Cores: 2, Threads: 1
diff --git a/tests/nodeinfodata/linux-nodeinfo-4.txt b/tests/nodeinfodata/linux-nodeinfo-4.txt
index 2c75ea3..991d4f9 100644
--- a/tests/nodeinfodata/linux-nodeinfo-4.txt
+++ b/tests/nodeinfodata/linux-nodeinfo-4.txt
@@ -1 +1 @@
-CPUs: 4, MHz: 1000, Nodes: 1, Sockets: 1, Cores: 4, Threads: 1, Memory: 4059272
+CPUs: 4, MHz: 1000, Nodes: 1, Sockets: 1, Cores: 4, Threads: 1
diff --git a/tests/nodeinfodata/linux-nodeinfo-5.txt b/tests/nodeinfodata/linux-nodeinfo-5.txt
index 01fee52..dce7ada 100644
--- a/tests/nodeinfodata/linux-nodeinfo-5.txt
+++ b/tests/nodeinfodata/linux-nodeinfo-5.txt
@@ -1 +1 @@
-CPUs: 4, MHz: 2814, Nodes: 1, Sockets: 2, Cores: 2, Threads: 1, Memory: 4059272
+CPUs: 4, MHz: 2814, Nodes: 1, Sockets: 2, Cores: 2, Threads: 1
diff --git a/tests/nodeinfodata/linux-nodeinfo-6.txt b/tests/nodeinfodata/linux-nodeinfo-6.txt
index a7a2cfe..75cdaa9 100644
--- a/tests/nodeinfodata/linux-nodeinfo-6.txt
+++ b/tests/nodeinfodata/linux-nodeinfo-6.txt
@@ -1 +1 @@
-CPUs: 4, MHz: 1000, Nodes: 1, Sockets: 2, Cores: 2, Threads: 1, Memory: 4059272
+CPUs: 4, MHz: 1000, Nodes: 1, Sockets: 2, Cores: 2, Threads: 1
diff --git a/tests/nodeinfotest.c b/tests/nodeinfotest.c
index 7275cc3..fb563b5 100644
--- a/tests/nodeinfotest.c
+++ b/tests/nodeinfotest.c
@@ -21,14 +21,13 @@ static char *abs_top_srcdir;
 #ifdef __linux__
 
 extern int linuxNodeInfoCPUPopulate(virConnectPtr conn, FILE *cpuinfo, virNodeInfoPtr nodeinfo);
-extern int linuxNodeInfoMemPopulate(virConnectPtr conn, FILE *meminfo, virNodeInfoPtr nodeinfo);
 
-static int linuxTestCompareFiles(const char *cpuinfofile, const char *meminfofile, const char *outputfile) {
+static int linuxTestCompareFiles(const char *cpuinfofile, const char *outputfile) {
     char actualData[MAX_FILE];
     char expectData[MAX_FILE];
     char *expect = &expectData[0];
     virNodeInfo nodeinfo;
-    FILE *cpuinfo, *meminfo;
+    FILE *cpuinfo;
 
     if (virtTestLoadFile(outputfile, &expect, MAX_FILE) < 0)
         return -1;
@@ -42,19 +41,10 @@ static int linuxTestCompareFiles(const char *cpuinfofile, const char *meminfofil
     }
     fclose(cpuinfo);
 
-    meminfo = fopen(meminfofile, "r");
-    if (!meminfo)
-        return -1;
-    if (linuxNodeInfoMemPopulate(NULL, meminfo, &nodeinfo) < 0) {
-        fclose(meminfo);
-        return -1;
-    }
-    fclose(meminfo);
-
     snprintf(actualData, MAX_FILE,
-             "CPUs: %u, MHz: %u, Nodes: %u, Sockets: %u, Cores: %u, Threads: %u, Memory: %lu\n",
+             "CPUs: %u, MHz: %u, Nodes: %u, Sockets: %u, Cores: %u, Threads: %u\n",
              nodeinfo.cpus, nodeinfo.mhz, nodeinfo.nodes, nodeinfo.sockets,
-             nodeinfo.cores, nodeinfo.threads, nodeinfo.memory);
+             nodeinfo.cores, nodeinfo.threads);
 
     if (STRNEQ(actualData, expectData)) {
         if (getenv("DEBUG_TESTS")) {
@@ -70,15 +60,12 @@ static int linuxTestCompareFiles(const char *cpuinfofile, const char *meminfofil
 
 static int linuxTestNodeInfo(const void *data) {
     char cpuinfo[PATH_MAX];
-    char meminfo[PATH_MAX];
     char output[PATH_MAX];
     snprintf(cpuinfo, PATH_MAX, "%s/tests/nodeinfodata/linux-%s.cpuinfo",
              abs_top_srcdir, (const char*)data);
-    snprintf(meminfo, PATH_MAX, "%s/tests/nodeinfodata/linux-%s.meminfo",
-             abs_top_srcdir, (const char*)data);
     snprintf(output, PATH_MAX, "%s/tests/nodeinfodata/linux-%s.txt",
              abs_top_srcdir, (const char*)data);
-    return linuxTestCompareFiles(cpuinfo, meminfo, output);
+    return linuxTestCompareFiles(cpuinfo, output);
 }
 #endif
 
-- 
1.5.3.6.950.g92b7b




More information about the libvir-list mailing list