better test in case of io error

This commit is contained in:
Jehan Monnier 2013-07-16 19:29:56 +02:00
parent 61f0f0bcd0
commit 7a6d1c2946
5 changed files with 73 additions and 0 deletions

View file

@ -440,6 +440,7 @@ Sal * sal_init(){
belle_sip_provider_add_sip_listener(sal->prov,sal->listener);
sal->tls_verify=TRUE;
sal->tls_verify_cn=TRUE;
sal->refresher_retry_after=60000; /*default value in ms*/
return sal;
}
void sal_set_user_pointer(Sal *sal, void *user_data){
@ -872,3 +873,9 @@ belle_sip_response_t* sal_create_response_from_request ( Sal* sal, belle_sip_req
belle_sip_message_add_header(BELLE_SIP_MESSAGE(resp),BELLE_SIP_HEADER(sal->user_agent));
return resp;
}
void sal_set_refresher_retry_after(Sal *sal,int value) {
sal->refresher_retry_after=value;
}
int sal_get_refresher_retry_after(const Sal *sal) {
return sal->refresher_retry_after;
}

View file

@ -44,6 +44,7 @@ struct Sal{
bool_t tls_verify;
bool_t tls_verify_cn;
bool_t use_dates;
int refresher_retry_after; /*retry after value for refresher*/
};
typedef enum SalOpState {

View file

@ -451,6 +451,7 @@ int sal_op_send_and_create_refresher(SalOp* op,belle_sip_request_t* req, int exp
if ((op->refresher = belle_sip_client_transaction_create_refresher(op->pending_client_trans))) {
belle_sip_refresher_enable_nat_helper(op->refresher,op->base.root->nat_helper_enabled);
belle_sip_refresher_set_listener(op->refresher,listener,op);
belle_sip_refresher_set_retry_after(op->refresher,op->base.root->refresher_retry_after);
return 0;
} else {
return -1;

View file

@ -606,6 +606,9 @@ void __sal_op_free(SalOp *b);
LINPHONE_PUBLIC void sal_set_send_error(Sal *sal,int value);
/*1 for no error*/
LINPHONE_PUBLIC void sal_set_recv_error(Sal *sal,int value);
/*refresher retry after value in ms*/
LINPHONE_PUBLIC void sal_set_refresher_retry_after(Sal *sal,int value);
LINPHONE_PUBLIC int sal_get_refresher_retry_after(const Sal *sal);
/*enable contact fixing*/
void sal_nat_helper_enable(Sal *sal,bool_t enable);
bool_t sal_nat_helper_enabled(Sal *sal);

View file

@ -383,6 +383,65 @@ static void io_recv_error(){
linphone_core_manager_destroy(mgr);
}
static void io_recv_error_retry_immediatly(){
LinphoneCoreManager *mgr;
LinphoneCore* lc;
int register_ok;
stats* counters ;
int number_of_udp_proxy=0;
mgr=configure_lcm();
lc=mgr->lc;
counters = get_stats(lc);
register_ok=counters->number_of_LinphoneRegistrationOk;
number_of_udp_proxy=get_number_of_udp_proxy(lc);
sal_set_recv_error(lc->sal, 0);
CU_ASSERT_TRUE(wait_for(lc,NULL,&counters->number_of_LinphoneRegistrationProgress,2*(register_ok-number_of_udp_proxy) /*because 1 udp*/));
CU_ASSERT_EQUAL(counters->number_of_LinphoneRegistrationFailed,0)
sal_set_recv_error(lc->sal, 1); /*reset*/
CU_ASSERT_TRUE(wait_for(lc,lc,&counters->number_of_LinphoneRegistrationOk,2*(register_ok-number_of_udp_proxy)));
linphone_core_manager_destroy(mgr);
}
static void io_recv_error_late_recovery(){
LinphoneCoreManager *mgr;
LinphoneCore* lc;
int register_ok;
stats* counters ;
int number_of_udp_proxy=0;
MSList* lcs;
mgr=linphone_core_manager_new2( "multi_account_lrc",FALSE); /*to make sure iterates are not call yet*/
lc=mgr->lc;
sal_set_refresher_retry_after(lc->sal,1000);
counters=&mgr->stat;
CU_ASSERT_TRUE(wait_for(mgr->lc,mgr->lc,&counters->number_of_LinphoneRegistrationOk,ms_list_size(linphone_core_get_proxy_config_list(mgr->lc))));
counters = get_stats(lc);
register_ok=counters->number_of_LinphoneRegistrationOk;
number_of_udp_proxy=get_number_of_udp_proxy(lc);
/*simulate a general socket error*/
sal_set_recv_error(lc->sal, 0);
sal_set_send_error(lc->sal, -1);
CU_ASSERT_TRUE(wait_for(lc,NULL,&counters->number_of_LinphoneRegistrationProgress,(register_ok-number_of_udp_proxy)+register_ok /*because 1 udp*/));
CU_ASSERT_EQUAL(counters->number_of_LinphoneRegistrationFailed,0)
CU_ASSERT_TRUE(wait_for_list(lcs=ms_list_append(NULL,lc),&counters->number_of_LinphoneRegistrationFailed,(register_ok-number_of_udp_proxy),sal_get_refresher_retry_after(lc->sal)+1000));
sal_set_recv_error(lc->sal, 1); /*reset*/
sal_set_send_error(lc->sal, 0);
CU_ASSERT_TRUE(wait_for_list(lcs=ms_list_append(NULL,lc),&counters->number_of_LinphoneRegistrationOk,register_ok-number_of_udp_proxy +register_ok,sal_get_refresher_retry_after(lc->sal)+1000));
linphone_core_manager_destroy(mgr);
}
static void io_recv_error_without_active_register(){
LinphoneCoreManager *mgr;
LinphoneCore* lc;
@ -516,6 +575,8 @@ test_t register_tests[] = {
{ "Transport change", transport_change },
{ "Network state change", network_state_change },
{ "Io recv error", io_recv_error },
{ "Io recv error with recovery", io_recv_error_retry_immediatly},
{ "Io recv error with late recovery", io_recv_error_late_recovery},
{ "Io recv error without active registration", io_recv_error_without_active_register}
};