def checkinstructionlist(instructionlist,
                         startpositions=[
                             shimon.arm.positiontable[0],
                             shimon.arm.positiontable[2],
                             shimon.arm.positiontable[-4],
                             shimon.arm.positiontable[-2]
                         ],
                         strikercommands=None,
                         midifilename=None,
                         infofilename='info.log',
                         warningfilename='warning.log'):
    # Open log output
    log.open(infofilename, warningfilename)

    # Arm initialization
    instructionlist = sorted(instructionlist, key=lambda x: x[0])
    totaltime = instructionlist[-1][0] + 2000
    arms = [
        shimon.arm.Arm(1, startpositions[0]),
        shimon.arm.Arm(2, startpositions[1]),
        shimon.arm.Arm(3, startpositions[2]),
        shimon.arm.Arm(4, startpositions[3])
    ]
    for instruction in instructionlist:
        arms[instruction[1] - 1].instructionqueue.append(instruction)

    # Striker initialization
    strikers = []
    numberofnotes = 0
    notelist = []
    offset = 0
    if strikercommands is not None and len(strikercommands) > 0:
        strikercommands = sorted(strikercommands, key=lambda x: x[0])
        for i in range(8):
            strikers.append(shimon.striker.Striker(i + 1))
        strikermaxtime = int(strikercommands[-1][0]) + 2000
        if totaltime < strikermaxtime:
            totaltime = strikermaxtime
        for strikercommand in strikercommands:
            for i in range(8):
                if strikercommand[i + 1] == 1:
                    strikers[i].instructionqueue.append(strikercommand[0])
        if midifilename is not None:
            numberofnotes, notelist = checkmidi.readnotes(midifilename)
            offset = checkmidi.findstaticoffset(strikercommands[0][0] + 85,
                                                notelist)
            log.info(f'Static offset: {offset}')

    success, hitnotes = cycle.run(arms, strikers, strikercommands, 0,
                                  totaltime, numberofnotes, notelist, offset,
                                  midifilename)
    if success:
        log.info('Simulation successful')
    log.close()
예제 #2
0
def initialize(instructionlist,
               startpositions=[
                   shimon.arm.positiontable[0], shimon.arm.positiontable[2],
                   shimon.arm.positiontable[-4], shimon.arm.positiontable[-2]
               ],
               strikercommands=None,
               midifilename=None,
               infofilename='guiinfo.log',
               warningfilename='guiwarning.log'):
    # Open log output
    log.open(infofilename, warningfilename)

    # Arm initialization
    instructionlist = sorted(instructionlist, key=lambda x: x[0])
    gui.totaltime = instructionlist[-1][0] + 2000
    gui.arms = [
        shimon.arm.Arm(1, startpositions[0]),
        shimon.arm.Arm(2, startpositions[1]),
        shimon.arm.Arm(3, startpositions[2]),
        shimon.arm.Arm(4, startpositions[3])
    ]
    for instruction in instructionlist:
        gui.arms[instruction[1] - 1].instructionqueue.append(instruction)

    # Striker initialization
    for i in range(8):
        gui.strikers.append(shimon.striker.Striker(i + 1))
    if strikercommands is not None and len(strikercommands) > 0:
        strikercommands = sorted(strikercommands, key=lambda x: x[0])
        gui.strikercommands = strikercommands
        strikermaxtime = int(strikercommands[-1][0]) + 2000
        if gui.totaltime < strikermaxtime:
            gui.totaltime = strikermaxtime
        for strikercommand in strikercommands:
            for i in range(8):
                if strikercommand[i + 1] == 1:
                    gui.strikers[i].instructionqueue.append(strikercommand[0])
        if midifilename is not None:
            gui.numberofnotes, gui.notelist = checkmidi.readnotes(midifilename)
            gui.offset = checkmidi.findstaticoffset(strikercommands[0][0] + 85,
                                                    gui.notelist)
            print('Static offset:', gui.offset, file=sys.stderr)
            gui.midifilename = midifilename
