summaryrefslogblamecommitdiffstats
path: root/For Weekly Test/Advance/ControllerClass.py
blob: 4fddaa41695d60944239f1a853c6039ada2d3a03 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

















                                                                                                     
                                                















                                                      




                                            









                                                                         




                                                        


























                                                                                                                                    

                                                                    









                                                                                                         
                                                               
                                                               
                                                                                   














                                                       
                                       
 

                                                            
 

                                                      
 

                                                          



                                              
                                                             
        

                                                    
                                                                                               
                             


                                                                                                                                                  
                                                               
 
 
                                                  
                                                                                       






                                                                                                                                              
                                                           
 

                                                
                                                                                         
                             

                                                                                                                                              
                                                             
 
                                              
                                                                             







                                                                                                                                          

                                                                              
                                                              
                                                 
                                                            
                             

                                                               


                                                                              








                                                                                 
                                                                             













                                                                                  
                                                                               







                                                                           
                                                                                                                                                          



 
import sys
import os
import subprocess
import SSHTunnelBoxClass
import ClientClass
import random

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

from time import sleep


class doTheTest:

	def __init__(self, callFrom, callPortName, accCaller, callTo, destPortName, destNo, accDest):
	
		self.callFrom 		= callFrom
		self.dest           	= callTo
		self.destNo 		= destNo
		self.accDest		= accDest
		self.accCaller		= accCaller
		self.callPortName	= callPortName
		self.destPortName	= destPortName
		self.portCaller		= None
		self.portDest		= None
		self.resultCaller	= None
		self.resultDest		= None
		self.testResult		= None

	def FuncTest(self):

		logger.logEvent('')
		
		self.initCaller()
		
		if self.callFrom =="GSMRZ3":
			sleep(20)
		else:
			sleep(2)
		self.callerGreeting()

		if self.connected == 'OK':
		
			self.caller.sendData('CALLER|'+self.destNo)
			callerHandler = self.caller.receiveData(10) 
		
			if callerHandler == "CALLER READY":
				logger.logEvent('Caller handler : Ready')
				
				self.initReceiver()	
				if self.dest =="GSMRZ3":
					sleep(20)
				else:			
					sleep(2)
				self.receiverGreeting()	
				
				if self.connected == 'OK':	
			
					self.receiver.sendData('RECEIVER')
					destHandler = self.receiver.receiveData(10)
	
					if destHandler == 'RECEIVER READY':
						logger.logEvent('Receiver handler : Ready')

						self.startCall()
						self.waitingFeedback()

					else:
						self.testResult = 604
						logger.logEvent('604 General Handler Error: Destination handler no respond timeout')
						self.caller.sendData('TERMINATE CONNECTION')				
						self.receiver.closeConnection()
	
				else:    
					logger.logEvent('998 General Handler Error: Could not connect Destination handler')
					self.testResult = 998
					self.caller.sendData('TERMINATE CONNECTION')
					self.caller.closeConnection()
			else:
				self.testResult = 605
				logger.logEvent('605 General Handler Error: caller handler no respond timeout')

			self.caller.sendData('TERMINATE CONNECTION')
			self.caller.closeConnection()
	
		else:    
			self.testResult = 999
			logger.logEvent('999 General Handler Error: Could not connect to Caller handler')



	def waitingFeedback(self):
		logger.logEvent('Waiting Feedback')
		self.resultDest = self.receiver.receiveData(15)
		self.resultCaller = self.caller.receiveData(15)
		if self.resultCaller <> 'CALL OK' and self.resultDest <> 'CALL OK':

			logger.logEvent('Test Failed')
			self.testResult = 486
			self.initTerminate()
		
		else:
			logger.logEvent('Test Succeed')
			self.testResult = 200
			self.initTerminate()

	def startCall(self):
		logger.logEvent('Start Call')
		self.receiver.sendData('RECEIVE START')
		self.caller.sendData('CALL START')
    
    	def initAccount(self, account):

        	accConf = account
        	self.username = accConf[0:accConf.find(':')]

	        line = accConf[accConf.find(':')+1:]
	        self.password = line[0:line.find(':')]

	        newLine = line[line.find(':')+1:]
	        self.server = newLine[0:newLine.find(':')]

	def initCaller(self):
		logger.logEvent('init Caller')
		logger.logEvent(self.callFrom)
        	self.portCaller = random.randint(30000,60000)
        
        	if self.callFrom[0:4] == 'GSMR':
            		if self.callFrom =="GSMRZ1":
                		self.initGSM(self.portCaller, self.callPortName, self.callFrom)
            		else:
                		self.initAccount(self.accCaller)

                		self.boxCaller = SSHTunnelBoxClass.SSHTunneling(self.portCaller, 50008, self.server, self.username, self.password)
                		self.boxCaller.startTunneling()


        	elif self.callFrom[0:4] == 'GSME':
            		self.initGSM(self.portCaller, self.callPortName, self.callFrom)

		else:
			subprocess.Popen(args=["gnome-terminal", '--command=python SIPHandler.py '+self.accCaller+ ' ' +str(self.portCaller)])

	def initReceiver(self):
		logger.logEvent('init Receiver')
		logger.logEvent(self.dest)
        	self.portDest = random.randint(30000,60000)

	        if self.dest[0:4] == 'GSMR':
			if self.dest =="GSMRZ1":
        	        	self.initGSM(self.portDest, self.destPortName, self.dest)
            		else:
                		self.initAccount(self.accDest)
                		self.boxDest = SSHTunnelBoxClass.SSHTunneling(self.portDest, 50008, self.server, self.username, self.password)
                		self.boxDest.startTunneling()

	        elif self.dest[0:4] == 'GSME':
        	    self.initGSM(self.portDest, self.destPortName, self.dest)

		else:
			self.portDest = 50100
			subprocess.Popen(args=['gnome-terminal', '--command=python SIPHandler.py '+self.accDest+ ' ' +str(self.portDest)])

	def initTerminate(self):
		self.caller.sendData('TERMINATE CONNECTION')
		self.receiver.sendData('TERMINATE CONNECTION')
        	if self.callFrom[0:5] == 'GSMRZ' or self.dest[0:5] == 'GSMRZ':
            		if self.callFrom != 'GSMRZ1':
                		self.boxCaller.killTunneling()
            		if self.dest != 'GSMRZ1':
                		self.boxDest.killTunneling()
        		else:
            			self.receiver.closeConnection()
            			self.caller.closeConnection()
		if self.callFrom[0:5] != 'GSMRZ' or self.dest[0:5] != 'GSMRZ':
            		self.receiver.closeConnection()
            		self.caller.closeConnection()
                    
	def callerGreeting(self):
		self.connected 	= None
		self.caller = ClientClass.Connection('localhost',self.portCaller)
		self.caller.connect()

		if self.caller.connected == 1:
			logger.logEvent('Connected to Caller Handler')
			self.caller.sendData('HELLO HANDLER')
			if self.caller.receiveData(30) == 'HELLO CONTROLLER':
				logger.logEvent('Caller Handler respond')
				self.connected = 'OK'
		else:
			logger.logEvent('Cannt connect to Caller')
			self.connected = 'NOT OK'

	def receiverGreeting(self):
		self.connected 	= None
		self.receiver = ClientClass.Connection('localhost', self.portDest)
		self.receiver.connect()

		if self.receiver.connected == 1:
			logger.logEvent('Connected to Receiver Handler')
			self.receiver.sendData('HELLO HANDLER')
			if self.receiver.receiveData(30) == 'HELLO CONTROLLER':
				logger.logEvent('Receiver Handler respond')
				self.connected = 'OK'
		else:
			logger.logEvent('Cannt connect to Receiver')
			self.connected = 'NOT OK'

	def initGSM(self, portCommunication, portDevice, handler):

		subprocess.Popen(args=["gnome-terminal", '--command=python GSMHandler.py '+str(portCommunication)+ ' ' +str(portDevice)+' '+str(handler)])