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/>.
*
* Author : Daniel P . Berrange < berrange @ redhat . com >
*/
# include <config.h>
2013-10-18 15:52:03 +04:00
# include <stdlib.h>
# include "virfile.h"
2014-02-26 04:24:58 +04:00
# include "testutils.h"
2013-01-09 19:11:50 +04:00
2014-03-03 21:29:28 +04:00
# if HAVE_DLFCN_H
# 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 "virutil.h"
# 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
static int testAllocAll ( const void * args ATTRIBUTE_UNUSED )
{
2014-06-03 15:02:51 +04:00
virPortAllocatorPtr alloc = virPortAllocatorNew ( " test " , 5900 , 5909 , 0 ) ;
2013-01-09 19:11:50 +04:00
int ret = - 1 ;
unsigned short p1 , p2 , p3 , p4 , p5 , p6 , p7 ;
2013-09-25 18:35:44 +04:00
if ( ! alloc )
return - 1 ;
2013-01-09 19:11:50 +04:00
if ( virPortAllocatorAcquire ( alloc , & p1 ) < 0 )
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 ;
}
if ( virPortAllocatorAcquire ( alloc , & p2 ) < 0 )
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 ;
}
if ( virPortAllocatorAcquire ( alloc , & p3 ) < 0 )
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 ;
}
if ( virPortAllocatorAcquire ( alloc , & p4 ) < 0 )
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 ;
}
if ( virPortAllocatorAcquire ( alloc , & p5 ) < 0 )
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 ;
}
if ( virPortAllocatorAcquire ( alloc , & p6 ) < 0 )
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 ;
}
2013-10-31 15:49:04 +04:00
if ( virPortAllocatorAcquire ( alloc , & 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 :
2013-01-09 19:11:50 +04:00
virObjectUnref ( alloc ) ;
return ret ;
}
static int testAllocReuse ( const void * args ATTRIBUTE_UNUSED )
{
2014-06-03 15:02:51 +04:00
virPortAllocatorPtr alloc = virPortAllocatorNew ( " test " , 5900 , 5910 , 0 ) ;
2013-01-09 19:11:50 +04:00
int ret = - 1 ;
unsigned short p1 , p2 , p3 , p4 ;
2013-09-25 18:35:44 +04:00
if ( ! alloc )
return - 1 ;
2013-01-09 19:11:50 +04:00
if ( virPortAllocatorAcquire ( alloc , & p1 ) < 0 )
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 ;
}
if ( virPortAllocatorAcquire ( alloc , & p2 ) < 0 )
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 ;
}
if ( virPortAllocatorAcquire ( alloc , & p3 ) < 0 )
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 ;
}
if ( virPortAllocatorRelease ( alloc , p2 ) < 0 )
goto cleanup ;
if ( virPortAllocatorAcquire ( alloc , & p4 ) < 0 )
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 :
2013-01-09 19:11:50 +04:00
virObjectUnref ( alloc ) ;
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 ;
2013-10-18 15:52:03 +04:00
setenv ( " LIBVIRT_TEST_IPV4ONLY " , " really " , 1 ) ;
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
}
2016-02-11 15:59:41 +03:00
VIRT_TEST_MAIN_PRELOAD ( mymain , abs_builddir " /.libs/virportallocatormock.so " )
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