@ -43,6 +43,7 @@ ASTERISK_REGISTER_FILE();
# include "asterisk/config_options.h"
# include "asterisk/netsock2.h"
# include "asterisk/acl.h"
# include "asterisk/app.h"
# include "asterisk/pbx.h"
# include "asterisk/frame.h"
# include "asterisk/utils.h"
@ -1082,6 +1083,13 @@ enum {
ast_test_status_update ( test , " ast_parse_arg double failed with %f != %f \n " , * r , e ) ; \
ret = AST_TEST_FAIL ; \
} \
} else if ( ( ( flags ) & PARSE_TYPE ) = = PARSE_TIMELEN ) { \
int * r = ( int * ) ( void * ) result ; \
int e = ( int ) expected_result ; \
if ( * r ! = e ) { \
ast_test_status_update ( test , " ast_parse_arg timelen failed with %d != %d \n " , * r , e ) ; \
ret = AST_TEST_FAIL ; \
} \
} \
} \
* ( result ) = DEFAULTVAL ; \
@ -1092,6 +1100,7 @@ AST_TEST_DEFINE(ast_parse_arg_test)
int ret = AST_TEST_PASS ;
int32_t int32_t_val = DEFAULTVAL ;
uint32_t uint32_t_val = DEFAULTVAL ;
int timelen_val = DEFAULTVAL ;
double double_val = DEFAULTVAL ;
switch ( cmd ) {
@ -1224,6 +1233,60 @@ AST_TEST_DEFINE(ast_parse_arg_test)
TEST_PARSE ( " -123 " , EXPECT_FAIL , DEFAULTVAL , PARSE_UINT32 , & uint32_t_val ) ;
/* timelen testing */
TEST_PARSE ( " 123 " , EXPECT_SUCCEED , 123 , PARSE_TIMELEN , & timelen_val , TIMELEN_MILLISECONDS ) ;
TEST_PARSE ( " -123 " , EXPECT_SUCCEED , - 123 , PARSE_TIMELEN , & timelen_val , TIMELEN_MILLISECONDS ) ;
TEST_PARSE ( " 0 " , EXPECT_SUCCEED , 0 , PARSE_TIMELEN , & timelen_val , TIMELEN_MILLISECONDS ) ;
TEST_PARSE ( " not a number " , EXPECT_FAIL , DEFAULTVAL , PARSE_TIMELEN , & timelen_val , TIMELEN_MILLISECONDS ) ;
TEST_PARSE ( " 7not a number " , EXPECT_FAIL , DEFAULTVAL , PARSE_TIMELEN , & timelen_val , TIMELEN_MILLISECONDS ) ;
TEST_PARSE ( " 123s " , EXPECT_SUCCEED , 123000 , PARSE_TIMELEN , & timelen_val , TIMELEN_MILLISECONDS ) ;
TEST_PARSE ( " -123s " , EXPECT_SUCCEED , - 123000 , PARSE_TIMELEN , & timelen_val , TIMELEN_MILLISECONDS ) ;
TEST_PARSE ( " 1m " , EXPECT_SUCCEED , 60000 , PARSE_TIMELEN , & timelen_val , TIMELEN_MILLISECONDS ) ;
TEST_PARSE ( " 1 " , EXPECT_SUCCEED , 60000 , PARSE_TIMELEN , & timelen_val , TIMELEN_MINUTES ) ;
TEST_PARSE ( " 1h " , EXPECT_SUCCEED , 3600000 , PARSE_TIMELEN , & timelen_val , TIMELEN_MILLISECONDS ) ;
TEST_PARSE ( " 1 " , EXPECT_SUCCEED , 3600000 , PARSE_TIMELEN , & timelen_val , TIMELEN_HOURS ) ;
TEST_PARSE ( " 123 " , EXPECT_SUCCEED , 123 , PARSE_TIMELEN | PARSE_DEFAULT , & timelen_val , TIMELEN_MILLISECONDS , 7 ) ;
TEST_PARSE ( " -123 " , EXPECT_SUCCEED , - 123 , PARSE_TIMELEN | PARSE_DEFAULT , & timelen_val , TIMELEN_MILLISECONDS , 7 ) ;
TEST_PARSE ( " 0 " , EXPECT_SUCCEED , 0 , PARSE_TIMELEN | PARSE_DEFAULT , & timelen_val , TIMELEN_MILLISECONDS , 7 ) ;
TEST_PARSE ( " not a number " , EXPECT_FAIL , 7 , PARSE_TIMELEN | PARSE_DEFAULT , & timelen_val , TIMELEN_MILLISECONDS , 7 ) ;
TEST_PARSE ( " 7not a number " , EXPECT_FAIL , 7 , PARSE_TIMELEN | PARSE_DEFAULT , & timelen_val , TIMELEN_MILLISECONDS , 7 ) ;
TEST_PARSE ( " 123 " , EXPECT_SUCCEED , 123 , PARSE_TIMELEN | PARSE_IN_RANGE , & timelen_val , TIMELEN_MILLISECONDS , 0 , 200 ) ;
TEST_PARSE ( " -123 " , EXPECT_SUCCEED , - 123 , PARSE_TIMELEN | PARSE_IN_RANGE , & timelen_val , TIMELEN_MILLISECONDS , - 200 , 100 ) ;
TEST_PARSE ( " 0 " , EXPECT_SUCCEED , 0 , PARSE_TIMELEN | PARSE_IN_RANGE , & timelen_val , TIMELEN_MILLISECONDS , - 1 , 0 ) ;
TEST_PARSE ( " 123 " , EXPECT_FAIL , DEFAULTVAL , PARSE_TIMELEN | PARSE_IN_RANGE , & timelen_val , TIMELEN_MILLISECONDS , 0 , 122 ) ;
TEST_PARSE ( " -123 " , EXPECT_FAIL , DEFAULTVAL , PARSE_TIMELEN | PARSE_IN_RANGE , & timelen_val , TIMELEN_MILLISECONDS , - 122 , 100 ) ;
TEST_PARSE ( " 0 " , EXPECT_FAIL , DEFAULTVAL , PARSE_TIMELEN | PARSE_IN_RANGE , & timelen_val , TIMELEN_MILLISECONDS , 1 , 100 ) ;
TEST_PARSE ( " not a number " , EXPECT_FAIL , DEFAULTVAL , PARSE_TIMELEN | PARSE_IN_RANGE , & timelen_val , TIMELEN_MILLISECONDS , INT_MIN , INT_MAX ) ;
TEST_PARSE ( " 7not a number " , EXPECT_FAIL , DEFAULTVAL , PARSE_TIMELEN | PARSE_IN_RANGE , & timelen_val , TIMELEN_MILLISECONDS , INT_MIN , INT_MAX ) ;
TEST_PARSE ( " 123 " , EXPECT_FAIL , DEFAULTVAL , PARSE_TIMELEN | PARSE_OUT_RANGE , & timelen_val , TIMELEN_MILLISECONDS , 0 , 200 ) ;
TEST_PARSE ( " -123 " , EXPECT_FAIL , DEFAULTVAL , PARSE_TIMELEN | PARSE_OUT_RANGE , & timelen_val , TIMELEN_MILLISECONDS , - 200 , 100 ) ;
TEST_PARSE ( " 0 " , EXPECT_FAIL , DEFAULTVAL , PARSE_TIMELEN | PARSE_OUT_RANGE , & timelen_val , TIMELEN_MILLISECONDS , - 1 , 0 ) ;
TEST_PARSE ( " 123 " , EXPECT_SUCCEED , 123 , PARSE_TIMELEN | PARSE_OUT_RANGE , & timelen_val , TIMELEN_MILLISECONDS , 0 , 122 ) ;
TEST_PARSE ( " -123 " , EXPECT_SUCCEED , - 123 , PARSE_TIMELEN | PARSE_OUT_RANGE , & timelen_val , TIMELEN_MILLISECONDS , - 122 , 100 ) ;
TEST_PARSE ( " 0 " , EXPECT_SUCCEED , 0 , PARSE_TIMELEN | PARSE_OUT_RANGE , & timelen_val , TIMELEN_MILLISECONDS , 1 , 100 ) ;
TEST_PARSE ( " not a number " , EXPECT_FAIL , DEFAULTVAL , PARSE_TIMELEN | PARSE_OUT_RANGE , & timelen_val , TIMELEN_MILLISECONDS , INT_MIN , INT_MAX ) ;
TEST_PARSE ( " 7not a number " , EXPECT_FAIL , DEFAULTVAL , PARSE_TIMELEN | PARSE_OUT_RANGE , & timelen_val , TIMELEN_MILLISECONDS , INT_MIN , INT_MAX ) ;
TEST_PARSE ( " 123 " , EXPECT_SUCCEED , 123 , PARSE_TIMELEN | PARSE_DEFAULT | PARSE_IN_RANGE , & timelen_val , TIMELEN_MILLISECONDS , 7 , 0 , 200 ) ;
TEST_PARSE ( " -123 " , EXPECT_SUCCEED , - 123 , PARSE_TIMELEN | PARSE_DEFAULT | PARSE_IN_RANGE , & timelen_val , TIMELEN_MILLISECONDS , 7 , - 200 , 100 ) ;
TEST_PARSE ( " 0 " , EXPECT_SUCCEED , 0 , PARSE_TIMELEN | PARSE_DEFAULT | PARSE_IN_RANGE , & timelen_val , TIMELEN_MILLISECONDS , 7 , - 1 , 0 ) ;
TEST_PARSE ( " 123 " , EXPECT_FAIL , 7 , PARSE_TIMELEN | PARSE_DEFAULT | PARSE_IN_RANGE , & timelen_val , TIMELEN_MILLISECONDS , 7 , 0 , 122 ) ;
TEST_PARSE ( " -123 " , EXPECT_FAIL , 7 , PARSE_TIMELEN | PARSE_DEFAULT | PARSE_IN_RANGE , & timelen_val , TIMELEN_MILLISECONDS , 7 , - 122 , 100 ) ;
TEST_PARSE ( " 0 " , EXPECT_FAIL , 7 , PARSE_TIMELEN | PARSE_DEFAULT | PARSE_IN_RANGE , & timelen_val , TIMELEN_MILLISECONDS , 7 , 1 , 100 ) ;
TEST_PARSE ( " not a number " , EXPECT_FAIL , 7 , PARSE_TIMELEN | PARSE_DEFAULT | PARSE_IN_RANGE , & timelen_val , TIMELEN_MILLISECONDS , 7 , INT_MIN , INT_MAX ) ;
TEST_PARSE ( " 7not a number " , EXPECT_FAIL , 7 , PARSE_TIMELEN | PARSE_DEFAULT | PARSE_IN_RANGE , & timelen_val , TIMELEN_MILLISECONDS , 7 , INT_MIN , INT_MAX ) ;
TEST_PARSE ( " 123 " , EXPECT_FAIL , 7 , PARSE_TIMELEN | PARSE_DEFAULT | PARSE_OUT_RANGE , & timelen_val , TIMELEN_MILLISECONDS , 7 , 0 , 200 ) ;
TEST_PARSE ( " -123 " , EXPECT_FAIL , 7 , PARSE_TIMELEN | PARSE_DEFAULT | PARSE_OUT_RANGE , & timelen_val , TIMELEN_MILLISECONDS , 7 , - 200 , 100 ) ;
TEST_PARSE ( " 0 " , EXPECT_FAIL , 7 , PARSE_TIMELEN | PARSE_DEFAULT | PARSE_OUT_RANGE , & timelen_val , TIMELEN_MILLISECONDS , 7 , - 1 , 0 ) ;
TEST_PARSE ( " 123 " , EXPECT_SUCCEED , 123 , PARSE_TIMELEN | PARSE_DEFAULT | PARSE_OUT_RANGE , & timelen_val , TIMELEN_MILLISECONDS , 7 , 0 , 122 ) ;
TEST_PARSE ( " -123 " , EXPECT_SUCCEED , - 123 , PARSE_TIMELEN | PARSE_DEFAULT | PARSE_OUT_RANGE , & timelen_val , TIMELEN_MILLISECONDS , 7 , - 122 , 100 ) ;
TEST_PARSE ( " 0 " , EXPECT_SUCCEED , 0 , PARSE_TIMELEN | PARSE_DEFAULT | PARSE_OUT_RANGE , & timelen_val , TIMELEN_MILLISECONDS , 7 , 1 , 100 ) ;
TEST_PARSE ( " not a number " , EXPECT_FAIL , 7 , PARSE_TIMELEN | PARSE_DEFAULT | PARSE_OUT_RANGE , & timelen_val , TIMELEN_MILLISECONDS , 7 , INT_MIN , INT_MAX ) ;
TEST_PARSE ( " 7not a number " , EXPECT_FAIL , 7 , PARSE_TIMELEN | PARSE_DEFAULT | PARSE_OUT_RANGE , & timelen_val , TIMELEN_MILLISECONDS , 7 , INT_MIN , INT_MAX ) ;
/* double testing */
TEST_PARSE ( " 123 " , EXPECT_SUCCEED , 123 , PARSE_DOUBLE , & double_val ) ;
TEST_PARSE ( " 123.123 " , EXPECT_SUCCEED , 123.123 , PARSE_DOUBLE , & double_val ) ;
@ -1283,6 +1346,10 @@ struct test_item {
) ;
int32_t intopt ;
uint32_t uintopt ;
int timelenopt1 ;
int timelenopt2 ;
int timelenopt3 ;
int timelenopt4 ;
unsigned int flags ;
double doubleopt ;
struct ast_sockaddr sockaddropt ;
@ -1437,6 +1504,8 @@ AST_TEST_DEFINE(config_options_test)
# define INT_CONFIG "-1"
# define UINT_DEFAULT "2"
# define UINT_CONFIG "1"
# define TIMELEN_DEFAULT "2"
# define TIMELEN_CONFIG "1"
# define DOUBLE_DEFAULT "1.1"
# define DOUBLE_CONFIG "0.1"
# define SOCKADDR_DEFAULT "4.3.2.1:4321"
@ -1471,6 +1540,10 @@ AST_TEST_DEFINE(config_options_test)
/* Register all options */
aco_option_register ( & cfg_info , " intopt " , ACO_EXACT , config_test_conf . types , INT_DEFAULT , OPT_INT_T , 0 , FLDSET ( struct test_item , intopt ) ) ;
aco_option_register ( & cfg_info , " uintopt " , ACO_EXACT , config_test_conf . types , UINT_DEFAULT , OPT_UINT_T , 0 , FLDSET ( struct test_item , uintopt ) ) ;
aco_option_register ( & cfg_info , " timelenopt1 " , ACO_EXACT , config_test_conf . types , TIMELEN_DEFAULT , OPT_TIMELEN_T , 0 , FLDSET ( struct test_item , timelenopt1 ) , TIMELEN_MILLISECONDS ) ;
aco_option_register ( & cfg_info , " timelenopt2 " , ACO_EXACT , config_test_conf . types , TIMELEN_DEFAULT , OPT_TIMELEN_T , 0 , FLDSET ( struct test_item , timelenopt2 ) , TIMELEN_SECONDS ) ;
aco_option_register ( & cfg_info , " timelenopt3 " , ACO_EXACT , config_test_conf . types , TIMELEN_DEFAULT , OPT_TIMELEN_T , 0 , FLDSET ( struct test_item , timelenopt3 ) , TIMELEN_MINUTES ) ;
aco_option_register ( & cfg_info , " timelenopt4 " , ACO_EXACT , config_test_conf . types , TIMELEN_DEFAULT , OPT_TIMELEN_T , 0 , FLDSET ( struct test_item , timelenopt4 ) , TIMELEN_HOURS ) ;
aco_option_register ( & cfg_info , " doubleopt " , ACO_EXACT , config_test_conf . types , DOUBLE_DEFAULT , OPT_DOUBLE_T , 0 , FLDSET ( struct test_item , doubleopt ) ) ;
aco_option_register ( & cfg_info , " sockaddropt " , ACO_EXACT , config_test_conf . types , SOCKADDR_DEFAULT , OPT_SOCKADDR_T , 0 , FLDSET ( struct test_item , sockaddropt ) ) ;
aco_option_register ( & cfg_info , " boolopt " , ACO_EXACT , config_test_conf . types , BOOL_DEFAULT , OPT_BOOL_T , 1 , FLDSET ( struct test_item , boolopt ) ) ;
@ -1492,6 +1565,14 @@ AST_TEST_DEFINE(config_options_test)
ast_parse_arg ( INT_DEFAULT , PARSE_INT32 , & defaults . intopt ) ;
ast_parse_arg ( INT_CONFIG , PARSE_INT32 , & configs . intopt ) ;
ast_parse_arg ( TIMELEN_DEFAULT , PARSE_TIMELEN , & defaults . timelenopt1 , TIMELEN_MILLISECONDS ) ;
ast_parse_arg ( TIMELEN_CONFIG , PARSE_TIMELEN , & configs . timelenopt1 , TIMELEN_MILLISECONDS ) ;
ast_parse_arg ( TIMELEN_DEFAULT , PARSE_TIMELEN , & defaults . timelenopt2 , TIMELEN_SECONDS ) ;
ast_parse_arg ( TIMELEN_CONFIG , PARSE_TIMELEN , & configs . timelenopt2 , TIMELEN_SECONDS ) ;
ast_parse_arg ( TIMELEN_DEFAULT , PARSE_TIMELEN , & defaults . timelenopt3 , TIMELEN_MINUTES ) ;
ast_parse_arg ( TIMELEN_CONFIG , PARSE_TIMELEN , & configs . timelenopt3 , TIMELEN_MINUTES ) ;
ast_parse_arg ( TIMELEN_DEFAULT , PARSE_TIMELEN , & defaults . timelenopt4 , TIMELEN_HOURS ) ;
ast_parse_arg ( TIMELEN_CONFIG , PARSE_TIMELEN , & configs . timelenopt4 , TIMELEN_HOURS ) ;
ast_parse_arg ( UINT_DEFAULT , PARSE_UINT32 , & defaults . uintopt ) ;
ast_parse_arg ( UINT_CONFIG , PARSE_UINT32 , & configs . uintopt ) ;
ast_parse_arg ( DOUBLE_DEFAULT , PARSE_DOUBLE , & defaults . doubleopt ) ;
@ -1553,6 +1634,10 @@ AST_TEST_DEFINE(config_options_test)
NOT_EQUAL_FAIL ( intopt , " %d " ) ;
NOT_EQUAL_FAIL ( uintopt , " %u " ) ;
NOT_EQUAL_FAIL ( timelenopt1 , " %d " ) ;
NOT_EQUAL_FAIL ( timelenopt2 , " %d " ) ;
NOT_EQUAL_FAIL ( timelenopt3 , " %d " ) ;
NOT_EQUAL_FAIL ( timelenopt4 , " %d " ) ;
NOT_EQUAL_FAIL ( boolopt , " %d " ) ;
NOT_EQUAL_FAIL ( flags , " %u " ) ;
NOT_EQUAL_FAIL ( customopt , " %d " ) ;