summaryrefslogblamecommitdiffstats
path: root/Controller/classController.py
blob: b48dbc8afdeeaf453ab174a351c09102501efdf1 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11










                  


                                                    

                      

 




                                   
                                         
                              
                              


                                
                              


                              

                              




                                           


                                                                                       


                
                                                                                          
 

                                                     
 




                                                     


                                                 

                                                                                


                                                                          
 

                                                                          
 


                                          



                                                               
 

                            
                                                                    








                                                      
                                                                 
                            
                                                                                                           






                                                                     

                                                                     
                                        
                        
                                     

                                                                                                

                                                                                          
                                                
                                        

                                                                                             
                                



                                                          




                                                                               
                                                                                     








                                                                      
                                                                                   
 
                                                                             
                                        



                                                                                       
                                                                                                



                                                                  

                                                                                                 
 
                                                                                                           

                                                                                                                           


                                                                        

                                                                             


                                                                                       
                                                                                            
                                                
                                                                                     
 





                                                                                               

                                                                                                         
 
                                                                                                                   

                                                                                                                                   


                                                                                

                                                                                     



                                                                                                   


                                                                                                    
 
                                                     

                                                                             

                                                                        


                                                
                                                                     

                                                                        

                                     
                                                             
                                                                                                                    
                                                                                                      
                                                              
                                        
                                                          

                                              
                                                                                                                
                                                     

                                                        
                     
                                             
                                                                                               
                
                                        


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

import classClient
import classDb
import classPing

import LogFileClass
logger = LogFileClass.Logging('classController.log')

from time import sleep



class TimeoutException(Exception): 
    pass 

class test:

  def __init__(self, orig, dest, destNo):
	self.orig 	= orig
	self.dest 	= dest
	self.destNo 	= destNo
	self.repeatTest	= None
	self.portOrig	= None
	self.portDest	= None
	self.resultOrig	= None
	self.resultDest	= None
	self.testResult	= None
	self.caller	= None
	self.receiver	= None

  def FuncTest(self):

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

	logger.logEvent('')
	logger.logEvent('====================== Preparing Test ======================')
	
	try:
		
		if self.orig =="gsmBox1" or self.orig =="gsmBox2" or self.orig =="gsmBox3:

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

			if self.orig =="gsmBox2":
				self.portOrig = 50096

			if self.orig =="gsmBox3":
				self.portOrig = 50097

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

			sleep(5)

		logger.logEvent('Connecting to Caller handler')
		caller = classClient.Connection('localhost',self.portOrig)

		caller.connect()
		message = self.orig+ '|-C'
		caller.sendData(message)
			
		# wait respond from origin handler
    		signal.signal(signal.SIGALRM, timeout_handler) 
    		signal.alarm(60)

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

			except TimeoutException:
				origHandler = "failed"
				break
					

		if origHandler == "ready":
			logger.logEvent('Caller handler : Ready')
			try:
				if self.dest =="gsmBox1" or self.dest =="gsmBox2" or self.dest =="gsmBox2":
	
					if self.dest =="gsmBox1":
						self.portDest = 50102

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

					if self.dest =="gsmBox3":
						self.portDest = 50103
					
			
				else:
					self.portDest = 50100
					command="--command=python sipHandler.py " +self.portDest
					subprocess.Popen(args=["gnome-terminal", command])
		
					sleep(5)
					
				logger.logEvent('Connecting to Receiver handler')
				receiver = classClient.Connection('localhost', self.portDest)
				
				receiver.connect()
				message = self.dest+ '|-R'
				receiver.sendData(message)

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

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

					except TimeoutException:
						destHandler = "failed"
						break

				if destHandler == "ready":

					logger.logEvent('Receiver handler : Ready')

					caller.sendData("start|"+self.destNo)
					

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

					logger.logEvent('------------ Test Result ------------')

					while 1:
						try:
							sleep(0.5)
							self.resultOrig = caller.receiveData(0)
							self.resultDest = receiver.receiveData(0)

							if self.resultOrig <> "" and self.resultDest <> "":
								logger.logEvent('1st Test, Origin :' +self.resultOrig)
								logger.logEvent('1st Test, Destination :' +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:
						
						caller.sendData("start|"+self.destNo)

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

								if self.resultOrig <> "" and self.resultDest <> "":
									logger.logEvent('2nd Test, Origin :' +self.resultOrig)
									logger.logEvent('2nd Test, Destination :' +self.resultDest)
									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

						else:
							self.testResult = 200

						caller.sendData('487')
						receiver.sendData('487')

					else: 
						
						self.testResult = 200
						caller.sendData('487')
						receiver.sendData('487')

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

			except ValueError:    
				logger.logEvent('601 General Handler Error: Could not open Destination handler')
				self.testResult = 601
				caller.sendData('487')
				caller.closeConnection()
		else:
			self.testResult = 605
			logger.logEvent('605 General Handler Error: Origin handler no respond')
		
		caller.closeConnection()
	
	except ValueError:    
		testResult = 602
		logger.logEvent('602 General Handler Error: Could not open Origin handler')