blob: d1a844829a9ed7b8432d68c9b654268a7d219829 [file] [log] [blame]
"""
Start CLI for CHOTestMonkey
Author: you@onlab.us
"""
from multiprocessing.connection import Client
commandMap = {}
paramNum = {}
def triggerEvent( debugMode, name, scheduleMethod, args ):
"""
This function inserts an event from CLI to CHOTestMonkey
"""
host = "localhost"
port = 6000
address = ( host, port )
conn = Client( address )
request = []
if debugMode:
request.append( 2 )
else:
request.append( 1 )
request.append( name )
request.append( scheduleMethod )
for arg in args:
request.append( arg )
conn.send( request )
response = conn.recv()
return response
def startCLI():
debugMode = False
while 1:
try:
if debugMode:
cmd = raw_input("CHOTestMonkey-debug>")
else:
cmd = raw_input("CHOTestMonkey>")
except EOFError:
print "exit"
return
except Exception:
print "Uncaught exception!"
return
if cmd == 'help':
print 'Supported commands:'
print 'help'
print 'debug'
print 'exit'
for command in commandMap.keys():
print command
elif cmd == '':
pass
elif cmd == 'debug':
debugMode = True
elif cmd == 'exit':
if debugMode:
debugMode = False
else:
return
else:
cmdList = cmd.split( ' ' )
if cmdList[ 0 ] in commandMap.keys():
num = paramNum[ cmdList[ 0 ] ]
name = commandMap[ cmdList[ 0 ] ]
if len( cmdList ) < num + 1:
print 'not enough arguments'
elif len( cmdList ) > num + 1:
print 'Too many arguments'
else:
result = triggerEvent( debugMode, name, 'RUN_BLOCK', cmdList[ 1: ] )
if result == 10:
pass
elif result == 11:
print "Scheduler busy...Try later or use debugging mode by entering \'debug\'"
elif result == 20:
print "Unknown message to server"
elif result == 21:
print "Unknown event type to server"
elif result == 22:
print "Unknown schedule method to server"
elif result == 23:
print "Not enough argument"
else:
print "Unknown response from server"
else:
print 'Unknown command'
if __name__ == '__main__':
import xml.etree.ElementTree
try:
root = xml.etree.ElementTree.parse( '../CHOTestMonkey.params' ).getroot()
except Exception:
print "Uncaught exception!"
for child in root:
if child.tag == 'EVENT':
for event in child:
for item in event:
if item.tag == 'CLI':
CLI = str( item.text )
if item.tag == 'typeString':
name = str( item.text )
if item.tag == 'CLIParamNum':
num = int( item.text )
commandMap[ CLI ] = name
paramNum[ CLI ] = num
startCLI()