summaryrefslogblamecommitdiffstats
path: root/notFinishedCode/tricode/gsmselftest2.py
blob: 37272c1c9c43287cc00817fe1de3a01987f0b50e (plain) (tree)










































































































































































































































































































































                                                                                                                                                                                                                                                                                                                                                                                                                                                      
                                                                                                                              





































                                                                                                        
#! /usr/bin/env python
from serial import * #serial port library
import sys 
import ControllerClass
import DbClass
import PingClass
import trueTableClass
import initTestClass
import usbDetectClass
from time import sleep
import ServerClassSoftware

global resultsList
resultsList = list()

GSMListPrefix = [['GSMExt.Tm','0151'],['GSMExt.Tm','0160'],['GSMExt.Tm','0170'],['GSMExt.Tm','0171'],['GSMExt.Tm','0175'],['GSMExt.Voda','0152'],['GSMExt.Voda','0162'],['GSMExt.Voda','0172'],['GSMExt.Voda','0173'],['GSMExt.Voda','0174'],['GSMExt.Eplus','0157'],['GSMExt.Eplus','0177'],['GSMExt.Eplus','0155'],['GSMExt.Eplus','0163'],['GSMExt.Eplus','0178'],['GSMExt.O2','0159'],['GSMExt.O2','0176'],['GSMExt.O2','0179'],['GSMRZ1','0761']]


def allPing():
	
	global sipGate
	global sipServer
	global unisip
	global gsmBox1
	global gsmBox2
		
	server = PingClass.Ping('sipgate.de')
	sipGate = server.ping(1)

	server = PingClass.Ping('132.230.4.8')
	sipServer = server.ping(1)

	server = PingClass.Ping('132.230.252.228')
	unisip = server.ping(1)

	server = PingClass.Ping('localhost')
	gsmBox1 = server.ping(1)

	server = PingClass.Ping('10.4.58.241')
	gsmBox2 = server.ping(1)

def initDB():
    global dbStatus
    global db
    
    db = DbClass.DBMySQLConnection('root', 'randompasswordSQL', 'localhost', 'gsmselftesting')
    db.connectDB()
    dbStatus = db.connectDB()
    if dbStatus == 1:
    	print 'Lock the mutex: ' + str(db.lockMutex(100))

def initTrueTable(x):
	initResult = trueTableClass.trueTable(x)
	initResult.initTrueTable()
	print '\n'
    	if initResult.o2Card == False and initResult.eplusCard == False and initResult.vodaCard == False and initResult.tmobileCard == False:
		print 'GSM BOX Modem down'
    	else:
    		if initResult.o2Card == False:
			print "O2 card indicate having problem"
    		if initResult.eplusCard == False:
			print "eplus card indicate having problem"
    		if initResult.vodaCard == False:
			print "vodaphone card indicate having problem"
    		if initResult.tmobileCard == False:
			print "T-Mobile card indicate having problem"
		print '\n'
	
	if initResult.nanoBTS1 == True or initResult.nanoBTS2 == True or initResult.nanoBTS3 == True:
		print 'openBSC working'

    	if initResult.nanoBTS1 == False and initResult.nanoBTS2 == False and initResult.nanoBTS3 == False:
		print 'openBSC down'
    	else:
    		if initResult.nanoBTS1 == False:
			print "nanoBTS 1 indicate having problem"
    		if initResult.nanoBTS2 == False:
			print "nanoBTS 2 indicate having problem"
    		if initResult.nanoBTS3 == False:
			print "nanoBTS 3 indicate having problem"

	if initResult.outgoingLandline == False:
		print 'outgoing call to outside network having problem'
		print '\n'

    	if initResult.asteriskServer == False:
		print "Asterisk server indicate having problem"
    	elif initResult.asteriskServer == True:
		print 'Asterisk server working good'
	print '\n'

def doSipTest():

	destList = ['gsmr1','gsmr2', 'gsmr3', 'landline', 'unisip', 'GSMExt.O2', 'GSMExt.Voda', 'GSMExt.Eplus', 'GSMExt.Tm' ]
	doTest = initTestClass.doTest()
	for callTo in destList:

		callFrom = 'sip'
		doTest.initTest(callFrom,callTo)
		resultsList.append([callFrom, callTo, doTest.result])

