/* * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * Copyright (C) 2005-2018, Anthony Minessale II * * Version: MPL 1.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application * * The Initial Developer of the Original Code is * Anthony Minessale II * Portions created by the Initial Developer are Copyright (C) * the Initial Developer. All Rights Reserved. * * Contributor(s): * Chris Rienzo * Seven Du * * * originate_test.c -- tests originate * */ #include #include #include int reporting = 0; int destroy = 0; static switch_status_t my_on_reporting(switch_core_session_t *session) { switch_assert(session); reporting++; switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_INFO, "session reporting %d\n", reporting); } static switch_status_t my_on_destroy(switch_core_session_t *session) { switch_assert(session); destroy++; switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "session destroy %d\n", destroy); } static switch_state_handler_table_t state_handlers = { /*.on_init */ NULL, /*.on_routing */ NULL, /*.on_execute */ NULL, /*.on_hangup */ NULL, /*.on_exchange_media */ NULL, /*.on_soft_execute */ NULL, /*.on_consume_media */ NULL, /*.on_hibernate */ NULL, /*.on_reset */ NULL, /*.on_park */ NULL, /*.on_reporting */ my_on_reporting, /*.on_destroy */ my_on_destroy, SSH_FLAG_STICKY }; FST_CORE_BEGIN("./conf") { FST_SUITE_BEGIN(originate) { FST_SETUP_BEGIN() { fst_requires_module("mod_loopback"); } FST_SETUP_END() FST_TEARDOWN_BEGIN() { } FST_TEARDOWN_END() FST_TEST_BEGIN(originate_test_early_state_handler) { switch_core_session_t *session = NULL; switch_channel_t *channel = NULL; switch_status_t status; switch_call_cause_t cause; status = switch_ivr_originate(NULL, &session, &cause, "null/+15553334444", 2, NULL, NULL, NULL, NULL, NULL, SOF_NONE, NULL, NULL); fst_requires(session); fst_check(status == SWITCH_STATUS_SUCCESS); channel = switch_core_session_get_channel(session); fst_requires(channel); switch_channel_add_state_handler(channel, &state_handlers); switch_channel_hangup(channel, SWITCH_CAUSE_NORMAL_CLEARING); fst_check(!switch_channel_ready(channel)); switch_core_session_rwunlock(session); switch_sleep(1000000); fst_check(reporting == 1); fst_check(destroy == 1); } FST_TEST_END() FST_TEST_BEGIN(originate_test_late_state_handler) { switch_core_session_t *session = NULL; switch_channel_t *channel = NULL; switch_status_t status; switch_call_cause_t cause; status = switch_ivr_originate(NULL, &session, &cause, "null/+15553334444", 2, NULL, NULL, NULL, NULL, NULL, SOF_NONE, NULL, NULL); fst_requires(session); fst_check(status == SWITCH_STATUS_SUCCESS); channel = switch_core_session_get_channel(session); fst_requires(channel); switch_channel_hangup(channel, SWITCH_CAUSE_NORMAL_CLEARING); switch_sleep(1000000); switch_channel_add_state_handler(channel, &state_handlers); switch_core_session_rwunlock(session); switch_sleep(1000000); fst_check(reporting == 1); fst_check(destroy == 2); } FST_TEST_END() } FST_SUITE_END() } FST_CORE_END()