summaryrefslogblamecommitdiffstats
path: root/For Weekly Test/07-07-2011/Controller-SecondType.py
blob: 31df36c11ba33062f98d3c06ebfa881928155b02 (plain) (tree)



















































































































































































































































































































                                                                                                                                         
import sys
import os
import re
import time
import MySQLdb
import subprocess


import classClient #import class socket
import classDb #import class db

from time import sleep
from datetime import datetime


user = 'root'
passw = 'randompasswordSQL' #default password we agree with this password before!
host = 'localhost'
dbname = 'gsmselftesting'

stop = "False"
status = ""
dbSStatus = ""


#function to ping
def FuncPing(host):
	ping_cmd = os.popen('ping '+ host + ' -c 1 -W 1').read()
	pingAlive = int(string.find(ping_cmd, '1 received'))
	if pingAlive != -1:
		return 1
	else: 
		return 0


# One function for all test case

def FuncTest(orig, origAdd, dest, destAdd, destNo):

	global repeatTest
	global portOrig
	global resultOrig
	global resultDest
	global x
	global y
	portOrig = None
	resultOrig= None
	resultDest = None
	

	repeatTest = ""
	
	try:
		
		if dest =="gsmBox1" or dest =="gsmBox2":

			if dest =="gsmBox1":
				portOrig = 50095

			if dest =="gsmBox2":
				portOrig = 50096

			print "GSM server handler", x.connect()
			x.sendData('hello server please wakeup the handler and be caller')

		else:
			# open SIP caller handler
			
			command="--command=python " +orig
			subprocess.Popen(args=["gnome-terminal", command])

			sleep(5)
			
			if orig=="SIPCall.py":
				portOrig = 50097				

			if orig=="gsmcall_.py":
				portOrig = 50098

			if orig == "landlineCall.py":
				portOrig = 50099

			if orig == "LocalSIPCall.py":
				portOrig = 50100

			#else: #mean external GSM
			#	print "have not yet define"
				#portOrig = 50101

			x = classClient.Connection(origAdd,portOrig)
			print ""
			print "Caller handler status:", x.connect()
			
			x.sendData('hello Handler')
			
		# wait respond from origin handler
		while 1:
			origHandler = x.receiveData() 
			if origHandler <> "":
				break
			#think about time out		

		if origHandler == "ready":
			print "Caller handler ready"
			print ""
			try:
				y = None
				global portDest
				portDest = None

				if dest =="gsmBox1" or dest =="gsmBox2":
	
					if dest =="gsmBox1":
						portDest = 50102

					if dest =="gsmBox2":
						portDest = 50103

					y = classClient.Connection(destAdd,portDest)
					print "GSM handler", y.connect()
					y.sendData('hello server please wakeup the handler and be receiver')
					
				else:
					command="--command=python " +dest
					subprocess.Popen(args=["gnome-terminal", command])
		
					sleep(2)
		
					if dest=="SIPIncoming.py":
						portDest = 50104

					if dest=="gsmincom_.py":
						portDest = 50105

					if dest == "landlineReceiver.py":
						portDest = 50106

					if dest == "LocalSIPReceiver.py":
						portDest = 50107

					#mean external GSM
					#print "not define yet"
						#portDest = 50108
					
					y = classClient.Connection(destAdd,portDest)
					print "Destination handler status:", y.connect()
					y.sendData('hello Receiver, caller number')

				#wait respond from destination handler
				while 1:
					destHandler = y.receiveData()
					if destHandler <> "":
						break
					#should have timeout = think about timeout

				if destHandler == "ready":

					print "Destination handler ready"
					print ""
					x.sendData("start")#send message to handler to start the call
					x.closeConnection()
					x.connect()

					#wait respond from both of handler
					while 1:
						sleep(5)
						x.connect()
						sleep(1)
						resultOrig = x.receiveData()
						resultDest = y.receiveData()

						if resultOrig <> "" or resultDest <> "":
							break

					#if failed, try one more time
					if resultOrig == "failed" or resultDest == "failed":
						y.sendData('hello Destination Handler')
						x.sendData("start")
						sleep(2)
						x.sendData(destNo)

						while 1:
							resultOrig = X.receiveData()
							resultDest = y.receiveData()
							print "Origin1: ", resultOrig
							print "Destination1: ", resultDest

							if resultOrig <> "" or resultDest <> "":
								break
						
						#if still failed, save to db and return repeat test, so we make automatic test vice versa
						if resultOrig == "failed" or resultDest == "failed":
							#db.execute ("update result table")
							repeatTest="true"
							print "Origin2: ", resultOrig
							print "Destination1: ", resultDest

					else: #save to database, tell handler to terminated
						#db.execute ("update result table")
						print "Test Result origin: ", resultOrig
						print "Test Result Destination: ", resultDest
						x.sendData('terminated') # signal caller to terminate
						y.sendData('terminated') # signal receiver to terminate

				else:
					statusTest = "604 General Handler Error: Destination handler no respond"
					#tell Caller handler to terminate because receiver doesnt work
					x.sendData("terminated")
					
				y.closeConnection()

			except ValueError:    
				print "601 General Handler Error: Could not open Destination handler"
		else:
			statusTest = "605 General Handler Error: Origin handler no respond"
		
		x.closeConnection()
	
	except ValueError:    
		print "602 General Handler Error: Could not open Origin handler"

		

