2014-06-11 17:05:00 +04:00
/*
* Copyright ( C ) 2015 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__
# include "virnetdev.h"
# define VIR_FROM_THIS VIR_FROM_NONE
struct testVirNetDevGetLinkInfoData {
const char * ifname ; /* ifname to get info on */
2016-06-13 20:06:15 +03:00
virNetDevIfState state ; /* expected state */
2014-06-11 17:05:00 +04:00
unsigned int speed ; /* expected speed */
} ;
static int
testVirNetDevGetLinkInfo ( const void * opaque )
{
const struct testVirNetDevGetLinkInfoData * data = opaque ;
2016-06-13 20:06:15 +03:00
virNetDevIfLink lnk ;
2014-06-11 17:05:00 +04:00
if ( virNetDevGetLinkInfo ( data - > ifname , & lnk ) < 0 )
2019-11-12 23:46:29 +03:00
return - 1 ;
2014-06-11 17:05:00 +04:00
if ( lnk . state ! = data - > state ) {
fprintf ( stderr ,
" Fetched link state (%s) doesn't match the expected one (%s) " ,
2016-06-13 20:06:15 +03:00
virNetDevIfStateTypeToString ( lnk . state ) ,
virNetDevIfStateTypeToString ( data - > state ) ) ;
2019-11-12 23:46:29 +03:00
return - 1 ;
2014-06-11 17:05:00 +04:00
}
if ( lnk . speed ! = data - > speed ) {
fprintf ( stderr ,
" Fetched link speed (%u) doesn't match the expected one (%u) " ,
lnk . speed , data - > speed ) ;
2019-11-12 23:46:29 +03:00
return - 1 ;
2014-06-11 17:05:00 +04:00
}
2019-11-12 23:46:29 +03:00
return 0 ;
2014-06-11 17:05:00 +04:00
}
static int
mymain ( void )
{
int ret = 0 ;
2017-11-03 15:09:47 +03:00
# define DO_TEST_LINK(ifname, state, speed) \
do { \
struct testVirNetDevGetLinkInfoData data = { ifname , state , speed } ; \
if ( virTestRun ( " Link info: " # ifname , \
testVirNetDevGetLinkInfo , & data ) < 0 ) \
ret = - 1 ; \
2014-06-11 17:05:00 +04:00
} while ( 0 )
2016-06-13 20:06:15 +03:00
DO_TEST_LINK ( " eth0 " , VIR_NETDEV_IF_STATE_UP , 1000 ) ;
DO_TEST_LINK ( " lo " , VIR_NETDEV_IF_STATE_UNKNOWN , 0 ) ;
DO_TEST_LINK ( " eth0-broken " , VIR_NETDEV_IF_STATE_DOWN , 0 ) ;
2014-06-11 17:05:00 +04:00
return ret = = 0 ? EXIT_SUCCESS : EXIT_FAILURE ;
}
2019-08-21 19:13:16 +03:00
VIR_TEST_MAIN_PRELOAD ( mymain , VIR_TEST_MOCK ( " virnetdev " ) )
2014-06-11 17:05:00 +04:00
# else
int
main ( void )
{
return EXIT_AM_SKIP ;
}
# endif