Changeset 4420 for pjproject/trunk/pjsip/src/test/tsx_basic_test.c
- Timestamp:
- Mar 5, 2013 11:59:54 AM (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
pjproject/trunk/pjsip/src/test/tsx_basic_test.c
r3553 r4420 126 126 return -40; 127 127 } 128 pj_ mutex_unlock(tsx->mutex);128 pj_grp_lock_release(tsx->grp_lock); 129 129 } 130 130 … … 156 156 return 0; 157 157 } 158 159 /**************************************************************************/ 160 161 struct tsx_test_state 162 { 163 int pool_cnt; 164 }; 165 166 static void save_tsx_test_state(struct tsx_test_state *st) 167 { 168 st->pool_cnt = caching_pool.used_count; 169 } 170 171 static pj_status_t check_tsx_test_state(struct tsx_test_state *st) 172 { 173 if (caching_pool.used_count > st->pool_cnt) 174 return -1; 175 176 return 0; 177 } 178 179 static void destroy_endpt() 180 { 181 pjsip_endpt_destroy(endpt); 182 endpt = NULL; 183 } 184 185 static pj_status_t init_endpt() 186 { 187 pj_str_t ns = { "10.187.27.172", 13}; /* just a random, unreachable IP */ 188 pj_dns_resolver *resolver; 189 pj_status_t rc; 190 191 rc = pjsip_endpt_create(&caching_pool.factory, "endpt", &endpt); 192 if (rc != PJ_SUCCESS) { 193 app_perror("pjsip_endpt_create", rc); 194 return rc; 195 } 196 197 /* Start transaction layer module. */ 198 rc = pjsip_tsx_layer_init_module(endpt); 199 if (rc != PJ_SUCCESS) { 200 app_perror("tsx_layer_init", rc); 201 return rc; 202 } 203 204 rc = pjsip_udp_transport_start(endpt, NULL, NULL, 1, NULL); 205 if (rc != PJ_SUCCESS) { 206 app_perror("udp init", rc); 207 return rc; 208 } 209 210 rc = pjsip_tcp_transport_start(endpt, NULL, 1, NULL); 211 if (rc != PJ_SUCCESS) { 212 app_perror("tcp init", rc); 213 return rc; 214 } 215 216 rc = pjsip_endpt_create_resolver(endpt, &resolver); 217 if (rc != PJ_SUCCESS) { 218 app_perror("create resolver", rc); 219 return rc; 220 } 221 222 pj_dns_resolver_set_ns(resolver, 1, &ns, NULL); 223 224 rc = pjsip_endpt_set_resolver(endpt, resolver); 225 if (rc != PJ_SUCCESS) { 226 app_perror("set resolver", rc); 227 return rc; 228 } 229 230 return PJ_SUCCESS; 231 } 232 233 static int tsx_create_and_send_req(void *arg) 234 { 235 pj_str_t dst_uri = pj_str((char*)arg); 236 pj_str_t from_uri = pj_str((char*)"<sip:user@host>"); 237 pjsip_tx_data *tdata; 238 pj_status_t status; 239 240 status = pjsip_endpt_create_request(endpt, &pjsip_options_method, 241 &dst_uri, &from_uri, &dst_uri, 242 NULL, NULL, -1, NULL, 243 &tdata); 244 if (status != PJ_SUCCESS) 245 return status; 246 247 status = pjsip_endpt_send_request(endpt, tdata, -1, NULL, NULL); 248 if (status != PJ_SUCCESS) 249 return status; 250 251 return PJ_SUCCESS; 252 } 253 254 int tsx_destroy_test() 255 { 256 struct tsx_test_state state; 257 struct test_desc 258 { 259 const char *title; 260 int (*func)(void*); 261 void *arg; 262 int sleep_before_unload; 263 int sleep_after_unload; 264 } test_entries[] = 265 { 266 { 267 "normal unable to resolve", 268 &tsx_create_and_send_req, 269 "sip:user@somehost", 270 10000, 271 1 272 }, 273 { 274 "resolve and destroy, wait", 275 &tsx_create_and_send_req, 276 "sip:user@somehost", 277 1, 278 10000 279 }, 280 { 281 "tcp connect and destroy", 282 &tsx_create_and_send_req, 283 "sip:user@10.125.36.63:58517;transport=tcp", 284 60000, 285 1000 286 }, 287 { 288 "tcp connect and destroy", 289 &tsx_create_and_send_req, 290 "sip:user@10.125.36.63:58517;transport=tcp", 291 1, 292 60000 293 }, 294 295 }; 296 int rc; 297 unsigned i; 298 const int INDENT = 2; 299 300 pj_log_add_indent(INDENT); 301 destroy_endpt(); 302 303 for (i=0; i<PJ_ARRAY_SIZE(test_entries); ++i) { 304 struct test_desc *td = &test_entries[i]; 305 306 PJ_LOG(3,(THIS_FILE, "%s", td->title)); 307 308 pj_log_add_indent(INDENT); 309 save_tsx_test_state(&state); 310 311 rc = init_endpt(); 312 if (rc != PJ_SUCCESS) { 313 pj_log_add_indent(-INDENT*2); 314 return -10; 315 } 316 317 rc = td->func(td->arg); 318 if (rc != PJ_SUCCESS) { 319 pj_log_add_indent(-INDENT*2); 320 return -20; 321 } 322 323 flush_events(td->sleep_before_unload); 324 pjsip_tsx_layer_destroy(); 325 flush_events(td->sleep_after_unload); 326 destroy_endpt(); 327 328 rc = check_tsx_test_state(&state); 329 if (rc != PJ_SUCCESS) { 330 init_endpt(); 331 pj_log_add_indent(-INDENT*2); 332 return -30; 333 } 334 335 pj_log_add_indent(-INDENT); 336 } 337 338 init_endpt(); 339 340 pj_log_add_indent(-INDENT); 341 return 0; 342 } 343
Note: See TracChangeset
for help on using the changeset viewer.