2014-06-05 13:53:16 +02:00
/*
* Copyright ( C ) Red Hat , Inc . 2014
*
* 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/>.
*
* Authors :
* Michal Privoznik < mprivozn @ redhat . com >
*/
# include <config.h>
# include <stdlib.h>
# include "testutils.h"
# include "capabilities.h"
# include "virbitmap.h"
2017-03-24 19:37:50 +01:00
# include "virsysfspriv.h"
2014-06-05 13:53:16 +02:00
# define VIR_FROM_THIS VIR_FROM_NONE
2017-03-24 19:37:50 +01:00
struct virCapabilitiesData {
2014-06-05 13:53:16 +02:00
const char * filename ;
2017-03-24 19:37:50 +01:00
virArch arch ;
bool offlineMigrate ;
bool liveMigrate ;
2014-06-05 13:53:16 +02:00
} ;
static int
2017-03-24 19:37:50 +01:00
test_virCapabilities ( const void * opaque )
2014-06-05 13:53:16 +02:00
{
2017-03-24 19:37:50 +01:00
struct virCapabilitiesData * data = ( struct virCapabilitiesData * ) opaque ;
const char * archStr = virArchToString ( data - > arch ) ;
2014-06-05 13:53:16 +02:00
virCapsPtr caps = NULL ;
char * capsXML = NULL ;
char * path = NULL ;
2017-03-24 19:37:50 +01:00
char * dir = NULL ;
2014-06-05 13:53:16 +02:00
int ret = - 1 ;
2017-03-24 19:37:50 +01:00
if ( virAsprintf ( & dir , " %s/vircaps2xmldata/linux-%s " ,
abs_srcdir , data - > filename ) < 0 )
goto cleanup ;
virSysfsSetSystemPath ( dir ) ;
caps = virCapabilitiesNew ( data - > arch , data - > offlineMigrate , data - > liveMigrate ) ;
if ( ! caps )
goto cleanup ;
if ( virCapabilitiesInitNUMA ( caps ) < 0 )
2014-06-05 13:53:16 +02:00
goto cleanup ;
2017-03-24 19:37:50 +01:00
virSysfsSetSystemPath ( NULL ) ;
2014-06-27 09:55:44 +02:00
if ( ! ( capsXML = virCapabilitiesFormatXML ( caps ) ) )
2014-06-05 13:53:16 +02:00
goto cleanup ;
2017-03-24 19:37:50 +01:00
if ( virAsprintf ( & path , " %s/vircaps2xmldata/vircaps-%s-%s.xml " ,
abs_srcdir , archStr , data - > filename ) < 0 )
2014-06-05 13:53:16 +02:00
goto cleanup ;
2016-05-26 17:01:53 +02:00
if ( virTestCompareToFile ( capsXML , path ) < 0 )
2014-06-05 13:53:16 +02:00
goto cleanup ;
ret = 0 ;
cleanup :
2017-03-24 19:37:50 +01:00
VIR_FREE ( dir ) ;
2014-06-05 13:53:16 +02:00
VIR_FREE ( path ) ;
VIR_FREE ( capsXML ) ;
virObjectUnref ( caps ) ;
return ret ;
}
static int
mymain ( void )
{
int ret = 0 ;
2017-03-27 22:08:45 +02:00
# define DO_TEST_FULL(filename, arch, offlineMigrate, liveMigrate) \
2017-03-24 19:37:50 +01:00
do { \
struct virCapabilitiesData data = { filename , arch , \
offlineMigrate , \
liveMigrate } ; \
if ( virTestRun ( filename , test_virCapabilities , & data ) < 0 ) \
ret = - 1 ; \
2014-06-05 13:53:16 +02:00
} while ( 0 )
2017-03-27 22:08:45 +02:00
# define DO_TEST(filename, arch) DO_TEST_FULL(filename, arch, true, true)
2017-03-24 19:37:50 +01:00
DO_TEST_FULL ( " basic " , VIR_ARCH_X86_64 , false , false ) ;
DO_TEST_FULL ( " basic " , VIR_ARCH_AARCH64 , true , false ) ;
DO_TEST ( " caches " , VIR_ARCH_X86_64 ) ;
2014-06-05 13:53:16 +02:00
return ret ;
}
2017-03-29 16:45:42 +02:00
VIR_TEST_MAIN_PRELOAD ( mymain , abs_builddir " /.libs/virnumamock.so " )