예제 #3
0
def runCaseFromGroup(case, nodesList, logPath):
  caseName, connParameters, variables = case
  variables = misc.cdicts(env.getVariables(), variables)
  logName = '%s.txt' % caseName

  nodeNames = [node.getName() for nPar, node in nodesList]
  nodes.setStatus(nodeNames, '%s: running %s' % (misc.testSuiteName, caseName))

  nodeList = []
  taken = [False] * len(nodesList)
  for conn, cPar in connParameters.iteritems():
    for i in range(len(nodesList)):
      nPar, node = nodesList[i]
      if cPar == nPar and not taken[i]:
        taken[i] = True
        variables[conn] = node.getConnection()
        nodeList += [node]
        time.sleep(0.5)
        variables[conn].clear()
        break

  if len(nodeList) != len(connParameters):
    log.error('%s: not executed due to upload failure' % caseName, log = 'suite')
    return False

  nodes.restart(nodeList)
  #time.sleep(5)

  #LogFactory.dropPrefix('system')
  caseLogName = os.path.join(logPath, logName)
  log.open(caseLogName, enableConsole = False)

  # Write case parameters to log
  try:
    info = scriptInfo.getScriptInfo(misc.expandPath(caseName))
    descr = info['description'][0]
  except scriptInfo.GetScriptInfoError, exception:
    descr = '*** no description available ***'
예제 #4
0
파일: plugin.py 프로젝트: OpenESI/Wetek-ESI
	def __init__(self, session, feid):
		self.session = session
		Screen.__init__(self, session)
		self.feid = feid
		self.oldref = None
		log.open(self.LOG_SIZE)
		if config.Nims[self.feid].configMode.value == 'advanced':
			self.advanced = True
			self.advancedconfig = config.Nims[self.feid].advanced
			self.advancedsats = self.advancedconfig.sat
			self.availablesats = map(lambda x: x[0], nimmanager.getRotorSatListForNim(self.feid))
		else:
			self.advanced = False

		cur = { }
		if not self.openFrontend():
			self.oldref = session.nav.getCurrentlyPlayingServiceReference()
			service = session.nav.getCurrentService()
			feInfo = service and service.frontendInfo()
			if feInfo:
				cur = feInfo.getTransponderData(True)
			del feInfo
			del service
			session.nav.stopService() # try to disable foreground service
			if not self.openFrontend():
				if session.pipshown: # try to disable pip
					service = self.session.pip.pipservice
					feInfo = service and service.frontendInfo()
					if feInfo:
						cur = feInfo.getTransponderData(True)
					del feInfo
					del service
					from Screens.InfoBar import InfoBar
					InfoBar.instance and hasattr(InfoBar.instance, "showPiP") and InfoBar.instance.showPiP()
				if not self.openFrontend():
					self.frontend = None # in normal case this should not happen
					if hasattr(self, 'raw_channel'):
						del self.raw_channel

		self.frontendStatus = { }
		self.diseqc = Diseqc(self.frontend)
		# True means we dont like that the normal sec stuff sends commands to the rotor!
		self.tuner = Tuner(self.frontend, ignore_rotor = True)

		tp = ( cur.get("frequency", 0) / 1000,
			cur.get("symbol_rate", 0) / 1000,
			cur.get("polarization", eDVBFrontendParametersSatellite.Polarisation_Horizontal),
			cur.get("fec_inner", eDVBFrontendParametersSatellite.FEC_Auto),
			cur.get("inversion", eDVBFrontendParametersSatellite.Inversion_Unknown),
			cur.get("orbital_position", 0),
			cur.get("system", eDVBFrontendParametersSatellite.System_DVB_S),
			cur.get("modulation", eDVBFrontendParametersSatellite.Modulation_QPSK),
			cur.get("rolloff", eDVBFrontendParametersSatellite.RollOff_alpha_0_35),
			cur.get("pilot", eDVBFrontendParametersSatellite.Pilot_Unknown))

		self.tuner.tune(tp)
		self.isMoving = False
		self.stopOnLock = False

		self.red = Button("")
		self["key_red"] = self.red
		self.green = Button("")
		self["key_green"] = self.green
		self.yellow = Button("")
		self["key_yellow"] = self.yellow
		self.blue = Button("")
		self["key_blue"] = self.blue

		self.list = []
		self["list"] = ConfigList(self.list)

		self["snr_db"] = TunerInfo(TunerInfo.SNR_DB, statusDict = self.frontendStatus)
		self["snr_percentage"] = TunerInfo(TunerInfo.SNR_PERCENTAGE, statusDict = self.frontendStatus)
		self["ber_value"] = TunerInfo(TunerInfo.BER_VALUE, statusDict = self.frontendStatus)
		self["snr_bar"] = TunerInfo(TunerInfo.SNR_BAR, statusDict = self.frontendStatus)
		self["ber_bar"] = TunerInfo(TunerInfo.BER_BAR, statusDict = self.frontendStatus)
		self["lock_state"] = TunerInfo(TunerInfo.LOCK_STATE, statusDict = self.frontendStatus)

		self["frequency_value"] = Label("")
		self["symbolrate_value"] = Label("")
		self["fec_value"] = Label("")
		self["polarisation"] = Label("")
		self["status_bar"] = Label("")
		self.statusMsgTimeoutTicks = 0
		self.statusMsgBlinking = False
		self.statusMsgBlinkCount = 0
		self.statusMsgBlinkRate = 500 / self.UPDATE_INTERVAL	# milliseconds
		self.tuningChangedTo(tp)

		self["actions"] = NumberActionMap(["DirectionActions", "OkCancelActions", "ColorActions", "TimerEditActions", "InputActions"],
		{
			"ok": self.keyOK,
			"cancel": self.keyCancel,
			"up": self.keyUp,
			"down": self.keyDown,
			"left": self.keyLeft,
			"right": self.keyRight,
			"red": self.redKey,
			"green": self.greenKey,
			"yellow": self.yellowKey,
			"blue": self.blueKey,
			"log": self.showLog,
			"1": self.keyNumberGlobal,
			"2": self.keyNumberGlobal,
			"3": self.keyNumberGlobal,
			"4": self.keyNumberGlobal,
			"5": self.keyNumberGlobal,
			"6": self.keyNumberGlobal,
			"7": self.keyNumberGlobal,
			"8": self.keyNumberGlobal,
			"9": self.keyNumberGlobal,
			"0": self.keyNumberGlobal
		}, -1)

		self.updateColors("tune")

		self.statusTimer = eTimer()
		self.statusTimer.callback.append(self.updateStatus)
		self.collectingStatistics = False
		self.statusTimer.start(self.UPDATE_INTERVAL, True)
		self.dataAvailable = Event()
		self.onClose.append(self.__onClose)

		self.createConfig()
		self.createSetup()
