2014-12-15 21:30:05 -07:00
/*
2016-02-15 19:42:27 -07:00
* xlconfigtest . c : Test xl . cfg ( 5 ) < - > domXML config conversions
2014-12-15 21:30:05 -07:00
*
* Copyright ( C ) 2007 , 2010 - 2011 , 2014 Red Hat , Inc .
* Copyright ( c ) 2015 SUSE LINUX Products GmbH , Nuernberg , Germany .
*
* 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/>.
*
* Author : Daniel P . Berrange < berrange @ redhat . com >
* Author : Kiarie Kahurani < davidkiarie4 @ gmail . com >
*
*/
# include <config.h>
# include <stdio.h>
# include <string.h>
# include <unistd.h>
# include "internal.h"
# include "datatypes.h"
# include "xenconfig/xen_xl.h"
# include "viralloc.h"
# include "virstring.h"
# include "testutils.h"
# include "testutilsxen.h"
2015-01-20 16:45:09 -07:00
# include "libxl/libxl_conf.h"
2014-12-15 21:30:05 -07:00
# define VIR_FROM_THIS VIR_FROM_NONE
static virCapsPtr caps ;
static virDomainXMLOptionPtr xmlopt ;
2016-02-15 19:42:27 -07:00
2014-12-15 21:30:05 -07:00
/*
2016-02-15 19:42:27 -07:00
* Parses domXML to virDomainDef object , which is then converted to xl . cfg ( 5 )
* config and compared with expected config .
2014-12-15 21:30:05 -07:00
*/
static int
2016-02-15 19:42:27 -07:00
testCompareParseXML ( const char * xlcfg , const char * xml )
2014-12-15 21:30:05 -07:00
{
2016-02-15 19:42:27 -07:00
char * gotxlcfgData = NULL ;
2014-12-15 21:30:05 -07:00
virConfPtr conf = NULL ;
virConnectPtr conn = NULL ;
int wrote = 4096 ;
int ret = - 1 ;
virDomainDefPtr def = NULL ;
2016-02-15 19:42:27 -07:00
if ( VIR_ALLOC_N ( gotxlcfgData , wrote ) < 0 )
2014-12-15 21:30:05 -07:00
goto fail ;
conn = virGetConnect ( ) ;
if ( ! conn ) goto fail ;
2015-04-23 11:10:15 -04:00
if ( ! ( def = virDomainDefParseFile ( xml , caps , xmlopt ,
VIR_DOMAIN_XML_INACTIVE ) ) )
2014-12-15 21:30:05 -07:00
goto fail ;
if ( ! virDomainDefCheckABIStability ( def , def ) ) {
fprintf ( stderr , " ABI stability check failed on %s " , xml ) ;
goto fail ;
}
2015-12-04 19:11:39 -07:00
if ( ! ( conf = xenFormatXL ( def , conn ) ) )
2014-12-15 21:30:05 -07:00
goto fail ;
2016-02-15 19:42:27 -07:00
if ( virConfWriteMem ( gotxlcfgData , & wrote , conf ) < 0 )
2014-12-15 21:30:05 -07:00
goto fail ;
2016-02-15 19:42:27 -07:00
gotxlcfgData [ wrote ] = ' \0 ' ;
2014-12-15 21:30:05 -07:00
2016-05-26 17:01:53 +02:00
if ( virTestCompareToFile ( gotxlcfgData , xlcfg ) < 0 )
2014-12-15 21:30:05 -07:00
goto fail ;
ret = 0 ;
fail :
2016-02-15 19:42:27 -07:00
VIR_FREE ( gotxlcfgData ) ;
2014-12-15 21:30:05 -07:00
if ( conf )
virConfFree ( conf ) ;
virDomainDefFree ( def ) ;
virObjectUnref ( conn ) ;
return ret ;
}
2016-02-15 19:42:27 -07:00
2014-12-15 21:30:05 -07:00
/*
2016-02-15 19:42:27 -07:00
* Parses xl . cfg ( 5 ) config to virDomainDef object , which is then converted to
* domXML and compared to expected XML .
2014-12-15 21:30:05 -07:00
*/
static int
2016-02-15 19:42:27 -07:00
testCompareFormatXML ( const char * xlcfg , const char * xml )
2014-12-15 21:30:05 -07:00
{
2016-02-15 19:42:27 -07:00
char * xlcfgData = NULL ;
2014-12-15 21:30:05 -07:00
char * gotxml = NULL ;
virConfPtr conf = NULL ;
int ret = - 1 ;
virConnectPtr conn ;
virDomainDefPtr def = NULL ;
conn = virGetConnect ( ) ;
if ( ! conn ) goto fail ;
2016-05-26 17:01:52 +02:00
if ( virTestLoadFile ( xlcfg , & xlcfgData ) < 0 )
2014-12-15 21:30:05 -07:00
goto fail ;
2016-02-15 19:42:27 -07:00
if ( ! ( conf = virConfReadMem ( xlcfgData , strlen ( xlcfgData ) , 0 ) ) )
2014-12-15 21:30:05 -07:00
goto fail ;
2015-12-04 19:11:39 -07:00
if ( ! ( def = xenParseXL ( conf , caps , xmlopt ) ) )
2014-12-15 21:30:05 -07:00
goto fail ;
2016-02-03 21:40:35 +00:00
if ( ! ( gotxml = virDomainDefFormat ( def , caps , VIR_DOMAIN_XML_INACTIVE |
2014-12-15 21:30:05 -07:00
VIR_DOMAIN_XML_SECURE ) ) )
goto fail ;
2016-05-26 17:01:53 +02:00
if ( virTestCompareToFile ( gotxml , xml ) < 0 )
2014-12-15 21:30:05 -07:00
goto fail ;
ret = 0 ;
fail :
if ( conf )
virConfFree ( conf ) ;
2016-02-15 19:42:27 -07:00
VIR_FREE ( xlcfgData ) ;
2014-12-15 21:30:05 -07:00
VIR_FREE ( gotxml ) ;
virDomainDefFree ( def ) ;
virObjectUnref ( conn ) ;
return ret ;
}
struct testInfo {
const char * name ;
int mode ;
} ;
static int
testCompareHelper ( const void * data )
{
int result = - 1 ;
const struct testInfo * info = data ;
char * xml = NULL ;
char * cfg = NULL ;
if ( virAsprintf ( & xml , " %s/xlconfigdata/test-%s.xml " ,
abs_srcdir , info - > name ) < 0 | |
virAsprintf ( & cfg , " %s/xlconfigdata/test-%s.cfg " ,
abs_srcdir , info - > name ) < 0 )
goto cleanup ;
if ( info - > mode = = 0 )
2015-12-04 18:09:28 -07:00
result = testCompareParseXML ( cfg , xml ) ;
2014-12-15 21:30:05 -07:00
else
2015-12-04 18:09:28 -07:00
result = testCompareFormatXML ( cfg , xml ) ;
2014-12-15 21:30:05 -07:00
cleanup :
VIR_FREE ( xml ) ;
VIR_FREE ( cfg ) ;
return result ;
}
static int
mymain ( void )
{
int ret = 0 ;
if ( ! ( caps = testXLInitCaps ( ) ) )
return EXIT_FAILURE ;
2015-01-20 16:45:09 -07:00
if ( ! ( xmlopt = libxlCreateXMLConf ( ) ) )
2014-12-15 21:30:05 -07:00
return EXIT_FAILURE ;
2016-01-21 12:29:29 +00:00
# define DO_TEST_PARSE(name) \
2014-12-15 21:30:05 -07:00
do { \
2015-12-04 18:09:28 -07:00
struct testInfo info0 = { name , 0 } ; \
2016-05-26 17:01:50 +02:00
if ( virTestRun ( " Xen XL-2-XML Parse " name , \
testCompareHelper , & info0 ) < 0 ) \
2014-12-15 21:30:05 -07:00
ret = - 1 ; \
2016-01-21 12:29:29 +00:00
} while ( 0 )
# define DO_TEST_FORMAT(name) \
do { \
struct testInfo info1 = { name , 1 } ; \
2016-05-26 17:01:50 +02:00
if ( virTestRun ( " Xen XL-2-XML Format " name , \
testCompareHelper , & info1 ) < 0 ) \
2014-12-15 21:30:05 -07:00
ret = - 1 ; \
} while ( 0 )
2016-01-21 12:29:29 +00:00
# define DO_TEST(name) \
do { \
DO_TEST_PARSE ( name ) ; \
DO_TEST_FORMAT ( name ) ; \
} while ( 0 )
2015-12-15 14:47:40 -07:00
DO_TEST ( " paravirt-maxvcpus " ) ;
2015-12-04 18:09:28 -07:00
DO_TEST ( " new-disk " ) ;
2016-02-09 16:19:01 -07:00
DO_TEST_FORMAT ( " disk-positional-parms-full " ) ;
DO_TEST_FORMAT ( " disk-positional-parms-partial " ) ;
2015-12-04 18:09:28 -07:00
DO_TEST ( " spice " ) ;
DO_TEST ( " spice-features " ) ;
2015-12-28 15:26:17 -07:00
DO_TEST ( " vif-rate " ) ;
2016-02-22 18:50:19 -07:00
DO_TEST ( " fullvirt-nohap " ) ;
2015-04-02 14:57:54 +02:00
2016-01-21 12:29:29 +00:00
DO_TEST ( " paravirt-cmdline " ) ;
DO_TEST_FORMAT ( " paravirt-cmdline-extra-root " ) ;
DO_TEST_FORMAT ( " paravirt-cmdline-bogus-extra-root " ) ;
2016-02-10 17:39:18 -07:00
DO_TEST ( " rbd-multihost-noauth " ) ;
2016-01-21 12:29:29 +00:00
2015-04-02 14:57:54 +02:00
# ifdef LIBXL_HAVE_BUILDINFO_USBDEVICE_LIST
2015-12-04 18:09:28 -07:00
DO_TEST ( " fullvirt-multiusb " ) ;
2015-04-02 14:57:54 +02:00
# endif
2015-03-19 22:16:11 -06:00
# ifdef LIBXL_HAVE_BUILDINFO_KERNEL
2015-12-04 18:09:28 -07:00
DO_TEST ( " fullvirt-direct-kernel-boot " ) ;
2016-01-21 12:29:29 +00:00
DO_TEST_FORMAT ( " fullvirt-direct-kernel-boot-extra " ) ;
DO_TEST_FORMAT ( " fullvirt-direct-kernel-boot-bogus-extra " ) ;
2015-03-19 22:16:11 -06:00
# endif
2016-05-17 17:34:46 +08:00
DO_TEST ( " vif-typename " ) ;
2014-12-15 21:30:05 -07:00
virObjectUnref ( caps ) ;
virObjectUnref ( xmlopt ) ;
return ret = = 0 ? EXIT_SUCCESS : EXIT_FAILURE ;
}
VIRT_TEST_MAIN ( mymain )