freeswitch/libs/sofia-sip/libsofia-sip-ua/nta/check_nta_api.c

269 lines
8.5 KiB
C

/*
* This file is part of the Sofia-SIP package
*
* Copyright (C) 2008 Nokia Corporation.
*
* Contact: Pekka Pessi <pekka.pessi@nokia.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
* as published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA
*
*/
/**@CFILE check_nta_api.c
*
* @brief Check-driven tester for NTA API
*
* @author Pekka Pessi <Pekka.Pessi@nokia.com>
*
* @copyright (C) 2009 Nokia Corporation.
*/
#include "config.h"
#include "check_nta.h"
#include "s2base.h"
#include "nta_internal.h"
#include <sofia-sip/nta.h>
#include <sofia-sip/sip_status.h>
#include <sofia-sip/sip_header.h>
#include <sofia-sip/su_tagarg.h>
#include <sofia-sip/su_tag_io.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#define NONE ((void *)-1)
static void
api_setup(void)
{
s2_nta_setup("NTA", NULL, TAG_END());
}
static void
api_teardown(void)
{
mark_point();
s2_nta_teardown();
}
START_TEST(api_1_0_0)
{
su_root_t *root = s2base->root;
nta_agent_t *nta;
su_home_t home[1];
su_nanotime_t nano;
nta_agent_magic_t *amagic = (void *)(home + 1);
nta_outgoing_magic_t *omagic = (void *)(home + 2);
msg_t *msg;
memset(home, 0, sizeof home); home->suh_size = (sizeof home);
su_home_init(home);
fail_unless(nta_agent_create(NULL,
(url_string_t *)"sip:*:*",
NULL,
NULL,
TAG_END()) == NULL);
fail_unless(nta_agent_create(root,
(url_string_t *)"http://localhost:*/invalid/bind/url",
NULL,
NULL,
TAG_END()) == NULL);
fail_unless(nta_agent_create(root,
(url_string_t *)"sip:*:*;transport=XXX",
NULL,
NULL,
TAG_END()) == NULL);
mark_point();
nta = nta_agent_create(root,
(url_string_t *)"sip:*:*",
NULL,
NULL,
TAG_END());
fail_unless(nta != NULL);
mark_point();
nta_agent_destroy(NULL);
mark_point();
nta_agent_destroy(nta);
mark_point();
nta = nta_agent_create(root,
(url_string_t *)"sip:*:*",
s2_nta_msg_callback,
amagic,
TAG_END());
fail_unless(nta != NULL);
fail_unless(nta_agent_contact(NULL) == NULL);
fail_unless(nta_agent_via(NULL) == NULL);
fail_if(strcmp(nta_agent_version(nta), nta_agent_version(NULL)));
fail_unless(nta_agent_magic(NULL) == NULL);
fail_unless(nta_agent_magic(nta) == amagic);
fail_unless(nta_agent_add_tport(NULL, NULL, TAG_END()) == -1);
fail_unless(nta_agent_newtag(home, "tag=%s", NULL) == NULL);
fail_unless(nta_agent_newtag(home, "tag=%s", nta) != NULL);
fail_unless(nta_msg_create(NULL, 0) == NULL);
fail_unless(nta_msg_complete(NULL) == -1);
fail_unless((msg = nta_msg_create(nta, 0)) != NULL);
fail_unless(nta_msg_complete(msg) == -1);
fail_unless(
nta_msg_request_complete(msg, NULL, SIP_METHOD(FOO), NULL) == -1);
fail_unless(nta_is_internal_msg(NULL) == 0);
fail_unless(nta_is_internal_msg(msg) == 0);
fail_unless(msg_set_flags(msg, NTA_INTERNAL_MSG));
fail_unless(nta_is_internal_msg(msg) == 1);
mark_point(); msg_destroy(msg); mark_point();
fail_unless(nta_leg_tcreate(NULL, NULL, NULL, TAG_END()) == NULL);
mark_point(); nta_leg_destroy(NULL); mark_point();
fail_unless(nta_leg_magic(NULL, NULL) == NULL);
mark_point(); nta_leg_bind(NULL, NULL, NULL); mark_point();
fail_unless(nta_leg_tag(NULL, "fidsafsa") == NULL);
fail_unless(nta_leg_rtag(NULL, "fidsafsa") == NULL);
fail_unless(nta_leg_get_tag(NULL) == NULL);
fail_unless(nta_leg_client_route(NULL, NULL, NULL) == -1);
fail_unless(nta_leg_client_reroute(NULL, NULL, NULL, 0) == -1);
fail_unless(nta_leg_server_route(NULL, NULL, NULL) == -1);
fail_unless(nta_leg_by_uri(NULL, NULL) == NULL);
fail_unless(
nta_leg_by_dialog(NULL, NULL, NULL, NULL, NULL, NULL, NULL) == NULL);
fail_unless(
nta_leg_by_dialog(nta, NULL, NULL, NULL, NULL, NULL, NULL) == NULL);
fail_unless(nta_leg_make_replaces(NULL, NULL, 1) == NULL);
fail_unless(nta_leg_by_replaces(NULL, NULL) == NULL);
fail_unless(nta_incoming_create(NULL, NULL, NULL, NULL, TAG_END()) == NULL);
fail_unless(nta_incoming_create(nta, NULL, NULL, NULL, TAG_END()) == NULL);
mark_point(); nta_incoming_bind(NULL, NULL, NULL); mark_point();
fail_unless(nta_incoming_magic(NULL, NULL) == NULL);
fail_unless(nta_incoming_find(NULL, NULL, NULL) == NULL);
fail_unless(nta_incoming_find(nta, NULL, NULL) == NULL);
fail_unless(nta_incoming_tag(NULL, NULL) == NULL);
fail_unless(nta_incoming_gettag(NULL) == NULL);
fail_unless(nta_incoming_status(NULL) == 400);
fail_unless(nta_incoming_method(NULL) == sip_method_invalid);
fail_unless(nta_incoming_method_name(NULL) == NULL);
fail_unless(nta_incoming_url(NULL) == NULL);
fail_unless(nta_incoming_cseq(NULL) == 0);
fail_unless(nta_incoming_received(NULL, &nano) == 0);
fail_unless(nano == 0);
fail_unless(nta_incoming_set_params(NULL, TAG_END()) == -1);
fail_unless(nta_incoming_getrequest(NULL) == NULL);
fail_unless(nta_incoming_getrequest_ackcancel(NULL) == NULL);
fail_unless(nta_incoming_getresponse(NULL) == NULL);
fail_unless(
nta_incoming_complete_response(NULL, NULL, 800, "foo", TAG_END()) == -1);
fail_unless(nta_incoming_treply(NULL, SIP_200_OK, TAG_END()) == -1);
fail_unless(nta_incoming_mreply(NULL, NULL) == -1);
mark_point(); nta_incoming_destroy(NULL); mark_point();
fail_unless(
nta_outgoing_tcreate(NULL, s2_nta_orq_callback, omagic,
URL_STRING_MAKE("sip:localhost"),
SIP_METHOD_MESSAGE,
URL_STRING_MAKE("sip:localhost"),
TAG_END()) == NULL);
fail_unless(
nta_outgoing_mcreate(NULL, s2_nta_orq_callback, omagic,
URL_STRING_MAKE("sip:localhost"),
NULL,
TAG_END()) == NULL);
fail_unless(nta_outgoing_default(NULL, NULL, NULL) == NULL);
fail_unless(nta_outgoing_bind(NULL, NULL, NULL) == -1);
fail_unless(nta_outgoing_magic(NULL, NULL) == NULL);
fail_unless(nta_outgoing_status(NULL) == 500);
fail_unless(nta_outgoing_method(NULL) == sip_method_invalid);
fail_unless(nta_outgoing_method_name(NULL) == NULL);
fail_unless(nta_outgoing_cseq(NULL) == 0);
fail_unless(nta_outgoing_delay(NULL) == UINT_MAX);
fail_unless(nta_outgoing_request_uri(NULL) == NULL);
fail_unless(nta_outgoing_route_uri(NULL) == NULL);
fail_unless(nta_outgoing_getresponse(NULL) == NULL);
fail_unless(nta_outgoing_getrequest(NULL) == NULL);
fail_unless(nta_outgoing_tagged(NULL, NULL, NULL, NULL, NULL) == NULL);
fail_unless(nta_outgoing_cancel(NULL) == -1);
fail_unless(nta_outgoing_tcancel(NULL, NULL, NULL, TAG_END()) == NULL);
mark_point(); nta_outgoing_destroy(NULL); mark_point();
fail_unless(nta_outgoing_find(NULL, NULL, NULL, NULL) == NULL);
fail_unless(nta_outgoing_find(nta, NULL, NULL, NULL) == NULL);
fail_unless(nta_outgoing_status(NONE) == 500);
fail_unless(nta_outgoing_method(NONE) == sip_method_invalid);
fail_unless(nta_outgoing_method_name(NONE) == NULL);
fail_unless(nta_outgoing_cseq(NONE) == 0);
fail_unless(nta_outgoing_delay(NONE) == UINT_MAX);
fail_unless(nta_outgoing_request_uri(NONE) == NULL);
fail_unless(nta_outgoing_route_uri(NONE) == NULL);
fail_unless(nta_outgoing_getresponse(NONE) == NULL);
fail_unless(nta_outgoing_getrequest(NONE) == NULL);
fail_unless(nta_outgoing_tagged(NONE, NULL, NULL, NULL, NULL) == NULL);
fail_unless(nta_outgoing_cancel(NONE) == -1);
fail_unless(nta_outgoing_tcancel(NONE, NULL, NULL, TAG_END()) == NULL);
mark_point(); nta_outgoing_destroy(NONE); mark_point();
fail_unless(nta_reliable_treply(NULL, NULL, NULL, 0, NULL, TAG_END()) == NULL);
fail_unless(nta_reliable_mreply(NULL, NULL, NULL, NULL) == NULL);
mark_point(); nta_reliable_destroy(NULL); mark_point();
mark_point(); nta_agent_destroy(nta); mark_point();
mark_point(); su_home_deinit(home); mark_point();
}
END_TEST
/* ---------------------------------------------------------------------- */
TCase *check_nta_api_1_0(void)
{
TCase *tc = tcase_create("NTA 1 - API");
tcase_add_checked_fixture(tc, api_setup, api_teardown);
tcase_set_timeout(tc, 10);
tcase_add_test(tc, api_1_0_0);
return tc;
}