@ -240,6 +240,53 @@ static void event_sub_cb(const struct ast_event *event, void *d)
data - > count + + ;
}
enum test_subs_class_type {
TEST_SUBS_ALL_STR ,
TEST_SUBS_CUSTOM_STR ,
TEST_SUBS_CUSTOM_RAW ,
TEST_SUBS_CUSTOM_UINT ,
TEST_SUBS_CUSTOM_BITFLAGS ,
TEST_SUBS_CUSTOM_EXISTS ,
TEST_SUBS_CUSTOM_DYNAMIC ,
TEST_SUBS_CUSTOM_ANY ,
/* Must be last. */
TEST_SUBS_TOTAL ,
} ;
/*!
* \ internal
* \ brief Convert enum test_subs_class_type to string .
*
* \ param val Enum value to convert to string .
*
* \ return String equivalent of enum value .
*/
static const char * test_subs_class_type_str ( enum test_subs_class_type val )
{
switch ( val ) {
case TEST_SUBS_ALL_STR :
return " TEST_SUBS_ALL_STR " ;
case TEST_SUBS_CUSTOM_STR :
return " TEST_SUBS_CUSTOM_STR " ;
case TEST_SUBS_CUSTOM_RAW :
return " TEST_SUBS_CUSTOM_RAW " ;
case TEST_SUBS_CUSTOM_UINT :
return " TEST_SUBS_CUSTOM_UINT " ;
case TEST_SUBS_CUSTOM_BITFLAGS :
return " TEST_SUBS_CUSTOM_BITFLAGS " ;
case TEST_SUBS_CUSTOM_EXISTS :
return " TEST_SUBS_CUSTOM_EXISTS " ;
case TEST_SUBS_CUSTOM_DYNAMIC :
return " TEST_SUBS_CUSTOM_DYNAMIC " ;
case TEST_SUBS_CUSTOM_ANY :
return " TEST_SUBS_CUSTOM_ANY " ;
case TEST_SUBS_TOTAL :
break ;
}
return " Unknown " ;
}
/*!
* \ internal
* \ brief Test event subscriptions
@ -257,16 +304,31 @@ AST_TEST_DEFINE(event_sub_test)
struct ast_event_sub * sub ;
struct event_sub_data data ;
const unsigned int expected_count ;
} test_subs [ ] = {
[ 0 ] = {
. expected_count = 3 ,
} test_subs [ TEST_SUBS_TOTAL ] = {
[ TEST_SUBS_ALL_STR ] = {
. expected_count = 2 ,
} ,
[ 1 ] = {
[ TEST_SUBS_CUSTOM_STR ] = {
. expected_count = 2 ,
} ,
[ TEST_SUBS_CUSTOM_RAW ] = {
. expected_count = 1 ,
} ,
[ TEST_SUBS_CUSTOM_UINT ] = {
. expected_count = 1 ,
} ,
[ 2 ] = {
[ TEST_SUBS_CUSTOM_BITFLAGS ] = {
. expected_count = 4 ,
} ,
[ TEST_SUBS_CUSTOM_EXISTS ] = {
. expected_count = 2 ,
} ,
[ TEST_SUBS_CUSTOM_DYNAMIC ] = {
. expected_count = 1 ,
} ,
[ TEST_SUBS_CUSTOM_ANY ] = {
. expected_count = 6 ,
} ,
} ;
switch ( cmd ) {
@ -283,115 +345,230 @@ AST_TEST_DEFINE(event_sub_test)
}
/*
* Subscription # 1 :
* Subscription TEST_SUBS_ALL_STR :
* - allocate normally
* - subscribe to all CUSTOM events
*
* Subscription # 2 :
* - allocate dynamically
* - subscribe to all CUSTOM events
* - add payload checks
*
* Subscription # 3 :
* - subscribe to ALL events with a DEVICE STR IE check
*/
ast_test_status_update ( test , " Adding TEST_SUBS_ALL_STR subscription \n " ) ;
test_subs [ TEST_SUBS_ALL_STR ] . sub = ast_event_subscribe ( AST_EVENT_ALL , event_sub_cb ,
test_subs_class_type_str ( TEST_SUBS_ALL_STR ) , & test_subs [ TEST_SUBS_ALL_STR ] . data ,
AST_EVENT_IE_DEVICE , AST_EVENT_IE_PLTYPE_STR , " FOO/bar " ,
AST_EVENT_IE_END ) ;
if ( ! test_subs [ TEST_SUBS_ALL_STR ] . sub ) {
ast_test_status_update ( test , " Failed to create TEST_SUBS_ALL_STR subscription \n " ) ;
res = AST_TEST_FAIL ;
goto return_cleanup ;
}
if ( strcmp ( ast_event_subscriber_get_description ( test_subs [ TEST_SUBS_ALL_STR ] . sub ) ,
test_subs_class_type_str ( TEST_SUBS_ALL_STR ) ) ) {
ast_test_status_update ( test ,
" Unexpected subscription description on TEST_SUBS_ALL_STR subscription \n " ) ;
res = AST_TEST_FAIL ;
goto return_cleanup ;
}
/*
* Subscription TEST_SUBS_CUSTOM_STR :
* - allocate normally
* - subscribe to all events with an IE check
* - subscribe to CUSTOM events with a DEVICE STR IE check
*/
ast_test_status_update ( test , " Adding TEST_SUBS_CUSTOM_STR subscription \n " ) ;
test_subs [ TEST_SUBS_CUSTOM_STR ] . sub = ast_event_subscribe ( AST_EVENT_CUSTOM , event_sub_cb ,
test_subs_class_type_str ( TEST_SUBS_CUSTOM_STR ) , & test_subs [ TEST_SUBS_CUSTOM_STR ] . data ,
AST_EVENT_IE_DEVICE , AST_EVENT_IE_PLTYPE_STR , " FOO/bar " ,
AST_EVENT_IE_END ) ;
if ( ! test_subs [ TEST_SUBS_CUSTOM_STR ] . sub ) {
ast_test_status_update ( test , " Failed to create TEST_SUBS_CUSTOM_STR subscription \n " ) ;
res = AST_TEST_FAIL ;
goto return_cleanup ;
}
test_subs [ 0 ] . sub = ast_event_subscribe ( AST_EVENT_CUSTOM , event_sub_cb , " test_sub " , & test_subs [ 0 ] . data ,
AST_EVENT_IE_END ) ;
if ( ! test_subs [ 0 ] . sub ) {
ast_test_status_update ( test , " Failed to create test_subs[0].sub \n " ) ;
if ( strcmp ( ast_event_subscriber_get_description ( test_subs [ TEST_SUBS_CUSTOM_STR ] . sub ) ,
test_subs_class_type_str ( TEST_SUBS_CUSTOM_STR ) ) ) {
ast_test_status_update ( test ,
" Unexpected subscription description on TEST_SUBS_CUSTOM_STR subscription \n " ) ;
res = AST_TEST_FAIL ;
goto return_cleanup ;
}
if ( strcmp ( ast_event_subscriber_get_description ( test_subs [ 0 ] . sub ) , " test_sub " ) ) {
/*
* Subscription TEST_SUBS_CUSTOM_RAW :
* - allocate normally
* - subscribe to CUSTOM events with a MAILBOX RAW IE check
*/
ast_test_status_update ( test , " Adding TEST_SUBS_CUSTOM_RAW subscription \n " ) ;
test_subs [ TEST_SUBS_CUSTOM_RAW ] . sub = ast_event_subscribe ( AST_EVENT_CUSTOM , event_sub_cb ,
test_subs_class_type_str ( TEST_SUBS_CUSTOM_RAW ) , & test_subs [ TEST_SUBS_CUSTOM_RAW ] . data ,
AST_EVENT_IE_MAILBOX , AST_EVENT_IE_PLTYPE_RAW , " FOO/bar " , sizeof ( " FOO/bar " ) ,
AST_EVENT_IE_END ) ;
if ( ! test_subs [ TEST_SUBS_CUSTOM_RAW ] . sub ) {
ast_test_status_update ( test , " Failed to create TEST_SUBS_CUSTOM_RAW subscription \n " ) ;
res = AST_TEST_FAIL ;
goto return_cleanup ;
}
if ( strcmp ( ast_event_subscriber_get_description ( test_subs [ TEST_SUBS_CUSTOM_RAW ] . sub ) ,
test_subs_class_type_str ( TEST_SUBS_CUSTOM_RAW ) ) ) {
ast_test_status_update ( test ,
" Unexpected subscription description on test_subs[0].sub \n " ) ;
" Unexpected subscription description on TEST_SUBS_CUSTOM_RAW subscription \n " ) ;
res = AST_TEST_FAIL ;
goto return_cleanup ;
}
test_subs [ 1 ] . sub = ast_event_subscribe_new ( AST_EVENT_CUSTOM , event_sub_cb , & test_subs [ 1 ] . data ) ;
if ( ! test_subs [ 1 ] . sub ) {
ast_test_status_update ( test , " Failed to create test_subs[1].sub \n " ) ;
/*
* Subscription TEST_SUBS_CUSTOM_UINT :
* - allocate normally
* - subscribe to CUSTOM events with a NEWMSGS UINT IE check
*/
ast_test_status_update ( test , " Adding TEST_SUBS_CUSTOM_UINT subscription \n " ) ;
test_subs [ TEST_SUBS_CUSTOM_UINT ] . sub = ast_event_subscribe ( AST_EVENT_CUSTOM , event_sub_cb ,
test_subs_class_type_str ( TEST_SUBS_CUSTOM_UINT ) , & test_subs [ TEST_SUBS_CUSTOM_UINT ] . data ,
AST_EVENT_IE_NEWMSGS , AST_EVENT_IE_PLTYPE_UINT , 5 ,
AST_EVENT_IE_END ) ;
if ( ! test_subs [ TEST_SUBS_CUSTOM_UINT ] . sub ) {
ast_test_status_update ( test , " Failed to create TEST_SUBS_CUSTOM_UINT subscription \n " ) ;
res = AST_TEST_FAIL ;
goto return_cleanup ;
}
/* For the sake of exercising destruction before activation */
ast_event_sub_destroy ( test_subs [ 1 ] . sub ) ;
if ( strcmp ( ast_event_subscriber_get_description ( test_subs [ TEST_SUBS_CUSTOM_UINT ] . sub ) ,
test_subs_class_type_str ( TEST_SUBS_CUSTOM_UINT ) ) ) {
ast_test_status_update ( test ,
" Unexpected subscription description on TEST_SUBS_CUSTOM_UINT subscription \n " ) ;
res = AST_TEST_FAIL ;
goto return_cleanup ;
}
test_subs [ 1 ] . sub = ast_event_subscribe_new ( AST_EVENT_CUSTOM , event_sub_cb , & test_subs [ 1 ] . data ) ;
if ( ! test_subs [ 1 ] . sub ) {
ast_test_status_update ( test , " Failed to create test_subs[1].sub \n " ) ;
/*
* Subscription TEST_SUBS_CUSTOM_BITFLAGS :
* - allocate normally
* - subscribe to CUSTOM events with a NEWMSGS BITFLAGS IE check
*/
ast_test_status_update ( test , " Adding TEST_SUBS_CUSTOM_BITFLAGS subscription \n " ) ;
test_subs [ TEST_SUBS_CUSTOM_BITFLAGS ] . sub = ast_event_subscribe ( AST_EVENT_CUSTOM , event_sub_cb ,
test_subs_class_type_str ( TEST_SUBS_CUSTOM_BITFLAGS ) , & test_subs [ TEST_SUBS_CUSTOM_BITFLAGS ] . data ,
AST_EVENT_IE_NEWMSGS , AST_EVENT_IE_PLTYPE_BITFLAGS , 0x06 ,
AST_EVENT_IE_END ) ;
if ( ! test_subs [ TEST_SUBS_CUSTOM_BITFLAGS ] . sub ) {
ast_test_status_update ( test , " Failed to create TEST_SUBS_CUSTOM_BITFLAGS subscription \n " ) ;
res = AST_TEST_FAIL ;
goto return_cleanup ;
}
if ( strcmp ( ast_event_subscriber_get_description ( test_subs [ 1 ] . sub ) , " " ) ) {
ast_event_sub_destroy ( test_subs [ 1 ] . sub ) ;
test_subs [ 1 ] . sub = NULL ;
if ( strcmp ( ast_event_subscriber_get_description ( test_subs [ TEST_SUBS_CUSTOM_BITFLAGS ] . sub ) ,
test_subs_class_type_str ( TEST_SUBS_CUSTOM_BITFLAGS ) ) ) {
ast_test_status_update ( test ,
" Unexpected subscription description on test_subs[1].sub \n " ) ;
" Unexpected subscription description on TEST_SUBS_CUSTOM_BITFLAGS subscription \n " ) ;
res = AST_TEST_FAIL ;
goto return_cleanup ;
}
if ( ast_event_sub_append_ie_uint ( test_subs [ 1 ] . sub , AST_EVENT_IE_NEWMSGS , 3 ) ) {
ast_event_sub_destroy ( test_subs [ 1 ] . sub ) ;
test_subs [ 1 ] . sub = NULL ;
ast_test_status_update ( test , " Failed to append uint IE to test_subs[1].sub \n " ) ;
/*
* Subscription TEST_SUBS_CUSTOM_EXISTS :
* - allocate normally
* - subscribe to CUSTOM events with a NEWMSGS UINT and OLDMSGS EXISTS IE check
*/
ast_test_status_update ( test , " Adding TEST_SUBS_CUSTOM_EXISTS subscription \n " ) ;
test_subs [ TEST_SUBS_CUSTOM_EXISTS ] . sub = ast_event_subscribe ( AST_EVENT_CUSTOM , event_sub_cb ,
test_subs_class_type_str ( TEST_SUBS_CUSTOM_EXISTS ) , & test_subs [ TEST_SUBS_CUSTOM_EXISTS ] . data ,
AST_EVENT_IE_NEWMSGS , AST_EVENT_IE_PLTYPE_UINT , 4 ,
AST_EVENT_IE_OLDMSGS , AST_EVENT_IE_PLTYPE_EXISTS ,
AST_EVENT_IE_END ) ;
if ( ! test_subs [ TEST_SUBS_CUSTOM_EXISTS ] . sub ) {
ast_test_status_update ( test , " Failed to create TEST_SUBS_CUSTOM_EXISTS subscription \n " ) ;
res = AST_TEST_FAIL ;
goto return_cleanup ;
}
if ( ast_event_sub_append_ie_bitflags ( test_subs [ 1 ] . sub , AST_EVENT_IE_NEWMSGS , 1 ) ) {
ast_event_sub_destroy ( test_subs [ 1 ] . sub ) ;
test_subs [ 1 ] . sub = NULL ;
ast_test_status_update ( test , " Failed to append bitflags IE to test_subs[1].sub \n " ) ;
if ( strcmp( ast_event_subscriber_get_description ( test_subs [ TEST_SUBS_CUSTOM_EXISTS ] . sub ) ,
test_subs_class_type_str( TEST_SUBS_CUSTOM_EXISTS ) ) ) {
ast_test_status_update ( test ,
" Unexpected subscription description on TEST_SUBS_CUSTOM_EXISTS subscription \n " ) ;
res = AST_TEST_FAIL ;
goto return_cleanup ;
}
if ( ast_event_sub_append_ie_str ( test_subs [ 1 ] . sub , AST_EVENT_IE_DEVICE , " FOO/bar " ) ) {
ast_event_sub_destroy ( test_subs [ 1 ] . sub ) ;
test_subs [ 1 ] . sub = NULL ;
ast_test_status_update ( test , " Failed to append str IE to test_subs[1].sub \n " ) ;
/* For the sake of exercising destruction before activation */
test_subs [ TEST_SUBS_CUSTOM_DYNAMIC ] . sub = ast_event_subscribe_new ( AST_EVENT_CUSTOM ,
event_sub_cb , & test_subs [ TEST_SUBS_CUSTOM_DYNAMIC ] . data ) ;
if ( ! test_subs [ TEST_SUBS_CUSTOM_DYNAMIC ] . sub ) {
ast_test_status_update ( test , " Failed to create TEST_SUBS_CUSTOM_DYNAMIC subscription \n " ) ;
res = AST_TEST_FAIL ;
goto return_cleanup ;
}
ast_event_sub_destroy ( test_subs [ TEST_SUBS_CUSTOM_DYNAMIC ] . sub ) ;
if ( ast_event_sub_append_ie_raw ( test_subs [ 1 ] . sub , AST_EVENT_IE_MAILBOX , " 800 km " ,
strlen ( " 800 km " ) ) ) {
ast_event_sub_destroy ( test_subs [ 1 ] . sub ) ;
test_subs [ 1 ] . sub = NULL ;
ast_test_status_update ( test , " Failed to append raw IE to test_subs[1].sub \n " ) ;
/*
* Subscription TEST_SUBS_CUSTOM_DYNAMIC :
* - allocate dynamically
* - subscribe to all CUSTOM events
* - add IE checks for all types
*/
ast_test_status_update ( test , " Adding TEST_SUBS_CUSTOM_DYNAMIC subscription \n " ) ;
test_subs [ TEST_SUBS_CUSTOM_DYNAMIC ] . sub = ast_event_subscribe_new ( AST_EVENT_CUSTOM ,
event_sub_cb , & test_subs [ TEST_SUBS_CUSTOM_DYNAMIC ] . data ) ;
if ( ! test_subs [ TEST_SUBS_CUSTOM_DYNAMIC ] . sub ) {
ast_test_status_update ( test , " Failed to create TEST_SUBS_CUSTOM_DYNAMIC subscription \n " ) ;
res = AST_TEST_FAIL ;
goto return_cleanup ;
}
if ( ast_event_sub_append_ie_exists ( test_subs [ 1 ] . sub , AST_EVENT_IE_DEVICE ) ) {
ast_event_sub_destroy ( test_subs [ 1 ] . sub ) ;
test_subs [ 1 ] . sub = NULL ;
ast_test_status_update ( test , " Failed to append exists IE to test_subs[1].sub \n " ) ;
if ( strcmp ( ast_event_subscriber_get_description ( test_subs [ TEST_SUBS_CUSTOM_DYNAMIC ] . sub ) ,
" " ) ) {
ast_event_sub_destroy ( test_subs [ TEST_SUBS_CUSTOM_DYNAMIC ] . sub ) ;
test_subs [ TEST_SUBS_CUSTOM_DYNAMIC ] . sub = NULL ;
ast_test_status_update ( test ,
" Unexpected subscription description on TEST_SUBS_CUSTOM_DYNAMIC subscription \n " ) ;
res = AST_TEST_FAIL ;
goto return_cleanup ;
}
if ( ast_event_sub_a ctivate( test_subs [ 1 ] . sub ) ) {
ast_event_sub_destroy ( test_subs [ 1 ] . sub ) ;
test_subs [ 1 ] . sub = NULL ;
ast_test_status_update ( test , " Failed to a ctivate test_subs[1].sub \n " ) ;
if ( ast_event_sub_a ppend_ie_uint( test_subs [ TEST_SUBS_CUSTOM_DYNAMIC ] . sub , AST_EVENT_IE_NEWMSGS , 4 ) ) {
ast_event_sub_destroy ( test_subs [ TEST_SUBS_CUSTOM_DYNAMIC ] . sub ) ;
test_subs [ TEST_SUBS_CUSTOM_DYNAMIC ] . sub = NULL ;
ast_test_status_update ( test , " Failed to a ppend UINT IE to TEST_SUBS_CUSTOM_DYNAMIC subscription \n " ) ;
res = AST_TEST_FAIL ;
goto return_cleanup ;
}
test_subs [ 2 ] . sub = ast_event_subscribe ( AST_EVENT_ALL , event_sub_cb , " test_sub " , & test_subs [ 2 ] . data ,
AST_EVENT_IE_DEVICE , AST_EVENT_IE_PLTYPE_STR , " FOO/bar " ,
AST_EVENT_IE_END ) ;
if ( ! test_subs [ 2 ] . sub ) {
ast_test_status_update ( test , " Failed to create test_subs[2].sub \n " ) ;
if ( ast_event_sub_append_ie_bitflags ( test_subs [ TEST_SUBS_CUSTOM_DYNAMIC ] . sub , AST_EVENT_IE_OLDMSGS , 1 ) ) {
ast_event_sub_destroy ( test_subs [ TEST_SUBS_CUSTOM_DYNAMIC ] . sub ) ;
test_subs [ TEST_SUBS_CUSTOM_DYNAMIC ] . sub = NULL ;
ast_test_status_update ( test , " Failed to append BITFLAGS IE to TEST_SUBS_CUSTOM_DYNAMIC subscription \n " ) ;
res = AST_TEST_FAIL ;
goto return_cleanup ;
}
if ( ast_event_sub_append_ie_str ( test_subs [ TEST_SUBS_CUSTOM_DYNAMIC ] . sub , AST_EVENT_IE_DEVICE , " FOO/bar " ) ) {
ast_event_sub_destroy ( test_subs [ TEST_SUBS_CUSTOM_DYNAMIC ] . sub ) ;
test_subs [ TEST_SUBS_CUSTOM_DYNAMIC ] . sub = NULL ;
ast_test_status_update ( test , " Failed to append STR IE to TEST_SUBS_CUSTOM_DYNAMIC subscription \n " ) ;
res = AST_TEST_FAIL ;
goto return_cleanup ;
}
if ( ast_event_sub_append_ie_raw ( test_subs [ TEST_SUBS_CUSTOM_DYNAMIC ] . sub , AST_EVENT_IE_MAILBOX , " 800 km " ,
strlen ( " 800 km " ) ) ) {
ast_event_sub_destroy ( test_subs [ TEST_SUBS_CUSTOM_DYNAMIC ] . sub ) ;
test_subs [ TEST_SUBS_CUSTOM_DYNAMIC ] . sub = NULL ;
ast_test_status_update ( test , " Failed to append RAW IE to TEST_SUBS_CUSTOM_DYNAMIC subscription \n " ) ;
res = AST_TEST_FAIL ;
goto return_cleanup ;
}
if ( ast_event_sub_append_ie_exists ( test_subs [ TEST_SUBS_CUSTOM_DYNAMIC ] . sub , AST_EVENT_IE_STATE ) ) {
ast_event_sub_destroy ( test_subs [ TEST_SUBS_CUSTOM_DYNAMIC ] . sub ) ;
test_subs [ TEST_SUBS_CUSTOM_DYNAMIC ] . sub = NULL ;
ast_test_status_update ( test , " Failed to append EXISTS IE to TEST_SUBS_CUSTOM_DYNAMIC subscription \n " ) ;
res = AST_TEST_FAIL ;
goto return_cleanup ;
}
if ( ast_event_sub_activate ( test_subs [ TEST_SUBS_CUSTOM_DYNAMIC ] . sub ) ) {
ast_event_sub_destroy ( test_subs [ TEST_SUBS_CUSTOM_DYNAMIC ] . sub ) ;
test_subs [ TEST_SUBS_CUSTOM_DYNAMIC ] . sub = NULL ;
ast_test_status_update ( test , " Failed to activate TEST_SUBS_CUSTOM_DYNAMIC subscription \n " ) ;
res = AST_TEST_FAIL ;
goto return_cleanup ;
}
@ -399,42 +576,219 @@ AST_TEST_DEFINE(event_sub_test)
/*
* Exercise the API call to check for existing subscriptions .
*/
ast_test_status_update ( test , " Checking for subscribers to events \n " ) ;
/* Check STR matching. */
sub_res = ast_event_check_subscriber ( AST_EVENT_CUSTOM ,
AST_EVENT_IE_DEVICE , AST_EVENT_IE_PLTYPE_STR , " FOO/bar " ,
AST_EVENT_IE_END ) ;
AST_EVENT_IE_DEVICE , AST_EVENT_IE_PLTYPE_STR , " FOO/bar " ,
AST_EVENT_IE_END ) ;
if ( sub_res ! = AST_EVENT_SUB_EXISTS ) {
ast_test_status_update ( test , " subscription did not exist\n " ) ;
ast_test_status_update ( test , " Str FOO/bar subscription did not exist\n " ) ;
res = AST_TEST_FAIL ;
goto return_cleanup ;
}
sub_res = ast_event_check_subscriber ( AST_EVENT_CUSTOM ,
AST_EVENT_IE_DEVICE , AST_EVENT_IE_PLTYPE_STR , " BOOBS " ,
AST_EVENT_IE_END ) ;
AST_EVENT_IE_DEVICE , AST_EVENT_IE_PLTYPE_STR , " Money " ,
AST_EVENT_IE_END ) ;
if ( sub_res ! = AST_EVENT_SUB_NONE ) {
ast_test_status_update ( test , " Str Money subscription should not exist! (%d) \n " ,
sub_res ) ;
res = AST_TEST_FAIL ;
}
/* Check RAW matching. */
sub_res = ast_event_check_subscriber ( AST_EVENT_CUSTOM ,
AST_EVENT_IE_MAILBOX , AST_EVENT_IE_PLTYPE_RAW , " FOO/bar " , sizeof ( " FOO/bar " ) ,
AST_EVENT_IE_END ) ;
if ( sub_res ! = AST_EVENT_SUB_EXISTS ) {
ast_test_status_update ( test , " Raw FOO/bar subscription did not exist \n " ) ;
res = AST_TEST_FAIL ;
}
sub_res = ast_event_check_subscriber ( AST_EVENT_CUSTOM ,
AST_EVENT_IE_MAILBOX , AST_EVENT_IE_PLTYPE_RAW , " FOO/bar " , sizeof ( " FOO/bar " ) - 1 ,
AST_EVENT_IE_END ) ;
if ( sub_res ! = AST_EVENT_SUB_NONE ) {
ast_test_status_update ( test , " Raw FOO/bar-1 subscription should not exist! (%d) \n " ,
sub_res ) ;
res = AST_TEST_FAIL ;
}
sub_res = ast_event_check_subscriber ( AST_EVENT_CUSTOM ,
AST_EVENT_IE_MAILBOX , AST_EVENT_IE_PLTYPE_RAW , " Monkeys " , sizeof ( " Monkeys " ) ,
AST_EVENT_IE_END ) ;
if ( sub_res ! = AST_EVENT_SUB_NONE ) {
ast_test_status_update ( test , " Raw Monkeys subscription should not exist! (%d) \n " ,
sub_res ) ;
res = AST_TEST_FAIL ;
}
/* Check UINT matching. */
sub_res = ast_event_check_subscriber ( AST_EVENT_CUSTOM ,
AST_EVENT_IE_NEWMSGS , AST_EVENT_IE_PLTYPE_UINT , 5 ,
AST_EVENT_IE_END ) ;
if ( sub_res ! = AST_EVENT_SUB_EXISTS ) {
ast_test_status_update ( test , " UINT=5 subscription did not exist \n " ) ;
res = AST_TEST_FAIL ;
}
sub_res = ast_event_check_subscriber ( AST_EVENT_CUSTOM ,
AST_EVENT_IE_NEWMSGS , AST_EVENT_IE_PLTYPE_UINT , 1 ,
AST_EVENT_IE_END ) ;
if ( sub_res ! = AST_EVENT_SUB_NONE ) {
ast_test_status_update ( test , " Someone subscribed to updates on boobs, lol? (%d) \n " , sub_res ) ;
ast_test_status_update ( test , " UINT=1 subscription should not exist! (%d) \n " ,
sub_res ) ;
res = AST_TEST_FAIL ;
}
/* Check BITFLAGS matching. */
sub_res = ast_event_check_subscriber ( AST_EVENT_CUSTOM ,
AST_EVENT_IE_NEWMSGS , AST_EVENT_IE_PLTYPE_BITFLAGS , 2 ,
AST_EVENT_IE_END ) ;
if ( sub_res ! = AST_EVENT_SUB_EXISTS ) {
ast_test_status_update ( test , " BITFLAGS=2 subscription did not exist \n " ) ;
res = AST_TEST_FAIL ;
}
sub_res = ast_event_check_subscriber ( AST_EVENT_CUSTOM ,
AST_EVENT_IE_NEWMSGS , AST_EVENT_IE_PLTYPE_BITFLAGS , 8 ,
AST_EVENT_IE_END ) ;
if ( sub_res ! = AST_EVENT_SUB_NONE ) {
ast_test_status_update ( test , " BITFLAGS=8 subscription should not exist! (%d) \n " ,
sub_res ) ;
res = AST_TEST_FAIL ;
}
/* Check EXISTS matching. */
sub_res = ast_event_check_subscriber ( AST_EVENT_CUSTOM ,
AST_EVENT_IE_NEWMSGS , AST_EVENT_IE_PLTYPE_UINT , 4 ,
AST_EVENT_IE_OLDMSGS , AST_EVENT_IE_PLTYPE_UINT , 100 ,
AST_EVENT_IE_END ) ;
if ( sub_res ! = AST_EVENT_SUB_EXISTS ) {
ast_test_status_update ( test , " EXISTS subscription did not exist \n " ) ;
res = AST_TEST_FAIL ;
}
sub_res = ast_event_check_subscriber ( AST_EVENT_CUSTOM ,
AST_EVENT_IE_NEWMSGS , AST_EVENT_IE_PLTYPE_UINT , 4 ,
AST_EVENT_IE_END ) ;
if ( sub_res ! = AST_EVENT_SUB_NONE ) {
ast_test_status_update ( test , " EXISTS subscription should not exist! (%d) \n " ,
sub_res ) ;
res = AST_TEST_FAIL ;
}
/*
* Subscription TEST_SUBS_CUSTOM_ANY :
* - allocate normally
* - subscribe to all CUSTOM events
*/
ast_test_status_update ( test , " Adding TEST_SUBS_CUSTOM_ANY subscription \n " ) ;
test_subs [ TEST_SUBS_CUSTOM_ANY ] . sub = ast_event_subscribe ( AST_EVENT_CUSTOM , event_sub_cb ,
test_subs_class_type_str ( TEST_SUBS_CUSTOM_ANY ) , & test_subs [ TEST_SUBS_CUSTOM_ANY ] . data ,
AST_EVENT_IE_END ) ;
if ( ! test_subs [ TEST_SUBS_CUSTOM_ANY ] . sub ) {
ast_test_status_update ( test , " Failed to create TEST_SUBS_CUSTOM_ANY subscription \n " ) ;
res = AST_TEST_FAIL ;
goto return_cleanup ;
}
if ( strcmp ( ast_event_subscriber_get_description ( test_subs [ TEST_SUBS_CUSTOM_ANY ] . sub ) ,
test_subs_class_type_str ( TEST_SUBS_CUSTOM_ANY ) ) ) {
ast_test_status_update ( test ,
" Unexpected subscription description on TEST_SUBS_CUSTOM_ANY subscription \n " ) ;
res = AST_TEST_FAIL ;
goto return_cleanup ;
}
/*
* Fire off some events and track what was received in the callback
*/
ast_test_status_update ( test , " Posting test events \n " ) ;
/*
* Event to check STR matching .
*
* event # 1 :
* - simple custom event ( will match sub 1 and 3 )
* Matching subscriptions :
* TEST_SUBS_ALL_STR
* TEST_SUBS_CUSTOM_STR
* TEST_SUBS_CUSTOM_ANY
*/
event = ast_event_new ( AST_EVENT_CUSTOM ,
AST_EVENT_IE_MAILBOX , AST_EVENT_IE_PLTYPE_RAW , " FOO/bar " , sizeof ( " FOO/bar " ) - 1 ,
AST_EVENT_IE_DEVICE , AST_EVENT_IE_PLTYPE_STR , " FOO/bar " ,
AST_EVENT_IE_END ) ;
if ( ! event ) {
ast_test_status_update ( test , " Failed to create event \n " ) ;
res = AST_TEST_FAIL ;
goto return_cleanup ;
}
if ( ast_event_queue ( event ) ) {
ast_event_destroy ( event ) ;
event = NULL ;
ast_test_status_update ( test , " Failed to queue event \n " ) ;
res = AST_TEST_FAIL ;
goto return_cleanup ;
}
/*
* Event to check RAW matching .
*
* event # 2 :
* - custom event with payloads that satisfy every payload check
* for sub # 2 ( will match sub 1 , 2 , and 3 )
* Matching subscriptions :
* TEST_SUBS_CUSTOM_RAW
* TEST_SUBS_CUSTOM_ANY
*/
event = ast_event_new ( AST_EVENT_CUSTOM ,
AST_EVENT_IE_DEVICE , AST_EVENT_IE_PLTYPE_STR , " Misery " ,
AST_EVENT_IE_MAILBOX , AST_EVENT_IE_PLTYPE_RAW , " FOO/bar " , sizeof ( " FOO/bar " ) ,
AST_EVENT_IE_END ) ;
if ( ! event ) {
ast_test_status_update ( test , " Failed to create event \n " ) ;
res = AST_TEST_FAIL ;
goto return_cleanup ;
}
if ( ast_event_queue ( event ) ) {
ast_event_destroy ( event ) ;
event = NULL ;
ast_test_status_update ( test , " Failed to queue event \n " ) ;
res = AST_TEST_FAIL ;
goto return_cleanup ;
}
/*
* Event to check UINT matching .
*
* event # 3 :
* - custom event that should only match sub # 1
* Matching subscriptions :
* TEST_SUBS_CUSTOM_UINT
* TEST_SUBS_CUSTOM_BITFLAGS
* TEST_SUBS_CUSTOM_ANY
*/
event = ast_event_new ( AST_EVENT_CUSTOM ,
AST_EVENT_IE_NEWMSGS , AST_EVENT_IE_PLTYPE_UINT , 5 ,
AST_EVENT_IE_END ) ;
if ( ! event ) {
ast_test_status_update ( test , " Failed to create event \n " ) ;
res = AST_TEST_FAIL ;
goto return_cleanup ;
}
if ( ast_event_queue ( event ) ) {
ast_event_destroy ( event ) ;
event = NULL ;
ast_test_status_update ( test , " Failed to queue event \n " ) ;
res = AST_TEST_FAIL ;
goto return_cleanup ;
}
/*
* Event to check BITFLAGS matching .
*
* Matching subscriptions :
* TEST_SUBS_CUSTOM_BITFLAGS
* TEST_SUBS_CUSTOM_ANY
*/
event = ast_event_new ( AST_EVENT_CUSTOM ,
AST_EVENT_IE_DEVICE , AST_EVENT_IE_PLTYPE_STR , " FOO/bar " ,
AST_EVENT_IE_END ) ;
AST_EVENT_IE_NEWMSGS , AST_EVENT_IE_PLTYPE_UINT , 4 ,
AST_EVENT_IE_END ) ;
if ( ! event ) {
ast_test_status_update ( test , " Failed to create event \n " ) ;
res = AST_TEST_FAIL ;
@ -448,11 +802,18 @@ AST_TEST_DEFINE(event_sub_test)
goto return_cleanup ;
}
/*
* Event to check EXISTS matching .
*
* Matching subscriptions :
* TEST_SUBS_CUSTOM_EXISTS
* TEST_SUBS_CUSTOM_BITFLAGS
* TEST_SUBS_CUSTOM_ANY
*/
event = ast_event_new ( AST_EVENT_CUSTOM ,
AST_EVENT_IE_DEVICE , AST_EVENT_IE_PLTYPE_STR , " FOO/bar " ,
AST_EVENT_IE_MAILBOX , AST_EVENT_IE_PLTYPE_RAW , " 800 km " , strlen ( " 800 km " ) ,
AST_EVENT_IE_NEWMSGS , AST_EVENT_IE_PLTYPE_UINT , 3 ,
AST_EVENT_IE_END ) ;
AST_EVENT_IE_NEWMSGS , AST_EVENT_IE_PLTYPE_UINT , 4 ,
AST_EVENT_IE_OLDMSGS , AST_EVENT_IE_PLTYPE_UINT , 4 ,
AST_EVENT_IE_END ) ;
if ( ! event ) {
ast_test_status_update ( test , " Failed to create event \n " ) ;
res = AST_TEST_FAIL ;
@ -466,11 +827,24 @@ AST_TEST_DEFINE(event_sub_test)
goto return_cleanup ;
}
/*
* Event to get dynamic subscription to have an event .
*
* Matching subscriptions :
* TEST_SUBS_CUSTOM_DYNAMIC
* TEST_SUBS_CUSTOM_BITFLAGS
* TEST_SUBS_CUSTOM_EXISTS
* TEST_SUBS_ALL_STR
* TEST_SUBS_CUSTOM_STR
* TEST_SUBS_CUSTOM_ANY
*/
event = ast_event_new ( AST_EVENT_CUSTOM ,
AST_EVENT_IE_DEVICE , AST_EVENT_IE_PLTYPE_STR , " blah " ,
AST_EVENT_IE_MAILBOX , AST_EVENT_IE_PLTYPE_RAW , " 801 km " , strlen ( " 801 km " ) ,
AST_EVENT_IE_NEWMSGS , AST_EVENT_IE_PLTYPE_UINT , 0 ,
AST_EVENT_IE_END ) ;
AST_EVENT_IE_NEWMSGS , AST_EVENT_IE_PLTYPE_UINT , 4 ,
AST_EVENT_IE_OLDMSGS , AST_EVENT_IE_PLTYPE_UINT , 5 ,
AST_EVENT_IE_MAILBOX , AST_EVENT_IE_PLTYPE_RAW , " 800 km " , strlen ( " 800 km " ) ,
AST_EVENT_IE_DEVICE , AST_EVENT_IE_PLTYPE_STR , " FOO/bar " ,
AST_EVENT_IE_STATE , AST_EVENT_IE_PLTYPE_UINT , 5 ,
AST_EVENT_IE_END ) ;
if ( ! event ) {
ast_test_status_update ( test , " Failed to create event \n " ) ;
res = AST_TEST_FAIL ;
@ -483,6 +857,7 @@ AST_TEST_DEFINE(event_sub_test)
res = AST_TEST_FAIL ;
goto return_cleanup ;
}
event = NULL ;
/*
@ -494,19 +869,23 @@ AST_TEST_DEFINE(event_sub_test)
* If something was actually blocking event distribution that long , I would call
* it a bug .
*
* Expected results :
* - sub 1 , 2 events
* - sub 2 , 1 event
* - sub 3 , 2 events
* See test_subs [ ] initialization for expected results .
*/
ast_test_status_update ( test , " Sleeping a few seconds to allow event propagation... \n " ) ;
sleep ( 3 ) ;
for ( i = 0 ; i < ARRAY_LEN ( test_subs ) ; i + + ) {
if ( ! test_subs [ i ] . sub ) {
ast_test_status_update ( test , " Missing a test subscription for %s \n " ,
test_subs_class_type_str ( i ) ) ;
res = AST_TEST_FAIL ;
}
if ( test_subs [ i ] . data . count ! = test_subs [ i ] . expected_count ) {
ast_test_status_update ( test , " Unexpected callback count, %u != %u for #%d \n " ,
test_subs [ i ] . data . count , test_subs [ i ] . expected_count , i ) ;
ast_test_status_update ( test ,
" Unexpected callback count, got %u expected %u for %s \n " ,
test_subs [ i ] . data . count , test_subs [ i ] . expected_count ,
test_subs_class_type_str ( i ) ) ;
res = AST_TEST_FAIL ;
}
}