2008-01-29 21:15:54 +03:00
# include <config.h>
2007-11-26 15:03:34 +03:00
2007-07-26 03:16:30 +04:00
# include <stdio.h>
# include <stdlib.h>
# include <string.h>
2008-05-29 19:31:49 +04:00
# include <unistd.h>
2007-07-26 03:16:30 +04:00
# include "testutils.h"
# include "internal.h"
2014-01-22 15:56:06 +04:00
# include "nodeinfopriv.h"
2011-07-19 22:32:58 +04:00
# include "virfile.h"
2013-04-03 14:36:23 +04:00
# include "virstring.h"
2007-07-26 03:16:30 +04:00
2013-06-07 19:10:28 +04:00
# define VIR_FROM_THIS VIR_FROM_NONE
2011-06-12 23:57:01 +04:00
# if ! (defined __linux__ && (defined(__x86_64__) || \
defined ( __amd64__ ) | | \
2011-12-01 11:17:52 +04:00
defined ( __i386__ ) | | \
defined ( __powerpc__ ) | | \
defined ( __powerpc64__ ) ) )
2008-12-18 15:08:05 +03:00
2011-07-28 19:48:12 +04:00
int
main ( void )
2008-12-18 15:08:05 +03:00
{
2011-07-28 19:48:12 +04:00
return EXIT_AM_SKIP ;
2008-12-18 15:08:05 +03:00
}
# else
2011-04-25 02:25:10 +04:00
static int
2011-12-01 11:17:52 +04:00
linuxTestCompareFiles ( const char * cpuinfofile ,
2012-05-11 23:59:59 +04:00
char * sysfs_dir ,
2011-12-01 11:17:52 +04:00
const char * outputfile )
2011-04-25 02:25:10 +04:00
{
int ret = - 1 ;
char * actualData = NULL ;
char * expectData = NULL ;
2007-07-26 03:16:30 +04:00
virNodeInfo nodeinfo ;
Use gnulib, starting with its physmem and getaddrinfo modules.
New files go into these directories:
gnulib/lib
gnulib/m4
gnulib/tests
* 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 gnulib/lib and remove m4. Add gnulib/tests
early enough that those tests run before any libvirt unit tests.
* m4/Makefile.am: Remove file. Not needed.
* src/Makefile.am (INCLUDES): Add -I$(top_srcdir)/gnulib/lib -I../gnulib/lib.
(LDADDS, libvirt_la_LIBADD): Add ../gnulib/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)/gnulib/lib -I../gnulib/lib.
(LDADDS): Add ../gnulib/lib/libgnu.la.
* qemud/Makefile.am (libvirtd_LDADD): Add ../gnulib/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".
* autogen.sh: Add -I gnulib/m4.
* src/conf.c, src/sexpr.c: Don't define _GNU_SOURCE.
Instead, include "config.h".
* qemud/qemud.c: Remove definition of _GNU_SOURCE.
* src/openvz_driver.c: Likewise.
* src/qemu_driver.c: Likewise.
* src/remote_internal.c: Likewise.
* configure.in: Use AC_CONFIG_AUX_DIR(build-aux), so that a bunch
of gettextize-generated files go into build-aux/, rather than in
the top-level directory.
* .cvsignore: Adjust.
* build-aux/.cvsignore: New file.
Author: Jim Meyering <meyering@redhat.com>
2007-12-06 00:31:07 +03:00
FILE * cpuinfo ;
2007-07-26 03:16:30 +04:00
2011-04-25 02:25:10 +04:00
if ( virtTestLoadFile ( outputfile , & expectData ) < 0 )
goto fail ;
2007-07-26 03:16:30 +04:00
cpuinfo = fopen ( cpuinfofile , " r " ) ;
if ( ! cpuinfo )
2011-04-25 02:25:10 +04:00
goto fail ;
2010-05-18 13:58:32 +04:00
memset ( & nodeinfo , 0 , sizeof ( nodeinfo ) ) ;
2012-05-11 23:59:59 +04:00
if ( linuxNodeInfoCPUPopulate ( cpuinfo , sysfs_dir , & nodeinfo ) < 0 ) {
2010-08-23 18:48:33 +04:00
if ( virTestGetDebug ( ) ) {
virErrorPtr error = virSaveLastError ( ) ;
if ( error & & error - > code ! = VIR_ERR_OK )
fprintf ( stderr , " \n %s \n " , error - > message ) ;
virFreeError ( error ) ;
}
2010-11-17 05:13:29 +03:00
VIR_FORCE_FCLOSE ( cpuinfo ) ;
2011-04-25 02:25:10 +04:00
goto fail ;
2007-07-26 03:16:30 +04:00
}
2010-11-17 05:13:29 +03:00
VIR_FORCE_FCLOSE ( cpuinfo ) ;
2007-07-26 03:16:30 +04:00
2012-05-15 03:11:47 +04:00
if ( virAsprintf ( & actualData ,
" CPUs: %u/%u, MHz: %u, Nodes: %u, Sockets: %u, "
" Cores: %u, Threads: %u \n " ,
nodeinfo . cpus , VIR_NODEINFO_MAXCPUS ( nodeinfo ) ,
nodeinfo . mhz , nodeinfo . nodes , nodeinfo . sockets ,
nodeinfo . cores , nodeinfo . threads ) < 0 )
2011-04-25 02:25:10 +04:00
goto fail ;
2007-07-26 03:16:30 +04:00
if ( STRNEQ ( actualData , expectData ) ) {
2012-05-11 23:59:59 +04:00
virtTestDifference ( stderr , expectData , actualData ) ;
2011-04-25 02:25:10 +04:00
goto fail ;
2007-07-26 03:16:30 +04:00
}
2011-04-25 02:25:10 +04:00
ret = 0 ;
fail :
2012-02-03 03:16:43 +04:00
VIR_FREE ( expectData ) ;
VIR_FREE ( actualData ) ;
2011-04-25 02:25:10 +04:00
return ret ;
2007-07-26 03:16:30 +04:00
}
2011-04-25 02:25:10 +04:00
static int
linuxTestNodeInfo ( const void * data )
{
int result = - 1 ;
char * cpuinfo = NULL ;
2012-05-11 23:59:59 +04:00
char * sysfs_dir = NULL ;
2011-04-25 02:25:10 +04:00
char * output = NULL ;
2012-05-11 23:59:59 +04:00
const char * test = data ;
const char * arch = " x86 " ;
2011-04-25 02:25:10 +04:00
2011-12-01 11:17:52 +04:00
# if defined(__powerpc__) || \
defined ( __powerpc64__ )
2012-05-11 23:59:59 +04:00
arch = " ppc " ;
2011-12-01 11:17:52 +04:00
# endif
2012-05-11 23:59:59 +04:00
if ( virAsprintf ( & sysfs_dir , " %s/nodeinfodata/linux-%s " ,
abs_srcdir , test ) < 0 | |
virAsprintf ( & cpuinfo , " %s/nodeinfodata/linux-%s-%s.cpuinfo " ,
2012-07-20 23:12:44 +04:00
abs_srcdir , arch , test ) < 0 | |
virAsprintf ( & output , " %s/nodeinfodata/linux-%s-%s.expected " ,
abs_srcdir , arch , test ) < 0 ) {
2011-04-25 02:25:10 +04:00
goto cleanup ;
}
2012-05-11 23:59:59 +04:00
result = linuxTestCompareFiles ( cpuinfo , sysfs_dir , output ) ;
2011-04-25 02:25:10 +04:00
cleanup :
2012-02-03 03:16:43 +04:00
VIR_FREE ( cpuinfo ) ;
VIR_FREE ( output ) ;
2012-05-11 23:59:59 +04:00
VIR_FREE ( sysfs_dir ) ;
2011-04-25 02:25:10 +04:00
return result ;
2007-07-26 03:16:30 +04:00
}
2008-05-29 19:31:49 +04:00
static int
2011-04-29 20:21:20 +04:00
mymain ( void )
2007-07-26 03:16:30 +04:00
{
int ret = 0 ;
Convert 'int i' to 'size_t i' in tests/ files
Convert the type of loop iterators named 'i', 'j', k',
'ii', 'jj', 'kk', to be 'size_t' instead of 'int' or
'unsigned int', also santizing 'ii', 'jj', 'kk' to use
the normal 'i', 'j', 'k' naming
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2013-07-08 18:09:33 +04:00
size_t i ;
2007-07-26 03:16:30 +04:00
const char * nodeData [ ] = {
2012-07-20 23:12:44 +04:00
" test1 " ,
2012-05-12 00:30:05 +04:00
# if !(defined(__powerpc__) || \
defined ( __powerpc64__ ) )
2012-07-20 23:12:44 +04:00
" test2 " ,
" test3 " ,
" test4 " ,
" test5 " ,
" test6 " ,
2012-11-07 18:19:47 +04:00
" test7 " ,
2012-11-07 18:50:56 +04:00
" test8 " ,
2012-05-12 00:30:05 +04:00
# endif
2007-07-26 03:16:30 +04:00
} ;
2010-05-18 14:32:39 +04:00
if ( virInitialize ( ) < 0 )
return EXIT_FAILURE ;
2007-07-26 03:16:30 +04:00
2013-05-21 11:53:48 +04:00
for ( i = 0 ; i < ARRAY_CARDINALITY ( nodeData ) ; i + + )
2013-09-20 22:13:35 +04:00
if ( virtTestRun ( nodeData [ i ] , linuxTestNodeInfo , nodeData [ i ] ) ! = 0 )
2008-04-10 20:54:54 +04:00
ret = - 1 ;
2007-07-26 03:16:30 +04:00
2012-03-22 15:33:35 +04:00
return ret = = 0 ? EXIT_SUCCESS : EXIT_FAILURE ;
2007-07-26 03:16:30 +04:00
}
2008-05-29 19:31:49 +04:00
VIRT_TEST_MAIN ( mymain )
2011-07-28 19:48:12 +04:00
# endif /* __linux__ */