def checkNonexistingCommands(scpiObj): _printHeader("Testing to query commands that doesn't exist") try: baseCmd = _randomchoice(['SOURce', 'BASIcloop', 'ITERative']) subCmd = _randomchoice(['CURRent', 'VOLTage']) attr = _randomchoice(['UPPEr', 'LOWEr', 'VALUe']) fake = "FAKE" # * first level doesn't exist start_t = _time() cmd = "%s:%s:%s?" % (fake, subCmd, attr) answer = _send2Input(scpiObj, cmd) print("\tRequest non-existing command %s\n\tAnswer: %r (%g ms)" % (cmd, answer, (_time() - start_t) * 1000)) # * intermediate level doesn't exist cmd = "%s:%s:%s?" % (baseCmd, fake, attr) answer = _send2Input(scpiObj, cmd) print("\tRequest non-existing command %s\n\tAnswer: %r (%g ms)" % (cmd, answer, (_time() - start_t) * 1000)) # * Attribute level doesn't exist cmd = "%s:%s:%s?" % (baseCmd, subCmd, fake) answer = _send2Input(scpiObj, cmd) print("\tRequest non-existing command %s\n\tAnswer: %r (%g ms)" % (cmd, answer, (_time() - start_t) * 1000)) # * Attribute that doesn't respond cmd = 'source:voltage:exception' answer = _send2Input(scpiObj, cmd) print("\tRequest existing command but that it raises an exception %s" "\n\tAnswer: %r (%g ms)" % (cmd, answer, (_time() - start_t) * 1000)) # * Unexisting Channel baseCmd = "CHANnel%s" % (str(nChannels + 3).zfill(2)) cmd = "%s:%s:%s?" % (baseCmd, subCmd, fake) answer = _send2Input(scpiObj, cmd) print("\tRequest non-existing channel %s\n\tAnswer: %r (%g ms)" % (cmd, answer, (_time() - start_t) * 1000)) # * Channel below the minimum reference cmd = "CHANnel00:VOLTage:UPPEr?" answer = _send2Input(scpiObj, cmd) print("\tRequest non-existing channel %s\n\tAnswer: %r (%g ms)" % (cmd, answer, (_time() - start_t) * 1000)) # * Channel above the maximum reference cmd = "CHANnel99:VOLTage:UPPEr?" answer = _send2Input(scpiObj, cmd) print("\tRequest non-existing channel %s\n\tAnswer: %r (%g ms)" % (cmd, answer, (_time() - start_t) * 1000)) result = True, "Non-existing commands test PASSED" except Exception as e: print("\tUnexpected kind of exception! %s" % e) print_exc() result = False, "Non-existing commands test FAILED" _printFooter(result[1]) return result
def checkNonexistingCommands(scpiObj): _printHeader("Testing to query commands that doesn't exist") try: baseCmd = _randomchoice(['SOURce', 'BASIcloop', 'ITERative']) subCmd = _randomchoice(['CURRent', 'VOLTage']) attr = _randomchoice(['UPPEr', 'LOWEr', 'VALUe']) fake = "FAKE" # * first level doesn't exist start_t = _time() cmd = "%s:%s:%s?" % (fake, subCmd, attr) answer = _send2Input(scpiObj, cmd) print("\tRequest non-existing command %s\n\tAnswer: %r (%g ms)" % (cmd, answer, (_time()-start_t)*1000)) # * intermediate level doesn't exist cmd = "%s:%s:%s?" % (baseCmd, fake, attr) answer = _send2Input(scpiObj, cmd) print("\tRequest non-existing command %s\n\tAnswer: %r (%g ms)" % (cmd, answer, (_time()-start_t)*1000)) # * Attribute level doesn't exist cmd = "%s:%s:%s?" % (baseCmd, subCmd, fake) answer = _send2Input(scpiObj, cmd) print("\tRequest non-existing command %s\n\tAnswer: %r (%g ms)" % (cmd, answer, (_time()-start_t)*1000)) # * Attribute that doesn't respond cmd = 'source:voltage:exception' answer = _send2Input(scpiObj, cmd) print("\tRequest existing command but that it raises an exception %s" "\n\tAnswer: %r (%g ms)" % (cmd, answer, (_time()-start_t)*1000)) # * Unexisting Channel baseCmd = "CHANnel%s" % (str(nChannels+3).zfill(2)) cmd = "%s:%s:%s?" % (baseCmd, subCmd, fake) answer = _send2Input(scpiObj, cmd) print("\tRequest non-existing channel %s\n\tAnswer: %r (%g ms)" % (cmd, answer, (_time()-start_t)*1000)) # * Channel below the minimum reference cmd = "CHANnel00:VOLTage:UPPEr?" answer = _send2Input(scpiObj, cmd) print("\tRequest non-existing channel %s\n\tAnswer: %r (%g ms)" % (cmd, answer, (_time()-start_t)*1000)) # * Channel above the maximum reference cmd = "CHANnel99:VOLTage:UPPEr?" answer = _send2Input(scpiObj, cmd) print("\tRequest non-existing channel %s\n\tAnswer: %r (%g ms)" % (cmd, answer, (_time()-start_t)*1000)) result = True, "Non-existing commands test PASSED" except Exception as e: print("\tUnexpected kind of exception! %s" % e) print_exc() result = False, "Non-existing commands test FAILED" _printFooter(result[1]) return result
def _buildCommand2Test(): baseCmds = ['SOURce', 'BASIcloop', 'ITERative', 'CHANnel'] subCmds = ['CURRent', 'VOLTage'] attrs = ['UPPEr', 'LOWEr', 'VALUe'] baseCmd = _randomchoice(baseCmds) if baseCmd in ['CHANnel']: baseCmd = "%s%s" % (baseCmd, str(_randint(1, nChannels)).zfill(2)) if _randint(0, 1): baseCmd = "%s:MEAS:FUNC%s" % ( baseCmd, str(_randint(1, nSubchannels)).zfill(2)) subCmd = _randomchoice(subCmds) if baseCmd in ['SOURce']: attr = _randomchoice(attrs + ['BUFFer']) else: attr = _randomchoice(attrs) return "%s:%s:%s?" % (baseCmd, subCmd, attr)
def checkCommandQueries(scpiObj): _printHeader("Testing to command queries") try: print("Launch tests:") cmd = "*IDN?" answer = _send2Input(scpiObj, cmd) print("\tInstrument identification (%s)\n\tAnswer: %s" % (cmd, answer)) for baseCmd in ['SOURce', 'BASIcloop', 'ITERative']: _printHeader("Check %s part of the tree" % (baseCmd)) _doCheckCommands(scpiObj, baseCmd) for ch in range(1, nChannels + 1): baseCmd = "CHANnel%s" % (str(ch).zfill(2)) _printHeader("Check %s part of the tree" % (baseCmd)) _doCheckCommands(scpiObj, baseCmd) fn = _randomchoice(range(1, nSubchannels + 1)) innerCmd = "FUNCtion%s" % (str(fn).zfill(2)) _printHeader("Check %s + MEAS:%s part of the tree" % (baseCmd, innerCmd)) _doCheckCommands(scpiObj, baseCmd, innerCmd) result = True, "Command queries test PASSED" except Exception as e: print("\tUnexpected kind of exception! %s" % e) print_exc() result = False, "Command queries test FAILED" _printFooter(result[1]) return result
def checkCommandQueries(scpiObj): _printHeader("Testing to command queries") try: print("Launch tests:") cmd = "*IDN?" answer = _send2Input(scpiObj, cmd) print("\tInstrument identification (%s)\n\tAnswer: %s" % (cmd, answer)) for baseCmd in ['SOURce', 'BASIcloop', 'ITERative']: _printHeader("Check %s part of the tree" % (baseCmd)) _doCheckCommands(scpiObj, baseCmd) for ch in range(1, nChannels+1): baseCmd = "CHANnel%s" % (str(ch).zfill(2)) _printHeader("Check %s part of the tree" % (baseCmd)) _doCheckCommands(scpiObj, baseCmd) fn = _randomchoice(range(1, nSubchannels+1)) innerCmd = "FUNCtion%s" % (str(fn).zfill(2)) _printHeader("Check %s + MEAS:%s part of the tree" % (baseCmd, innerCmd)) _doCheckCommands(scpiObj, baseCmd, innerCmd) result = True, "Command queries test PASSED" except Exception as e: print("\tUnexpected kind of exception! %s" % e) print_exc() result = False, "Command queries test FAILED" _printFooter(result[1]) return result
def _buildCommand2Test(): baseCmds = ['SOURce', 'BASIcloop', 'ITERative', 'CHANnel'] subCmds = ['CURRent', 'VOLTage'] attrs = ['UPPEr', 'LOWEr', 'VALUe'] baseCmd = _randomchoice(baseCmds) if baseCmd in ['CHANnel']: baseCmd = "%s%s" % (baseCmd, str(_randint(1, nChannels)).zfill(2)) if _randint(0, 1): baseCmd = "%s:MEAS:FUNC%s" % (baseCmd, str(_randint(1, nSubchannels)).zfill(2)) subCmd = _randomchoice(subCmds) if baseCmd in ['SOURce']: attr = _randomchoice(attrs + ['BUFFer']) else: attr = _randomchoice(attrs) return "%s:%s:%s?" % (baseCmd, subCmd, attr)
def checkCommandWrites(scpiObj): _printHeader("Testing to command writes") try: # simple commands --- currentConfObj = WattrTest() scpiObj.addCommand('source:current:configure', readcb=currentConfObj.readTest, writecb=currentConfObj.writeTest) voltageConfObj = WattrTest() scpiObj.addCommand('source:voltage:configure', readcb=voltageConfObj.readTest, writecb=voltageConfObj.writeTest) for inner in ['current', 'voltage']: _doWriteCommand(scpiObj, "source:%s:configure" % (inner)) _wait(1) # FIXME: remove # channel commands --- _printHeader("Testing to channel command writes") baseCmd = 'writable' wObj = scpiObj.addComponent(baseCmd, scpiObj._commandTree) chCmd = 'channel' chObj = scpiObj.addChannel(chCmd, nChannels, wObj) chCurrentObj = WchannelTest(nChannels) chVoltageObj = WchannelTest(nChannels) for (subcomponent, subCmdObj) in [('current', chCurrentObj), ('voltage', chVoltageObj)]: subcomponentObj = scpiObj.addComponent(subcomponent, chObj) for (attrName, attrFunc) in [('upper', 'upperLimit'), ('lower', 'lowerLimit'), ('value', 'readTest')]: if hasattr(subCmdObj, attrFunc): if attrName == 'value': attrObj = scpiObj.addAttribute( attrName, subcomponentObj, readcb=subCmdObj.readTest, writecb=subCmdObj.writeTest, default=True) else: cbFunc = getattr(subCmdObj, attrFunc) attrObj = scpiObj.addAttribute(attrName, subcomponentObj, cbFunc) print("\nChecking one write multiple reads\n") for i in range(nChannels): rndCh = _randint(1, nChannels) element = _randomchoice(['current', 'voltage']) _doWriteChannelCommand(scpiObj, "%s:%s" % (baseCmd, chCmd), rndCh, element, nChannels) _interTestWait() print("\nChecking multile writes multiple reads\n") for i in range(nChannels): testNwrites = _randint(2, nChannels) rndChs = [] while len(rndChs) < testNwrites: rndCh = _randint(1, nChannels) while rndCh in rndChs: rndCh = _randint(1, nChannels) rndChs.append(rndCh) element = _randomchoice(['current', 'voltage']) values = [_randint(-1000, 1000)] * testNwrites _doWriteChannelCommand(scpiObj, "%s:%s" % (baseCmd, chCmd), rndChs, element, nChannels, values) _interTestWait() print("\nChecking write with allowed values limitation\n") selectionCmd = 'source:selection' selectionObj = WattrTest() selectionObj.writeTest(False) scpiObj.addCommand(selectionCmd, readcb=selectionObj.readTest, writecb=selectionObj.writeTest, allowedArgins=[True, False]) _doWriteCommand(scpiObj, selectionCmd, True) # _doWriteCommand(scpiObj, selectionCmd, 'Fals') # _doWriteCommand(scpiObj, selectionCmd, 'True') try: _doWriteCommand(scpiObj, selectionCmd, 0) except: print("\tLimitation values succeed because it raises an exception " "as expected") else: raise AssertionError("It has been write a value that " "should not be allowed") _interTestWait() result = True, "Command writes test PASSED" except Exception as e: print("\tUnexpected kind of exception! %s" % e) print_exc() result = False, "Command writes test FAILED" _printFooter(result[1]) return result
def checkCommandWrites(scpiObj): _printHeader("Testing to command writes") try: # simple commands --- currentConfObj = WattrTest() scpiObj.addCommand('source:current:configure', readcb=currentConfObj.readTest, writecb=currentConfObj.writeTest) voltageConfObj = WattrTest() scpiObj.addCommand('source:voltage:configure', readcb=voltageConfObj.readTest, writecb=voltageConfObj.writeTest) for inner in ['current', 'voltage']: _doWriteCommand(scpiObj, "source:%s:configure" % (inner)) _wait(1) # FIXME: remove # channel commands --- _printHeader("Testing to channel command writes") baseCmd = 'writable' wObj = scpiObj.addComponent(baseCmd, scpiObj._commandTree) chCmd = 'channel' chObj = scpiObj.addChannel(chCmd, nChannels, wObj) chCurrentObj = WchannelTest(nChannels) chVoltageObj = WchannelTest(nChannels) for (subcomponent, subCmdObj) in [('current', chCurrentObj), ('voltage', chVoltageObj)]: subcomponentObj = scpiObj.addComponent(subcomponent, chObj) for (attrName, attrFunc) in [('upper', 'upperLimit'), ('lower', 'lowerLimit'), ('value', 'readTest')]: if hasattr(subCmdObj, attrFunc): if attrName == 'value': attrObj = scpiObj.addAttribute(attrName, subcomponentObj, readcb=subCmdObj. readTest, writecb=subCmdObj. writeTest, default=True) else: cbFunc = getattr(subCmdObj, attrFunc) attrObj = scpiObj.addAttribute(attrName, subcomponentObj, cbFunc) print("\nChecking one write multiple reads\n") for i in range(nChannels): rndCh = _randint(1, nChannels) element = _randomchoice(['current', 'voltage']) _doWriteChannelCommand(scpiObj, "%s:%s" % (baseCmd, chCmd), rndCh, element, nChannels) _interTestWait() print("\nChecking multile writes multiple reads\n") for i in range(nChannels): testNwrites = _randint(2, nChannels) rndChs = [] while len(rndChs) < testNwrites: rndCh = _randint(1, nChannels) while rndCh in rndChs: rndCh = _randint(1, nChannels) rndChs.append(rndCh) element = _randomchoice(['current', 'voltage']) values = [_randint(-1000, 1000)]*testNwrites _doWriteChannelCommand(scpiObj, "%s:%s" % (baseCmd, chCmd), rndChs, element, nChannels, values) _interTestWait() print("\nChecking write with allowed values limitation\n") selectionCmd = 'source:selection' selectionObj = WattrTest() selectionObj.writeTest(False) scpiObj.addCommand(selectionCmd, readcb=selectionObj.readTest, writecb=selectionObj.writeTest, allowedArgins=[True, False]) _doWriteCommand(scpiObj, selectionCmd, True) # _doWriteCommand(scpiObj, selectionCmd, 'Fals') # _doWriteCommand(scpiObj, selectionCmd, 'True') try: _doWriteCommand(scpiObj, selectionCmd, 0) except: print("\tLimitation values succeed because it raises an exception " "as expected") else: raise AssertionError("It has been write a value that " "should not be allowed") _interTestWait() result = True, "Command writes test PASSED" except Exception as e: print("\tUnexpected kind of exception! %s" % e) print_exc() result = False, "Command writes test FAILED" _printFooter(result[1]) return result