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/>.
*/
# include <config.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 ;
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 ) ;
2021-03-11 10:16:13 +03:00
virCaps * caps = NULL ;
2014-06-05 15:53:16 +04:00
char * capsXML = NULL ;
char * path = NULL ;
2018-08-02 19:31:03 +03:00
char * system = NULL ;
2017-05-17 12:08:33 +03:00
char * resctrl = NULL ;
2014-06-05 15:53:16 +04:00
int ret = - 1 ;
2019-10-22 16:26:14 +03:00
system = g_strdup_printf ( " %s/vircaps2xmldata/linux-%s/system " , abs_srcdir ,
data - > filename ) ;
2017-03-24 21:37:50 +03:00
2019-10-22 16:26:14 +03:00
resctrl = g_strdup_printf ( " %s/vircaps2xmldata/linux-%s/resctrl " , abs_srcdir ,
data - > filename ) ;
2017-05-17 12:08:33 +03:00
2018-08-02 19:31:03 +03:00
virFileWrapperAddPrefix ( " /sys/devices/system " , system ) ;
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 ;
2019-11-29 12:55:59 +03:00
if ( ! ( caps - > host . numa = virCapabilitiesHostNUMANewHost ( ) ) )
goto cleanup ;
if ( 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 ;
2019-10-22 16:26:14 +03:00
path = g_strdup_printf ( " %s/vircaps2xmldata/vircaps-%s-%s.xml " , abs_srcdir ,
archStr , data - > filename ) ;
2014-06-05 15:53:16 +04:00
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 :
2018-08-02 19:31:03 +03:00
VIR_FREE ( system ) ;
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 ;
2018-08-02 19:31:03 +03:00
# define DO_TEST_FULL(filename, arch, offlineMigrate, liveMigrate) \
2017-11-03 15:09:47 +03:00
do { \
struct virCapabilitiesData data = { filename , arch , \
offlineMigrate , \
2018-08-02 19:31:03 +03:00
liveMigrate } ; \
2017-11-03 15:09:47 +03:00
if ( virTestRun ( filename , test_virCapabilities , & data ) < 0 ) \
ret = - 1 ; \
2014-06-05 15:53:16 +04:00
} while ( 0 )
2018-08-02 19:31:03 +03:00
DO_TEST_FULL ( " basic " , VIR_ARCH_X86_64 , false , false ) ;
DO_TEST_FULL ( " basic " , VIR_ARCH_AARCH64 , true , false ) ;
2019-12-16 21:08:24 +03:00
DO_TEST_FULL ( " basic-dies " , VIR_ARCH_X86_64 , false , false ) ;
2017-03-24 21:37:50 +03:00
2018-08-02 19:31:03 +03:00
DO_TEST_FULL ( " caches " , VIR_ARCH_X86_64 , true , true ) ;
2014-06-05 15:53:16 +04:00
2018-08-02 19:31:03 +03:00
DO_TEST_FULL ( " resctrl " , VIR_ARCH_X86_64 , true , true ) ;
2018-09-20 13:10:50 +03:00
DO_TEST_FULL ( " resctrl-cmt " , VIR_ARCH_X86_64 , true , true ) ;
2018-08-02 19:31:03 +03:00
DO_TEST_FULL ( " resctrl-cdp " , VIR_ARCH_X86_64 , true , true ) ;
DO_TEST_FULL ( " resctrl-skx " , VIR_ARCH_X86_64 , true , true ) ;
DO_TEST_FULL ( " resctrl-skx-twocaches " , VIR_ARCH_X86_64 , true , true ) ;
2018-09-20 13:10:50 +03:00
DO_TEST_FULL ( " resctrl-fake-feature " , VIR_ARCH_X86_64 , true , true ) ;
2017-03-31 15:36:58 +03:00
2021-05-16 19:14:53 +03:00
return ret = = 0 ? EXIT_SUCCESS : EXIT_FAILURE ;
2014-06-05 15:53:16 +04:00
}
2019-08-21 19:13:16 +03:00
VIR_TEST_MAIN_PRELOAD ( mymain , VIR_TEST_MOCK ( " virnuma " ) )