2014-02-11 14:36:21 +00:00
/*
* Copyright ( C ) IBM Corp 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"
2015-04-17 12:38:55 -04:00
# include "testutilslxc.h"
# include "testutilsqemu.h"
2014-02-11 14:36:21 +00:00
# include "capabilities.h"
# include "virbitmap.h"
# define VIR_FROM_THIS VIR_FROM_NONE
static int
2019-10-14 14:45:03 +02:00
test_virCapabilitiesGetCpusForNodemask ( const void * data G_GNUC_UNUSED )
2014-02-11 14:36:21 +00:00
{
const char * nodestr = " 3,4,5,6 " ;
2021-12-07 17:22:26 +01:00
g_autoptr ( virBitmap ) nodemask = NULL ;
g_autoptr ( virBitmap ) cpumap = NULL ;
2019-11-29 09:55:59 +00:00
g_autoptr ( virCapsHostNUMA ) caps = NULL ;
2014-02-11 14:36:21 +00:00
int mask_size = 8 ;
2019-11-29 09:55:59 +00:00
if ( ! ( caps = virTestCapsBuildNUMATopology ( 3 ) ) )
2021-12-07 17:22:26 +01:00
return - 1 ;
2014-02-11 14:36:21 +00:00
2016-06-17 14:56:45 +02:00
if ( virBitmapParse ( nodestr , & nodemask , mask_size ) < 0 )
2021-12-07 17:22:26 +01:00
return - 1 ;
2014-02-11 14:36:21 +00:00
2019-11-29 09:55:59 +00:00
if ( ! ( cpumap = virCapabilitiesHostNUMAGetCpus ( caps , nodemask ) ) )
2021-12-07 17:22:26 +01:00
return - 1 ;
2014-02-11 14:36:21 +00:00
2021-12-07 17:22:26 +01:00
return 0 ;
2014-02-11 14:36:21 +00:00
}
2019-10-14 14:45:03 +02:00
static bool G_GNUC_UNUSED
2021-03-11 08:16:13 +01:00
doCapsExpectFailure ( virCaps * caps ,
2015-04-17 12:38:55 -04:00
int ostype ,
virArch arch ,
int domaintype ,
const char * emulator ,
const char * machinetype )
{
2021-03-11 08:16:13 +01:00
virCapsDomainData * data = virCapabilitiesDomainDataLookup ( caps , ostype ,
2015-04-17 12:38:55 -04:00
arch , domaintype , emulator , machinetype ) ;
if ( data ) {
VIR_FREE ( data ) ;
return false ;
}
return true ;
}
2019-10-14 14:45:03 +02:00
static bool G_GNUC_UNUSED
2021-03-11 08:16:13 +01:00
doCapsCompare ( virCaps * caps ,
2015-04-17 12:38:55 -04:00
int ostype ,
virArch arch ,
int domaintype ,
const char * emulator ,
const char * machinetype ,
int expect_ostype ,
virArch expect_arch ,
int expect_domaintype ,
const char * expect_emulator ,
const char * expect_machinetype )
{
bool ret = false ;
2021-03-11 08:16:13 +01:00
virCapsDomainData * data = virCapabilitiesDomainDataLookup ( caps , ostype ,
2015-04-17 12:38:55 -04:00
arch , domaintype , emulator , machinetype ) ;
if ( ! data )
goto error ;
if ( data - > ostype ! = expect_ostype ) {
fprintf ( stderr , " data->ostype=%s doesn't match expect_ostype=%s \n " ,
virDomainOSTypeToString ( data - > ostype ) ,
virDomainOSTypeToString ( expect_ostype ) ) ;
goto error ;
}
if ( data - > arch ! = expect_arch ) {
fprintf ( stderr , " data->arch=%s doesn't match expect_arch=%s \n " ,
virArchToString ( data - > arch ) ,
virArchToString ( expect_arch ) ) ;
goto error ;
}
if ( data - > domaintype ! = expect_domaintype ) {
fprintf ( stderr , " data->domaintype=%s doesn't match "
" expect_domaintype=%s \n " ,
virDomainVirtTypeToString ( data - > domaintype ) ,
virDomainVirtTypeToString ( expect_domaintype ) ) ;
goto error ;
}
if ( STRNEQ ( data - > emulator , expect_emulator ) ) {
fprintf ( stderr , " data->emulator=%s doesn't match expect_emulator=%s \n " ,
data - > emulator , expect_emulator ) ;
goto error ;
}
2017-11-13 22:22:07 +01:00
if ( STRNEQ_NULLABLE ( data - > machinetype , expect_machinetype ) ) {
2015-04-17 12:38:55 -04:00
fprintf ( stderr , " data->machinetype=%s doesn't match "
" expect_machinetype=%s \n " ,
2017-11-13 22:22:07 +01:00
NULLSTR ( data - > machinetype ) , NULLSTR ( expect_machinetype ) ) ;
2015-04-17 12:38:55 -04:00
goto error ;
}
ret = true ;
error :
VIR_FREE ( data ) ;
return ret ;
}
# define CAPSCOMP(o, a, d, e, m, fo, fa, fd, fe, fm) \
if ( ! doCapsCompare ( caps , o , a , d , e , m , fo , fa , fd , fe , fm ) ) \
2015-06-23 13:05:01 +02:00
ret = - 1 ;
2015-04-17 12:38:55 -04:00
# define CAPS_EXPECT_ERR(o, a, d, e, m) \
if ( ! doCapsExpectFailure ( caps , o , a , d , e , m ) ) \
2015-06-23 13:05:01 +02:00
ret = - 1 ;
2015-04-17 12:38:55 -04:00
2015-04-21 12:14:45 +04:00
# ifdef WITH_QEMU
2015-04-17 12:38:55 -04:00
static int
2019-10-14 14:45:03 +02:00
test_virCapsDomainDataLookupQEMU ( const void * data G_GNUC_UNUSED )
2015-04-17 12:38:55 -04:00
{
int ret = 0 ;
2021-08-20 15:53:53 +02:00
g_autoptr ( virCaps ) caps = NULL ;
2015-04-17 12:38:55 -04:00
2021-09-04 22:41:36 +02:00
if ( ! ( caps = testQemuCapsInit ( ) ) )
return - 1 ;
2015-04-17 12:38:55 -04:00
/* Checking each parameter individually */
2015-09-17 14:16:55 +05:30
CAPSCOMP ( - 1 , VIR_ARCH_NONE , VIR_DOMAIN_VIRT_NONE , NULL , NULL ,
2015-06-23 13:05:01 +02:00
VIR_DOMAIN_OSTYPE_HVM , VIR_ARCH_X86_64 ,
2020-01-22 10:28:19 +01:00
VIR_DOMAIN_VIRT_QEMU , " /usr/bin/qemu-system-x86_64 " , " pc " ) ;
2015-09-17 14:16:55 +05:30
CAPSCOMP ( VIR_DOMAIN_OSTYPE_HVM , VIR_ARCH_NONE , VIR_DOMAIN_VIRT_NONE , NULL , NULL ,
2015-06-23 13:05:01 +02:00
VIR_DOMAIN_OSTYPE_HVM , VIR_ARCH_X86_64 ,
2020-01-22 10:28:19 +01:00
VIR_DOMAIN_VIRT_QEMU , " /usr/bin/qemu-system-x86_64 " , " pc " ) ;
2015-09-17 14:16:55 +05:30
CAPSCOMP ( - 1 , VIR_ARCH_AARCH64 , VIR_DOMAIN_VIRT_NONE , NULL , NULL ,
2015-04-17 12:38:55 -04:00
VIR_DOMAIN_OSTYPE_HVM , VIR_ARCH_AARCH64 ,
VIR_DOMAIN_VIRT_QEMU , " /usr/bin/qemu-system-aarch64 " , " virt " ) ;
CAPSCOMP ( - 1 , VIR_ARCH_NONE , VIR_DOMAIN_VIRT_KVM , NULL , NULL ,
VIR_DOMAIN_OSTYPE_HVM , VIR_ARCH_X86_64 ,
2017-04-06 18:33:52 +02:00
VIR_DOMAIN_VIRT_KVM , " /usr/bin/qemu-system-x86_64 " , " pc " ) ;
2015-09-17 14:16:55 +05:30
CAPSCOMP ( - 1 , VIR_ARCH_NONE , VIR_DOMAIN_VIRT_NONE , " /usr/bin/qemu-system-ppc64 " , NULL ,
2015-04-17 12:38:55 -04:00
VIR_DOMAIN_OSTYPE_HVM , VIR_ARCH_PPC64 ,
VIR_DOMAIN_VIRT_QEMU , " /usr/bin/qemu-system-ppc64 " , " pseries " ) ;
2015-09-17 14:16:55 +05:30
CAPSCOMP ( - 1 , VIR_ARCH_NONE , VIR_DOMAIN_VIRT_NONE , NULL , " pseries " ,
2015-04-17 12:38:55 -04:00
VIR_DOMAIN_OSTYPE_HVM , VIR_ARCH_PPC64 ,
VIR_DOMAIN_VIRT_QEMU , " /usr/bin/qemu-system-ppc64 " , " pseries " ) ;
2015-09-17 14:16:55 +05:30
CAPSCOMP ( - 1 , VIR_ARCH_PPC64LE , VIR_DOMAIN_VIRT_NONE , NULL , " pseries " ,
2015-04-17 12:38:55 -04:00
VIR_DOMAIN_OSTYPE_HVM , VIR_ARCH_PPC64LE ,
VIR_DOMAIN_VIRT_QEMU , " /usr/bin/qemu-system-ppc64 " , " pseries " ) ;
2015-09-17 14:16:55 +05:30
CAPS_EXPECT_ERR ( VIR_DOMAIN_OSTYPE_LINUX , VIR_ARCH_NONE , VIR_DOMAIN_VIRT_NONE , NULL , NULL ) ;
CAPS_EXPECT_ERR ( - 1 , VIR_ARCH_PPC64LE , VIR_DOMAIN_VIRT_NONE , NULL , " pc " ) ;
CAPS_EXPECT_ERR ( - 1 , VIR_ARCH_MIPS , VIR_DOMAIN_VIRT_NONE , NULL , NULL ) ;
CAPS_EXPECT_ERR ( - 1 , VIR_ARCH_NONE , VIR_DOMAIN_VIRT_NONE ,
2015-04-17 12:38:55 -04:00
" /usr/bin/qemu-system-aarch64 " , " pc " ) ;
CAPS_EXPECT_ERR ( - 1 , VIR_ARCH_NONE , VIR_DOMAIN_VIRT_VMWARE , NULL , " pc " ) ;
return ret ;
}
2015-04-21 12:14:45 +04:00
# endif /* WITH_QEMU */
2015-04-17 12:38:55 -04:00
2015-04-21 12:14:45 +04:00
# ifdef WITH_LXC
2015-04-17 12:38:55 -04:00
static int
2019-10-14 14:45:03 +02:00
test_virCapsDomainDataLookupLXC ( const void * data G_GNUC_UNUSED )
2015-04-17 12:38:55 -04:00
{
int ret = 0 ;
2021-08-20 15:53:53 +02:00
g_autoptr ( virCaps ) caps = NULL ;
2015-04-17 12:38:55 -04:00
2021-09-04 22:41:36 +02:00
if ( ! ( caps = testLXCCapsInit ( ) ) )
return - 1 ;
2015-04-17 12:38:55 -04:00
2015-09-17 14:16:55 +05:30
CAPSCOMP ( - 1 , VIR_ARCH_NONE , VIR_DOMAIN_VIRT_NONE , NULL , NULL ,
2015-06-23 13:05:01 +02:00
VIR_DOMAIN_OSTYPE_EXE , VIR_ARCH_X86_64 ,
2015-04-17 12:38:55 -04:00
VIR_DOMAIN_VIRT_LXC , " /usr/libexec/libvirt_lxc " , NULL ) ;
2015-09-17 14:16:55 +05:30
CAPSCOMP ( - 1 , VIR_ARCH_X86_64 , VIR_DOMAIN_VIRT_NONE , NULL , NULL ,
2015-04-17 12:38:55 -04:00
VIR_DOMAIN_OSTYPE_EXE , VIR_ARCH_X86_64 ,
VIR_DOMAIN_VIRT_LXC , " /usr/libexec/libvirt_lxc " , NULL ) ;
return ret ;
}
2015-04-21 12:14:45 +04:00
# endif /* WITH_LXC */
2015-04-17 12:38:55 -04:00
2014-02-11 14:36:21 +00:00
static int
mymain ( void )
{
int ret = 0 ;
2016-05-26 17:01:50 +02:00
if ( virTestRun ( " virCapabilitiesGetCpusForNodemask " ,
test_virCapabilitiesGetCpusForNodemask , NULL ) < 0 )
2014-02-11 14:36:21 +00:00
ret = - 1 ;
2015-04-21 12:14:45 +04:00
# ifdef WITH_QEMU
2016-05-26 17:01:50 +02:00
if ( virTestRun ( " virCapsDomainDataLookupQEMU " ,
test_virCapsDomainDataLookupQEMU , NULL ) < 0 )
2015-04-17 12:38:55 -04:00
ret = - 1 ;
2015-04-21 12:14:45 +04:00
# endif
# ifdef WITH_LXC
2016-05-26 17:01:50 +02:00
if ( virTestRun ( " virCapsDomainDataLookupLXC " ,
test_virCapsDomainDataLookupLXC , NULL ) < 0 )
2015-04-17 12:38:55 -04:00
ret = - 1 ;
2015-04-21 12:14:45 +04:00
# endif /* WITH_LXC */
2014-02-11 14:36:21 +00:00
2021-05-16 18:14:53 +02:00
return ret = = 0 ? EXIT_SUCCESS : EXIT_FAILURE ;
2014-02-11 14:36:21 +00:00
}
2017-03-29 16:45:42 +02:00
VIR_TEST_MAIN ( mymain )