def doLandlineTest():

	destList = ['GSMRZ1','unisip', 'sip'] 
	doTest = initTestClass.doTest()
	for callTo in destList:

		callFrom = 'landline'
		doTest.initTest(callFrom,callTo)
		resultsList.append([callFrom, callTo, doTest.result])
	initTrueTable(resultsList)

def doGsmrzTest():

	destList = ['GSMRZ1','GSMRZ2', 'GSMRZ3']
	callList = ['sip']
	doTest = initTestClass.doTest()

	for callFrom in callList:

		for callTo in destList:
			doTest.initTest(callFrom,callTo)
			resultsList.append([callFrom, callTo, doTest.result])
	initTrueTable(resultsList)
	
def doGsmExtTest():
	
	destList = ['GSMExt.O2', 'GSMExt.Voda', 'GSMExt.Eplus', 'GSMExt.Tm']
	callList = ['sip']

	doTest = initTestClass.doTest()
	
	for callFrom in callList:
		for callTo in destList:
			doTest.initTest(callFrom,callTo)
			resultsList.append([callFrom, callTo, doTest.result])
	initTrueTable(resultsList)

def doAllTest():

	doSipTest()
	doLandlineTest()
	doGsmrzTest()
	doGsmExtTest()

def regularTest():
	regulartest = initTestClass.doTest()
	regulartest.smartTest()
	initTrueTable(regulartest.smartResultList)

def findPort(portName):
	global connect
	global prefix
	global num
	global IMEI
	global portClass
	sleep(0.5)
	portLog = os.popen('dmesg | grep \'pl2303 converter now attached to '+portName+'\'').read()
	sleep(0.5)
	if portLog != '':
		connect = 1
		portClass = usbDetectClass.serialPort(portName)
		portClass.findNumber()
		portClass.findIMEI()
		IMEI = portClass.IMEI
		num = portClass.number
		number = portClass.number
		prefix = number[0:4]
	else:
		connect = 0

def initDevice(deviceName):
	print 'Device Name	:',deviceName 
	print ' Device IMEI	: ',
	imei = sys.stdin.readline().rstrip("\r\n")
	print 'Phone number	: ',
	number = sys.stdin.readline().rstrip("\r\n")
	print 'Port Name	: /dev/',
	portName = sys.stdin.readline().rstrip("\r\n")
	print ''
	
	if deviceName == 'GSMRZ2' or deviceName == 'GSMRZ2':
		if number =='':
			print ' == cant save device configuration, number missing =='
		else:
			portClass.initUpdate(deviceName, portName, number)
	else:
		if imei == '' or portName == '':
			print ' == cant save device configuration, please fill IMEI / port name of the device =='
		else:
			findPort(portName)
			if connect == 1:
				if str(IMEI) != str(imei) and str(num) != str(number):
					print '== error, device not found =='
				elif str(IMEI) == str(imei):
					portClass.initUpdate(deviceName, portName, number)
					print '== Device succeced added =='
				elif str(num) == str(number) and str(IMEI) != str(imei):
					portClass.initUpdate(deviceName, portName, number)
					print '== Device succeced added, but have different IMEI =='
			else:
				print '== error, no device connected =='
	

