summaryrefslogblamecommitdiffstats
path: root/notFinishedCode/Controller-SecondType.py
blob: 66cdf09f1b724e6bc91a23efcf45811ceb67d283 (plain) (tree)
1
2
3
4
5
6
7
8
9

          


                 

 

                                       
                
 



                             

                                
                                
 
 



                                       









                                       
 
                                

                                   
 
                                                   
 
 
                         
                       

                         
                         

                
 

                                           

                                                                            
        
            
                
                                                        
 
                                            
                                                
 
                                            
                                                



                                                                    
                                                                                          
 

                                                 
                        


                                                                          

                                
                                              

                                                                                
                                              
                                                
 
                                                     
                                                
 
                                                     
                                                
 

                                                           

                                                 
                                                                    
                                
                                                            

                                                                   
                                                   
                        
                                                  

                                                               
                        






                                                              
                                     
                                        

                                          
                                                      
                                
                            

                                               
 
                                                                        
        
                                                            
                                                                
 
                                                            
                                                                
 
                                                                                    

                                                                                      
                                                                                                            



                                                                                          
                
                                                
                
                                                                  
                                                                
 
                                                                  
                                                                
 

                                                                         
 






                                                                         
                                                                                    


                                                                                     
 



                                                                               
                                        






                                                                             
                                                     

                                                          
 
                                                                        
                                                
                                                                                                     
                                                  
                                                          





                                                           
 

                                                                                       
 

                                                                                     
 
                                                



                                                                                    
 

                                                                                                
 


                                                                        

                                                             

                                                                                       
                                                
                                                                   
                                                          
                                                                  





                                                                   
                                                


                                                                                               
                                                        



                                                                                            
 





                                                                                                        

                                                                     

                                                                                                   
                                                                                          
                                                                        
                                                                         


                                                                                                            
                                                                        

                                                                                                            

                                                                         
 


                                                                

                                                                                             

                                                                 

                                     

                                                                                                         
                                                                                                      
                                                         
                                        
                                                   


                                                                                                     
                                                  
                     

                                                                                    
                
                                   

                              
                                





                                                                                
                     
                                                                                          
                                         
        
                         

 
                 
        
                                         








                                                       
                                    
                                                                
 

                                 


                                  
 


                                                      
 

                                                
                                                                          

                             
                        
                                                      
 

                                                                                                             
                                                                        
                                                                
                                                                                                                           
                                                                                                                      
                                                                                                                       
                                                      
                        
                                                      
        
                                                              
                                                                                          


                                                                                                         
                                                                                
                                                                        
                                                                                                                           
                                                                                                              
                                                              
 
                                                      
 
                                                              
                                                                                          


                                                                                                         
                                                                                
                                                                        

                                                                                                                           


                                                                   
                                                                                          


                                                                                                                
                                                                                


                                                                    
                                                                                          
 
                                             

                                                                                                                  
 
                                                           
                                                                                                

                                                                        
                                                                                                     

                                                                        
                                                                                                      

                                                                        
                                                                                               
                                                                        
                
                                
 
                                       
                        

                                                        
                                                                                  


                                                                                                        
                                                                        
                                                 

                        

                                                      
                                                                                  


                                                                                                 
                                                                        
 

                                                      
                                                                                  


                                                                                                 
                                                                        
                                
 
        




                                   
import sys
import os
import time
import MySQLdb
import subprocess


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

from time import sleep
from datetime import datetime


sipNum		= "4661929"
landlnNum	= "076145875681"
unisipNum	= "076120397897"


sipCall		= "sipCall.py"
sipRec 		= "sipReceiver.py"
landlnCall 	= "landlineCall.py"
landlnRec 	= "landlineReceiver.py"
localSipRec 	= "localsipReceiver.py"
rz1Call		= "rz1Call.py"
rz1Rec		= "rz1Receiver.py

o2Call		= "o2Call.py"
o2Rec		= "o2Receiver.py"
vodafoneCall	= "vodafoneCall.py"
vodafoneRec	= "vodafoneReceiver.py"
tmobileCall	= "tmobileCall.py"
tmobilRec	= "tmobileReceiver.py"

