2020-10-05 18:47:01 +03:00
# include <config.h>
# include <unistd.h>
# include <sys/types.h>
# include <fcntl.h>
# include "testutils.h"
# include "internal.h"
# include "testutilsqemu.h"
# include "configmake.h"
# define VIR_FROM_THIS VIR_FROM_NONE
static virQEMUDriver driver ;
static int
testCompareStatusXMLToXMLFiles ( const void * opaque )
{
const struct testQemuInfo * data = opaque ;
2021-03-11 10:16:13 +03:00
virDomainObj * obj = NULL ;
2020-10-05 18:47:01 +03:00
g_autofree char * actual = NULL ;
int ret = - 1 ;
if ( ! ( obj = virDomainObjParseFile ( data - > infile , driver . xmlopt ,
VIR_DOMAIN_DEF_PARSE_STATUS |
VIR_DOMAIN_DEF_PARSE_ACTUAL_NET |
VIR_DOMAIN_DEF_PARSE_PCI_ORIG_STATES |
VIR_DOMAIN_DEF_PARSE_SKIP_VALIDATE |
VIR_DOMAIN_DEF_PARSE_ALLOW_POST_PARSE_FAIL ) ) ) {
VIR_TEST_DEBUG ( " \n failed to parse '%s' " , data - > infile ) ;
goto cleanup ;
}
if ( ! ( actual = virDomainObjFormat ( obj , driver . xmlopt ,
VIR_DOMAIN_DEF_FORMAT_SECURE |
VIR_DOMAIN_DEF_FORMAT_STATUS |
VIR_DOMAIN_DEF_FORMAT_ACTUAL_NET |
VIR_DOMAIN_DEF_FORMAT_PCI_ORIG_STATES |
VIR_DOMAIN_DEF_FORMAT_CLOCK_ADJUST ) ) ) {
VIR_TEST_DEBUG ( " \n failed to format back '%s' " , data - > infile ) ;
goto cleanup ;
}
if ( virTestCompareToFile ( actual , data - > outfile ) < 0 )
goto cleanup ;
ret = 0 ;
cleanup :
virDomainObjEndAPI ( & obj ) ;
return ret ;
}
static const char * statusPath = abs_srcdir " /qemustatusxml2xmldata/ " ;
static void
testInfoSetStatusPaths ( struct testQemuInfo * info )
{
info - > infile = g_strdup_printf ( " %s%s-in.xml " , statusPath , info - > name ) ;
info - > outfile = g_strdup_printf ( " %s%s-out.xml " , statusPath , info - > name ) ;
}
# define FAKEROOTDIRTEMPLATE abs_builddir " / fakerootdir-XXXXXX"
static int
mymain ( void )
{
int ret = 0 ;
g_autofree char * fakerootdir = NULL ;
g_autoptr ( virQEMUDriverConfig ) cfg = NULL ;
g_autoptr ( GHashTable ) capslatest = NULL ;
2021-02-19 18:46:45 +03:00
g_autoptr ( GHashTable ) capscache = virHashNew ( virObjectFreeHashData ) ;
2020-10-05 18:47:01 +03:00
g_autoptr ( virConnect ) conn = NULL ;
capslatest = testQemuGetLatestCaps ( ) ;
if ( ! capslatest )
return EXIT_FAILURE ;
fakerootdir = g_strdup ( FAKEROOTDIRTEMPLATE ) ;
if ( ! g_mkdtemp ( fakerootdir ) ) {
fprintf ( stderr , " Cannot create fakerootdir " ) ;
abort ( ) ;
}
g_setenv ( " LIBVIRT_FAKE_ROOT_DIR " , fakerootdir , TRUE ) ;
if ( qemuTestDriverInit ( & driver ) < 0 )
return EXIT_FAILURE ;
cfg = virQEMUDriverGetConfig ( & driver ) ;
driver . privileged = true ;
if ( ! ( conn = virGetConnect ( ) ) )
goto cleanup ;
virSetConnectInterface ( conn ) ;
virSetConnectNetwork ( conn ) ;
virSetConnectNWFilter ( conn ) ;
virSetConnectNodeDev ( conn ) ;
virSetConnectSecret ( conn ) ;
virSetConnectStorage ( conn ) ;
# define DO_TEST_STATUS(_name) \
do { \
static struct testQemuInfo info = { \
. name = _name , \
} ; \
2021-02-19 18:46:45 +03:00
if ( testQemuInfoSetArgs ( & info , capscache , capslatest , \
2020-10-05 18:47:01 +03:00
ARG_QEMU_CAPS , QEMU_CAPS_LAST , \
ARG_END ) < 0 | | \
qemuTestCapsCacheInsert ( driver . qemuCapsCache , info . qemuCaps ) < 0 ) { \
VIR_TEST_DEBUG ( " Failed to generate status test data for '%s' " , _name ) ; \
return - 1 ; \
} \
testInfoSetStatusPaths ( & info ) ; \
\
if ( virTestRun ( " QEMU status XML-2-XML " _name , \
testCompareStatusXMLToXMLFiles , & info ) < 0 ) \
ret = - 1 ; \
\
testQemuInfoClear ( & info ) ; \
} while ( 0 )
DO_TEST_STATUS ( " blockjob-mirror " ) ;
DO_TEST_STATUS ( " vcpus-multi " ) ;
DO_TEST_STATUS ( " modern " ) ;
DO_TEST_STATUS ( " migration-out-nbd " ) ;
DO_TEST_STATUS ( " migration-in-params " ) ;
DO_TEST_STATUS ( " migration-out-params " ) ;
DO_TEST_STATUS ( " migration-out-nbd-tls " ) ;
2021-02-10 22:37:20 +03:00
DO_TEST_STATUS ( " migration-out-nbd-bitmaps " ) ;
2020-10-05 18:47:01 +03:00
DO_TEST_STATUS ( " upgrade " ) ;
DO_TEST_STATUS ( " blockjob-blockdev " ) ;
DO_TEST_STATUS ( " backup-pull " ) ;
cleanup :
if ( getenv ( " LIBVIRT_SKIP_CLEANUP " ) = = NULL )
virFileDeleteTree ( fakerootdir ) ;
qemuTestDriverFree ( & driver ) ;
return ret = = 0 ? EXIT_SUCCESS : EXIT_FAILURE ;
}
VIR_TEST_MAIN_PRELOAD ( mymain ,
VIR_TEST_MOCK ( " virpci " ) ,
VIR_TEST_MOCK ( " virrandom " ) ,
2020-11-09 15:23:25 +03:00
VIR_TEST_MOCK ( " domaincaps " ) )