[sr-dev] git:mariuszbihlei/p_usrloc: test:unit : Basic test for partitioned registration (work in progress)

Marius Zbihlei marius.zbihlei at 1and1.ro
Mon Jan 10 11:48:09 CET 2011


Module: sip-router
Branch: mariuszbihlei/p_usrloc
Commit: 0f03e95b9b7798946db82e2ef32ef08bddf5e08d
URL:    http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=0f03e95b9b7798946db82e2ef32ef08bddf5e08d

Author: Marius Zbihlei <marius.zbihlei at 1and1.ro>
Committer: Marius Zbihlei <marius.zbihlei at 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 at 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 at localhost -s sip:49721123456789 at localhost -H localhost &> /dev/null
+sipsak -U -C sip:foobar1 at localhost -s sip:49721123456789 at 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 at 127.0.0.1 -H localhost -q "Contact: <sip:foobar at localhost>" &> /dev/null
+	ret=$?
+fi;
+
+if [ "$ret" -eq 0 ]; then
+	# update the registration
+	sipsak -U -C sip:foobar at localhost -s sip:49721123456789 at 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 at localhost" -s sip:49721123456789 at 127.0.0.1 -H localhost -x 0 -q "Contact: <sip:foobar at localhost>" &> /dev/null
+	ret=$?
+fi;
+
+if [ "$ret" -eq 0 ]; then
+	# unregister the contact
+	sipsak -U -C "sip:foobar at localhost" -s sip:49721123456789 at 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 at localhost" -s sip:49721123456789 at 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 at 127.0.0.1 -H localhost -q "Contact: <sip:foobar1 at localhost>" &> /dev/null
+	ret=$?
+fi;
+
+if [ "$ret" -eq 0 ]; then
+	# register the other again
+	sipsak -U -C sip:foobar at localhost -s sip:49721123456789 at localhost -H localhost &> /dev/null
+	ret=$?
+fi;
+
+if [ "$ret" -eq 0 ]; then
+	# unregister all contacts
+	sipsak -U -C "*" -s sip:49721123456789 at 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 at localhost -s sip:49721123456789 at 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 at 127.0.0.1 -H localhost -q "Contact: <sip:foobar at localhost>" &> /dev/null
+	ret=$?
+fi;
+
+if [ "$ret" -eq 0 ]; then
+	# register a few more contacts
+	sipsak -U -e 9 -s sip:49721123456789 at 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 at localhost -s sip:49721123456789 at 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 at 127.0.0.1 -H localhost -q "Contact: <sip:foobar at 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




More information about the sr-dev mailing list