# Main software



# Check DB connection
x = classDb.DBMySQLConnection(user, passw, host, dbname)
print "connected to the DB ", x.connectDB()
print ""
dbStatus = x.connectDB()


if dbStatus == 1:
	
	# Check Ping to the Every Handler
	#sipServerStatus = FuncPing("132.230.4.8")
	sipServerStatus =1
	#gsmBox1Status = FuncPing("132.230.4.8")
	#gsmBox2Status = FuncPing("132.230.4.8")

# Fetch The task information from DB
	#print "do i have anything to do", x.anyTasksToDo()	

	#for item in x.tasksList:
	#	taskID = item[0]
	#	callFrom = item[1]
	#	callTo = item[2]
	callFrom = "gsmrz1"
	callTo = "sip"
	#J = 1, 2
	#for A in J:
#		print "call from to ", taskID , callFrom , callTo
	print "Test Task : Calling from " +callFrom+ " to " +callTo
	print ""


	if callFrom == "sip" and sipServerStatus <> 0:
			
		if callTo == "gsmrz1":

			FuncTest("SIPCall.py", "localhost", "gsmincom_.py", "localhost","473")
			print "Finish test"
			if repeatTest == "true":
						#select temporary table, if there are have test from gsmrz to sip then skip
						#else, update db, put new data to tasktable. from gsmrz to sip
					update
			
		if callTo == "gsmrz2":

			if gsmBox1Status <> 0:
				FuncTest("SIPCall.py", "localhost", "Box1", "132.0.0.2","404")
				if repeatTest == "true":
						#select temporary table, if there are have test from gsmrz to sip then skip
						#else, update db, put new data to tasktable. from gsmrz to sip
					update

		if callTo == "gsmrz3":

			if gsmBox2Status <> 0:
				FuncTest("SIPCall.py", "localhost", "Box2", "132.0.0.3","405")
				if repeatTest == "true":
						#select temporary table, if there are have test from gsmrz to sip then skip
						#else, update db, put new data to tasktable. from gsmrz to sip
					update
				

	if callFrom =="gsmrz1":
			
		if callTo =="sip" and sipServerStatus <> 0:
			FuncTest("gsmcall_.py", "localhost", "SIPIncoming.py", "localhost","929")
			sleep(10)
	
			
		if callTo =="gsmrz2" and gsmBox1Status <> 0:
			FuncTest("Box1", "132.0.0.2", "SIPReceiver.py", "localhost","929")

		if callTo =="gsmrz3" and gsmBox2Status <> 0:
			FuncTest("Box2", "132.0.0.3", "SIPReceiver.py", "localhost","929")
				
				


# will exit if DB connection failed
else:
	sys.exit(5)