2014-06-05 15:53:16 +04: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-04-05 17:13:52 +03:00
# include "virfilewrapper.h"
2014-06-05 15:53:16 +04:00
# define VIR_FROM_THIS VIR_FROM_NONE
2017-03-24 21:37:50 +03:00
struct virCapabilitiesData {
2014-06-05 15:53:16 +04:00
const char * filename ;
2017-03-24 21:37:50 +03:00
virArch arch ;
bool offlineMigrate ;
bool liveMigrate ;
2017-03-31 15:33:57 +03:00
bool resctrl ; /* Whether both resctrl and system sysfs are used */
2014-06-05 15:53:16 +04:00
} ;
static int
2017-03-24 21:37:50 +03:00
test_virCapabilities ( const void * opaque )
2014-06-05 15:53:16 +04:00
{
2017-03-24 21:37:50 +03:00
struct virCapabilitiesData * data = ( struct virCapabilitiesData * ) opaque ;
const char * archStr = virArchToString ( data - > arch ) ;
2014-06-05 15:53:16 +04:00
virCapsPtr caps = NULL ;
char * capsXML = NULL ;
char * path = NULL ;
2017-03-24 21:37:50 +03:00
char * dir = NULL ;
2017-05-17 12:08:33 +03:00
char * resctrl = NULL ;
2014-06-05 15:53:16 +04:00
int ret = - 1 ;
2017-03-31 15:33:57 +03:00
/*
* We want to keep our directory structure clean , so if there ' s both resctrl
* and system used , we need to use slightly different path ; a subdir .
*/
if ( virAsprintf ( & dir , " %s/vircaps2xmldata/linux-%s%s " ,
abs_srcdir , data - > filename ,
data - > resctrl ? " /system " : " " ) < 0 )
2017-03-24 21:37:50 +03:00
goto cleanup ;
2017-05-17 12:08:33 +03:00
if ( virAsprintf ( & resctrl , " %s/vircaps2xmldata/linux-%s/resctrl " ,
abs_srcdir , data - > filename ) < 0 )
goto cleanup ;
2017-04-05 17:13:52 +03:00
virFileWrapperAddPrefix ( " /sys/devices/system " , dir ) ;
2017-05-17 12:08:33 +03:00
virFileWrapperAddPrefix ( " /sys/fs/resctrl " , resctrl ) ;
2017-03-24 21:37:50 +03:00
caps = virCapabilitiesNew ( data - > arch , data - > offlineMigrate , data - > liveMigrate ) ;
if ( ! caps )
goto cleanup ;
2017-03-30 16:01:27 +03:00
if ( virCapabilitiesInitNUMA ( caps ) < 0 | |
virCapabilitiesInitCaches ( caps ) < 0 )
2014-06-05 15:53:16 +04:00
goto cleanup ;
2017-04-05 17:13:52 +03:00
virFileWrapperClearPrefixes ( ) ;
2017-03-24 21:37:50 +03:00
2014-06-27 11:55:44 +04:00
if ( ! ( capsXML = virCapabilitiesFormatXML ( caps ) ) )
2014-06-05 15:53:16 +04:00
goto cleanup ;
2017-03-24 21:37:50 +03:00
if ( virAsprintf ( & path , " %s/vircaps2xmldata/vircaps-%s-%s.xml " ,
abs_srcdir , archStr , data - > filename ) < 0 )
2014-06-05 15:53:16 +04:00
goto cleanup ;
2016-05-26 18:01:53 +03:00
if ( virTestCompareToFile ( capsXML , path ) < 0 )
2014-06-05 15:53:16 +04:00
goto cleanup ;
ret = 0 ;
cleanup :
2017-03-24 21:37:50 +03:00
VIR_FREE ( dir ) ;
2017-05-17 12:08:33 +03:00
VIR_FREE ( resctrl ) ;
2014-06-05 15:53:16 +04:00
VIR_FREE ( path ) ;
VIR_FREE ( capsXML ) ;
virObjectUnref ( caps ) ;
return ret ;
}
static int
mymain ( void )
{
int ret = 0 ;
2017-03-31 15:33:57 +03:00
# define DO_TEST_FULL(filename, arch, offlineMigrate, liveMigrate, resctrl) \
2017-11-03 15:09:47 +03:00
do { \
struct virCapabilitiesData data = { filename , arch , \
offlineMigrate , \
liveMigrate , resctrl } ; \
if ( virTestRun ( filename , test_virCapabilities , & data ) < 0 ) \
ret = - 1 ; \
2014-06-05 15:53:16 +04:00
} while ( 0 )
2017-03-31 15:33:57 +03:00
# define DO_TEST(filename, arch) DO_TEST_FULL(filename, arch, true, true, false)
2017-03-24 21:37:50 +03:00
2017-03-31 15:33:57 +03:00
DO_TEST_FULL ( " basic " , VIR_ARCH_X86_64 , false , false , false ) ;
DO_TEST_FULL ( " basic " , VIR_ARCH_AARCH64 , true , false , false ) ;
2017-03-24 21:37:50 +03:00
DO_TEST ( " caches " , VIR_ARCH_X86_64 ) ;
2014-06-05 15:53:16 +04:00
2017-03-31 15:36:58 +03:00
DO_TEST_FULL ( " resctrl " , VIR_ARCH_X86_64 , true , true , true ) ;
2017-05-17 12:08:33 +03:00
DO_TEST_FULL ( " resctrl-cdp " , VIR_ARCH_X86_64 , true , true , true ) ;
2017-06-05 15:00:45 +03:00
DO_TEST_FULL ( " resctrl-skx " , VIR_ARCH_X86_64 , true , true , true ) ;
2017-03-31 15:36:58 +03:00
2014-06-05 15:53:16 +04:00
return ret ;
}
2017-03-29 17:45:42 +03:00
VIR_TEST_MAIN_PRELOAD ( mymain , abs_builddir " /.libs/virnumamock.so " )