def updateDevice():
	quit = False
    	while quit != True:
		print ''
        	print "Mobile device configuration"
        	print "Menu:  s = automatic device configuration, m = Manual configuration, q = quit : ",	
        	input = sys.stdin.readline().rstrip("\r\n")
		print ''
		if input == 'm':
			
			while True:
				print ''
        			print "Mobile device name: "
				print " 1. GSM O2"
				print " 2. GSM Vodafone"
				print " 3. GSM Eplus"
				print " 4. GSM T-Mobile"
				print " 5. GSM RZ 1"
				print " 6. GSM RZ 2"
				print " 7. GSM RZ 3"
				print " 8. Back to menu"
				print ""
        			print "you choise : ",	
        			input = sys.stdin.readline().rstrip("\r\n")

				if input == '8':
					break
				elif input == '1':
					initDevice('GSMExt.O2')
				elif input == '2':
					initDevice('GSMExt.Voda')
				elif input == '3':
					initDevice('GSMExt.Eplus')
				elif input == '4':
					initDevice('GSMExt.Tm')
				elif input == '5':
					initDevice('GSMRZ1')
				elif input == '6':
					initDevice('GSMRZ2')
				elif input == '7':
					initDevice('GSMRZ3')
				else:
					print 'please choose between 1-8'
		if input == 's':
			i = 0
			x = 0
			while i !=10:
				portName ='ttyUSB'+str(i)
				findPort(portName)
				i=i+1
				if connect == 1:
					for listNum in GSMListPrefix:
						if prefix == listNum[1]:
							print 'Device Name	:',listNum[0]
							print 'IMEI		:',IMEI
							print 'Phone Number	:',num
							print 'Port Name	: /dev/'+portName
							x=x+1
							newPortName = '/dev/'+portName
							portClass.initUpdate(listNum[0], newPortName, num)
							print '\n'
				
			print '== FINISH =='
			print 'Found '+str(x)+' devices'

		if input == "q":
			break
	sys.exit()


def closeFunction(dbConn,serverSocket):
        print 'Release the mutex: ' + str(dbConn.releaseMutex())
        print 'Close the DB Connection: ' + str(dbConn.closeDBConn())
        del dbConn
        del serverSocket
        sys.exit()


initDB()
resultsList = list()
if dbStatus == 1:
	server = ServerClassSoftware.ServerHandlerSoftware(34500) #define the port
	tried = server.openSocket(3)

	if tried == 'TIMEOUT':
	        closeFunction(db,server)
	
	test = server.receiveData(2)
	if test == 'TIMEOUT':
        	closeFunction(db,server)

	print test
	if test == 'START TEST':
        	server.sendData('CONFIRM\n')
        	print 'TEST STARTED'
	else:
		sys.exit('WE DIDN\'T RECEIVE THE CONFIRMATION')

#	updateDevice()
	if db.anyTasksToDo() == 1:
		#allPing()
		i=0
		makeTest = initTestClass.doTest()
		for item in db.tasksList:

			taskID = item[0]
			taskNo = item[1]
			callFrom = item[2]
			callTo = item[3]
				
			#if i == 0:
				#db.updatePingResult(taskNo, sipServer, sipGate, unisip, gsmBox1, gsmBox2)
			print '\n'
			print 'Task ID		:', taskID
			print 'Calling From	:', callFrom
			print 'To		:', callTo
			

                       	makeTest.initTest(callFrom,callTo)
				
			db.addResult(taskID, makeTest.result)

			resultsList.append([callFrom, callTo, makeTest.result])
						
			db.errorCode(makeTest.result)
			print 'Result		: ' +str(makeTest.result)+ ' ' +str(db.errCode)
			
			message = '|' + str(callFrom) + '|' + str(callTo) + '|' + str(makeTest.result) + '|' + str(db.errCode)

			if server.sendData(message+ chr(10))  == 1:
                		print 'data sent successfully'
			test = server.receiveData(2)
		        if test == 'TIMEOUT':
                		closeFunction(db,server)
        		print test
		        if test == 'CONTINUE':
		              print 'continue test'

				
	
			db.deleteTempTask(taskID)
			i = i+1
		db.cleanTasksList()
            		
            	if server.connected == 1:
        		server.sendData('TEST DONE\n')
		test = server.receiveData(2)
		if test == 'TIMEOUT':
		        closeFunction(db,server)

		if test == 'DISCONNECT':
        		close = server.closeConnection()
        	if close == 1:
                	print 'Closed connection successfully'

		print 'release mutex says ', db.releaseMutex()
	
		print '\n'
		#initTrueTable(resultsList)	# fetch result list and make adjustment about the result
	else:
		print "--- No job at all ---"

print db.closeDBConn()

del db
del server