예제 #5
0
	def __init__(self, session, feid):
		self.session = session
		Screen.__init__(self, session)
		self.feid = feid
		self.oldref = None
		log.open(self.LOG_SIZE)
		if config.Nims[self.feid].configMode.value == 'advanced':
			self.advanced = True
			self.advancedconfig = config.Nims[self.feid].advanced
			self.advancedsats = self.advancedconfig.sat
			self.availablesats = map(lambda x: x[0], nimmanager.getRotorSatListForNim(self.feid))
		else:
			self.advanced = False

		cur = { }
		if not self.openFrontend():
			self.oldref = session.nav.getCurrentlyPlayingServiceReference()
			service = session.nav.getCurrentService()
			feInfo = service and service.frontendInfo()
			if feInfo:
				cur = feInfo.getTransponderData(True)
			del feInfo
			del service
			session.nav.stopService() # try to disable foreground service
			if not self.openFrontend():
				if session.pipshown: # try to disable pip
					service = self.session.pip.pipservice
					feInfo = service and service.frontendInfo()
					if feInfo:
						cur = feInfo.getTransponderData(True)
					del feInfo
					del service
					from Screens.InfoBar import InfoBar
					InfoBar.instance and hasattr(InfoBar.instance, "showPiP") and InfoBar.instance.showPiP()
				if not self.openFrontend():
					self.frontend = None # in normal case this should not happen
					if hasattr(self, 'raw_channel'):
						del self.raw_channel

		self.frontendStatus = { }
		self.diseqc = Diseqc(self.frontend)
		# True means we dont like that the normal sec stuff sends commands to the rotor!
		self.tuner = Tuner(self.frontend, ignore_rotor = True)

		tp = ( cur.get("frequency", 0) / 1000,
			cur.get("symbol_rate", 0) / 1000,
			cur.get("polarization", eDVBFrontendParametersSatellite.Polarisation_Horizontal),
			cur.get("fec_inner", eDVBFrontendParametersSatellite.FEC_Auto),
			cur.get("inversion", eDVBFrontendParametersSatellite.Inversion_Unknown),
			cur.get("orbital_position", 0),
			cur.get("system", eDVBFrontendParametersSatellite.System_DVB_S),
			cur.get("modulation", eDVBFrontendParametersSatellite.Modulation_QPSK),
			cur.get("rolloff", eDVBFrontendParametersSatellite.RollOff_alpha_0_35),
			cur.get("pilot", eDVBFrontendParametersSatellite.Pilot_Unknown))

		self.tuner.tune(tp)
		self.isMoving = False
		self.stopOnLock = False

		self.red = Button("")
		self["key_red"] = self.red
		self.green = Button("")
		self["key_green"] = self.green
		self.yellow = Button("")
		self["key_yellow"] = self.yellow
		self.blue = Button("")
		self["key_blue"] = self.blue

		self.list = []
		self["list"] = ConfigList(self.list)

		self["snr_db"] = TunerInfo(TunerInfo.SNR_DB, statusDict = self.frontendStatus)
		self["snr_percentage"] = TunerInfo(TunerInfo.SNR_PERCENTAGE, statusDict = self.frontendStatus)
		self["ber_value"] = TunerInfo(TunerInfo.BER_VALUE, statusDict = self.frontendStatus)
		self["snr_bar"] = TunerInfo(TunerInfo.SNR_BAR, statusDict = self.frontendStatus)
		self["ber_bar"] = TunerInfo(TunerInfo.BER_BAR, statusDict = self.frontendStatus)
		self["lock_state"] = TunerInfo(TunerInfo.LOCK_STATE, statusDict = self.frontendStatus)

		self["frequency_value"] = Label("")
		self["symbolrate_value"] = Label("")
		self["fec_value"] = Label("")
		self["polarisation"] = Label("")
		self["status_bar"] = Label("")
		self.statusMsgTimeoutTicks = 0
		self.statusMsgBlinking = False
		self.statusMsgBlinkCount = 0
		self.statusMsgBlinkRate = 500 / self.UPDATE_INTERVAL	# milliseconds
		self.tuningChangedTo(tp)

		self["actions"] = NumberActionMap(["DirectionActions", "OkCancelActions", "ColorActions", "TimerEditActions", "InputActions"],
		{
			"ok": self.keyOK,
			"cancel": self.keyCancel,
			"up": self.keyUp,
			"down": self.keyDown,
			"left": self.keyLeft,
			"right": self.keyRight,
			"red": self.redKey,
			"green": self.greenKey,
			"yellow": self.yellowKey,
			"blue": self.blueKey,
			"log": self.showLog,
			"1": self.keyNumberGlobal,
			"2": self.keyNumberGlobal,
			"3": self.keyNumberGlobal,
			"4": self.keyNumberGlobal,
			"5": self.keyNumberGlobal,
			"6": self.keyNumberGlobal,
			"7": self.keyNumberGlobal,
			"8": self.keyNumberGlobal,
			"9": self.keyNumberGlobal,
			"0": self.keyNumberGlobal
		}, -1)

		self.updateColors("tune")

		self.statusTimer = eTimer()
		self.statusTimer.callback.append(self.updateStatus)
		self.collectingStatistics = False
		self.statusTimer.start(self.UPDATE_INTERVAL, True)
		self.dataAvailable = Event()
		self.onClose.append(self.__onClose)

		self.createConfig()
		self.createSetup()
