# # Copyright (C) 2006 SIPfoundry Inc. # Licensed by SIPfoundry under the LGPL license. # # Copyright (C) 2006 Pingtel Corp. # Licensed to SIPfoundry under a Contributor Agreement. # ############################################################################## # system requirements require 'getoptlong' require 'digest/md5' $testUsers = [ 'superadmin', '200', '201', '202', '203' ] $testSipURIs= [] # Get options from the command line def getOptions opts = GetoptLong.new( [ "--prefix", "-p", GetoptLong::REQUIRED_ARGUMENT ], [ "--dbname", "-d", GetoptLong::REQUIRED_ARGUMENT ], [ "--verbose", "-v", GetoptLong::NO_ARGUMENT ] ) $verbose = false opts.each do |opt, arg| case opt when "--prefix" then $prefix = arg when "--dbname" then $dbname = arg.inspect when "--verbose" then $verbose = true end end end # Set up some variables describing the enviroment the tests # are run in. def setEnvironment getOptions if $verbose puts "Prefix: #{$prefix}" puts "DbName: #{$dbname}" end shellResult = `hostname -i` $ipAddress = shellResult.chomp shellResult = `hostname -f` $hostName = shellResult.chomp $realm = $hostName[$hostName.index('.')+1, $hostName.length] $proxyPort = 5060 $registrarPort = 5070 $authproxyPort = 5080 # Build a list of SIP URIs $testUsers.each do |user| $testSipURIs.concat([ "sip:#{user}@#{$ipAddress}" ]) end puts $testSipURIs $firstParty = "sip:500@" + $hostName $secondParty = "sip:501@" + $hostName $thirdParty = "sip:502@" + $hostName $firstPartyIp = "sip:500@" + $ipAddress $secondPartyIp = "sip:501@" + $ipAddress $thirdPartyIp = "sip:502@" + $ipAddress $userAgent = "CseUnitTest/0.01" end # Creates a ${prefix}/var/sipxdata/sipdb/credential.xml file with # entries for all users defined in the testUsers array. May # not be necessary if the registrar is not running. def createCredentials puts "Generating credentials..." if $verbose hash_class = Digest::MD5 credentialFileName = $prefix + \ "/var/sipxdata/sipdb/credential.xml" fileObj = File.new(credentialFileName, \ File::CREAT|File::TRUNC|File::RDWR, 0644) fileObj.syswrite("\n") fileObj.syswrite("\n") $testUsers.each do |user| fileObj.syswrite(" \n") fileObj.syswrite(" #{$realm}\n") fileObj.syswrite(" sip:#{user}@#{$hostName}\n") fileObj.syswrite(" #{user}\n") hashstring = hash_class.hexdigest("#{user}:#{$realm}:1234") fileObj.syswrite(" #{hashstring}\n") fileObj.syswrite(" #{hashstring}\n") fileObj.syswrite(" \n") end fileObj.syswrite("\n") fileObj.close end # Start proxy and authproxy, clear any old logs def startServices logs = $prefix + "/var/log/sipxpbx/*"; proxyStartup = $prefix + "/bin/sipproxy &" authproxyStartup = $prefix + "/bin/sipauthproxy&" puts "Removing logs..." if $verbose system("sudo rm -rf #{logs}") puts "Starting services..." if $verbose fork do exec(proxyStartup) end fork do exec(authproxyStartup) end # Give them time to start up sleep 1 # Do a funky way of retrieving PID forp roxy and authproxy, # later stop them by killing them. This is necessary because # there seems to be no way to programmatically retrieve # a process id of an external process. A 'spawn' function # that returns the PID of an external process is promised # for Ruby 1.9. shellReturn = `ps -C sipproxy | cut -d ' ' -f 1` proxyPidString = shellReturn.strip shellReturn = `ps -C sipauthproxy | cut -d ' ' -f 1` authproxyPidString = shellReturn.strip $proxyPid = proxyPidString.to_i $authproxyPid = authproxyPidString.to_i puts "Running processes #{$proxyPid}, #{$authproxyPid}" \ if $verbose $proxyPid != 0 && $authproxyPid !=0 end def stopServices puts "Stopping services (#{$proxyPid} #{$authproxyPid})" \ if $verbose Process.kill(3, $proxyPid) Process.kill(3, $authproxyPid) # Give them time to shut down sleep 1 end def checkForZombieProxies puts "Checking for zombie proxies" if $verbose proxyPidString = '' authproxyPidString = '' shellReturn = `ps -C sipproxy | cut -d ' ' -f 1` proxyPidString = shellReturn.strip shellReturn = `ps -C sipauthproxy | cut -d ' ' -f 1` authproxyPidString = shellReturn.strip proxyPid = proxyPidString.to_i authproxyPid = authproxyPidString.to_i puts "Leftover processes #{proxyPid} #{authproxyPid}" \ if $verbose proxyPid == 0 && authproxyPid == 0 end