2012-03-26 21:09:31 +04:00
# include <config.h>
# include <stdio.h>
# include <stdlib.h>
# include <unistd.h>
# include <string.h>
# include <sys/types.h>
# include <fcntl.h>
2013-04-16 17:41:44 +04:00
# include "testutils.h"
2012-03-26 21:09:31 +04:00
# ifdef WITH_LXC
# include "internal.h"
# include "lxc / lxc_conf.h"
# include "testutilslxc.h"
2013-04-03 14:36:23 +04:00
# include "virstring.h"
2012-03-26 21:09:31 +04:00
2013-06-07 19:10:28 +04:00
# define VIR_FROM_THIS VIR_FROM_NONE
2012-03-26 21:09:31 +04:00
static virCapsPtr caps ;
2013-03-31 22:03:42 +04:00
static virDomainXMLOptionPtr xmlopt ;
2012-03-26 21:09:31 +04:00
static int
testCompareXMLToXMLFiles ( const char * inxml , const char * outxml , bool live )
{
char * inXmlData = NULL ;
char * outXmlData = NULL ;
char * actual = NULL ;
int ret = - 1 ;
virDomainDefPtr def = NULL ;
if ( virtTestLoadFile ( inxml , & inXmlData ) < 0 )
goto fail ;
if ( virtTestLoadFile ( outxml , & outXmlData ) < 0 )
goto fail ;
2013-03-28 17:55:55 +04:00
if ( ! ( def = virDomainDefParseString ( inXmlData , caps , xmlopt ,
2012-03-26 21:09:31 +04:00
1 < < VIR_DOMAIN_VIRT_LXC ,
live ? 0 : VIR_DOMAIN_XML_INACTIVE ) ) )
goto fail ;
if ( ! ( actual = virDomainDefFormat ( def , VIR_DOMAIN_XML_SECURE ) ) )
goto fail ;
if ( STRNEQ ( outXmlData , actual ) ) {
virtTestDifference ( stderr , outXmlData , actual ) ;
goto fail ;
}
ret = 0 ;
fail :
VIR_FREE ( inXmlData ) ;
VIR_FREE ( outXmlData ) ;
VIR_FREE ( actual ) ;
virDomainDefFree ( def ) ;
return ret ;
}
struct testInfo {
const char * name ;
int different ;
bool inactive_only ;
} ;
static int
testCompareXMLToXMLHelper ( const void * data )
{
const struct testInfo * info = data ;
char * xml_in = NULL ;
char * xml_out = NULL ;
int ret = - 1 ;
if ( virAsprintf ( & xml_in , " %s/lxcxml2xmldata/lxc-%s.xml " ,
abs_srcdir , info - > name ) < 0 | |
virAsprintf ( & xml_out , " %s/lxcxml2xmloutdata/lxc-%s.xml " ,
abs_srcdir , info - > name ) < 0 )
goto cleanup ;
if ( info - > different ) {
2013-09-25 12:35:29 +04:00
if ( testCompareXMLToXMLFiles ( xml_in , xml_out , false ) < 0 )
goto cleanup ;
2012-03-26 21:09:31 +04:00
} else {
2013-09-25 12:35:29 +04:00
if ( testCompareXMLToXMLFiles ( xml_in , xml_in , false ) < 0 )
goto cleanup ;
2012-03-26 21:09:31 +04:00
}
if ( ! info - > inactive_only ) {
if ( info - > different ) {
2013-09-25 12:35:29 +04:00
if ( testCompareXMLToXMLFiles ( xml_in , xml_out , true ) < 0 )
goto cleanup ;
2012-03-26 21:09:31 +04:00
} else {
2013-09-25 12:35:29 +04:00
if ( testCompareXMLToXMLFiles ( xml_in , xml_in , true ) < 0 )
goto cleanup ;
2012-03-26 21:09:31 +04:00
}
}
2013-09-25 12:35:29 +04:00
ret = 0 ;
2012-03-26 21:09:31 +04:00
cleanup :
VIR_FREE ( xml_in ) ;
VIR_FREE ( xml_out ) ;
return ret ;
}
static int
mymain ( void )
{
int ret = 0 ;
if ( ( caps = testLXCCapsInit ( ) ) = = NULL )
2012-03-30 07:17:30 +04:00
return EXIT_FAILURE ;
2012-03-26 21:09:31 +04:00
2013-03-31 22:03:42 +04:00
if ( ! ( xmlopt = lxcDomainXMLConfInit ( ) ) )
2013-03-05 19:17:24 +04:00
return EXIT_FAILURE ;
2012-03-26 21:09:31 +04:00
# define DO_TEST_FULL(name, is_different, inactive) \
do { \
const struct testInfo info = { name , is_different , inactive } ; \
2013-09-20 22:13:35 +04:00
if ( virtTestRun ( " LXC XML-2-XML " name , \
testCompareXMLToXMLHelper , & info ) < 0 ) \
2012-03-26 21:09:31 +04:00
ret = - 1 ; \
} while ( 0 )
# define DO_TEST(name) \
DO_TEST_FULL ( name , 0 , false )
# define DO_TEST_DIFFERENT(name) \
DO_TEST_FULL ( name , 1 , false )
/* Unset or set all envvars here that are copied in lxcdBuildCommandLine
* using ADD_ENV_COPY , otherwise these tests may fail due to unexpected
* values for these envvars */
setenv ( " PATH " , " /bin " , 1 ) ;
DO_TEST ( " systemd " ) ;
2012-11-23 17:50:29 +04:00
DO_TEST ( " hostdev " ) ;
2013-04-22 18:06:14 +04:00
DO_TEST ( " disk-formats " ) ;
2012-03-26 21:09:31 +04:00
2013-02-01 16:26:18 +04:00
virObjectUnref ( caps ) ;
2013-03-31 22:03:42 +04:00
virObjectUnref ( xmlopt ) ;
2012-03-26 21:09:31 +04:00
2012-03-30 07:17:30 +04:00
return ret = = 0 ? EXIT_SUCCESS : EXIT_FAILURE ;
2012-03-26 21:09:31 +04:00
}
VIRT_TEST_MAIN ( mymain )
# else
int
main ( void )
{
return EXIT_AM_SKIP ;
}
# endif /* WITH_LXC */