2014-01-30 03:33:42 +04:00
/*
* Copyright ( C ) 2014 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"
# ifdef __linux__
2018-12-13 17:53:50 +03:00
# define LIBVIRT_VIRCOMMANDPRIV_H_ALLOW
2014-03-11 14:59:58 +04:00
# include "vircommandpriv.h"
2014-01-30 03:33:42 +04:00
# include "virkmod.h"
# include "virstring.h"
2020-06-16 14:07:30 +03:00
# define MODNAME "vfio-pci"
2014-01-30 03:33:42 +04:00
# define VIR_FROM_THIS VIR_FROM_NONE
static int
checkOutput ( virBufferPtr buf , const char * exp_cmd )
{
int ret = - 1 ;
char * actual_cmd = NULL ;
if ( ! ( actual_cmd = virBufferContentAndReset ( buf ) ) ) {
2019-10-24 15:25:59 +03:00
fprintf ( stderr , " cannot compare buffer to exp: %s " , exp_cmd ) ;
2014-01-30 03:33:42 +04:00
goto cleanup ;
}
if ( STRNEQ ( exp_cmd , actual_cmd ) ) {
2016-05-26 18:01:51 +03:00
virTestDifference ( stderr , exp_cmd , actual_cmd ) ;
2014-01-30 03:33:42 +04:00
goto cleanup ;
}
ret = 0 ;
2014-03-25 10:53:44 +04:00
cleanup :
2014-01-30 03:33:42 +04:00
VIR_FREE ( actual_cmd ) ;
return ret ;
}
static int
2020-06-16 14:07:30 +03:00
testKModLoad ( const void * args G_GNUC_UNUSED )
2014-01-30 03:33:42 +04:00
{
int ret = - 1 ;
char * errbuf = NULL ;
2020-07-03 02:35:41 +03:00
g_auto ( virBuffer ) buf = VIR_BUFFER_INITIALIZER ;
2014-01-30 03:33:42 +04:00
2014-03-07 15:39:48 +04:00
virCommandSetDryRun ( & buf , NULL , NULL ) ;
2014-01-30 03:33:42 +04:00
2020-06-16 14:07:30 +03:00
errbuf = virKModLoad ( MODNAME ) ;
2014-01-30 03:33:42 +04:00
if ( errbuf ) {
fprintf ( stderr , " Failed to load, error: %s \n " , errbuf ) ;
goto cleanup ;
}
2020-06-16 14:07:30 +03:00
if ( checkOutput ( & buf , MODPROBE " -b " MODNAME " \n " ) < 0 )
2014-01-30 03:33:42 +04:00
goto cleanup ;
ret = 0 ;
2014-03-25 10:53:44 +04:00
cleanup :
2014-03-07 15:39:48 +04:00
virCommandSetDryRun ( NULL , NULL , NULL ) ;
2014-01-30 03:33:42 +04:00
VIR_FREE ( errbuf ) ;
return ret ;
}
static int
2020-06-16 14:07:30 +03:00
testKModUnload ( const void * args G_GNUC_UNUSED )
2014-01-30 03:33:42 +04:00
{
int ret = - 1 ;
char * errbuf = NULL ;
2020-07-03 02:35:41 +03:00
g_auto ( virBuffer ) buf = VIR_BUFFER_INITIALIZER ;
2014-01-30 03:33:42 +04:00
2014-03-07 15:39:48 +04:00
virCommandSetDryRun ( & buf , NULL , NULL ) ;
2014-01-30 03:33:42 +04:00
2020-06-16 14:07:30 +03:00
errbuf = virKModUnload ( MODNAME ) ;
2014-01-30 03:33:42 +04:00
if ( errbuf ) {
fprintf ( stderr , " Failed to unload, error: %s \n " , errbuf ) ;
goto cleanup ;
}
2020-06-16 14:07:30 +03:00
if ( checkOutput ( & buf , RMMOD " " MODNAME " \n " ) < 0 )
2014-01-30 03:33:42 +04:00
goto cleanup ;
ret = 0 ;
2014-03-25 10:53:44 +04:00
cleanup :
2014-03-07 15:39:48 +04:00
virCommandSetDryRun ( NULL , NULL , NULL ) ;
2014-01-30 03:33:42 +04:00
VIR_FREE ( errbuf ) ;
return ret ;
}
static int
mymain ( void )
{
int ret = 0 ;
2020-06-16 14:07:30 +03:00
if ( virTestRun ( " load " , testKModLoad , NULL ) < 0 )
ret = - 1 ;
if ( virTestRun ( " unload " , testKModUnload , NULL ) < 0 )
ret = - 1 ;
2014-01-30 03:33:42 +04:00
2014-03-17 13:38:38 +04:00
return ret = = 0 ? EXIT_SUCCESS : EXIT_FAILURE ;
2014-01-30 03:33:42 +04:00
}
2017-03-29 17:45:42 +03:00
VIR_TEST_MAIN ( mymain ) ;
2014-01-30 03:33:42 +04:00
# else
int
main ( void )
{
return EXIT_AM_SKIP ;
}
# endif