def testPythonExternal(self): self.task = taskdict['python']['class'] taskKwargs = {'pythonfile':os.path.join(testdir, 'tstPythonGlobal.py'), 'import':True, 'type':'python', 'notify':False} userargs = 'jkl mno:pqr' tm = TaskManager(self.task, 1, None, -1, taskid='T1', userargs=userargs, **taskKwargs) tm.returnHandler = self.returnHandler topic = Topic('onPlaybackStarted') runKwargs = events['onPlayBackStarted']['expArgs'] self.clear_q() tm.start(topic, **runKwargs) try: tr = self.q.get(timeout=1) except Queue.Empty: raise AssertionError(_('Timed out waiting for return')) if tr.iserror is True: log(loglevel=xbmc.LOGERROR, msg=_('testPythonExternal returned with an error: %s') % tr.msg) if isAndroid: raise AssertionError(_('Cannot fully test pythonExternal on Android')) try: retArgs = sys.modules['__builtin__'].__dict__['testReturn'] except KeyError: retArgs = sys.modules['builtins'].__dict__['testReturn'] finally: try: sys.modules['__builtin__'].__dict__.pop('testReturn', None) except KeyError: sys.modules['builtins'].__dict__.pop('testReturn', None) if ' '.join(retArgs[0]) != userargs: raise AssertionError(_('Python external test failed'))
def createSubscriber(self, eventkey, retHandler=returnHandler): task_key = self.settings.events[eventkey]['task'] evtsettings = self.settings.events[eventkey] topic = self.settings.topicFromSettingsEvent(eventkey) self.topics.append(topic.topic) task = self.createTask(task_key) if task is not None: tm = TaskManager(task, taskid=evtsettings['task'], userargs=evtsettings['userargs'], **self.settings.tasks[task_key]) tm.returnHandler = retHandler tm.taskKwargs['notify'] = self.settings.general['Notify'] subscriber = Subscriber(logger=self.logger) subscriber.addTaskManager(tm) subscriber.addTopic(topic) self.logger.log( msg=_('Subscriber for event: %s, task: %s created') % (str(topic), task_key)) return subscriber else: self.logger.log( loglevel=self.logger.LOGERROR, msg= _('Subscriber for event: %s, task: %s NOT created due to errors' ) % (str(topic), task_key)) return None
def testScriptShell(self): self.task = taskdict['script']['class'] if sys.platform.startswith('win'): testfile = 'tstScript.bat' else: testfile = 'tstScript.sh' taskKwargs = {'scriptfile':'"%s"' % os.path.join(testdir, testfile), 'use_shell':True, 'type':'script', 'waitForCompletion': True, 'notify':False} userargs = 'abc def:ghi' self.task.validate(taskKwargs) tm = TaskManager(self.task, 1, None, -1, taskid='T1', userargs=userargs, **taskKwargs) tm.returnHandler = self.returnHandler topic = Topic('onPlaybackStarted') runKwargs = events['onPlayBackStarted']['expArgs'] self.clear_q() tm.start(topic, **runKwargs) try: tr = self.q.get(timeout=2) except Queue.Empty: raise AssertionError(_('Timed out waiting for return')) else: if tr.iserror is True: log(loglevel=xbmc.LOGERROR, msg=_('testScriptShell returned with an error: %s') % tr.msg) raise AssertionError(_('Script with shell test failed')) else: retArgs = re.findall(r'Process returned data: \[(.+)\]', tr.msg)[0] if retArgs != userargs: raise AssertionError(_('Script with shell test failed'))
def testScriptNoShell(self): self.task = taskdict['script']['class'] outfile = os.path.join(testdir, 'scriptoutput.txt') try: os.remove(outfile) except OSError: pass if sys.platform.startswith('win'): testfile = 'tstScript.bat' else: testfile = 'tstScript.sh' taskKwargs = { 'scriptfile': '"%s"' % os.path.join(testdir, testfile), 'use_shell': False, 'type': 'script', 'waitForCompletion': True, 'notify': False } self.task.validate(taskKwargs) userargs = 'abc def:ghi' tm = TaskManager(self.task, 1, None, -1, taskid='T1', userargs=userargs, **taskKwargs) tm.returnHandler = self.returnHandler topic = Topic('onPlaybackStarted') runKwargs = events['onPlayBackStarted']['expArgs'] tm.start(topic, **runKwargs) try: tr = self.q.get(timeout=2) except Queue.Empty: raise AssertionError(_('Timed out waiting for return')) else: if tr.iserror is True: log(loglevel=xbmc.LOGERROR, msg=_('testScriptNoShell returned with an error: %s') % tr.msg) try: with open(outfile, 'r') as f: retArgs = f.readline() except OSError: retArgs = '' try: os.remove(outfile) except OSError: pass if retArgs.strip('\n') != userargs: raise AssertionError(_('Script without shell test failed'))
def createSubscriber(self, eventkey, retHandler=returnHandler): task_key = self.settings.events[eventkey]['task'] evtsettings = self.settings.events[eventkey] topic = self.settings.topicFromSettingsEvent(eventkey) self.topics.append(topic.topic) task = self.createTask(task_key) if task is not None: tm = TaskManager(task, taskid=evtsettings['task'], userargs=evtsettings['userargs'], **self.settings.tasks[task_key]) tm.returnHandler = retHandler tm.taskKwargs['notify'] = self.settings.general['Notify'] subscriber = Subscriber(logger=self.logger) subscriber.addTaskManager(tm) subscriber.addTopic(topic) self.logger.log(msg=_('Subscriber for event: %s, task: %s created') % (str(topic), task_key)) return subscriber else: self.logger.log(loglevel=self.logger.LOGERROR, msg=_('Subscriber for event: %s, task: %s NOT created due to errors') % (str(topic), task_key)) return None
def testHttp(self): serverEnabled, serverPort, serverUser, serverPassword = getWebserverInfo( ) if serverEnabled: self.task = taskdict['http']['class'] taskKwargs = { 'http': 'http://localhost:%s/jsonrpc' % str(serverPort), 'user': serverUser, 'pass': serverPassword, 'type': 'http', 'request-type': 'GET', 'notify': False } userargs = '?request={"jsonrpc":%__"2.0"%_%__"id": 1%_%__"method":"Application.Setmute"%_%__"params":{"mute":"toggle"}}' tm = TaskManager(self.task, 1, None, -1, taskid='T1', userargs=userargs, **taskKwargs) tm.returnHandler = self.returnHandler topic = Topic('onPlaybackStarted') runKwargs = events['onPlayBackStarted']['expArgs'] self.clear_q() tm.start(topic, **runKwargs) try: tr = self.q.get(timeout=1) except Queue.Empty: raise Queue.Empty(_('testHttp never returned')) else: tm.start(topic, **runKwargs) # Toggle Mute again if tr.iserror is True: log(loglevel=xbmc.LOGERROR, msg=_('testHttp returned with an error: %s') % tr.msg) if '{"id":1,"jsonrpc":"2.0","result":' not in tr.msg: raise AssertionError(_('Http test failed')) else: raise AssertionError( 'Http test cannot be run because webserver not enabled')
def testScriptNoShell(self): self.task = taskdict['script']['class'] outfile = os.path.join(testdir, 'scriptoutput.txt') try: os.remove(outfile) except OSError: pass if sys.platform.startswith('win'): testfile = 'tstScript.bat' else: testfile = 'tstScript.sh' taskKwargs = {'scriptfile':'"%s"' % os.path.join(testdir, testfile), 'use_shell':False, 'type':'script', 'waitForCompletion': True, 'notify':False} self.task.validate(taskKwargs) userargs = 'abc def:ghi' tm = TaskManager(self.task, 1, None, -1, taskid='T1', userargs=userargs, **taskKwargs) tm.returnHandler = self.returnHandler topic = Topic('onPlaybackStarted') runKwargs = events['onPlayBackStarted']['expArgs'] tm.start(topic, **runKwargs) try: tr = self.q.get(timeout=2) except Queue.Empty: raise AssertionError(_('Timed out waiting for return')) else: if tr.iserror is True: log(loglevel=xbmc.LOGERROR, msg=_('testScriptNoShell returned with an error: %s') % tr.msg) try: with open(outfile, 'r') as f: retArgs = f.readline() except OSError: retArgs = '' try: os.remove(outfile) except OSError: pass if retArgs.strip('\n') != userargs: raise AssertionError(_('Script without shell test failed'))
def testHttp(self): serverEnabled, serverPort, serverUser, serverPassword = getWebserverInfo() if serverEnabled: self.task = taskdict['http']['class'] taskKwargs = {'http':'http://localhost:%s/jsonrpc' % str(serverPort), 'user':serverUser, 'pass':serverPassword, 'type':'http', 'notify':False} userargs = '?request={"jsonrpc": "2.0", "id": 1, "method":"Application.Setmute", "params":{"mute":"toggle"}}' tm = TaskManager(self.task, 1, None, -1, taskid='T1', userargs=userargs, **taskKwargs) tm.returnHandler = self.returnHandler topic = Topic('onPlaybackStarted') runKwargs = events['onPlayBackStarted']['expArgs'] tm.start(topic, **runKwargs) try: tr = self.q.get(timeout=1) except Queue.Empty: raise Queue.Empty(_('testHttp never returned')) else: tm.start(topic, **runKwargs) # Toggle Mute again if tr.iserror is True: log(loglevel=xbmc.LOGERROR, msg=_('testHttp returned with an error: %s') % tr.msg) if tr.msg.startswith('{"id":1,"jsonrpc":"2.0","result":') is False: raise AssertionError(_('Http test failed')) else: raise AssertionError('Http test cannot be run because webserver not enabled')