2014-03-26 20:53:49 +04:00
# include <config.h>
# include "testutils.h"
# ifdef WITH_BHYVE
# include "datatypes.h"
2014-04-08 21:18:00 +04:00
# include "bhyve / bhyve_capabilities.h"
2014-03-26 20:53:49 +04:00
# include "bhyve / bhyve_utils.h"
# include "bhyve / bhyve_command.h"
# define VIR_FROM_THIS VIR_FROM_BHYVE
static bhyveConn driver ;
2015-12-13 06:17:15 +03:00
typedef enum {
FLAG_EXPECT_FAILURE = 1 < < 0 ,
FLAG_EXPECT_PARSE_ERROR = 1 < < 1 ,
} virBhyveXMLToArgvTestFlags ;
2014-03-26 20:53:49 +04:00
static int testCompareXMLToArgvFiles ( const char * xml ,
2014-11-08 19:48:31 +03:00
const char * cmdline ,
const char * ldcmdline ,
2015-12-13 06:17:15 +03:00
const char * dmcmdline ,
unsigned int flags )
2014-03-26 20:53:49 +04:00
{
2014-11-08 19:48:31 +03:00
char * actualargv = NULL , * actualld = NULL , * actualdm = NULL ;
2014-03-26 20:53:49 +04:00
virDomainDefPtr vmdef = NULL ;
2014-11-08 19:48:31 +03:00
virCommandPtr cmd = NULL , ldcmd = NULL ;
2014-08-14 20:15:57 +04:00
virConnectPtr conn ;
2014-03-26 20:53:49 +04:00
int ret = - 1 ;
2014-08-14 20:15:57 +04:00
if ( ! ( conn = virGetConnect ( ) ) )
goto out ;
2014-03-26 20:53:49 +04:00
if ( ! ( vmdef = virDomainDefParseFile ( xml , driver . caps , driver . xmlopt ,
2016-09-22 18:14:17 +03:00
NULL , VIR_DOMAIN_DEF_PARSE_INACTIVE ) ) ) {
2015-12-13 06:17:15 +03:00
if ( flags & FLAG_EXPECT_PARSE_ERROR )
ret = 0 ;
2014-03-26 20:53:49 +04:00
goto out ;
2015-12-13 06:17:15 +03:00
}
2014-03-26 20:53:49 +04:00
2014-11-08 19:48:36 +03:00
conn - > privateData = & driver ;
2014-03-26 20:53:49 +04:00
2015-12-13 06:17:15 +03:00
cmd = virBhyveProcessBuildBhyveCmd ( conn , vmdef , false ) ;
ldcmd = virBhyveProcessBuildLoadCmd ( conn , vmdef , " <device.map> " ,
& actualdm ) ;
if ( ( cmd = = NULL ) | | ( ldcmd = = NULL ) ) {
if ( flags & FLAG_EXPECT_FAILURE ) {
ret = 0 ;
VIR_TEST_DEBUG ( " Got expected error: %s \n " ,
virGetLastErrorMessage ( ) ) ;
virResetLastError ( ) ;
}
2014-03-26 20:53:49 +04:00
goto out ;
2015-12-13 06:17:15 +03:00
}
2014-03-26 20:53:49 +04:00
if ( ! ( actualargv = virCommandToString ( cmd ) ) )
goto out ;
2014-11-08 19:48:31 +03:00
if ( actualdm ! = NULL )
virTrimSpaces ( actualdm , NULL ) ;
if ( ! ( actualld = virCommandToString ( ldcmd ) ) )
goto out ;
2016-05-26 18:01:53 +03:00
if ( virTestCompareToFile ( actualargv , cmdline ) < 0 )
2014-03-26 20:53:49 +04:00
goto out ;
2016-05-26 18:01:53 +03:00
if ( virTestCompareToFile ( actualld , ldcmdline ) < 0 )
2014-11-08 19:48:31 +03:00
goto out ;
2015-04-23 18:14:26 +03:00
if ( virFileExists ( dmcmdline ) | | actualdm ) {
2016-05-26 18:01:53 +03:00
if ( virTestCompareToFile ( actualdm , dmcmdline ) < 0 )
2015-04-23 18:14:26 +03:00
goto out ;
2014-11-08 19:48:31 +03:00
}
2014-03-26 20:53:49 +04:00
ret = 0 ;
out :
VIR_FREE ( actualargv ) ;
2014-11-08 19:48:31 +03:00
VIR_FREE ( actualld ) ;
VIR_FREE ( actualdm ) ;
2014-03-26 20:53:49 +04:00
virCommandFree ( cmd ) ;
2014-11-08 19:48:31 +03:00
virCommandFree ( ldcmd ) ;
2014-03-26 20:53:49 +04:00
virDomainDefFree ( vmdef ) ;
return ret ;
}
2015-12-13 06:17:15 +03:00
struct testInfo {
const char * name ;
unsigned int flags ;
} ;
2014-03-26 20:53:49 +04:00
static int
testCompareXMLToArgvHelper ( const void * data )
{
int ret = - 1 ;
2015-12-13 06:17:15 +03:00
const struct testInfo * info = data ;
2014-03-26 20:53:49 +04:00
char * xml = NULL ;
2014-11-08 19:48:31 +03:00
char * args = NULL , * ldargs = NULL , * dmargs = NULL ;
2014-03-26 20:53:49 +04:00
if ( virAsprintf ( & xml , " %s/bhyvexml2argvdata/bhyvexml2argv-%s.xml " ,
2015-12-13 06:17:15 +03:00
abs_srcdir , info - > name ) < 0 | |
2014-03-26 20:53:49 +04:00
virAsprintf ( & args , " %s/bhyvexml2argvdata/bhyvexml2argv-%s.args " ,
2015-12-13 06:17:15 +03:00
abs_srcdir , info - > name ) < 0 | |
2014-11-08 19:48:31 +03:00
virAsprintf ( & ldargs , " %s/bhyvexml2argvdata/bhyvexml2argv-%s.ldargs " ,
2015-12-13 06:17:15 +03:00
abs_srcdir , info - > name ) < 0 | |
2014-11-08 19:48:31 +03:00
virAsprintf ( & dmargs , " %s/bhyvexml2argvdata/bhyvexml2argv-%s.devmap " ,
2015-12-13 06:17:15 +03:00
abs_srcdir , info - > name ) < 0 )
2014-03-26 20:53:49 +04:00
goto cleanup ;
2015-12-13 06:17:15 +03:00
ret = testCompareXMLToArgvFiles ( xml , args , ldargs , dmargs , info - > flags ) ;
2014-03-26 20:53:49 +04:00
cleanup :
VIR_FREE ( xml ) ;
VIR_FREE ( args ) ;
return ret ;
}
static int
mymain ( void )
{
int ret = 0 ;
2014-04-08 21:18:00 +04:00
if ( ( driver . caps = virBhyveCapsBuild ( ) ) = = NULL )
2014-03-26 20:53:49 +04:00
return EXIT_FAILURE ;
if ( ( driver . xmlopt = virDomainXMLOptionNew ( NULL , NULL , NULL ) ) = = NULL )
return EXIT_FAILURE ;
2015-12-13 06:17:15 +03:00
# define DO_TEST_FULL(name, flags) \
do { \
static struct testInfo info = { \
name , ( flags ) \
} ; \
2016-05-26 18:01:50 +03:00
if ( virTestRun ( " BHYVE XML-2-ARGV " name , \
2015-12-13 06:17:15 +03:00
testCompareXMLToArgvHelper , & info ) < 0 ) \
ret = - 1 ; \
2014-03-26 20:53:49 +04:00
} while ( 0 )
2015-12-13 06:17:15 +03:00
# define DO_TEST(name) \
DO_TEST_FULL ( name , 0 )
# define DO_TEST_FAILURE(name) \
DO_TEST_FULL ( name , FLAG_EXPECT_FAILURE )
# define DO_TEST_PARSE_ERROR(name) \
DO_TEST_FULL ( name , FLAG_EXPECT_PARSE_ERROR )
2014-11-08 19:48:36 +03:00
driver . grubcaps = BHYVE_GRUB_CAP_CONSDEV ;
2015-07-19 11:20:35 +03:00
driver . bhyvecaps = BHYVE_CAP_RTC_UTC ;
2014-03-26 20:53:49 +04:00
DO_TEST ( " base " ) ;
DO_TEST ( " acpiapic " ) ;
2014-07-19 19:15:26 +04:00
DO_TEST ( " disk-cdrom " ) ;
2014-03-26 20:53:49 +04:00
DO_TEST ( " disk-virtio " ) ;
DO_TEST ( " macaddr " ) ;
2014-03-30 15:54:52 +04:00
DO_TEST ( " serial " ) ;
DO_TEST ( " console " ) ;
2014-11-08 19:48:33 +03:00
DO_TEST ( " grub-defaults " ) ;
2014-11-13 01:31:53 +03:00
DO_TEST ( " grub-bootorder " ) ;
DO_TEST ( " grub-bootorder2 " ) ;
2015-12-13 06:17:15 +03:00
DO_TEST ( " bhyveload-bootorder " ) ;
DO_TEST ( " bhyveload-bootorder1 " ) ;
DO_TEST_FAILURE ( " bhyveload-bootorder2 " ) ;
DO_TEST ( " bhyveload-bootorder3 " ) ;
2014-11-08 19:48:33 +03:00
DO_TEST ( " bhyveload-explicitargs " ) ;
2015-12-13 06:17:15 +03:00
DO_TEST_FAILURE ( " bhyveload-bootorder4 " ) ;
DO_TEST_PARSE_ERROR ( " bhyveload-bootorder5 " ) ;
2014-11-08 19:48:33 +03:00
DO_TEST ( " custom-loader " ) ;
DO_TEST ( " disk-cdrom-grub " ) ;
2014-11-08 19:48:36 +03:00
DO_TEST ( " serial-grub " ) ;
2015-07-19 11:20:35 +03:00
DO_TEST ( " localtime " ) ;
2014-11-08 19:48:36 +03:00
driver . grubcaps = 0 ;
DO_TEST ( " serial-grub-nocons " ) ;
2014-03-26 20:53:49 +04:00
virObjectUnref ( driver . caps ) ;
virObjectUnref ( driver . xmlopt ) ;
return ret = = 0 ? EXIT_SUCCESS : EXIT_FAILURE ;
}
VIRT_TEST_MAIN_PRELOAD ( mymain , abs_builddir " /.libs/bhyvexml2argvmock.so " )
# else
int main ( void )
{
return EXIT_AM_SKIP ;
}
# endif /* WITH_BHYVE */