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
2021-03-11 10:16:13 +03:00
checkOutput ( virBuffer * buf , const char * exp_cmd )
2014-01-30 03:33:42 +04:00
{
2021-09-04 23:37:31 +03:00
g_autofree char * actual_cmd = NULL ;
2014-01-30 03:33:42 +04:00
if ( ! ( actual_cmd = virBufferContentAndReset ( buf ) ) ) {
2019-10-24 15:25:59 +03:00
fprintf ( stderr , " cannot compare buffer to exp: %s " , exp_cmd ) ;
2021-09-04 23:41:36 +03:00
return - 1 ;
2014-01-30 03:33:42 +04:00
}
if ( STRNEQ ( exp_cmd , actual_cmd ) ) {
2016-05-26 18:01:51 +03:00
virTestDifference ( stderr , exp_cmd , actual_cmd ) ;
2021-09-04 23:41:36 +03:00
return - 1 ;
2014-01-30 03:33:42 +04:00
}
2021-09-04 23:41:36 +03:00
return 0 ;
2014-01-30 03:33:42 +04:00
}
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
{
2021-09-04 23:37:31 +03:00
g_autofree char * errbuf = NULL ;
2020-07-03 02:35:41 +03:00
g_auto ( virBuffer ) buf = VIR_BUFFER_INITIALIZER ;
2021-04-01 18:54:09 +03:00
g_autoptr ( virCommandDryRunToken ) dryRunToken = virCommandDryRunTokenNew ( ) ;
2014-01-30 03:33:42 +04:00
2021-04-06 11:56:23 +03:00
virCommandSetDryRun ( dryRunToken , & buf , false , false , 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 ) ;
2021-09-04 23:41:36 +03:00
return - 1 ;
2014-01-30 03:33:42 +04:00
}
2020-06-16 14:07:30 +03:00
if ( checkOutput ( & buf , MODPROBE " -b " MODNAME " \n " ) < 0 )
2021-09-04 23:41:36 +03:00
return - 1 ;
2014-01-30 03:33:42 +04:00
2021-09-04 23:41:36 +03:00
return 0 ;
2014-01-30 03:33:42 +04:00
}
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
{
2021-09-04 23:37:31 +03:00
g_autofree char * errbuf = NULL ;
2020-07-03 02:35:41 +03:00
g_auto ( virBuffer ) buf = VIR_BUFFER_INITIALIZER ;
2021-04-01 18:54:09 +03:00
g_autoptr ( virCommandDryRunToken ) dryRunToken = virCommandDryRunTokenNew ( ) ;
2014-01-30 03:33:42 +04:00
2021-04-06 11:56:23 +03:00
virCommandSetDryRun ( dryRunToken , & buf , false , false , 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 ) ;
2021-09-04 23:41:36 +03:00
return - 1 ;
2014-01-30 03:33:42 +04:00
}
2020-06-16 14:07:30 +03:00
if ( checkOutput ( & buf , RMMOD " " MODNAME " \n " ) < 0 )
2021-09-04 23:41:36 +03:00
return - 1 ;
2014-01-30 03:33:42 +04:00
2021-09-04 23:41:36 +03:00
return 0 ;
2014-01-30 03:33:42 +04:00
}
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