2009-10-09 22:17:21 +04:00
# include <config.h>
# include <stdio.h>
# include <stdlib.h>
# include <unistd.h>
# include <string.h>
# include <sys/types.h>
# include <fcntl.h>
# include "internal.h"
# include "testutils.h"
# include "storage_conf.h"
# include "testutilsqemu.h"
2011-04-25 02:25:10 +04:00
static int
testCompareXMLToXMLFiles ( const char * poolxml , const char * inxml ,
const char * outxml )
{
char * poolXmlData = NULL ;
char * inXmlData = NULL ;
char * outXmlData = NULL ;
2009-10-09 22:17:21 +04:00
char * actual = NULL ;
int ret = - 1 ;
virStoragePoolDefPtr pool = NULL ;
virStorageVolDefPtr dev = NULL ;
2011-04-25 02:25:10 +04:00
if ( virtTestLoadFile ( poolxml , & poolXmlData ) < 0 )
2009-10-09 22:17:21 +04:00
goto fail ;
2011-04-25 02:25:10 +04:00
if ( virtTestLoadFile ( inxml , & inXmlData ) < 0 )
2009-10-09 22:17:21 +04:00
goto fail ;
2011-04-25 02:25:10 +04:00
if ( virtTestLoadFile ( outxml , & outXmlData ) < 0 )
2009-10-09 22:17:21 +04:00
goto fail ;
2010-02-10 14:42:56 +03:00
if ( ! ( pool = virStoragePoolDefParseString ( poolXmlData ) ) )
2009-10-09 22:17:21 +04:00
goto fail ;
2010-02-10 14:42:56 +03:00
if ( ! ( dev = virStorageVolDefParseString ( pool , inXmlData ) ) )
2009-10-09 22:17:21 +04:00
goto fail ;
2010-02-10 14:42:56 +03:00
if ( ! ( actual = virStorageVolDefFormat ( pool , dev ) ) )
2009-10-09 22:17:21 +04:00
goto fail ;
if ( STRNEQ ( outXmlData , actual ) ) {
virtTestDifference ( stderr , outXmlData , actual ) ;
goto fail ;
}
ret = 0 ;
fail :
2011-04-25 02:25:10 +04:00
free ( poolXmlData ) ;
free ( inXmlData ) ;
free ( outXmlData ) ;
2009-10-09 22:17:21 +04:00
free ( actual ) ;
virStoragePoolDefFree ( pool ) ;
virStorageVolDefFree ( dev ) ;
return ret ;
}
struct testInfo {
const char * pool ;
const char * name ;
} ;
2011-04-25 02:25:10 +04:00
static int
testCompareXMLToXMLHelper ( const void * data )
{
int result = - 1 ;
2009-10-09 22:17:21 +04:00
const struct testInfo * info = data ;
2011-04-25 02:25:10 +04:00
char * poolxml = NULL ;
char * inxml = NULL ;
char * outxml = NULL ;
if ( virAsprintf ( & poolxml , " %s/storagepoolxml2xmlin/%s.xml " ,
abs_srcdir , info - > pool ) < 0 | |
virAsprintf ( & inxml , " %s/storagevolxml2xmlin/%s.xml " ,
abs_srcdir , info - > name ) < 0 | |
virAsprintf ( & outxml , " %s/storagevolxml2xmlout/%s.xml " ,
abs_srcdir , info - > name ) < 0 ) {
goto cleanup ;
}
result = testCompareXMLToXMLFiles ( poolxml , inxml , outxml ) ;
cleanup :
free ( poolxml ) ;
free ( inxml ) ;
free ( outxml ) ;
2009-10-09 22:17:21 +04:00
2011-04-25 02:25:10 +04:00
return result ;
2009-10-09 22:17:21 +04:00
}
static int
2011-04-29 20:21:20 +04:00
mymain ( void )
2009-10-09 22:17:21 +04:00
{
int ret = 0 ;
# define DO_TEST(pool, name) \
do { \
struct testInfo info = { pool , name } ; \
if ( virtTestRun ( " Storage Vol XML-2-XML " name , \
1 , testCompareXMLToXMLHelper , & info ) < 0 ) \
ret = - 1 ; \
} \
while ( 0 ) ;
DO_TEST ( " pool-dir " , " vol-file " ) ;
DO_TEST ( " pool-dir " , " vol-file-backing " ) ;
DO_TEST ( " pool-dir " , " vol-qcow2 " ) ;
DO_TEST ( " pool-disk " , " vol-partition " ) ;
DO_TEST ( " pool-logical " , " vol-logical " ) ;
DO_TEST ( " pool-logical " , " vol-logical-backing " ) ;
return ( ret = = 0 ? EXIT_SUCCESS : EXIT_FAILURE ) ;
}
VIRT_TEST_MAIN ( mymain )