diff --git a/test/unit/61-message-sdp.sip b/test/unit/61-message-sdp.sip new file mode 100644 index 00000000000..c6c682b9a79 --- /dev/null +++ b/test/unit/61-message-sdp.sip @@ -0,0 +1,29 @@ +MESSAGE sip:bob@example.invalid SIP/2.0 +From: sip:alice@example.invalid;tag=45dfdf49 +To: sip:bob@example.invalid +Call-ID: 1172299593a +CSeq: 1 MESSAGE +Content-Type: application/sdp +Max-Forwards: 2 +X-Info: test lua sr.sdpops.sdp_remove_line_by_prefix + +v=0 +o=FreeSWITCH 1447318678 1447318679 IN IP4 10.0.0.145 +s=FreeSWITCH +c=IN IP4 10.0.0.145 +t=0 0 +m=audio 28504 RTP/AVP 96 101 +a=rtpmap:96 opus/48000/2 +a=fmtp:96 useinbandfec=1; maxaveragebitrate=14400; maxplaybackrate=8000 +a=rtpmap:101 telephone-event/48000 +a=fmtp:101 0-16 +a=ptime:20 +a=sendrecv +a=rtcp:28505 IN IP4 10.0.0.145 +a=rtcp-fb:101 nack +m=video 21992 RTP/SAVPF 100 +a=rtpmap:100 VP8/90000 +a=rtcp:21992 IN IP4 10.0.0.150 +a=rtcp-fb:100 ccm fir +a=rtcp-fb:100 nack +a=rtcp-fb:100 nack pli diff --git a/test/unit/61.cfg b/test/unit/61.cfg new file mode 100644 index 00000000000..6a7da0a91c6 --- /dev/null +++ b/test/unit/61.cfg @@ -0,0 +1,52 @@ +# ----------- global configuration parameters ------------------------ +debug=2 +fork=yes +log_stderror=no +children=1 +disable_tcp=yes +listen=udp:127.0.0.1:5060 +auto_aliases=no +alias=example.invalid +# ------------------ module loading ---------------------------------- +loadpath "../../modules/" + +loadmodule "sl.so" +loadmodule "pv.so" +loadmodule "textops.so" +loadmodule "textopsx.so" +loadmodule "sdpops.so" +loadmodule "app_lua.so" +modparam("sl", "bind_tm", 0) +modparam("app_lua", "register", "sdpops") + +request_route { + if ( is_present_hf("X-Case") ) { + if ( $hdr(X-Case) == '61-test0') { + if( !lua_dostring("sr.sdpops.sdp_remove_line_by_prefix([[a=rtcp]])") ) { + sl_send_reply(500,"Lua call failed retcode=$retcode ($hdr(X-Case))"); + exit; + } + } else if ( $hdr(X-Case) == '61-test1') { + if( !lua_dostring("sr.sdpops.sdp_remove_line_by_prefix([[a=rtcp]], [[audio]])") ) { + sl_send_reply(500,"Lua call failed retcode=$retcode ($hdr(X-Case))"); + exit; + } + } else if ( $hdr(X-Case) == '61-test2') { + if( !lua_dostring("sr.sdpops.sdp_remove_line_by_prefix([[a=rtcp]], [[video]])") ) { + sl_send_reply(500,"Lua call failed retcode=$retcode ($hdr(X-Case))"); + exit; + } + } else { + sl_send_reply(500,"Unknown test case"); + exit; + } + + msg_apply_changes(); + set_reply_body($rb,"application/sdp"); + sl_send_reply(200,"OK"); + exit; + } + sl_send_reply(500,"X-Case missing"); + exit; +} + diff --git a/test/unit/61.sh b/test/unit/61.sh new file mode 100755 index 00000000000..16288d190af --- /dev/null +++ b/test/unit/61.sh @@ -0,0 +1,124 @@ +#!/bin/sh +# checks sdpops module function sdp_remove_line_by_prefix() via Lua +# +# Copyright (C) 2016 mslehto@iki.fi +# +# This file is part of Kamailio, a free SIP server. +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +. include/common +. include/require.sh + +CFGFILE=61.cfg +TMPFILE=$(mktemp -t kamailio-test.XXXXXXXXXX) +SIPSAKOPTS="-H localhost -s sip:127.0.0.1:5060 -v" + +end_test() { + kill_kamailio + rm ${TMPFILE} + exit ${ret} +} + +if ! (check_sipsak && check_kamailio && check_module "sdpops" && check_module "app_lua"); then + exit 0 +fi + +${BIN} -w ${RUN_DIR} -Y ${RUN_DIR} -P ${PIDFILE} -f ${CFGFILE} > /dev/null +ret=$? + +sleep 1 +if [ "${ret}" -ne 0 ] ; then + end_test +fi + +# manipulate whole SDP +FILE="61-message-sdp.sip" +TESTCASE="61-test0" +TOTALBEFORE=$(awk '/^v=0/,/^$/ {total++; if ($0 ~ /^a=rtcp/ ) { prefix++;} else { other++} } END {if (prefix) {print other " + " prefix} else { print other " + 0"} }' ${FILE}) +OTHERBEFORE=$(echo ${TOTALBEFORE}|cut -d+ -f1) +PREFIXBEFORE=$(echo ${TOTALBEFORE}|cut -d+ -f2) +sipsak ${SIPSAKOPTS} -f ${FILE} --headers "X-Case: ${TESTCASE}\n" > ${TMPFILE} +ret=$? +if [ "${ret}" -ne 0 ] ; then + echo "sipsak returned ${ret}, aborting" + cat ${TMPFILE} +else + TOTALAFTER=$(awk '/^v=0/,/^$/ {total++; if ($0 ~ /^a=rtcp:/ ) { prefix++;} else { other++} } END {if (prefix) {print other " + " prefix} else { print other " + 0"} }' ${TMPFILE}) + OTHERAFTER=$(echo ${TOTALAFTER}|cut -d+ -f1) + PREFIXAFTER=$(echo ${TOTALAFTER}|cut -d+ -f2) + if [ ${PREFIXAFTER} -eq 0 ]; then + ret=0 + else + ret=1 + echo "test ${TESTCASE} failed" + echo "found ${PREFIXAFTER} lines with prefix \"a=rtcp\", was expecting 0" + echo "found ${OTHERAFTER} other lines (was ${OTHERBEFORE} before)" + end_test + fi +fi + +# manipulate m=audio only +FILE="61-message-sdp.sip" +TESTCASE="61-test1" +TOTALBEFORE=$(awk '/^m=audio/,/^m=video/ {total++; if ($0 ~ /^a=rtcp/ ) { prefix++;} else { other++} } END {if (prefix) {print other " + " prefix} else { print other " + 0"} }' ${FILE}) +OTHERBEFORE=$(echo ${TOTALBEFORE}|cut -d+ -f1) +PREFIXBEFORE=$(echo ${TOTALBEFORE}|cut -d+ -f2) +sipsak ${SIPSAKOPTS} -f ${FILE} --headers "X-Case: ${TESTCASE}\n" > ${TMPFILE} +ret=$? +if [ "${ret}" -ne 0 ] ; then + echo "sipsak returned ${ret}, aborting" + cat ${TMPFILE} +else + TOTALAFTER=$(awk '/^m=audio/,/^m=video/ {total++; if ($0 ~ /^a=rtcp:/ ) { prefix++;} else { other++} } END {if (prefix) {print other " + " prefix} else { print other " + 0"} }' ${TMPFILE}) + OTHERAFTER=$(echo ${TOTALAFTER}|cut -d+ -f1) + PREFIXAFTER=$(echo ${TOTALAFTER}|cut -d+ -f2) + if [ ${PREFIXAFTER} -eq 0 ]; then + ret=0 + else + ret=1 + echo "test ${TESTCASE} failed" + echo "found ${PREFIXAFTER} lines with prefix \"a=rtcp\", was expecting 0" + echo "found ${OTHERAFTER} other lines (was ${OTHERBEFORE} before)" + end_test + fi +fi + +# manipulate m=video only +FILE="61-message-sdp.sip" +TESTCASE="61-test2" +TOTALBEFORE=$(awk '/^m=video/,/^$/ {total++; if ($0 ~ /^a=rtcp/ ) { prefix++;} else { other++} } END {if (prefix) {print other " + " prefix} else { print other " + 0"} }' ${FILE}) +OTHERBEFORE=$(echo ${TOTALBEFORE}|cut -d+ -f1) +PREFIXBEFORE=$(echo ${TOTALBEFORE}|cut -d+ -f2) +sipsak ${SIPSAKOPTS} -f ${FILE} --headers "X-Case: ${TESTCASE}\n" > ${TMPFILE} +ret=$? +if [ "${ret}" -ne 0 ] ; then + echo "sipsak returned ${ret}, aborting" + cat ${TMPFILE} +else + TOTALAFTER=$(awk '/^m=video/,/^$/ {total++; if ($0 ~ /^a=rtcp:/ ) { prefix++;} else { other++} } END {if (prefix) {print other " + " prefix} else { print other " + 0"} }' ${TMPFILE}) + OTHERAFTER=$(echo ${TOTALAFTER}|cut -d+ -f1) + PREFIXAFTER=$(echo ${TOTALAFTER}|cut -d+ -f2) + if [ ${PREFIXAFTER} -eq 0 ]; then + ret=0 + else + ret=1 + echo "test ${TESTCASE} failed" + echo "found ${PREFIXAFTER} lines with prefix \"a=rtcp\", was expecting 0" + echo "found ${OTHERAFTER} other lines (was ${OTHERBEFORE} before)" + end_test + fi +fi + +end_test +