# One function for all test case
class TimeoutException(Exception): 
    pass 

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


	global repeatTest
	global portOrig
	global resultOrig
	global resultDest
	global testResult
	global x
	global y

	def timeout_handler(signum, frame):
        	raise TimeoutException()

	print "====================== Preparing Test ======================"
	
	try:
		
		if dest =="gsmBox1" or dest =="gsmBox2":

			if dest =="gsmBox1":
				portOrig = 50095

			if dest =="gsmBox2":
				portOrig = 50096
			
			print ""
			print "Connecting to Caller handler"
			print "Caller handler status :", 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=="rz1Call.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 "Connecting to Caller handler"
			print "Caller handler status:", x.connect()
			
			x.sendData('hello Handler')
			
		# wait respond from origin handler
    		signal.signal(signal.SIGALRM, timeout_handler) 
    		signal.alarm(60)
		while 1:
			try:
				origHandler = x.receiveData() 
				if origHandler <> "":
					break

			except TimeoutException:
				origHandler = "failed"
				break
					

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

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

					if dest =="gsmBox2":
						portDest = 50103

					y = classClient.Connection(destAdd,portDest)
					print "Connecting to Receiver handler"
					print "Receiver handler status: ", 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=="SIPReceiver.py":
						portDest = 50104

					if dest=="rz1Receiver.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 "Connecting to Receiver handler"
					print "Receiver handler status:", y.connect()
					y.sendData('hello Receiver')

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

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

					except TimeoutException:
						destHandler = "failed"
						break

				if destHandler == "ready":

					print "Receiver handler : Ready"
					print ""
					x.sendData("start")#send message to handler to start the call
					sleep(0.5)
					x.sendData(destNo)
					
					x.closeConnection()
					x.connect()

					y.closeConnection()
					y.connect()

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

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

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

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

						except TimeoutException:
							resultOrig = 486
							resultDest = 486
							break

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

						x.closeConnection()
						x.connect()

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

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

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

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

				else:
					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"
				testResult = "601"
		else:
			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"

		

# Main software

# Check DB connection
db = classDb.DBMySQLConnection('root', 'randompasswordSQL', 'localhost', 'gsmselftesting')
print "Connecting to DB  ", x.connectDB()
print ""
dbStatus = db.connectDB()


if dbStatus == 1:
	
	# Check Ping to the Every Handler
	sipServer = PingClass.Ping('132.230.4.60')
	sipServerStatus = sipServer.ping(3)

	sipGateServer = PingClass.Ping('sipgate.de')
	sipGateServerStatus = sipGateServer.ping(3)

	sipLocalServer = PingClass.Ping('132.230.4.60')
	sipLocalServerStatus = sipLocalServer.ping(3)

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

	for item in db.tasksList:
		
		taskID = item[0]
		callFrom = item[1]
		callTo = item[2]

		print "Test ID		: " , taskID 
		print "Caller		: " , callFrom
		print "Receiver		: " , callTo

		if callFrom == "sip":
 			if sipServerStatus == 0:
				print "[failed] 500 Server Internal Error"

			else:
			
				if callTo == "gsmrz1":

					FuncTest(sipCall, "localhost", "gsmincom_.py", "localhost","4661473")
					print "Finish test"
					db.addResult(taskID, testResult)
					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
							# waiting db class  for repeat test from refik which I ask for.
						update
			
				if callTo == "gsmrz2":
	
					if gsmBox1Status == 0:
						print "[failed] 500 Server Internal Error"

					else:
						FuncTest(sipCall, "localhost", "Box1", "132.0.0.2","404")
						db.addResult(taskID, testResult)
						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:
						print "[failed] 500 Server Internal Error"

					else:
						FuncTest(sipCall, "localhost", "Box2", "132.0.0.3","405")
						db.addResult(taskID, testResult)
						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 == "landline":
					if sipGateSeverStatus == 0:
						print "[failed] 500 Server Internal Error"
			
					else:
						FuncTest(sipCall, "localhost", landlnRec, "localhost",landlnNum)
						db.addResult(taskID, testResult)

				if callTo == "localsip":
					if sipLocalSeverStatus == 0:
						print "[failed] 500 Server Internal Error"

					else:
						FuncTest(sipCall, "localhost", localSipRec, "localhost",unisipNum)
						db.addResult(taskID, testResult)

				if callTo == "externalgsm":
					FuncTest(sipCall, "localhost", o2Rec, "localhost","405")
					db.addResult(taskID, testResult)

					FuncTest(sipCall, "localhost", tmobileRec, "localhost","405")
					db.addResult(taskID, testResult)

					FuncTest(sipCall, "localhost", vodafoneRec, "localhost","405")
					db.addResult(taskID, testResult)

					FuncTest(sipCall, "localhost", "xx", "localhost","405")
					db.addResult(taskID, testResult)
		
				

		if callFrom =="gsmrz1":
			
			if callTo =="sip":
				if sipServerStatus == 0:
					print "[failed] 500 Server Internal Error"
					
				else:
					FuncTest("gsmcall_.py", "localhost", sipRec, "localhost",sipNum)
					db.addResult(taskID, testResult)
					sleep(10)
	
			
			if callTo =="gsmrz2":
				if gsmBox1Status == 0:
					print "[failed] 500 Server Internal Error"
		
				else:
					FuncTest("Box1", "132.0.0.2", sipRec, "localhost",sipNum)
					db.addResult(taskID, testResult)

			if callTo =="gsmrz3":
				if gsmBox2Status == 0:
					print "[failed] 500 Server Internal Error"

				else:
					FuncTest("Box2", "132.0.0.3", sipRec, "localhost",sipNum)
					db.addResult(taskID, testResult)
				

	

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