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": self.portOrig = 50095 elif self.orig =="gsmBox2": self.portOrig = 50096 elif 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 origHandler = caller.receiveData(60) if origHandler == "ready": logger.logEvent('Caller handler : Ready') try: 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) destHandler = receiver.receiveData(0) if destHandler == "ready": logger.logEvent('Receiver handler : Ready') caller.sendData("start|"+self.destNo) logger.logEvent('------------ Test Result ------------') self.resultOrig = caller.receiveData(120) self.resultDest = receiver.receiveData(120) logger.logEvent('1st Test, Origin :' +self.resultOrig) logger.logEvent('1st Test, Destination :' +self.resultDest) #if failed, tell everybody to try one more time if self.resultOrig == 486 or self.resultDest == 486: caller.sendData("start|"+self.destNo) self.resultOrig = caller.receiveData(0) self.resultDest = receiver.receiveData(0) logger.logEvent('2nd Test, Origin :' +self.resultOrig) logger.logEvent('2nd Test, Destination :' +self.resultDest) #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 time out') caller.closeConnection() except ValueError: testResult = 602 logger.logEvent('602 General Handler Error: Could not open Origin handler')