118 lines
3.5 KiB
Python
118 lines
3.5 KiB
Python
from NSCP import Settings, Registry, Core, log, status, log_error, log_debug, sleep
|
|
from test_helper import BasicTest, TestResult, Callable, setup_singleton, install_testcases, init_testcases, shutdown_testcases
|
|
from types import *
|
|
from time import time
|
|
|
|
install_checks = 100
|
|
time_to_run = 30
|
|
|
|
class PythonTest(BasicTest):
|
|
|
|
noop_count = 0
|
|
stress_count = 0
|
|
|
|
key = ''
|
|
reg = None
|
|
conf = None
|
|
core = None
|
|
|
|
def noop_handler(arguments):
|
|
instance = PythonTest.getInstance()
|
|
instance.noop_count = instance.noop_count + 1
|
|
return (status.OK, 'Got call %d'%instance.noop_count, '')
|
|
noop_handler = Callable(noop_handler)
|
|
|
|
|
|
def stress_handler(channel, source, command, code, message, perf):
|
|
instance = PythonTest.getInstance()
|
|
instance.stress_count = instance.stress_count + 1
|
|
log_debug('Got message %d/%d on %s'%(instance.stress_count, instance.noop_count, channel))
|
|
stress_handler = Callable(stress_handler)
|
|
|
|
def desc(self):
|
|
return 'Testcase for python script module'
|
|
|
|
def title(self):
|
|
return 'PythonScript tests'
|
|
|
|
def setup(self, plugin_id, prefix):
|
|
log('Loading Python unit tests')
|
|
self.key = '_%stest_command'%prefix
|
|
self.reg.simple_function('py_stress_noop', PythonTest.noop_handler, 'This is a simple noop command')
|
|
self.reg.simple_subscription('py_stress_test', PythonTest.stress_handler)
|
|
self.conf.set_string('/settings/test_scheduler', 'threads', '50')
|
|
self.core.reload('test_scheduler')
|
|
|
|
|
|
def teardown(self):
|
|
self.conf.set_string('/settings/test_scheduler', 'threads', '0')
|
|
self.core.reload('test_scheduler')
|
|
None
|
|
|
|
def run_test(self):
|
|
result = TestResult()
|
|
start = time()
|
|
total_count = install_checks*time_to_run/5
|
|
while self.stress_count < total_count:
|
|
log('Waiting for %d: %d/%d'%(total_count, self.stress_count, self.noop_count))
|
|
old_stress_count = self.stress_count
|
|
old_noop_count = self.noop_count
|
|
sleep(5000)
|
|
result.add_message(True, 'Commands/second: %d/%d'%( (self.stress_count-old_stress_count)/5, (self.noop_count-old_noop_count)/5 ) )
|
|
elapsed = (time() - start)
|
|
if elapsed == 0:
|
|
elapsed = 1
|
|
result.add_message(True, 'Summary Collected %d instance in %d seconds: %d/s'%(self.stress_count, elapsed, self.stress_count/elapsed))
|
|
return result
|
|
|
|
def install(self, arguments):
|
|
self.conf.set_string('/modules', 'test_scheduler', 'Scheduler')
|
|
self.conf.set_string('/modules', 'pytest', 'PythonScript')
|
|
|
|
self.conf.set_string('/settings/pytest/scripts', 'test_python', 'test_python.py')
|
|
|
|
base_path = '/settings/test_scheduler'
|
|
self.conf.set_string(base_path, 'threads', '0')
|
|
|
|
default_path = '%s/schedules/default'%base_path
|
|
self.conf.set_string(default_path, 'channel', 'py_stress_test')
|
|
#self.conf.set_string(default_path, 'alias', 'stress')
|
|
self.conf.set_string(default_path, 'command', 'py_stress_noop')
|
|
self.conf.set_string(default_path, 'interval', '5s')
|
|
for i in range(1, install_checks):
|
|
alias = 'stress_python_%i'%i
|
|
self.conf.set_string('%s/schedules'%(base_path), alias, 'py_stress_noop')
|
|
|
|
self.conf.save()
|
|
|
|
def uninstall(self):
|
|
None
|
|
|
|
def help(self):
|
|
None
|
|
|
|
def init(self, plugin_id, prefix):
|
|
self.key = '_%stest_command'%prefix
|
|
self.reg = Registry.get(plugin_id)
|
|
self.core = Core.get(plugin_id)
|
|
self.conf = Settings.get(plugin_id)
|
|
|
|
None
|
|
|
|
def shutdown(self):
|
|
None
|
|
|
|
setup_singleton(PythonTest)
|
|
|
|
all_tests = [PythonTest]
|
|
|
|
def __main__(args):
|
|
install_testcases(all_tests)
|
|
|
|
def init(plugin_id, plugin_alias, script_alias):
|
|
init_testcases(plugin_id, plugin_alias, script_alias, all_tests)
|
|
|
|
def shutdown():
|
|
shutdown_testcases()
|
|
|