#!/bin/bash # Scaling test number=1000 req=100 if [ $# = 0 ]; then number=1000 elif [ $# = 1 ]; then number=$1 elif [ $# = 2 ]; then number=$1 req=$2 else echo "Usage: $0 [ []]" exit 1 fi fyang=/tmp/scaling.yang fconfig=/tmp/config # include err() and new() functions . ./lib.sh clixon_cf=/tmp/scaling-conf.xml # For memcheck # clixon_netconf="valgrind --leak-check=full --show-leak-kinds=all clixon_netconf" # clixon_netconf="valgrind --tool=callgrind clixon_netconf clixon_netconf=clixon_netconf cat < $fyang module ietf-ip{ container x { list y { key "a"; leaf a { type string; } leaf b { type string; } } leaf-list c { type string; } } } EOF cat < $clixon_cf $clixon_cf $fyang ietf-ip /usr/local/var/routing/routing.sock /usr/local/var/routing/routing.pidfile /usr/local/var/routing /usr/local/lib/xmldb/text.so EOF # kill old backend (if any) new "kill old backend" sudo clixon_backend -zf $clixon_cf -y $fyang if [ $? -ne 0 ]; then err fi new "start backend" # start new backend sudo clixon_backend -s init -f $clixon_cf -y $fyang if [ $? -ne 0 ]; then err fi new "generate large list config" echo -n "" > $fconfig for (( i=0; i<$number; i++ )); do echo -n "$i$i" >> $fconfig done echo "]]>]]>" >> $fconfig # Just for manual dbg echo "$clixon_netconf -qf $clixon_cf -y $fyang" new "netconf edit large config" expecteof_file "time -p $clixon_netconf -qf $clixon_cf -y $fyang" "$fconfig" "^]]>]]>$" echo ']]>]]>' | $clixon_netconf -qf $clixon_cf -y $fyang new "netconf edit large config again" expecteof_file "time -p $clixon_netconf -qf $clixon_cf -y $fyang" "$fconfig" "^]]>]]>$" echo ']]>]]>' | $clixon_netconf -qf $clixon_cf -y $fyang rm $fconfig new "netconf commit large config" expecteof "time -p $clixon_netconf -qf $clixon_cf -y $fyang" "]]>]]>" "^]]>]]>$" new "netconf add one small config" expecteof "time -p $clixon_netconf -qf $clixon_cf -y $fyang" "xy]]>]]>" "^]]>]]>$" new "netconf add $req small config" time -p for (( i=0; i<$req; i++ )); do rnd=$(( ( RANDOM % $number ) )) echo "$rnd$rnd]]>]]>" done | $clixon_netconf -qf $clixon_cf -y $fyang > /dev/null new "netconf commit small config" expecteof "time -p $clixon_netconf -qf $clixon_cf -y $fyang" "]]>]]>" "^]]>]]>$" new "netconf get large config" expecteof "time -p $clixon_netconf -qf $clixon_cf -y $fyang" "]]>]]>" "^0011" new "netconf get $req small config" time -p for (( i=0; i<$req; i++ )); do rnd=$(( ( RANDOM % $number ) )) echo "]]>]]>" done | $clixon_netconf -qf $clixon_cf -y $fyang > /dev/null new "generate large leaf-list config" echo -n "replace" > $fconfig for (( i=0; i<$number; i++ )); do echo -n "$i" >> $fconfig done echo "]]>]]>" >> $fconfig new "netconf replace large list-leaf config" expecteof_file "time -p $clixon_netconf -qf $clixon_cf -y $fyang" "$fconfig" "^]]>]]>$" rm $fconfig new "netconf commit large leaf-list config" expecteof "time -p $clixon_netconf -qf $clixon_cf -y $fyang" "]]>]]>" "^]]>]]>$" new "netconf add small leaf-list config" expecteof "time -p $clixon_netconf -qf $clixon_cf -y $fyang" "x]]>]]>" "^]]>]]>$" new "netconf commit small leaf-list config" expecteof "time -p $clixon_netconf -qf $clixon_cf -y $fyang" "]]>]]>" "^]]>]]>$" new "netconf get large leaf-list config" expecteof "time -p $clixon_netconf -qf $clixon_cf -y $fyang" "]]>]]>" "^01" new "Kill backend" # Check if still alive pid=`pgrep clixon_backend` if [ -z "$pid" ]; then err "backend already dead" fi # kill backend sudo clixon_backend -zf $clixon_cf if [ $? -ne 0 ]; then err "kill backend" fi