2013-07-24 12:15:37 +04:00
/*
* Copyright ( C ) 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 "testutils.h"
# include "testutilsqemu.h"
# include "qemumonitortestutils.h"
# include "qemu/qemu_conf.h"
# include "qemu/qemu_agent.h"
# include "virthread.h"
# include "virerror.h"
# include "virstring.h"
# define VIR_FROM_THIS VIR_FROM_NONE
static int
testQemuAgentFSFreeze ( const void * data )
{
virDomainXMLOptionPtr xmlopt = ( virDomainXMLOptionPtr ) data ;
qemuMonitorTestPtr test = qemuMonitorTestNewAgent ( xmlopt ) ;
int ret = - 1 ;
if ( ! test )
return - 1 ;
if ( qemuMonitorTestAddAgentSyncResponse ( test ) < 0 )
goto cleanup ;
if ( qemuMonitorTestAddItem ( test , " guest-fsfreeze-freeze " ,
" { \" return \" : 5 } " ) < 0 )
goto cleanup ;
if ( qemuMonitorTestAddAgentSyncResponse ( test ) < 0 )
goto cleanup ;
if ( qemuMonitorTestAddItem ( test , " guest-fsfreeze-freeze " ,
" { \" return \" : 7 } " ) < 0 )
goto cleanup ;
if ( ( ret = qemuAgentFSFreeze ( qemuMonitorTestGetAgent ( test ) ) ) < 0 )
goto cleanup ;
if ( ret ! = 5 ) {
virReportError ( VIR_ERR_INTERNAL_ERROR ,
" expected 5 frozen filesystems, got %d " , ret ) ;
goto cleanup ;
}
if ( ( ret = qemuAgentFSFreeze ( qemuMonitorTestGetAgent ( test ) ) ) < 0 )
goto cleanup ;
if ( ret ! = 7 ) {
virReportError ( VIR_ERR_INTERNAL_ERROR ,
" expected 7 frozen filesystems, got %d " , ret ) ;
goto cleanup ;
}
ret = 0 ;
cleanup :
qemuMonitorTestFree ( test ) ;
return ret ;
}
static int
testQemuAgentFSThaw ( const void * data )
{
virDomainXMLOptionPtr xmlopt = ( virDomainXMLOptionPtr ) data ;
qemuMonitorTestPtr test = qemuMonitorTestNewAgent ( xmlopt ) ;
int ret = - 1 ;
if ( ! test )
return - 1 ;
if ( qemuMonitorTestAddAgentSyncResponse ( test ) < 0 )
goto cleanup ;
if ( qemuMonitorTestAddItem ( test , " guest-fsfreeze-thaw " ,
" { \" return \" : 5 } " ) < 0 )
goto cleanup ;
if ( qemuMonitorTestAddAgentSyncResponse ( test ) < 0 )
goto cleanup ;
if ( qemuMonitorTestAddItem ( test , " guest-fsfreeze-thaw " ,
" { \" return \" : 7 } " ) < 0 )
goto cleanup ;
if ( ( ret = qemuAgentFSThaw ( qemuMonitorTestGetAgent ( test ) ) ) < 0 )
goto cleanup ;
if ( ret ! = 5 ) {
virReportError ( VIR_ERR_INTERNAL_ERROR ,
" expected 5 thawed filesystems, got %d " , ret ) ;
goto cleanup ;
}
if ( ( ret = qemuAgentFSThaw ( qemuMonitorTestGetAgent ( test ) ) ) < 0 )
goto cleanup ;
if ( ret ! = 7 ) {
virReportError ( VIR_ERR_INTERNAL_ERROR ,
" expected 7 thawed filesystems, got %d " , ret ) ;
goto cleanup ;
}
ret = 0 ;
cleanup :
qemuMonitorTestFree ( test ) ;
return ret ;
}
2013-07-29 13:02:19 +04:00
static int
testQemuAgentFSTrim ( const void * data )
{
virDomainXMLOptionPtr xmlopt = ( virDomainXMLOptionPtr ) data ;
qemuMonitorTestPtr test = qemuMonitorTestNewAgent ( xmlopt ) ;
int ret = - 1 ;
if ( ! test )
return - 1 ;
if ( qemuMonitorTestAddAgentSyncResponse ( test ) < 0 )
goto cleanup ;
if ( qemuMonitorTestAddItemParams ( test , " guest-fstrim " ,
" { \" return \" : {} } " ,
" minimum " , " 1337 " ,
NULL ) < 0 )
goto cleanup ;
if ( qemuAgentFSTrim ( qemuMonitorTestGetAgent ( test ) , 1337 ) < 0 )
goto cleanup ;
ret = 0 ;
cleanup :
qemuMonitorTestFree ( test ) ;
return ret ;
}
2013-07-29 17:24:32 +04:00
static int
testQemuAgentSuspend ( const void * data )
{
virDomainXMLOptionPtr xmlopt = ( virDomainXMLOptionPtr ) data ;
qemuMonitorTestPtr test = qemuMonitorTestNewAgent ( xmlopt ) ;
int ret = - 1 ;
size_t i ;
if ( ! test )
return - 1 ;
if ( qemuMonitorTestAddAgentSyncResponse ( test ) < 0 )
goto cleanup ;
if ( qemuMonitorTestAddItem ( test , " guest-suspend-ram " ,
" { \" return \" : {} } " ) < 0 )
goto cleanup ;
if ( qemuMonitorTestAddAgentSyncResponse ( test ) < 0 )
goto cleanup ;
if ( qemuMonitorTestAddItem ( test , " guest-suspend-disk " ,
" { \" return \" : {} } " ) < 0 )
goto cleanup ;
if ( qemuMonitorTestAddAgentSyncResponse ( test ) < 0 )
goto cleanup ;
if ( qemuMonitorTestAddItem ( test , " guest-suspend-hybrid " ,
" { \" return \" : {} } " ) < 0 )
goto cleanup ;
/* try the commands - fail if ordering changes */
for ( i = 0 ; i < VIR_NODE_SUSPEND_TARGET_LAST ; i + + ) {
if ( qemuAgentSuspend ( qemuMonitorTestGetAgent ( test ) , i ) < 0 )
goto cleanup ;
}
ret = 0 ;
cleanup :
qemuMonitorTestFree ( test ) ;
return ret ;
}
2013-07-24 12:15:37 +04:00
static int
mymain ( void )
{
int ret = 0 ;
virDomainXMLOptionPtr xmlopt ;
# if !WITH_YAJL
fputs ( " libvirt not compiled with yajl, skipping this test \n " , stderr ) ;
return EXIT_AM_SKIP ;
# endif
if ( virThreadInitialize ( ) < 0 | |
! ( xmlopt = virQEMUDriverCreateXMLConf ( NULL ) ) )
return EXIT_FAILURE ;
virEventRegisterDefaultImpl ( ) ;
# define DO_TEST(name) \
if ( virtTestRun ( # name , 1 , testQemuAgent # # name , xmlopt ) < 0 ) \
ret = - 1
DO_TEST ( FSFreeze ) ;
DO_TEST ( FSThaw ) ;
2013-07-29 13:02:19 +04:00
DO_TEST ( FSTrim ) ;
2013-07-29 17:24:32 +04:00
DO_TEST ( Suspend ) ;
2013-07-24 12:15:37 +04:00
virObjectUnref ( xmlopt ) ;
return ( ret = = 0 ) ? EXIT_SUCCESS : EXIT_FAILURE ;
}
VIRT_TEST_MAIN ( mymain )