2013-01-09 19:11:50 +04:00
/*
2013-10-18 15:52:03 +04:00
* Copyright ( C ) 2013 - 2014 Red Hat , Inc .
2013-01-09 19:11:50 +04:00
*
* 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>
2013-10-18 15:52:03 +04:00
# include "virfile.h"
2014-02-26 04:24:58 +04:00
# include "testutils.h"
2013-01-09 19:11:50 +04:00
2020-09-01 14:27:44 +03:00
# if WITH_DLFCN_H
2014-03-03 21:29:28 +04:00
# include <dlfcn.h>
# endif
2014-02-26 04:24:58 +04:00
2016-02-12 15:48:02 +03:00
# if defined(__linux__) && defined(RTLD_NEXT)
2016-02-11 15:46:16 +03:00
# include "virerror.h"
# include "viralloc.h"
# include "virlog.h"
# include "virportallocator.h"
# include "virstring.h"
2013-10-18 15:52:03 +04:00
2016-02-11 15:46:16 +03:00
# define VIR_FROM_THIS VIR_FROM_RPC
2013-01-09 19:11:50 +04:00
2014-02-28 16:16:17 +04:00
VIR_LOG_INIT ( " tests.portallocatortest " ) ;
2013-01-09 19:11:50 +04:00
2019-10-14 15:45:03 +03:00
static int testAllocAll ( const void * args G_GNUC_UNUSED )
2013-01-09 19:11:50 +04:00
{
2018-02-06 12:09:09 +03:00
virPortAllocatorRangePtr ports = virPortAllocatorRangeNew ( " test " , 5900 , 5909 ) ;
2013-01-09 19:11:50 +04:00
int ret = - 1 ;
2018-02-06 12:09:06 +03:00
unsigned short p1 = 0 , p2 = 0 , p3 = 0 , p4 = 0 , p5 = 0 , p6 = 0 , p7 = 0 ;
2013-01-09 19:11:50 +04:00
2018-02-06 12:09:06 +03:00
if ( ! ports )
2013-09-25 18:35:44 +04:00
return - 1 ;
2018-02-06 12:09:06 +03:00
if ( virPortAllocatorAcquire ( ports , & p1 ) < 0 )
2013-01-09 19:11:50 +04:00
goto cleanup ;
if ( p1 ! = 5901 ) {
2015-04-23 20:38:00 +03:00
VIR_TEST_DEBUG ( " Expected 5901, got %d " , p1 ) ;
2013-01-09 19:11:50 +04:00
goto cleanup ;
}
2018-02-06 12:09:06 +03:00
if ( virPortAllocatorAcquire ( ports , & p2 ) < 0 )
2013-01-09 19:11:50 +04:00
goto cleanup ;
if ( p2 ! = 5902 ) {
2015-04-23 20:38:00 +03:00
VIR_TEST_DEBUG ( " Expected 5902, got %d " , p2 ) ;
2013-01-09 19:11:50 +04:00
goto cleanup ;
}
2018-02-06 12:09:06 +03:00
if ( virPortAllocatorAcquire ( ports , & p3 ) < 0 )
2013-01-09 19:11:50 +04:00
goto cleanup ;
if ( p3 ! = 5903 ) {
2015-04-23 20:38:00 +03:00
VIR_TEST_DEBUG ( " Expected 5903, got %d " , p3 ) ;
2013-01-09 19:11:50 +04:00
goto cleanup ;
}
2018-02-06 12:09:06 +03:00
if ( virPortAllocatorAcquire ( ports , & p4 ) < 0 )
2013-01-09 19:11:50 +04:00
goto cleanup ;
if ( p4 ! = 5907 ) {
2015-04-23 20:38:00 +03:00
VIR_TEST_DEBUG ( " Expected 5907, got %d " , p4 ) ;
2013-01-09 19:11:50 +04:00
goto cleanup ;
}
2018-02-06 12:09:06 +03:00
if ( virPortAllocatorAcquire ( ports , & p5 ) < 0 )
2013-01-09 19:11:50 +04:00
goto cleanup ;
if ( p5 ! = 5908 ) {
2015-04-23 20:38:00 +03:00
VIR_TEST_DEBUG ( " Expected 5908, got %d " , p5 ) ;
2013-01-09 19:11:50 +04:00
goto cleanup ;
}
2018-02-06 12:09:06 +03:00
if ( virPortAllocatorAcquire ( ports , & p6 ) < 0 )
2013-01-09 19:11:50 +04:00
goto cleanup ;
if ( p6 ! = 5909 ) {
2015-04-23 20:38:00 +03:00
VIR_TEST_DEBUG ( " Expected 5909, got %d " , p6 ) ;
2013-01-09 19:11:50 +04:00
goto cleanup ;
}
2018-02-06 12:09:06 +03:00
if ( virPortAllocatorAcquire ( ports , & p7 ) = = 0 ) {
2015-04-23 20:38:00 +03:00
VIR_TEST_DEBUG ( " Expected error, got %d " , p7 ) ;
2013-01-09 19:11:50 +04:00
goto cleanup ;
}
ret = 0 ;
2014-03-25 10:53:44 +04:00
cleanup :
2018-02-06 12:09:08 +03:00
virPortAllocatorRelease ( p1 ) ;
virPortAllocatorRelease ( p2 ) ;
virPortAllocatorRelease ( p3 ) ;
virPortAllocatorRelease ( p4 ) ;
virPortAllocatorRelease ( p5 ) ;
virPortAllocatorRelease ( p6 ) ;
virPortAllocatorRelease ( p7 ) ;
2018-02-06 12:09:06 +03:00
virPortAllocatorRangeFree ( ports ) ;
2013-01-09 19:11:50 +04:00
return ret ;
}
2019-10-14 15:45:03 +03:00
static int testAllocReuse ( const void * args G_GNUC_UNUSED )
2013-01-09 19:11:50 +04:00
{
2018-02-06 12:09:09 +03:00
virPortAllocatorRangePtr ports = virPortAllocatorRangeNew ( " test " , 5900 , 5910 ) ;
2013-01-09 19:11:50 +04:00
int ret = - 1 ;
2018-02-06 12:09:06 +03:00
unsigned short p1 = 0 , p2 = 0 , p3 = 0 , p4 = 0 ;
2013-01-09 19:11:50 +04:00
2018-02-06 12:09:06 +03:00
if ( ! ports )
2013-09-25 18:35:44 +04:00
return - 1 ;
2018-02-06 12:09:06 +03:00
if ( virPortAllocatorAcquire ( ports , & p1 ) < 0 )
2013-01-09 19:11:50 +04:00
goto cleanup ;
if ( p1 ! = 5901 ) {
2015-04-23 20:38:00 +03:00
VIR_TEST_DEBUG ( " Expected 5901, got %d " , p1 ) ;
2013-01-09 19:11:50 +04:00
goto cleanup ;
}
2018-02-06 12:09:06 +03:00
if ( virPortAllocatorAcquire ( ports , & p2 ) < 0 )
2013-01-09 19:11:50 +04:00
goto cleanup ;
if ( p2 ! = 5902 ) {
2015-04-23 20:38:00 +03:00
VIR_TEST_DEBUG ( " Expected 5902, got %d " , p2 ) ;
2013-01-09 19:11:50 +04:00
goto cleanup ;
}
2018-02-06 12:09:06 +03:00
if ( virPortAllocatorAcquire ( ports , & p3 ) < 0 )
2013-01-09 19:11:50 +04:00
goto cleanup ;
if ( p3 ! = 5903 ) {
2015-04-23 20:38:00 +03:00
VIR_TEST_DEBUG ( " Expected 5903, got %d " , p3 ) ;
2013-01-09 19:11:50 +04:00
goto cleanup ;
}
2018-02-06 12:09:08 +03:00
if ( virPortAllocatorRelease ( p2 ) < 0 )
2013-01-09 19:11:50 +04:00
goto cleanup ;
2018-02-06 12:09:06 +03:00
if ( virPortAllocatorAcquire ( ports , & p4 ) < 0 )
2013-01-09 19:11:50 +04:00
goto cleanup ;
if ( p4 ! = 5902 ) {
2015-04-23 20:38:00 +03:00
VIR_TEST_DEBUG ( " Expected 5902, got %d " , p4 ) ;
2013-01-09 19:11:50 +04:00
goto cleanup ;
}
ret = 0 ;
2014-03-25 10:53:44 +04:00
cleanup :
2018-02-06 12:09:08 +03:00
virPortAllocatorRelease ( p1 ) ;
virPortAllocatorRelease ( p3 ) ;
virPortAllocatorRelease ( p4 ) ;
2018-02-06 12:09:06 +03:00
virPortAllocatorRangeFree ( ports ) ;
2013-01-09 19:11:50 +04:00
return ret ;
}
static int
mymain ( void )
{
int ret = 0 ;
2016-05-26 18:01:50 +03:00
if ( virTestRun ( " Test alloc all " , testAllocAll , NULL ) < 0 )
2013-01-09 19:11:50 +04:00
ret = - 1 ;
2016-05-26 18:01:50 +03:00
if ( virTestRun ( " Test alloc reuse " , testAllocReuse , NULL ) < 0 )
2013-01-09 19:11:50 +04:00
ret = - 1 ;
2019-12-18 20:16:19 +03:00
g_setenv ( " LIBVIRT_TEST_IPV4ONLY " , " really " , TRUE ) ;
2013-10-18 15:52:03 +04:00
2016-05-26 18:01:50 +03:00
if ( virTestRun ( " Test IPv4-only alloc all " , testAllocAll , NULL ) < 0 )
2013-10-18 15:52:03 +04:00
ret = - 1 ;
2016-05-26 18:01:50 +03:00
if ( virTestRun ( " Test IPv4-only alloc reuse " , testAllocReuse , NULL ) < 0 )
2013-10-18 15:52:03 +04:00
ret = - 1 ;
2014-03-17 13:38:38 +04:00
return ret = = 0 ? EXIT_SUCCESS : EXIT_FAILURE ;
2013-01-09 19:11:50 +04:00
}
2019-08-21 19:13:16 +03:00
VIR_TEST_MAIN_PRELOAD ( mymain , VIR_TEST_MOCK ( " virportallocator " ) )
2016-02-12 15:48:02 +03:00
# else /* defined(__linux__) && defined(RTLD_NEXT) */
2014-02-26 04:24:58 +04:00
int
main ( void )
{
return EXIT_AM_SKIP ;
}
2013-01-09 19:11:50 +04:00
# endif