#!/bin/bash # # Copyright: 2013-2021 Sipwise Development Team # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This package 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 General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # # On Debian systems, the complete text of the GNU General # Public License version 3 can be found in "/usr/share/common-licenses/GPL-3". # set -e # shellcheck disable=SC2155 declare -r ME="$(basename "$0")" BASE_DIR="${BASE_DIR:-/usr/share/kamailio-config-tests}" BIN_DIR="${BASE_DIR}/bin" if [ -z "${PERL5LIB}" ]; then # Set up the environment, to use local perl modules export PERL5LIB="${BASE_DIR}/lib" fi DOMAINS=() get_domains() { while read -r t; do DOMAINS+=( "${t}" ) done < <("${BIN_DIR}/get_domains.pl" "${SCEN_CHECK_DIR}/scenario.yml") if [[ ${#DOMAINS[@]} == 0 ]]; then echo "$(date) no domains found" exit 1 fi } delete() { local DOMAIN=$1 echo "$(date) - Deleting domain:${DOMAIN}" delete_voip "${DOMAIN}" } # $1 domain create_voip() { if ! "${BIN_DIR}/create_subscribers.pl" \ "${SCEN_CHECK_DIR}/scenario.yml" "${SCEN_CHECK_DIR}/scenario_ids.yml" then echo "$(date) - Cannot create domain subscribers" delete "$1" exit 1 fi if [ -f "${SCEN_CHECK_DIR}/registration.yml" ]; then echo "$(date) - Creating permanent registrations" "${BIN_DIR}/create_registrations.pl" \ -ids "${SCEN_CHECK_DIR}/scenario_ids.yml" \ "${SCEN_CHECK_DIR}/registration.yml" fi } # $1 prefs yml file create_voip_prefs() { if [ -f "${SCEN_CHECK_DIR}/rewrite.yml" ]; then echo "$(date) - Creating rewrite rules" "${BIN_DIR}/create_rewrite_rules.pl" "${SCEN_CHECK_DIR}/rewrite.yml" fi if [ -f "${SCEN_CHECK_DIR}/callforward.yml" ]; then echo "$(date) - Setting callforward config" "${BIN_DIR}/set_subscribers_callforward_advanced.pl" "${SCEN_CHECK_DIR}/callforward.yml" fi if [ -f "${SCEN_CHECK_DIR}/trusted.yml" ]; then echo "$(date) - Setting trusted sources" "${BIN_DIR}/set_subscribers_trusted_sources.pl" "${SCEN_CHECK_DIR}/trusted.yml" fi if [ -f "${SCEN_CHECK_DIR}/speeddial.yml" ]; then echo "$(date) - Setting speeddial config" "${BIN_DIR}/set_subscribers_speeddial.pl" "${SCEN_CHECK_DIR}/speeddial.yml" fi if [ -f "${SCEN_CHECK_DIR}/ncos.yml" ]; then echo "$(date) - Creating ncos levels" "${BIN_DIR}/create_ncos.pl" "${SCEN_CHECK_DIR}/ncos.yml" fi if [ -f "${SCEN_CHECK_DIR}/soundsets.yml" ]; then echo "$(date) - Creating soundsets" "${BIN_DIR}/create_soundsets.pl" \ "${SCEN_CHECK_DIR}/soundsets.yml" "${SCEN_CHECK_DIR}/scenario_ids.yml" fi if [ -f "${SCEN_CHECK_DIR}/peer.yml" ]; then echo "$(date) - Creating peers" "${BIN_DIR}/create_peers.pl" \ "${SCEN_CHECK_DIR}/peer.yml" "${SCEN_CHECK_DIR}/scenario_ids.yml" fi if [ -f "${SCEN_CHECK_DIR}/lnp.yml" ]; then echo "$(date) - Creating lnp carrier/number" "${BIN_DIR}/create_lnp.pl" "${SCEN_CHECK_DIR}/lnp.yml" fi if [ -f "${SCEN_CHECK_DIR}/header.yml" ]; then echo "$(date) - Creating header manipulations" "${BIN_DIR}/create_header_manipulation.pl" "${SCEN_CHECK_DIR}/header.yml" fi if [ -f "${SCEN_CHECK_DIR}/prefs.json" ]; then echo "$(date) - Setting preferences" "${BIN_DIR}/set_preferences.pl" "${SCEN_CHECK_DIR}/prefs.json" fi if [ -f "${SCEN_CHECK_DIR}/locmap.yml" ]; then echo "$(date) - Setting location mappings" "${BIN_DIR}/set_subscribers_location_map.pl" "${SCEN_CHECK_DIR}/locmap.yml" fi } # $1 domain delete_voip() { if [ -f "${SCEN_CHECK_DIR}/registration.yml" ]; then echo "$(date) - Deleting registrations" "${BIN_DIR}/create_registrations.pl" -delete "${SCEN_CHECK_DIR}/registration.yml" fi ngcp-delete-domain "$1" >/dev/null 2>&1 || echo "$(date) - can't delete domain $1" if [ -f "${SCEN_CHECK_DIR}/peer.yml" ]; then echo "$(date) - Deleting peers" "${BIN_DIR}/create_peers.pl" -delete "${SCEN_CHECK_DIR}/peer.yml" # REMOVE ME!! fix for REST API ngcp-kamcmd proxy lcr.reload fi if [ -f "${SCEN_CHECK_DIR}/trusted.yml" ]; then echo "$(date) - Deleting trusted sources" # Trusted sources are not deleted from kamailio cache when the domain is removed # therefore better reload them from the database ngcp-kamcmd proxy permissions.trustedReload fi if [ -f "${SCEN_CHECK_DIR}/header.yml" ]; then echo "$(date) - Deleting header manipulations" "${BIN_DIR}/create_header_manipulation.pl" -delete "${SCEN_CHECK_DIR}/header.yml" fi if [ -f "${SCEN_CHECK_DIR}/lnp.yml" ]; then echo "$(date) - Deleting lnp carrier/number" "${BIN_DIR}/create_lnp.pl" -delete "${SCEN_CHECK_DIR}/lnp.yml" # REMOVE ME!! fix for REST API ngcp-kamcmd proxy lcr.reload fi if [ -f "${SCEN_CHECK_DIR}/ncos.yml" ]; then echo "$(date) - Deleting ncos levels" "${BIN_DIR}/create_ncos.pl" -delete "${SCEN_CHECK_DIR}/ncos.yml" fi if [ -f "${SCEN_CHECK_DIR}/rewrite.yml" ]; then echo "$(date) - Deleting rewrite rules" "${BIN_DIR}/create_rewrite_rules.pl" -delete "${SCEN_CHECK_DIR}/rewrite.yml" fi if [ -f "${SCEN_CHECK_DIR}/hosts" ]; then echo "$(date) - Deleting foreign domains" sed -e "s:$(cat "${SCEN_CHECK_DIR}/hosts")::" -i /etc/hosts rm "${SCEN_CHECK_DIR}/hosts" fi if [ -f "${SCEN_CHECK_DIR}/soundsets.yml" ]; then echo "$(date) - Deleting soundsets" "${BIN_DIR}/create_soundsets.pl" -delete "${SCEN_CHECK_DIR}/soundsets.yml" fi } generate_template() { local base=$1 if [ -f "${SCEN_CHECK_DIR}/${base}.tt2" ]; then if ! "${BIN_DIR}/generate_test.pl" \ --config="${BASE_DIR}/config.yml" \ "${SCEN_CHECK_DIR}/${base}.tt2" \ "${SCEN_CHECK_DIR}/scenario_ids.yml" > "${SCEN_CHECK_DIR}/${base}" then echo "Error generating ${base} from template" >&2 exit 1 fi echo "* ${base} generated" fi } generate_templates() { local prefs=( "prefs.json" ) prefs+=( "callforward.yml" ) prefs+=( "trusted.yml" ) prefs+=( "lnp.yml" ) for t in "${prefs[@]}"; do generate_template "${t}" done } scenario_csv() { local DOMAIN=$1 echo "$(date) - Cleaning csv/reg.xml files" find "${SCEN_CHECK_DIR}" -name 'sipp_scenario_responder*_reg.xml' -exec rm {} \; find "${SCEN_CHECK_DIR}" -name '*.csv' -exec rm {} \; echo "$(date) - Generating csv/reg.xml files" echo "SERVER_IP=${SERVER_IP}" echo "IP=${IP} PORT=${PORT} MPORT=${MPORT}" echo "PEER_IP=${PEER_IP} PEER_PORT=${PEER_PORT} PEER_MPORT=${PEER_MPORT}" echo "PHONE:${PHONE}" if ! "${BIN_DIR}/scenario.pl" --server-ip="${SERVER_IP}" \ --ip="${IP}" --port="${PORT}" --mport="${MPORT}" --phone="${PHONE}" \ --peer-ip="${PEER_IP}" --peer-port="${PEER_PORT}" --peer-mport="${PEER_MPORT}" \ "${SCEN_CHECK_DIR}/scenario.yml" "${SCEN_CHECK_DIR}/scenario_ids.yml" then echo "Error creating csv files" exit 2 fi generate_templates if [ -f "${SCEN_CHECK_DIR}/hosts" ]; then echo "$(date) - Setting foreign domains" cat "${SCEN_CHECK_DIR}/hosts" >> /etc/hosts fi } create() { local DOMAIN=$1 delete "${DOMAIN}" || true # just to be sure nothing is there scenario_csv "${DOMAIN}" echo "$(date) - Creating ${DOMAIN}" create_voip "${DOMAIN}" echo "$(date) - Adding prefs" create_voip_prefs } usage() { cat <