예제 #6
0
파일: run.py 프로젝트: myw2s/Python-scripts
def runTestScript(name):
  # Open the system logger explicitely to prevent direct console messages
  log.open(None, log = 'system', enableConsole = False)
  
  # Open the tester and test case loggers
  log.open(None, log = 'tester', enableConsole = False)
  log.open(None, log = 'testcase', enableConsole = False)
  
  log.write("Running test script " + name, log = 'tester')
  
  misc.__stateManager=__stateManager
  misc.__nodeFactory=__nodeFactory
  server = env.getValue('resourceManagerServer')
  if server:
    factory=WSNServicesFactories.get('com.atmel.wsnrunner.testwsn.TestWSNClientFactory')
    WSNClientObj = factory.create()
    misc.__client = WSNClientObj.create(server)
    if not misc.__client:
      log.error('Can not connect to resource manager server', log = 'tester')
      return
  else:
    misc.__client = None

  if misc.__client:
    misc.__user = env.getValue('user')
    if not misc.__user:
      log.error('Can not determine user name to use', log = 'tester')
      misc.__client.close()
      return

    misc.__password = env.getValue('password')
    if not misc.__password:
      misc.__password=misc.__user

    misc.__sessionId = env.getValue('sessionId')
    if not misc.__sessionId:
      misc.__sessionId=-1

    misc.__client.authenticate(misc.__user,misc.__password,misc.__sessionId)


  commandMode = name == '-i'

  while True:
    if commandMode:
      name = raw_input('\n> ')
      if name == '':
        break

    fullName = misc.expandPath(name)
    if fullName is None:
      log.error('File not found: %s' % name, log = 'tester')
      if commandMode:
        continue
      else:
        break

    try:
      h = {
        'sampleapptest': handlers.h_sampleapptest,
        'sampleapp'    : handlers.h_sampleapp,
        'testcase'     : handlers.h_testcase,
        'testsuite'    : handlers.h_testsuite,
        'function'     : handlers.h_function,
        'rawfile'      : handlers.h_rawfile,
      }

      info = scriptInfo.getScriptInfo(fullName)
      h[info['type']](name, info)

    except scriptInfo.GetScriptInfoError, exception:
      log.error(str(exception), log = 'tester')

    except exc.TestFailed, exception:
      logName = exception.getLogger()
      if logName is None:
        logName = 'tester'
        
      if exception.getMessage() is None:
        tb = traceback.extract_tb(sys.exc_info()[2])
        log.error(misc.formatFailMsg(tb[-2]), log = logName)
      else:
        log.error(str(exception), log = logName)
