mirror of
https://github.com/valitydev/yandex-tank.git
synced 2024-11-07 02:45:21 +00:00
72 lines
2.0 KiB
Python
72 lines
2.0 KiB
Python
'''
|
|
Contains shellexec plugin
|
|
'''
|
|
from yandextank.core import AbstractPlugin
|
|
import yandextank.core as tankcore
|
|
|
|
|
|
class ShellExecPlugin(AbstractPlugin):
|
|
'''
|
|
ShellExec plugin
|
|
allows executing shell scripts before/after test
|
|
'''
|
|
SECTION = 'shellexec'
|
|
|
|
def __init__(self, core):
|
|
AbstractPlugin.__init__(self, core)
|
|
self.end = None
|
|
self.poll = None
|
|
self.prepare = None
|
|
self.start = None
|
|
self.postprocess = None
|
|
|
|
@staticmethod
|
|
def get_key():
|
|
return __file__
|
|
|
|
def get_available_options(self):
|
|
return ["prepare", "start", "end", "poll", "post_process"]
|
|
|
|
def configure(self):
|
|
self.prepare = self.get_option("prepare", '')
|
|
self.start = self.get_option("start", '')
|
|
self.end = self.get_option("end", '')
|
|
self.poll = self.get_option("poll", '')
|
|
self.postprocess = self.get_option("post_process", '')
|
|
|
|
def prepare_test(self):
|
|
if self.prepare:
|
|
self.execute(self.prepare)
|
|
|
|
def start_test(self):
|
|
if self.start:
|
|
self.execute(self.start)
|
|
|
|
def is_test_finished(self):
|
|
if self.poll:
|
|
self.log.info("Executing: %s", self.poll)
|
|
retcode = tankcore.execute(self.poll, shell=True, poll_period=0.1)[0]
|
|
if retcode:
|
|
self.log.warn("Non-zero exit code, interrupting test: %s", retcode)
|
|
return retcode
|
|
return -1
|
|
|
|
def end_test(self, retcode):
|
|
if self.end:
|
|
self.execute(self.end)
|
|
return retcode
|
|
|
|
def post_process(self, retcode):
|
|
if self.postprocess:
|
|
self.execute(self.postprocess)
|
|
return retcode
|
|
|
|
def execute(self, cmd):
|
|
'''
|
|
Execute and check exit code
|
|
'''
|
|
self.log.info("Executing: %s", cmd)
|
|
retcode = tankcore.execute(cmd, shell=True, poll_period=0.1)[0]
|
|
if retcode:
|
|
raise RuntimeError("Subprocess returned %s" % retcode)
|