2024-04-01 10:40:20 +02:00

141 lines
4.5 KiB
Python

from NSCP import Settings, Registry, Core, log, status
from test_helper import Callable, TestResult, get_test_manager, create_test_manager
from types import *
class ChannelTest:
instance = None
channel = ''
reg = None
last_channel = ''
last_command = ''
last_status = status.UNKNOWN
last_message = ''
last_perf = ''
instance = None
class SingletonHelper:
def __call__( self, *args, **kw ) :
if ChannelTest.instance is None :
object = ChannelTest()
ChannelTest.instance = object
return ChannelTest.instance
getInstance = SingletonHelper()
def title(self):
return 'Channel Test'
def desc(self):
return 'Testing that channels work'
def test_submission_handler_001(channel, source, command, code, message, perf):
log('Got messgae on %s'%channel)
instance = ChannelTest.getInstance()
instance.set_last(channel, command, code, message, perf)
test_submission_handler_001 = Callable(test_submission_handler_001)
def test_command_handler_001(arguments):
instance = ChannelTest.getInstance()
return (instance.last_status, '%s'%instance.last_message, '%s'%instance.last_perf)
test_command_handler_001 = Callable(test_command_handler_001)
def setup(self, plugin_id, prefix):
self.channel = '_%stest_channel'%prefix
self.reg = Registry.get(plugin_id)
self.reg.simple_subscription(self.channel, ChannelTest.test_submission_handler_001)
self.reg.simple_function(self.channel, ChannelTest.test_command_handler_001, 'This is a sample command')
def teardown(self):
None
#self.reg.unregister_simple_subscription('%s_001'%self.channel)
#self.reg.unregister_simple_function('%s_001'%self.channel)
def reset_last(self):
self.last_channel = None
self.last_command = None
self.last_status = None
self.last_message = None
self.last_perf = None
def set_last(self, channel, command, status, message, perf):
self.last_channel = channel
self.last_command = command
self.last_status = status
self.last_message = message
self.last_perf = perf
def test_simple(self, command, code, message, perf, tag):
result = TestResult()
core = Core.get()
self.reset_last()
(ret, msg) = core.simple_submit(self.channel, '%s'%command, code, '%s'%message, '%s'%perf)
result.add_message(ret, 'Testing channels: %s'%tag, msg)
r1 = TestResult()
r1.assert_equals(self.last_status, code, 'Return code')
r1.assert_equals(self.last_message, message, 'Message')
r1.assert_equals(self.last_perf, perf, 'Performance data')
result.add(r1)
self.set_last('', '', code, message, perf)
(retcode, retmessage, retperf) = core.simple_query(self.channel, [])
result.add_message(True, 'Testing queries: %s'%tag)
r2 = TestResult()
r2.assert_equals(self.last_status, code, 'Return code')
r2.assert_equals(self.last_message, message, 'Message')
r2.assert_equals(self.last_perf, perf, 'Performance data')
result.add(r2)
return result
def run_test(self):
result = TestResult()
result.add(self.test_simple('foobar', status.OK, 'qwerty', '', 'simple ok'))
result.add(self.test_simple('foobar', status.WARNING, 'foobar', '', 'simple warning'))
result.add(self.test_simple('foobar', status.CRITICAL, 'test', '', 'simple critical'))
result.add(self.test_simple('foobar', status.UNKNOWN, '1234567890', '', 'simple unknown'))
result.add(self.test_simple('foobar', status.OK, 'qwerty', "'foo'=5%", 'simple performance data 001'))
result.add(self.test_simple('foobar', status.OK, 'qwerty', "'foo'=5%;10", 'simple performance data 002'))
result.add(self.test_simple('foobar', status.OK, 'qwerty', "'foo'=5%;10;23", 'simple performance data 003'))
result.add(self.test_simple('foobar', status.OK, 'qwerty', "'foo'=5%;10;23;10;78", 'simple performance data 004'))
result.add(self.test_simple('foobar', status.OK, 'qwerty', "'foo'=5%;10;23;10;78 'bar'=1k;2;3", 'simple performance data 005'))
return result
def install(self, arguments):
conf = Settings.get()
conf.set_string('/modules', 'pytest', 'PythonScript')
conf.set_string('/settings/pytest/scripts', 'test_pb', 'test_pb.py')
conf.save()
def uninstall(self):
None
def help(self):
None
def init(self, plugin_id):
None
def shutdown(self):
None
all_tests = [ChannelTest]
def __main__():
test_manager = create_test_manager()
test_manager.add(all_tests)
test_manager.install()
def init(plugin_id, plugin_alias, script_alias):
test_manager = create_test_manager(plugin_id, plugin_alias, script_alias)
test_manager.add(all_tests)
test_manager.init()
def shutdown():
test_manager = get_test_manager()
test_manager.shutdown()