167 lines
5.2 KiB
Python
167 lines
5.2 KiB
Python
from NSCP import Settings, Registry, Core, log, status, log_error, sleep
|
|
from NSCP import Settings, Registry, Core, log, status, log_error, sleep
|
|
from test_helper import BasicTest, TestResult, Callable, setup_singleton, install_testcases, init_testcases, shutdown_testcases
|
|
from types import *
|
|
import random
|
|
import subprocess
|
|
|
|
class Win32SystemTest(BasicTest):
|
|
|
|
reg = None
|
|
conf = None
|
|
core = None
|
|
|
|
def desc(self):
|
|
return 'Testcase for w32 check_system module'
|
|
|
|
def title(self):
|
|
return 'Win32System tests'
|
|
|
|
def setup(self, plugin_id, prefix):
|
|
self.reg = Registry.get(plugin_id)
|
|
|
|
def teardown(self):
|
|
None
|
|
|
|
def get_expected_state(self, existing, sign, asked):
|
|
if existing == 0:
|
|
return status.OK
|
|
if sign == 'eq':
|
|
if existing == asked:
|
|
return status.CRITICAL
|
|
return status.OK
|
|
if sign == 'gt':
|
|
if existing > asked:
|
|
return status.CRITICAL
|
|
return status.OK
|
|
if sign == 'lt':
|
|
if existing < asked:
|
|
return status.CRITICAL
|
|
return status.OK
|
|
if sign == 'ne':
|
|
if existing != asked:
|
|
return status.CRITICAL
|
|
return status.OK
|
|
return status.UNKNOWN
|
|
|
|
def test_one_proc_int(self, proc, actual, asked):
|
|
result = TestResult('Checking one state %d/%d'%(actual, asked))
|
|
for s in ['eq', 'gt', 'lt', 'ne']:
|
|
(retcode, retmessage, retperf) = self.core.simple_query('check_process', ['empty-state=OK', 'show-all', 'crit=count %s %d'%(s, asked), "filter=exe='%s'"%proc])
|
|
expected = self.get_expected_state(actual, s, asked)
|
|
result.add_message(retcode == expected, 'Process: %s (%d %s %d): %s'%(proc, actual, s, asked, retmessage), '%s != %s'%(retcode, expected))
|
|
return result
|
|
|
|
def run_test_proc(self):
|
|
master = TestResult('Checking check_process')
|
|
|
|
result = TestResult('0 notepads running')
|
|
for j in range(0,3):
|
|
result.append(self.test_one_proc_int('notepad.exe', 0, j))
|
|
master.add(result)
|
|
|
|
pids = []
|
|
for i in range(1,4):
|
|
result = TestResult('%d notepads running'%i)
|
|
log('Starting notepad...')
|
|
handle = subprocess.Popen('notepad.exe', shell=False)
|
|
sleep(500)
|
|
pids.append(handle.pid)
|
|
for j in range(0,3):
|
|
result.append(self.test_one_proc_int('notepad.exe', i, j))
|
|
master.add(result)
|
|
|
|
for p in pids:
|
|
subprocess.Popen("taskkill /F /T /PID %i"%p , shell=True)
|
|
|
|
return master
|
|
|
|
def check_and_lookup_index(self, index):
|
|
result = TestResult('Validating index: %s'%index)
|
|
(result_code, result_message) = self.core.simple_exec('any', 'pdh', ['--lookup-name', '%s'%index, '--porcelain'])
|
|
result.assert_equals(result_code, 0, 'Result code')
|
|
result.assert_equals(len(result_message), 1, 'result length')
|
|
result.add_message(len(result_message[0])>0, 'result length')
|
|
name = result_message[0]
|
|
|
|
(result_code, result_message) = self.core.simple_exec('any', 'pdh', ['--lookup-index', name, '--porcelain'])
|
|
result.assert_equals(result_code, 0, 'Result code')
|
|
result.assert_equals(len(result_message), 1, 'result length')
|
|
result.add_message(len(result_message[0])>0, 'result length')
|
|
result.assert_equals(result_message[0], '%s'%index, 'result length')
|
|
|
|
return result, name
|
|
|
|
def check_counter(self, counter, args):
|
|
result = TestResult('Checking counter: %s'%counter)
|
|
args.append('Counter=%s'%counter)
|
|
(retcode, retmessage, retperf) = self.core.simple_query('CheckCounter', args)
|
|
result.add_message(retcode != status.UNKNOWN, 'Return code: %s'%retcode)
|
|
result.add_message(len(retmessage) > 0, 'Returned message: %s'%retmessage)
|
|
result.add_message(len(retperf) > 0, 'Performance data: %s'%retperf)
|
|
return result
|
|
|
|
def run_test_counters(self):
|
|
result = TestResult('Checking CheckCounter')
|
|
(result_code, result_message) = self.core.simple_exec('any', 'pdh', ['--list', '--all'])
|
|
count = 0
|
|
data = []
|
|
for m in result_message:
|
|
data = m.splitlines()
|
|
count = len(data)
|
|
result.add_message(count > 0, 'Managed to retrieve counters: %d'%count)
|
|
if len(data) == 0:
|
|
result.add_message(False, 'Failed to find counters: %s'%result_message)
|
|
counters = []
|
|
|
|
|
|
(subres, name1) = self.check_and_lookup_index(4)
|
|
result.add(subres)
|
|
(subres, name2) = self.check_and_lookup_index(26)
|
|
result.add(subres)
|
|
|
|
result.add(self.check_counter('\\4\\26', ['ShowAll', 'MaxWarn=10']))
|
|
result.add(self.check_counter('\\4\\26', ['index', 'ShowAll', 'MaxWarn=10']))
|
|
result.add(self.check_counter('\\%s\\%s'%(name1, name2), ['ShowAll', 'MaxWarn=10']))
|
|
return result
|
|
|
|
def run_test(self):
|
|
result = TestResult('Testing W32 systems')
|
|
result.add(self.run_test_proc())
|
|
result.add(self.run_test_counters())
|
|
return result
|
|
|
|
def install(self, arguments):
|
|
conf = self.conf
|
|
conf.set_string('/modules', 'test_system', 'CheckSystem')
|
|
conf.set_string('/modules', 'pytest', 'PythonScript')
|
|
conf.set_string('/settings/pytest/scripts', 'test_w32sys', 'test_w32_system.py')
|
|
conf.save()
|
|
|
|
def uninstall(self):
|
|
None
|
|
|
|
def help(self):
|
|
None
|
|
|
|
def init(self, plugin_id, prefix):
|
|
self.reg = Registry.get(plugin_id)
|
|
self.core = Core.get(plugin_id)
|
|
self.conf = Settings.get(plugin_id)
|
|
|
|
def shutdown(self):
|
|
None
|
|
|
|
setup_singleton(Win32SystemTest)
|
|
|
|
all_tests = [Win32SystemTest]
|
|
|
|
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()
|