summaryrefslogblamecommitdiffstats
path: root/For Weekly Test/20-07-2011/classController.py
blob: b7e3bff7c220d9af370c7342468e77923ffd96b4 (plain) (tree)



































                                                           
                













                                                                            

                                               









                                                                          
                                                     






                                                          


                                                                              

                                                            
                        


                                                               
 

                            
                                                               











                                                      







                                                                                  
                                                                                               
                                                                              

                                                              









                                                                                          


                                                                              
                                                                              
                                                                     
                                        
                                                                                               
                                                                              
                                                   






                                                                               
                                                                              









                                                                        
 
                                                                                                                  
                                        

                                                                                       
                                                         
 
                                                





                                                                                     

                                                                                          
 
                                                                                                           


                                                                        

                                                                             


                                                                                       
                                                                                            
                                                
                                                                                
 





                                                                                               

                                                                                                  
 
                                                                                                                   
                                                                                    


                                                                                

                                                                                     



                                                                                                   
                                                                                                    
                                                                             
                                                                              


                                                                                                                 
                                                     
                                                                             
 

                                                                                                                 




                                                                         
                                                                     
                                                
                                                                                                  
                                                                                                  



                                                                 
                                                             







                                                                                                         
                                                     
                     
                                             







                                                                                    
import sys
import os
import time
import MySQLdb
import subprocess
import signal

import classClient
import classDb
import classPing

from time import sleep

class TimeoutException(Exception): 
    pass 

class test:

  def __init__(self, orig, origAdd, dest, destAdd, destNo):
	self.orig 	= orig
	self.origAdd 	= origAdd
	self.dest 	= dest
	self.destAdd 	= destAdd
	self.destNo 	= destNo
	self.repeatTest	= None
	self.portOrig	= None
	self.resultOrig	= None
	self.resultDest	= None
	self.testResult	= None
	self.x		= None
	self.y		= None

  def FuncTest(self):

	def timeout_handler(signum, frame):
        	raise TimeoutException()
	print ""
	print "====================== Preparing Test ======================"
	
	try:
		
		if self.dest =="gsmBox1" or self.dest =="gsmBox2":

			if self.dest =="gsmBox1":
				portOrig = 50095

			if self.dest =="gsmBox2":
				portOrig = 50096
			
			print ""
			print "Connecting to Caller handler"
			x.connect()
			x.sendData('be caller')

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

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

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

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


			x = classClient.Connection(self.origAdd,self.portOrig)
			print ""
			print "Connecting to Caller handler"
			x.connect()
			
		# wait respond from origin handler
    		signal.signal(signal.SIGALRM, timeout_handler) 
    		signal.alarm(60)

		while 1:
			try:
				origHandler = x.receiveData(0) 
				if origHandler <> "":
					break

			except TimeoutException:
				origHandler = "failed"
				break
					

		if origHandler == "ready":
			print "Caller handler : Ready"
			print ""
			try:
				if self.dest =="gsmBox1" or self.dest =="gsmBox2":
	
					if self.dest =="gsmBox1":
						self.portDest = 50102

					if self.dest =="gsmBox2":
						self.portDest = 50103

					y = classClient.Connection(self.destAdd, self.portDest)
					print "Connecting to Receiver handler"
					y.connect()
					y.sendData('receiver')
					
				else:
					command="--command=python " +self.dest
					subprocess.Popen(args=["gnome-terminal", command])
		
					sleep(2)
		
					if self.dest=="SIPReceiver.py":
						self.portDest = 50104

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

					if self.dest == "localsipReceiver.py":
						self.portDest = 50107
					
					y = classClient.Connection(self.destAdd, self.portDest)
					print "Connecting to Receiver handler"
					y.connect()

				
		    		signal.signal(signal.SIGALRM, timeout_handler) 
		    		signal.alarm(60)

				while 1:
					try:
						destHandler = y.receiveData(0)
						if destHandler <> "":
							break

					except TimeoutException:
						destHandler = "failed"
						break

				if destHandler == "ready":

					print "Receiver handler : Ready"

					x.sendData("start|"+self.destNo)#send message to handler to start the call
					

					signal.signal(signal.SIGALRM, timeout_handler) 
		    			signal.alarm(120)

					print ""
					print "------------ Test Result ------------"
					print ""

					while 1:
						try:
							sleep(0.5)
							self.resultOrig = x.receiveData(0)
							self.resultDest = y.receiveData(0)

							if self.resultOrig <> "" and self.resultDest <> "":
								break

						except TimeoutException:
							self.resultOrig = 486
							self.resultDest = 486
							break

					#if failed, tell everybody to try one more time
					if self.resultOrig == 486 or self.resultDest == 486:
						
						x.sendData("start|"+self.destNo)

						signal.signal(signal.SIGALRM, timeout_handler) 
		    				signal.alarm(120)
	
						while 1:
							try:
								sleep(0.5)
								self.resultOrig = x.receiveData(0)
								self.resultDest = y.receiveData(0)

								if self.resultOrig <> "" and self.resultDest <> "":
									print "here"
									break

							except TimeoutException:
								self.resultOrig = 486
								self.resultDest = 486
								break
						
						#if still failed, we make automatic test vice versa
	
						if self.resultOrig == 486 or self.resultDest == 486:
							self.testResult = 486
							self.repeatTest = True
							
							print "Second test result origin: ", self.resultOrig
							print "Second test result Destination: ", self.resultDest
						else:
							self.testResult = 200

							print "Second test result origin: ", self.resultOrig
							print "Second test result Destination: ", self.resultDest
							x.sendData('487')
							y.sendData('487')

					else: 
						
						self.testResult = 200
						
						print "Test Result origin: 	", self.resultOrig
						print "Test Result Destination: ", self.resultDest
						x.sendData('487')
						y.sendData('487')

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

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