Module: sip-router Branch: mariuszbihlei/p_usrloc Commit: 0f03e95b9b7798946db82e2ef32ef08bddf5e08d URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=0f03e95b...
Author: Marius Zbihlei marius.zbihlei@1and1.ro Committer: Marius Zbihlei marius.zbihlei@1and1.ro Date: Mon Jan 10 12:27:22 2011 +0200
test:unit : Basic test for partitioned registration (work in progress)
---
test/unit/50.cfg | 86 +++++++++++++++++++++++++ test/unit/50.sh | 186 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 272 insertions(+), 0 deletions(-)
diff --git a/test/unit/50.cfg b/test/unit/50.cfg new file mode 100644 index 0000000..7a414a9 --- /dev/null +++ b/test/unit/50.cfg @@ -0,0 +1,86 @@ +# ----------- global configuration parameters ------------------------ +debug=3 +fork=yes +log_stderror=no +children=1 +disable_tcp=yes + +# ------------------ module loading ---------------------------------- +loadpath "../../modules/:../../modules_k/" +loadmodule "tm" +loadmodule "sl" +loadmodule "rr" +loadmodule "maxfwd" +loadmodule "textops" +loadmodule "xlog" +loadmodule "pv" +loadmodule "../../modules/db_mysql/db_mysql.so" + +loadmodule "mi_fifo" +modparam("mi_fifo", "fifo_name", "/tmp/kamailio_fifo") + +loadmodule "p_usrloc" +modparam("p_usrloc", "db_mode", 3) +modparam("p_usrloc", "db_url", "mysql://ser:ser@localhost/ser") +modparam("p_usrloc", "read_db_url", "mysql://ser:ser@localhost/ser") +modparam("p_usrloc", "write_db_url", "mysql://ser:ser@localhost/ser") + +modparam("p_usrloc", "write_on_db", 1) +#modparam("p_usrloc", "write_on_master_db", 1) +modparam("p_usrloc", "alg_location", 1) + +modparam("p_usrloc", "reg_db_table", "locdb") + +loadmodule "registrar" +modparam("registrar", "min_expires", 5) +modparam("p_usrloc", "timer_interval", 2) + +#------------------------- request routing logic ------------------- +route{ + + if (!mf_process_maxfwd_header("10")) { + sl_send_reply("483","Too Many Hops"); + exit; + } + + if (msg:len >= 2048 ) { + sl_send_reply("513", "Message Too Large"); + exit; + } + + if (!method=="REGISTER") + record_route(); + + if (loose_route()) { + # mark routing logic in request + append_hf("P-hint: rr-enforced\r\n"); + route(1); + } + + if (!uri==myself) { + append_hf("P-hint: outbound\r\n"); + route(1); + } + + if (uri==myself) { + if (method=="REGISTER") { + save("location"); + exit; + } + if (!lookup("location")) { + sl_send_reply("404", "Not Found"); + exit; + } + append_hf("P-hint: usrloc applied\r\n"); + } + + route(1); +} + +route[1] { + if (!t_relay()) { + sl_reply_error(); + } + exit; +} + diff --git a/test/unit/50.sh b/test/unit/50.sh new file mode 100755 index 0000000..5865794 --- /dev/null +++ b/test/unit/50.sh @@ -0,0 +1,186 @@ +#!/bin/bash +# database access and persistent storage for registrar on mysql + +# Copyright (C) 2010 marius.zbihlei@1and1.ro +# +# This file is part of Kamailio, a free SIP server. +# +# Kamailio 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 2 of the License, or +# (at your option) any later version +# +# Kamailio 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, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +source include/common +source include/require +source include/database + +CFG=50.cfg + +if ! (check_sipsak && check_kamailio && check_module "db_mysql" && check_mysql); then + exit 0 +fi ; + +cp $CFG $CFG.bak + +#$BIN -w . -f $CFG > /dev/null +ret=$? + +sleep 1 + +# register two contacts +echo "adding new contacts" +sipsak -U -C sip:foobar@localhost -s sip:49721123456789@localhost -H localhost &> /dev/null +sipsak -U -C sip:foobar1@localhost -s sip:49721123456789@localhost -H localhost &> /dev/null +ret=$? + +sleep 100 + +if [ "$ret" -eq 0 ]; then + $CTL ul show | grep "AOR:: 49721123456789" &> /dev/null + ret=$? +fi; + +if [ "$ret" -eq 0 ]; then + TMP=`$MYSQL "select COUNT(*) from location where username='49721123456789';" | tail -n 1` + if [ "$TMP" -eq 0 ] ; then + ret=1 + fi; +fi; + +if [ "$ret" -eq 0 ]; then + # check if the contact is registered + sipsak -U -C empty -s sip:49721123456789@127.0.0.1 -H localhost -q "Contact: sip:foobar@localhost" &> /dev/null + ret=$? +fi; + +if [ "$ret" -eq 0 ]; then + # update the registration + sipsak -U -C sip:foobar@localhost -s sip:49721123456789@localhost -H localhost &> /dev/null + ret=$? +fi; + +if [ "$ret" -eq 0 ]; then + # check if we get a hint when we try to unregister a non-existent conctact + sipsak -U -C "sip:foobar2@localhost" -s sip:49721123456789@127.0.0.1 -H localhost -x 0 -q "Contact: sip:foobar@localhost" &> /dev/null + ret=$? +fi; + +if [ "$ret" -eq 0 ]; then + # unregister the contact + sipsak -U -C "sip:foobar@localhost" -s sip:49721123456789@127.0.0.1 -H localhost -x 0 &> /dev/null + ret=$? +fi; + +if [ "$ret" -eq 0 ]; then + # unregister the user again should not fail + sipsak -U -C "sip:foobar@localhost" -s sip:49721123456789@127.0.0.1 -H localhost -x 0 &> /dev/null + ret=$? +fi; + +if [ "$ret" -eq 0 ]; then + # check if the other contact is still registered + sipsak -U -C empty -s sip:49721123456789@127.0.0.1 -H localhost -q "Contact: sip:foobar1@localhost" &> /dev/null + ret=$? +fi; + +if [ "$ret" -eq 0 ]; then + # register the other again + sipsak -U -C sip:foobar@localhost -s sip:49721123456789@localhost -H localhost &> /dev/null + ret=$? +fi; + +if [ "$ret" -eq 0 ]; then + # unregister all contacts + sipsak -U -C "*" -s sip:49721123456789@127.0.0.1 -H localhost -x 0 &> /dev/null + ret=$? +fi; + +if [ "$ret" -eq 0 ]; then + $CTL ul show | grep "AOR:: 49721123456789" > /dev/null + ret=$? + if [ "$ret" -eq 0 ]; then + ret=1 + else + ret=0 + fi; +fi ; + +if [ "$ret" -eq 0 ]; then + ret=`$MYSQL "select COUNT(*) from location where username='49721123456789';" | tail -n 1` +fi; + +if [ "$ret" -eq 0 ]; then + # test min_expires functionality + sipsak -U -C sip:foobar@localhost -s sip:49721123456789@localhost -H localhost -x 2 &> /dev/null + ret=$? +fi; + +if [ "$ret" -eq 0 ]; then + sleep 3 + # check if the contact is still registered + sipsak -U -C empty -s sip:49721123456789@127.0.0.1 -H localhost -q "Contact: sip:foobar@localhost" &> /dev/null + ret=$? +fi; + +if [ "$ret" -eq 0 ]; then + # register a few more contacts + sipsak -U -e 9 -s sip:49721123456789@localhost -H localhost &> /dev/null +fi; + +if [ "$ret" -eq 0 ]; then + # let the timer cleanup the previous registrations + sleep 3 + # and check + TMP=`$MYSQL "select COUNT(*) from location where username like '49721123456789%';" | tail -n 1` + if [ "$TMP" -eq 10 ] ; then + ret=0 + else + ret=1 + fi; +fi; + +$MYSQL "delete from location where username like '49721123456789%';" + +if [ "$ret" -eq 0 ]; then + # register again + sipsak -U -C sip:foobar@localhost -s sip:49721123456789@localhost -H localhost &> /dev/null + ret=$? +fi; + +$KILL + +# restart to test preload_udomain functionality +$BIN -w . -f $CFG > /dev/null +ret=$? + +sleep 1 + +if [ "$ret" -eq 0 ]; then + # check if the contact is still registered + sipsak -U -C empty -s sip:49721123456789@127.0.0.1 -H localhost -q "Contact: sip:foobar@localhost" &> /dev/null + ret=$? +fi; + +# check if the methods value is correct +if [ "$ret" -eq 0 ]; then + $CTL ul show | grep "Methods:: 4294967295" &> /dev/null + ret=$? +fi; + +# cleanup +$MYSQL "delete from location where username like '49721123456789%';" + +$KILL + +mv $CFG.bak $CFG + +exit $ret \ No newline at end of file