📄 test_nta_api.c
字号:
static int api_test_errors(agent_t *ag){ nta_agent_t *nta; su_root_t *root; su_home_t home[1]; BEGIN(); memset(home, 0, sizeof home); home->suh_size = sizeof home; su_home_init(home); TEST(nta_agent_create(NULL, (url_string_t *)"sip:*:*", NULL, NULL, TAG_END()), NULL); TEST_1(root = su_root_create(NULL)); TEST(nta_agent_create(root, (url_string_t *)"http://localhost:*/invalid/bind/url", NULL, NULL, TAG_END()), NULL); TEST(nta_agent_create(root, (url_string_t *)"sip:*:*;transport=XXX", NULL, NULL, TAG_END()), NULL); TEST_1(nta = nta_agent_create(root, (url_string_t *)"sip:*:*", NULL, NULL, TAG_END())); TEST_VOID(nta_agent_destroy(NULL)); TEST_VOID(nta_agent_destroy(nta)); TEST_1(nta = nta_agent_create(root, (url_string_t *)"sip:*:*", agent_callback, ag, TAG_END())); TEST(nta_agent_contact(NULL), NULL); TEST(nta_agent_via(NULL), NULL); TEST_S(nta_agent_version(nta), nta_agent_version(NULL)); TEST(nta_agent_magic(NULL), NULL); TEST(nta_agent_magic(nta), (void *)ag); TEST(nta_agent_add_tport(NULL, NULL, TAG_END()), -1); TEST(nta_agent_newtag(home, "tag=%s", NULL), NULL); TEST_1(nta_agent_newtag(home, "tag=%s", nta)); { msg_t *msg; TEST_1(nta_msg_create(NULL, 0) == NULL); TEST(nta_msg_complete(NULL), -1); TEST_1(msg = nta_msg_create(nta, 0)); TEST(nta_msg_complete(msg), -1); TEST(nta_msg_request_complete(msg, NULL, sip_method_unknown, "FOO", NULL), -1); TEST(nta_is_internal_msg(NULL), 0); TEST(nta_is_internal_msg(msg), 0); TEST_1(msg_set_flags(msg, NTA_INTERNAL_MSG)); TEST(nta_is_internal_msg(msg), 1); TEST_VOID(msg_destroy(msg)); } TEST(nta_leg_tcreate(NULL, NULL, NULL, TAG_END()), NULL); TEST_VOID(nta_leg_destroy(NULL)); TEST(nta_leg_magic(NULL, NULL), NULL); TEST_VOID(nta_leg_bind(NULL, NULL, NULL)); TEST(nta_leg_tag(NULL, "fidsafsa"), NULL); TEST(nta_leg_rtag(NULL, "fidsafsa"), NULL); TEST(nta_leg_get_tag(NULL), NULL); TEST(nta_leg_client_route(NULL, NULL, NULL), -1); TEST(nta_leg_server_route(NULL, NULL, NULL), -1); TEST(nta_leg_by_uri(NULL, NULL), NULL); TEST(nta_leg_by_dialog(NULL, NULL, NULL, NULL, NULL, NULL, NULL), NULL); TEST(nta_leg_by_dialog(nta, NULL, NULL, NULL, NULL, NULL, NULL), NULL); TEST(nta_incoming_create(NULL, NULL, NULL, NULL, TAG_END()), NULL); TEST(nta_incoming_create(nta, NULL, NULL, NULL, TAG_END()), NULL); TEST_VOID(nta_incoming_bind(NULL, NULL, NULL)); TEST(nta_incoming_magic(NULL, NULL), NULL); TEST(nta_incoming_find(NULL, NULL, NULL), NULL); TEST(nta_incoming_find(nta, NULL, NULL), NULL); TEST(nta_incoming_tag(NULL, NULL), NULL); TEST(nta_incoming_gettag(NULL), NULL); TEST(nta_incoming_status(NULL), 400); TEST(nta_incoming_method(NULL), sip_method_invalid); TEST(nta_incoming_method_name(NULL), NULL); TEST(nta_incoming_url(NULL), NULL); TEST(nta_incoming_cseq(NULL), 0); TEST(nta_incoming_set_params(NULL, TAG_END()), -1); TEST(nta_incoming_getrequest(NULL), NULL); TEST(nta_incoming_getrequest_ackcancel(NULL), NULL); TEST(nta_incoming_getresponse(NULL), NULL); TEST(nta_incoming_complete_response(NULL, NULL, 800, "foo", TAG_END()), -1); TEST(nta_incoming_treply(NULL, SIP_200_OK, TAG_END()), -1); TEST(nta_incoming_mreply(NULL, NULL), -1); TEST_VOID(nta_incoming_destroy(NULL)); TEST(nta_outgoing_tcreate(NULL, outgoing_callback, ag, URL_STRING_MAKE("sip:localhost"), SIP_METHOD_MESSAGE, URL_STRING_MAKE("sip:localhost"), TAG_END()), NULL); TEST(nta_outgoing_mcreate(NULL, outgoing_callback, ag, URL_STRING_MAKE("sip:localhost"), NULL, TAG_END()), NULL); TEST(nta_outgoing_default(NULL, NULL, NULL), NULL); TEST(nta_outgoing_status(NULL), 500); TEST(nta_outgoing_method(NULL), sip_method_invalid); TEST(nta_outgoing_method_name(NULL), NULL); TEST(nta_outgoing_cseq(NULL), 0); TEST(nta_outgoing_delay(NULL), UINT_MAX); TEST(nta_outgoing_request_uri(NULL), NULL); TEST(nta_outgoing_route_uri(NULL), NULL); TEST(nta_outgoing_getresponse(NULL), NULL); TEST(nta_outgoing_getrequest(NULL), NULL); TEST(nta_outgoing_tagged(NULL, NULL, NULL, NULL, NULL), NULL); TEST(nta_outgoing_cancel(NULL), -1); TEST(nta_outgoing_tcancel(NULL, NULL, NULL, TAG_END()), NULL); TEST_VOID(nta_outgoing_destroy(NULL)); TEST(nta_outgoing_find(NULL, NULL, NULL, NULL), NULL); TEST(nta_outgoing_find(nta, NULL, NULL, NULL), NULL); TEST(nta_outgoing_status(NONE), 500); TEST(nta_outgoing_method(NONE), sip_method_invalid); TEST(nta_outgoing_method_name(NONE), NULL); TEST(nta_outgoing_cseq(NONE), 0); TEST(nta_outgoing_delay(NONE), UINT_MAX); TEST(nta_outgoing_request_uri(NONE), NULL); TEST(nta_outgoing_route_uri(NONE), NULL); TEST(nta_outgoing_getresponse(NONE), NULL); TEST(nta_outgoing_getrequest(NONE), NULL); TEST(nta_outgoing_tagged(NONE, NULL, NULL, NULL, NULL), NULL); TEST(nta_outgoing_cancel(NONE), -1); TEST(nta_outgoing_tcancel(NONE, NULL, NULL, TAG_END()), NULL); TEST_VOID(nta_outgoing_destroy(NONE));#if 0nta_reliable_t *nta_reliable_treply(nta_incoming_t *ireq, nta_prack_f *callback, nta_reliable_magic_t *rmagic, int status, char const *phrase, tag_type_t tag, tag_value_t value, ...);nta_reliable_t *nta_reliable_mreply(nta_incoming_t *irq, nta_prack_f *callback, nta_reliable_magic_t *rmagic, msg_t *msg);void nta_reliable_destroy(nta_reliable_t *);#endif TEST_VOID(nta_agent_destroy(nta)); TEST_VOID(su_root_destroy(root)); TEST_VOID(su_home_deinit(home)); END();}static int api_test_dialog_matching(agent_t *ag){ nta_agent_t *nta; su_root_t *root; su_home_t home[1]; nta_leg_t *leg, *dialog1, *dialog2, *dst, *defdst; sip_from_t *a1, *a2; sip_call_id_t *i; BEGIN(); memset(home, 0, sizeof home); home->suh_size = sizeof home; su_home_init(home); TEST_1(root = su_root_create(NULL)); TEST_1(nta = nta_agent_create(root, (url_string_t *)"sip:*:*", NULL, NULL, TAG_END())); TEST_1(dst = nta_leg_tcreate(nta, NULL, NULL, NTATAG_NO_DIALOG(1), URLTAG_URL("sip:joe@localhost"), TAG_END())); TEST_1(defdst = nta_leg_tcreate(nta, NULL, NULL, NTATAG_NO_DIALOG(1), TAG_END())); TEST_1(dialog1 = nta_leg_tcreate(nta, NULL, NULL, URLTAG_URL("sip:pc.al.us"), SIPTAG_CALL_ID_STR("foobarbaz"), /* local */ SIPTAG_FROM_STR("<sip:me.myself.i@foo.com>;tag=foo"), /* remote */ SIPTAG_TO_STR("<sip:joe.boy@al.us>"), TAG_END())); TEST_1(a1 = sip_from_make(home, "<sip:me.myself.i@foo.com>;tag=foo")); TEST_1(a2 = sip_from_make(home, "<sip:joe.boy@al.us>;tag=al")); TEST_1(i = sip_call_id_make(home, "foobarbaz")); TEST_1(dialog2 = nta_leg_tcreate(nta, NULL, NULL, SIPTAG_CALL_ID(i), /* local */ SIPTAG_FROM(a2), /* remote */ SIPTAG_TO(a1), TAG_END())); TEST_1(!nta_leg_by_dialog(nta, NULL, NULL, a1->a_tag, a1->a_url, a2->a_tag, a2->a_url)); TEST_1(!nta_leg_by_dialog(NULL, NULL, i, a1->a_tag, a1->a_url, a2->a_tag, a2->a_url)); TEST_1(!nta_leg_by_dialog(nta, (void *)"sip:no.such.url", i, a2->a_tag, a2->a_url, a1->a_tag, a1->a_url)); TEST_1(!nta_leg_by_dialog(nta, a2->a_url, i, a2->a_tag, a2->a_url, a1->a_tag, a1->a_url)); TEST(leg = nta_leg_by_dialog(nta, NULL, i, /* local */ a1->a_tag, a1->a_url, /* remote */ a2->a_tag, a2->a_url), dialog2); TEST(leg = nta_leg_by_dialog(nta, (void *)"sip:no.such.url", i, /* local */ a1->a_tag, a1->a_url, /* remote */ a2->a_tag, a2->a_url), dialog2); TEST(leg = nta_leg_by_dialog(nta, a2->a_url, i, a1->a_tag, a1->a_url, a2->a_tag, a2->a_url), dialog2); TEST(leg = nta_leg_by_dialog(nta, NULL, i, a2->a_tag, a2->a_url, a1->a_tag, a1->a_url), dialog1); TEST(leg = nta_leg_by_dialog(nta, (url_t *)"sip:pc.al.us", i, a2->a_tag, a2->a_url, a1->a_tag, a1->a_url), dialog1); /* local tag is required because there is tag */ TEST(leg = nta_leg_by_dialog(nta, (url_t *)"sip:pc.al.us", i, a2->a_tag, a2->a_url, "xyzzy", a1->a_url), NULL); /* local URI is ignored because we have tag */ TEST(leg = nta_leg_by_dialog(nta, (url_t *)"sip:pc.al.us", i, a2->a_tag, a2->a_url, a1->a_tag, a2->a_url), dialog1); /* remote tag is ignored because there is no tag */ TEST(leg = nta_leg_by_dialog(nta, (url_t *)"sip:pc.al.us", i, "xyzzy", a2->a_url, a1->a_tag, a1->a_url), dialog1); /* remote url is required */ TEST(leg = nta_leg_by_dialog(nta, (url_t *)"sip:pc.al.us", i, a2->a_tag, a1->a_url, a1->a_tag, a1->a_url), NULL); TEST(leg = nta_leg_by_dialog(nta, (url_t *)"sip:pc.al.us", i, a2->a_tag, NULL, a1->a_tag, a1->a_url), dialog1); /* local url is used if there is no local tag */ TEST(leg = nta_leg_by_dialog(nta, (url_t *)"sip:pc.al.us", i, a2->a_tag, a2->a_url, NULL, NULL), NULL); nta_leg_tag(dialog1, "al"); TEST(leg = nta_leg_by_dialog(nta, (url_t *)"sip:pc.al.us", i, a2->a_tag, a2->a_url, a1->a_tag, a1->a_url), dialog1); TEST(leg = nta_leg_by_dialog(nta, (url_t *)"sip:pc.al.us", i, a2->a_tag, a2->a_url, "xyzzy", a1->a_url), NULL); TEST(leg = nta_leg_by_dialog(nta, (url_t *)"sip:pc.al.us", i, a2->a_tag, a2->a_url, a1->a_tag, a1->a_url), dialog1); TEST(leg = nta_leg_by_dialog(nta, (url_t *)"sip:pc.al.us", i, a2->a_tag, a2->a_url, NULL, a1->a_url), NULL); nta_leg_destroy(defdst); nta_leg_destroy(dst); nta_leg_destroy(dialog1); nta_leg_destroy(dialog2); TEST_VOID(nta_agent_destroy(nta)); TEST_VOID(su_root_destroy(root)); TEST_VOID(su_home_deinit(home)); END();}#if HAVE_ALARM#include <unistd.h>#include <signal.h>static RETSIGTYPE sig_alarm(int s){ fprintf(stderr, "%s: FAIL! test timeout!\n", name); exit(1);}#endifstaticchar const nta_test_api_usage[] = "usage: %s OPTIONS\n" "where OPTIONS are\n" " -v | --verbose be verbose\n" " -q | --quiet be quiet\n" " -1 quit on first error\n" " -l level set logging level (0 by default)\n" " --attach print pid, wait for a debugger to be attached\n"#if HAVE_ALARM " --no-alarm don't ask for guard ALARM\n"#endif ;void usage(void){ fprintf(stderr, nta_test_api_usage, name); exit(1);}int main(int argc, char *argv[]){ int retval = 0, quit_on_single_failure = 0; int i, o_attach = 0, o_alarm = 1; agent_t ag[1] = {{ { SU_HOME_INIT(ag) }, 0, NULL }}; for (i = 1; argv[i]; i++) { if (strcmp(argv[i], "-v") == 0) tstflags |= tst_verbatim; else if (strcmp(argv[i], "-q") == 0) tstflags &= ~tst_verbatim; else if (strcmp(argv[i], "-1") == 0) quit_on_single_failure = 1; else if (strncmp(argv[i], "-l", 2) == 0) { int level = 3; char *rest = NULL; if (argv[i][2]) level = strtol(argv[i] + 2, &rest, 10); else if (argv[i + 1]) level = strtol(argv[i + 1], &rest, 10), i++; else level = 3, rest = ""; if (rest == NULL || *rest) usage(); su_log_set_level(nta_log, level); su_log_set_level(tport_log, level); } else if (strcmp(argv[i], "--attach") == 0) { o_attach = 1; } else if (strcmp(argv[i], "--no-alarm") == 0) { o_alarm = 0; } else if (strcmp(argv[i], "-") == 0) { i++; break; } else if (argv[i][0] != '-') { break; } else usage(); } if (o_attach) { char line[10]; printf("nua_test: pid %u\n", getpid()); printf("<Press RETURN to continue>\n"); fgets(line, sizeof line, stdin); }#if HAVE_ALARM else if (o_alarm) { alarm(60); signal(SIGALRM, sig_alarm); }#endif su_init(); if (!(TSTFLAGS & tst_verbatim)) { su_log_soft_set_level(nta_log, 0); su_log_soft_set_level(tport_log, 0); }#define SINGLE_FAILURE_CHECK() \ do { fflush(stderr); fflush(stdout); \ if (retval && quit_on_single_failure) { su_deinit(); return retval; } \ } while(0) retval |= api_test_init(ag); fflush(stdout); SINGLE_FAILURE_CHECK(); if (retval == 0) { retval |= api_test_errors(ag); SINGLE_FAILURE_CHECK(); retval |= api_test_params(ag); SINGLE_FAILURE_CHECK(); retval |= api_test_stats(ag); SINGLE_FAILURE_CHECK(); retval |= api_test_dialog_matching(ag); SINGLE_FAILURE_CHECK(); retval |= api_test_tport(ag); SINGLE_FAILURE_CHECK(); retval |= api_test_dialogs(ag); SINGLE_FAILURE_CHECK(); retval |= api_test_default(ag); SINGLE_FAILURE_CHECK(); } retval |= api_test_deinit(ag); fflush(stdout); su_home_deinit(ag->ag_home); su_deinit(); return retval;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -