2018-03-20 01:45:51 +03:00
/*
* Copyright ( C ) 2011 - 2013 Red Hat , Inc .
*
* 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/>.
*
*/
# include <config.h>
# include "virjson.h"
# include "virbuffer.h"
# include "virxml.h"
# include "testutils.h"
# include "testutilsqemu.h"
# include "qemumonitortestutils.h"
# include "qemu/qemu_migration_params.h"
2018-12-13 17:53:50 +03:00
# define LIBVIRT_QEMU_MIGRATION_PARAMSPRIV_H_ALLOW
2018-03-20 01:45:51 +03:00
# include "qemu/qemu_migration_paramspriv.h"
# include "qemu/qemu_monitor.h"
# define VIR_FROM_THIS VIR_FROM_NONE
typedef struct _qemuMigParamsData qemuMigParamsData ;
struct _qemuMigParamsData {
virDomainXMLOptionPtr xmlopt ;
const char * name ;
} ;
static void
qemuMigParamsTestFormatXML ( virBufferPtr buf ,
qemuMigrationParamsPtr migParams )
{
virBufferAddLit ( buf , " <test> \n " ) ;
virBufferAdjustIndent ( buf , 2 ) ;
if ( migParams )
qemuMigrationParamsFormat ( buf , migParams ) ;
virBufferAdjustIndent ( buf , - 2 ) ;
virBufferAddLit ( buf , " </test> \n " ) ;
}
static int
qemuMigParamsTestXML2XML ( const void * opaque )
{
const qemuMigParamsData * data = opaque ;
2020-07-03 02:35:41 +03:00
g_auto ( virBuffer ) buf = VIR_BUFFER_INITIALIZER ;
2020-07-28 22:57:28 +03:00
g_autofree char * xmlFile = NULL ;
2018-03-20 01:45:51 +03:00
xmlDocPtr doc = NULL ;
xmlXPathContextPtr ctxt = NULL ;
qemuMigrationParamsPtr migParams = NULL ;
2020-07-28 22:57:28 +03:00
g_autofree char * actualXML = NULL ;
2018-03-20 01:45:51 +03:00
int ret = - 1 ;
2019-10-22 16:26:14 +03:00
xmlFile = g_strdup_printf ( " %s/qemumigparamsdata/%s.xml " , abs_srcdir ,
data - > name ) ;
2018-03-20 01:45:51 +03:00
if ( ! ( doc = virXMLParseFileCtxt ( xmlFile , & ctxt ) ) )
goto cleanup ;
if ( qemuMigrationParamsParse ( ctxt , & migParams ) < 0 )
goto cleanup ;
qemuMigParamsTestFormatXML ( & buf , migParams ) ;
if ( ! ( actualXML = virBufferContentAndReset ( & buf ) ) )
goto cleanup ;
if ( virTestCompareToFile ( actualXML , xmlFile ) < 0 )
goto cleanup ;
ret = 0 ;
cleanup :
qemuMigrationParamsFree ( migParams ) ;
xmlXPathFreeContext ( ctxt ) ;
xmlFreeDoc ( doc ) ;
return ret ;
}
static int
qemuMigParamsTestXML ( const void * opaque )
{
const qemuMigParamsData * data = opaque ;
2020-07-03 02:35:41 +03:00
g_auto ( virBuffer ) buf = VIR_BUFFER_INITIALIZER ;
2020-07-28 22:57:28 +03:00
g_autofree char * replyFile = NULL ;
g_autofree char * xmlFile = NULL ;
2018-03-20 01:45:51 +03:00
qemuMonitorTestPtr mon = NULL ;
virJSONValuePtr params = NULL ;
qemuMigrationParamsPtr migParams = NULL ;
2020-07-28 22:57:28 +03:00
g_autofree char * actualXML = NULL ;
2018-03-20 01:45:51 +03:00
int ret = - 1 ;
2019-10-22 16:26:14 +03:00
replyFile = g_strdup_printf ( " %s/qemumigparamsdata/%s.reply " ,
abs_srcdir , data - > name ) ;
xmlFile = g_strdup_printf ( " %s/qemumigparamsdata/%s.xml " ,
abs_srcdir , data - > name ) ;
2018-03-20 01:45:51 +03:00
if ( ! ( mon = qemuMonitorTestNewFromFile ( replyFile , data - > xmlopt , true ) ) )
goto cleanup ;
if ( qemuMonitorGetMigrationParams ( qemuMonitorTestGetMonitor ( mon ) ,
& params ) < 0 )
goto cleanup ;
if ( ! ( migParams = qemuMigrationParamsFromJSON ( params ) ) )
goto cleanup ;
qemuMigParamsTestFormatXML ( & buf , migParams ) ;
if ( ! ( actualXML = virBufferContentAndReset ( & buf ) ) )
goto cleanup ;
if ( virTestCompareToFile ( actualXML , xmlFile ) < 0 )
goto cleanup ;
ret = 0 ;
cleanup :
virJSONValueFree ( params ) ;
qemuMigrationParamsFree ( migParams ) ;
qemuMonitorTestFree ( mon ) ;
return ret ;
}
static int
qemuMigParamsTestJSON ( const void * opaque )
{
const qemuMigParamsData * data = opaque ;
2020-07-28 22:57:28 +03:00
g_autofree char * replyFile = NULL ;
g_autofree char * jsonFile = NULL ;
2018-03-20 01:45:51 +03:00
qemuMonitorTestPtr mon = NULL ;
virJSONValuePtr paramsIn = NULL ;
virJSONValuePtr paramsOut = NULL ;
qemuMigrationParamsPtr migParams = NULL ;
2020-07-28 22:57:28 +03:00
g_autofree char * actualJSON = NULL ;
2018-03-20 01:45:51 +03:00
int ret = - 1 ;
2019-10-22 16:26:14 +03:00
replyFile = g_strdup_printf ( " %s/qemumigparamsdata/%s.reply " ,
abs_srcdir , data - > name ) ;
jsonFile = g_strdup_printf ( " %s/qemumigparamsdata/%s.json " ,
abs_srcdir , data - > name ) ;
2018-03-20 01:45:51 +03:00
if ( ! ( mon = qemuMonitorTestNewFromFile ( replyFile , data - > xmlopt , true ) ) )
goto cleanup ;
if ( qemuMonitorGetMigrationParams ( qemuMonitorTestGetMonitor ( mon ) ,
& paramsIn ) < 0 )
goto cleanup ;
if ( ! ( migParams = qemuMigrationParamsFromJSON ( paramsIn ) ) )
goto cleanup ;
if ( ! ( paramsOut = qemuMigrationParamsToJSON ( migParams ) ) | |
! ( actualJSON = virJSONValueToString ( paramsOut , true ) ) )
goto cleanup ;
if ( virTestCompareToFile ( actualJSON , jsonFile ) < 0 )
goto cleanup ;
ret = 0 ;
cleanup :
virJSONValueFree ( paramsIn ) ;
virJSONValueFree ( paramsOut ) ;
qemuMigrationParamsFree ( migParams ) ;
qemuMonitorTestFree ( mon ) ;
return ret ;
}
static int
mymain ( void )
{
virQEMUDriver driver ;
int ret = 0 ;
2019-09-16 19:44:23 +03:00
if ( qemuTestDriverInit ( & driver ) < 0 )
2018-03-20 01:45:51 +03:00
return EXIT_FAILURE ;
virEventRegisterDefaultImpl ( ) ;
# define DO_TEST(name) \
do { \
qemuMigParamsData data = { \
driver . xmlopt , name \
} ; \
if ( virTestRun ( name " (xml) " , qemuMigParamsTestXML , & data ) < 0 ) \
ret = - 1 ; \
if ( virTestRun ( name " (json) " , qemuMigParamsTestJSON , & data ) < 0 ) \
ret = - 1 ; \
if ( virTestRun ( name " (xml2xml) " , qemuMigParamsTestXML2XML , & data ) < 0 ) \
ret = - 1 ; \
} while ( 0 )
DO_TEST ( " unsupported " ) ;
2018-03-20 01:46:46 +03:00
DO_TEST ( " empty " ) ;
DO_TEST ( " basic " ) ;
2018-03-20 01:42:01 +03:00
DO_TEST ( " tls " ) ;
DO_TEST ( " tls-enabled " ) ;
DO_TEST ( " tls-hostname " ) ;
2018-03-20 01:45:51 +03:00
qemuTestDriverFree ( & driver ) ;
return ( ret = = 0 ) ? EXIT_SUCCESS : EXIT_FAILURE ;
}
VIR_TEST_MAIN ( mymain )