@ -41,6 +41,34 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
static const char * test_category = " /stasis/core/ " ;
static struct ast_json * fake_json ( struct stasis_message * message )
{
const char * text = stasis_message_data ( message ) ;
return ast_json_string_create ( text ) ;
}
static struct ast_manager_event_blob * fake_ami ( struct stasis_message * message )
{
RAII_VAR ( struct ast_manager_event_blob * , res , NULL , ao2_cleanup ) ;
const char * text = stasis_message_data ( message ) ;
res = ast_manager_event_blob_create ( EVENT_FLAG_TEST , " FakeMI " ,
" Message: %s " , text ) ;
if ( res = = NULL ) {
return NULL ;
}
ao2_ref ( res , + 1 ) ;
return res ;
}
static struct stasis_message_vtable fake_vtable = {
. to_json = fake_json ,
. to_ami = fake_ami
} ;
AST_TEST_DEFINE ( message_type )
{
RAII_VAR ( struct stasis_message_type * , uut , NULL , ao2_cleanup ) ;
@ -56,8 +84,8 @@ AST_TEST_DEFINE(message_type)
break ;
}
ast_test_validate ( test , NULL = = stasis_message_type_create ( NULL )) ;
uut = stasis_message_type_create ( " SomeMessage " );
ast_test_validate ( test , NULL = = stasis_message_type_create ( NULL , NULL )) ;
uut = stasis_message_type_create ( " SomeMessage " , NULL );
ast_test_validate ( test , 0 = = strcmp ( stasis_message_type_name ( uut ) , " SomeMessage " ) ) ;
return AST_TEST_PASS ;
@ -84,7 +112,7 @@ AST_TEST_DEFINE(message)
}
type = stasis_message_type_create ( " SomeMessage " );
type = stasis_message_type_create ( " SomeMessage " , NULL );
ast_test_validate ( test , NULL = = stasis_message_create ( NULL , NULL ) ) ;
ast_test_validate ( test , NULL = = stasis_message_create ( type , NULL ) ) ;
@ -332,7 +360,7 @@ AST_TEST_DEFINE(publish)
test_data = ao2_alloc ( 1 , NULL ) ;
ast_test_validate ( test , NULL ! = test_data ) ;
test_message_type = stasis_message_type_create ( " TestMessage " );
test_message_type = stasis_message_type_create ( " TestMessage " , NULL );
test_message = stasis_message_create ( test_message_type , test_data ) ;
stasis_publish ( topic , test_message ) ;
@ -380,7 +408,7 @@ AST_TEST_DEFINE(unsubscribe_stops_messages)
test_data = ao2_alloc ( 1 , NULL ) ;
ast_test_validate ( test , NULL ! = test_data ) ;
test_message_type = stasis_message_type_create ( " TestMessage " );
test_message_type = stasis_message_type_create ( " TestMessage " , NULL );
test_message = stasis_message_create ( test_message_type , test_data ) ;
stasis_publish ( topic , test_message ) ;
@ -444,7 +472,7 @@ AST_TEST_DEFINE(forward)
test_data = ao2_alloc ( 1 , NULL ) ;
ast_test_validate ( test , NULL ! = test_data ) ;
test_message_type = stasis_message_type_create ( " TestMessage " );
test_message_type = stasis_message_type_create ( " TestMessage " , NULL );
test_message = stasis_message_create ( test_message_type , test_data ) ;
stasis_publish ( topic , test_message ) ;
@ -494,7 +522,7 @@ AST_TEST_DEFINE(interleaving)
break ;
}
test_message_type = stasis_message_type_create ( " test " );
test_message_type = stasis_message_type_create ( " test " , NULL );
ast_test_validate ( test , NULL ! = test_message_type ) ;
test_data = ao2_alloc ( 1 , NULL ) ;
@ -604,7 +632,7 @@ AST_TEST_DEFINE(cache_passthrough)
break ;
}
non_cache_type = stasis_message_type_create ( " NonCacheable " );
non_cache_type = stasis_message_type_create ( " NonCacheable " , NULL );
ast_test_validate ( test , NULL ! = non_cache_type ) ;
topic = stasis_topic_create ( " SomeTopic " ) ;
ast_test_validate ( test , NULL ! = topic ) ;
@ -657,7 +685,7 @@ AST_TEST_DEFINE(cache)
break ;
}
cache_type = stasis_message_type_create ( " Cacheable " );
cache_type = stasis_message_type_create ( " Cacheable " , NULL );
ast_test_validate ( test , NULL ! = cache_type ) ;
topic = stasis_topic_create ( " SomeTopic " ) ;
ast_test_validate ( test , NULL ! = topic ) ;
@ -759,7 +787,7 @@ AST_TEST_DEFINE(cache_dump)
break ;
}
cache_type = stasis_message_type_create ( " Cacheable " );
cache_type = stasis_message_type_create ( " Cacheable " , NULL );
ast_test_validate ( test , NULL ! = cache_type ) ;
topic = stasis_topic_create ( " SomeTopic " ) ;
ast_test_validate ( test , NULL ! = topic ) ;
@ -866,7 +894,7 @@ AST_TEST_DEFINE(route_conflicts)
consumer2 = consumer_create ( 1 ) ;
ast_test_validate ( test , NULL ! = consumer2 ) ;
test_message_type = stasis_message_type_create ( " TestMessage " );
test_message_type = stasis_message_type_create ( " TestMessage " , NULL );
ast_test_validate ( test , NULL ! = test_message_type ) ;
uut = stasis_message_router_create ( topic ) ;
@ -920,11 +948,11 @@ AST_TEST_DEFINE(router)
consumer3 = consumer_create ( 1 ) ;
ast_test_validate ( test , NULL ! = consumer3 ) ;
test_message_type1 = stasis_message_type_create ( " TestMessage1 " );
test_message_type1 = stasis_message_type_create ( " TestMessage1 " , NULL );
ast_test_validate ( test , NULL ! = test_message_type1 ) ;
test_message_type2 = stasis_message_type_create ( " TestMessage2 " );
test_message_type2 = stasis_message_type_create ( " TestMessage2 " , NULL );
ast_test_validate ( test , NULL ! = test_message_type2 ) ;
test_message_type3 = stasis_message_type_create ( " TestMessage3 " );
test_message_type3 = stasis_message_type_create ( " TestMessage3 " , NULL );
ast_test_validate ( test , NULL ! = test_message_type3 ) ;
uut = stasis_message_router_create ( topic ) ;
@ -978,6 +1006,147 @@ AST_TEST_DEFINE(router)
return AST_TEST_PASS ;
}
AST_TEST_DEFINE ( no_to_json )
{
RAII_VAR ( struct stasis_message_type * , type , NULL , ao2_cleanup ) ;
RAII_VAR ( struct stasis_message * , uut , NULL , ao2_cleanup ) ;
RAII_VAR ( char * , data , NULL , ao2_cleanup ) ;
RAII_VAR ( struct ast_json * , actual , NULL , ast_json_unref ) ;
char * expected = " SomeData " ;
switch ( cmd ) {
case TEST_INIT :
info - > name = __func__ ;
info - > category = test_category ;
info - > summary = " Test message to_json function " ;
info - > description = " Test message to_json function " ;
return AST_TEST_NOT_RUN ;
case TEST_EXECUTE :
break ;
}
/* Test NULL */
actual = stasis_message_to_json ( NULL ) ;
ast_test_validate ( test , NULL = = actual ) ;
/* Test message with NULL to_json function */
type = stasis_message_type_create ( " SomeMessage " , NULL ) ;
data = ao2_alloc ( strlen ( expected ) + 1 , NULL ) ;
strcpy ( data , expected ) ;
uut = stasis_message_create ( type , data ) ;
ast_test_validate ( test , NULL ! = uut ) ;
actual = stasis_message_to_json ( uut ) ;
ast_test_validate ( test , NULL = = actual ) ;
return AST_TEST_PASS ;
}
AST_TEST_DEFINE ( to_json )
{
RAII_VAR ( struct stasis_message_type * , type , NULL , ao2_cleanup ) ;
RAII_VAR ( struct stasis_message * , uut , NULL , ao2_cleanup ) ;
RAII_VAR ( char * , data , NULL , ao2_cleanup ) ;
RAII_VAR ( struct ast_json * , actual , NULL , ast_json_unref ) ;
const char * expected_text = " SomeData " ;
RAII_VAR ( struct ast_json * , expected , NULL , ast_json_unref ) ;
switch ( cmd ) {
case TEST_INIT :
info - > name = __func__ ;
info - > category = test_category ;
info - > summary = " Test message to_json function when NULL " ;
info - > description = " Test message to_json function when NULL " ;
return AST_TEST_NOT_RUN ;
case TEST_EXECUTE :
break ;
}
type = stasis_message_type_create ( " SomeMessage " , & fake_vtable ) ;
data = ao2_alloc ( strlen ( expected_text ) + 1 , NULL ) ;
strcpy ( data , expected_text ) ;
uut = stasis_message_create ( type , data ) ;
ast_test_validate ( test , NULL ! = uut ) ;
expected = ast_json_string_create ( expected_text ) ;
actual = stasis_message_to_json ( uut ) ;
ast_test_validate ( test , ast_json_equal ( expected , actual ) ) ;
return AST_TEST_PASS ;
}
AST_TEST_DEFINE ( no_to_ami )
{
RAII_VAR ( struct stasis_message_type * , type , NULL , ao2_cleanup ) ;
RAII_VAR ( struct stasis_message * , uut , NULL , ao2_cleanup ) ;
RAII_VAR ( char * , data , NULL , ao2_cleanup ) ;
RAII_VAR ( struct ast_manager_event_blob * , actual , NULL , ao2_cleanup ) ;
char * expected = " SomeData " ;
switch ( cmd ) {
case TEST_INIT :
info - > name = __func__ ;
info - > category = test_category ;
info - > summary = " Test message to_ami function when NULL " ;
info - > description = " Test message to_ami function when NULL " ;
return AST_TEST_NOT_RUN ;
case TEST_EXECUTE :
break ;
}
/* Test NULL */
actual = stasis_message_to_ami ( NULL ) ;
ast_test_validate ( test , NULL = = actual ) ;
/* Test message with NULL to_ami function */
type = stasis_message_type_create ( " SomeMessage " , NULL ) ;
data = ao2_alloc ( strlen ( expected ) + 1 , NULL ) ;
strcpy ( data , expected ) ;
uut = stasis_message_create ( type , data ) ;
ast_test_validate ( test , NULL ! = uut ) ;
actual = stasis_message_to_ami ( uut ) ;
ast_test_validate ( test , NULL = = actual ) ;
return AST_TEST_PASS ;
}
AST_TEST_DEFINE ( to_ami )
{
RAII_VAR ( struct stasis_message_type * , type , NULL , ao2_cleanup ) ;
RAII_VAR ( struct stasis_message * , uut , NULL , ao2_cleanup ) ;
RAII_VAR ( char * , data , NULL , ao2_cleanup ) ;
RAII_VAR ( struct ast_manager_event_blob * , actual , NULL , ao2_cleanup ) ;
const char * expected_text = " SomeData " ;
const char * expected = " Message: SomeData " ;
switch ( cmd ) {
case TEST_INIT :
info - > name = __func__ ;
info - > category = test_category ;
info - > summary = " Test message to_ami function " ;
info - > description = " Test message to_ami function " ;
return AST_TEST_NOT_RUN ;
case TEST_EXECUTE :
break ;
}
type = stasis_message_type_create ( " SomeMessage " , & fake_vtable ) ;
data = ao2_alloc ( strlen ( expected_text ) + 1 , NULL ) ;
strcpy ( data , expected_text ) ;
uut = stasis_message_create ( type , data ) ;
ast_test_validate ( test , NULL ! = uut ) ;
actual = stasis_message_to_ami ( uut ) ;
ast_test_validate ( test , strcmp ( expected , actual - > extra_fields ) = = 0 ) ;
return AST_TEST_PASS ;
}
static int unload_module ( void )
{
AST_TEST_UNREGISTER ( message_type ) ;
@ -992,6 +1161,10 @@ static int unload_module(void)
AST_TEST_UNREGISTER ( route_conflicts ) ;
AST_TEST_UNREGISTER ( router ) ;
AST_TEST_UNREGISTER ( interleaving ) ;
AST_TEST_UNREGISTER ( no_to_json ) ;
AST_TEST_UNREGISTER ( to_json ) ;
AST_TEST_UNREGISTER ( no_to_ami ) ;
AST_TEST_UNREGISTER ( to_ami ) ;
return 0 ;
}
@ -1009,6 +1182,10 @@ static int load_module(void)
AST_TEST_REGISTER ( route_conflicts ) ;
AST_TEST_REGISTER ( router ) ;
AST_TEST_REGISTER ( interleaving ) ;
AST_TEST_REGISTER ( no_to_json ) ;
AST_TEST_REGISTER ( to_json ) ;
AST_TEST_REGISTER ( no_to_ami ) ;
AST_TEST_REGISTER ( to_ami ) ;
return AST_MODULE_LOAD_SUCCESS ;
}