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