예제 #7
0
def openLog(fileName, logName = 'testcase', enableConsole=False):
  log.open(fileName, logName, enableConsole)
예제 #8
0
def runTestCases(caseList):
  t0 = time.time()
  
  logPath = env.getValue('logPath')
  if logPath is None:
    logPath = '.'

  logName = env.getValue('logName')
  if logName:
    logName = os.path.join(logPath, logName)
  else:
    logName = os.path.join(logPath, '%s_%s' % (misc.testSuiteName, misc.getTimeStr()))

  if not misc.makeDirs(logName):
    return

  misc.removeFile(logName + '.txt')
  log.open(logName + '.txt', log = 'suite', enableConsole = False)

  nodeList = env.getNodeList(10000, respectLimit = True) # Get as many as we can
  nodesAvail = len(nodeList)

  nodes.setStatus(nodeList, '%s: preparing' % misc.testSuiteName)

  result = {True: 0, False: 0}

  # Extract all required info from cases and build all images
  extList = expandCaseList(caseList, nodesAvail)
  cache.init()
  
  t1 = time.time()
#  buildImagesForTestSuite(extList)
  buildTime = time.time() - t1
  cache.sync()

  # Remove cases without all required images built
  workList = []
  fullSet = []
  for caseName, connParameters, variables in extList:
    workList += [(caseName, connParameters, variables)]
    fullSet = misc.clists([fullSet, [par for conn, par in connParameters.iteritems()]])

  nodesNeeded = len(fullSet)

  if nodesAvail < nodesNeeded:
    log.write('Info: for maximum performance %d nodes required (%d nodes available)' %
      (nodesNeeded, nodesAvail), log = 'suite')
  else:
    log.write('Info: %d nodes will be used' % nodesNeeded, log = 'suite')
    nodesAvail = nodesNeeded
  
  # Group all scripts to optimize upload strategy
  groups = groupCases(workList, nodesAvail)
  log.write('Info: %d uploads will be performed' % len(groups), log = 'suite')
  
  
  # Upload and execute scripts
  nodeList = nodeList[:nodesAvail]
  allNodes = []
  log.write('Test will use next nodes:', log = 'suite')
  for node in nodeList:
    log.write('  %s' % node, log = 'suite')
    allNodes += [misc.__nodeFactory.create(node)]

  #for node in allNodes:
  #  node.getConnection().setTesterMode(misc.runOn['tester'])

  testCaseExecTimes = []
  uploadTimes = []
  nodes.restart(allNodes, leaveOff = True)
  groupNo = 1

  for group in groups:
    log.write('Running group %d of %d' % (groupNo, len(groups)), log = 'suite')
    t2 = time.time()
    usedNodes = uploadNodesFromGroup(allNodes, workList, group)
    uploadTimes.append(time.time() - t2)
    time.sleep(1)
    for index in group:
      t3 = time.time()
      ret = runCaseFromGroup(workList[index], usedNodes, logName)
      testCaseExecTimes.append(time.time() - t3)
      result[ret] += 1
    groupNo += 1

  if len(uploadTimes):
    meanUploadTime = sum(uploadTimes) / len(uploadTimes)
  else:
    meanUploadTime = 0

  if len(testCaseExecTimes):
    meanTestcaseExecTime = sum(testCaseExecTimes) / len(testCaseExecTimes)
  else:
    meanTestcaseExecTime = 0

  totalTime = time.time() - t0
  
  log.write('Test finished: %d passed, %d failed' % (result[True], result[False]), log = 'suite')
  log.write('Execution time statistics', log = 'suite')
  log.write('Build images time: %d sec' % buildTime, log = 'suite')
  log.write('Total upload time: %d sec' % sum(uploadTimes), log = 'suite')
  log.write('Mean group upload time: %d sec' % meanUploadTime, log = 'suite')
  log.write('Testcases execution time: %d sec' % sum(testCaseExecTimes), log = 'suite')
  log.write('Mean testcase execution time: %d sec' % meanTestcaseExecTime, log = 'suite')
  log.write('Total execution time: %d sec' % totalTime, log = 'suite')

  # Remove all temporary files, save cache
  cache.cleanup()