def do_one_test(self, ssl=True, length=1024): conf = self.conf conf.set_int('/settings/NRPE/test_nrpe_server', 'payload length', length) conf.set_bool('/settings/NRPE/test_nrpe_server', 'use ssl', ssl) conf.set_bool('/settings/NRPE/test_nrpe_server', 'allow arguments', True) # TODO: conf.set_string('/settings/NRPE/test_nrpe_server', 'certificate', ssl) self.core.reload('test_nrpe_server') conf.set_string('/settings/NRPE/test_nrpe_client/targets/default', 'address', 'nrpe://127.0.0.1:35666') conf.set_bool('/settings/NRPE/test_nrpe_client/targets/default', 'use ssl', not ssl) conf.set_int('/settings/NRPE/test_nrpe_client/targets/default', 'payload length', length*3) conf.set_string('/settings/NRPE/test_nrpe_client/targets/invalid', 'address', 'nrpe://127.0.0.1:25666') conf.set_bool('/settings/NRPE/test_nrpe_client/targets/invalid', 'use ssl', not ssl) conf.set_int('/settings/NRPE/test_nrpe_client/targets/invalid', 'payload length', length*2) conf.set_string('/settings/NRPE/test_nrpe_client/targets/valid', 'address', 'nrpe://127.0.0.1:15666') conf.set_bool('/settings/NRPE/test_nrpe_client/targets/valid', 'use ssl', ssl) conf.set_int('/settings/NRPE/test_nrpe_client/targets/valid', 'payload length', length) self.core.reload('test_nrpe_client') result = TestResult('ssl=%s, length=%s'%(ssl, length)) result.add_message(isOpen('127.0.0.1', 15666), 'Checking that port is open (server is up)') result.add(self.test_one(ssl, length, state = status.UNKNOWN, tag = 'unknown')) result.add(self.test_one(ssl, length, state = status.OK, tag = 'ok')) result.add(self.test_one(ssl, length, state = status.WARNING, tag = 'warn')) result.add(self.test_one(ssl, length, state = status.CRITICAL, tag = 'crit')) return result
def submit_payload(self, encryption, target, length, source, status, msg, perf, tag): message = plugin_pb2.SubmitRequestMessage() message.header.version = plugin_pb2.Common.VERSION_1 message.header.recipient_id = target message.channel = 'nsca_test_outbox' host = message.header.hosts.add() host.id = target if (target == 'valid'): pass else: host.address = "127.0.0.1:15667" enc = host.metadata.add() enc.key = "encryption" enc.value = encryption enc = host.metadata.add() enc.key = "password" enc.value = 'pwd-%s'%encryption enc = host.metadata.add() enc.key = "payload length" enc.value = '%d'%length uid = str(uuid.uuid4()) payload = message.payload.add() payload.result = status payload.command = uid payload.message = '%s - %s'%(uid, msg) payload.source = source (result_code, err) = self.core.submit('nsca_test_outbox', message.SerializeToString()) result = TestResult('Testing payload submission (via API): %s'%tag) result.add_message(result_code, 'Submission succedded %s/exec:1'%tag) result.add_message(len(err) == 0, 'Testing to send message using %s/sbp'%tag, err) self.wait_and_validate(uid, result, msg, perf, '%s/spb'%tag) return result
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) = core.simple_query('CheckProcState', ['ShowAll', 'critCount=%s:%d'%(s, asked), '%s=started'%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), 'Expected %s'%(expected)) return result
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_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, cases=None): result = TestResult() cryptos = [ "none", "xor", "des", "3des", "cast128", "xtea", "blowfish", "twofish", "rc2", "aes", "aes256", "aes192", "aes128", "serpent", "gost", "3way" ] for c in cryptos: run_l = None run_this = False if cases: tmp_l = None for case in cases: if '-' in case: (run_c, tmp_l) = case.split('-', 2) else: run_c = case if c == run_c: run_l = int(tmp_l) if tmp_l else None run_this = True if not run_this: result.add_message(True, 'Ignoring: %s-*' % c) continue for l in [128, 512, 1024, 4096]: if not run_l or run_l == l: result.add(self.test_one_crypto(c, l)) else: result.add_message(True, 'Ignoring: %s-%s' % (c, l)) return result
def submit_via_exec(self, encryption, target, length, source, status, msg, perf, tag): uid = str(uuid.uuid4()) args = [ #'--exec', 'submit', '--alias', uid, '--result', '%d'%status, '--retries', '0', '--message', '%s - %s'%(uid, msg), '--target', target, ] if (target == 'valid'): pass else: args.extend([ '--address', '127.0.0.1:15667', '--encryption', encryption, '--password', 'pwd-%s'%encryption, '--payload-length', '%d'%length, ]) (result_code, result_message) = self.core.simple_exec('any', 'nsca_submit', args) result = TestResult('Testing payload submission (via command line exec): %s'%tag) result.add_message(result_code == 0, 'Testing to send message using %s/exec:1'%tag) result.add_message(len(result_message) == 1, 'Testing to send message using %s/exec:2'%tag) if len(result_message) == 1: result.assert_equals(result_message[0], "Submission successful", 'Testing to send message using %s/exec:3'%tag) self.wait_and_validate(uid, result, msg, perf, '%s/seb'%tag) return result
def do_one_test(self, ssl=True, length=1024): conf = self.conf conf.set_int("/settings/NRPE/test_nrpe_server", "payload length", length) conf.set_bool("/settings/NRPE/test_nrpe_server", "use ssl", ssl) conf.set_bool("/settings/NRPE/test_nrpe_server", "allow arguments", True) # TODO: conf.set_string('/settings/NRPE/test_nrpe_server', 'certificate', ssl) self.core.reload("test_nrpe_server") conf.set_string("/settings/NRPE/test_nrpe_client/targets/default", "address", "nrpe://127.0.0.1:35666") conf.set_bool("/settings/NRPE/test_nrpe_client/targets/default", "use ssl", not ssl) conf.set_int("/settings/NRPE/test_nrpe_client/targets/default", "payload length", length * 3) conf.set_string("/settings/NRPE/test_nrpe_client/targets/invalid", "address", "nrpe://127.0.0.1:25666") conf.set_bool("/settings/NRPE/test_nrpe_client/targets/invalid", "use ssl", not ssl) conf.set_int("/settings/NRPE/test_nrpe_client/targets/invalid", "payload length", length * 2) conf.set_string("/settings/NRPE/test_nrpe_client/targets/valid", "address", "nrpe://127.0.0.1:15666") conf.set_bool("/settings/NRPE/test_nrpe_client/targets/valid", "use ssl", ssl) conf.set_int("/settings/NRPE/test_nrpe_client/targets/valid", "payload length", length) self.core.reload("test_nrpe_client") result = TestResult("ssl=%s, length=%s" % (ssl, length)) result.add_message(isOpen("127.0.0.1", 15666), "Checking that port is open (server is up)") result.add(self.test_one(ssl, length, state=status.UNKNOWN, tag="unknown")) result.add(self.test_one(ssl, length, state=status.OK, tag="ok")) result.add(self.test_one(ssl, length, state=status.WARNING, tag="warn")) result.add(self.test_one(ssl, length, state=status.CRITICAL, tag="crit")) return result
def test_one_crypto(self, crypto, length=512): log('Testing: %s %d'%(crypto, length)) conf = self.conf conf.set_string('/settings/NSCA/test_nsca_server', 'encryption', '%s'%crypto) conf.set_string('/settings/NSCA/test_nsca_server', 'password', 'pwd-%s'%crypto) conf.set_int('/settings/NSCA/test_nsca_server', 'payload length', length) self.core.reload('test_nsca_server') conf.set_string('/settings/NSCA/test_nsca_client/targets/default', 'address', 'nsca://127.0.0.1:35667') conf.set_string('/settings/NSCA/test_nsca_client/targets/default', 'encryption', '%s'%crypto) conf.set_string('/settings/NSCA/test_nsca_client/targets/default', 'password', 'default-%s'%crypto) conf.set_int('/settings/NSCA/test_nsca_client/targets/default', 'payload length', length*3) conf.set_string('/settings/NSCA/test_nsca_client/targets/invalid', 'address', 'nsca://127.0.0.1:25667') conf.set_string('/settings/NSCA/test_nsca_client/targets/invalid', 'encryption', 'none') conf.set_string('/settings/NSCA/test_nsca_client/targets/invalid', 'password', 'invalid-%s'%crypto) conf.set_int('/settings/NSCA/test_nsca_client/targets/invalid', 'payload length', length*2) conf.set_string('/settings/NSCA/test_nsca_client/targets/valid', 'address', 'nsca://127.0.0.1:15667') conf.set_string('/settings/NSCA/test_nsca_client/targets/valid', 'encryption', '%s'%crypto) conf.set_string('/settings/NSCA/test_nsca_client/targets/valid', 'password', 'pwd-%s'%crypto) conf.set_int('/settings/NSCA/test_nsca_client/targets/valid', 'payload length', length) self.core.reload('test_nsca_client') result = TestResult('Testing: %s/%d'%(crypto, length)) result.add_message(isOpen('localhost', 15667), 'Checking that port is open') for target in ['valid', 'test_rp', 'invalid']: result.add(self.test_one_crypto_full(crypto, status.UNKNOWN, 'unknown', target, length)) result.add(self.test_one_crypto_full(crypto, status.OK, 'ok', target, length)) result.add(self.test_one_crypto_full(crypto, status.WARNING, 'warn', target, length)) result.add(self.test_one_crypto_full(crypto, status.CRITICAL, 'crit', target, length)) return result
def run_test(self, cases=None): result = TestResult() cryptos = ["none", "xor", "des", "3des", "cast128", "xtea", "blowfish", "twofish", "rc2", "aes", "aes256", "aes192", "aes128", "serpent", "gost", "3way"] for c in cryptos: run_l = None run_this = False if cases: tmp_l = None for case in cases: if '-' in case: (run_c, tmp_l) = case.split('-', 2) else: run_c = case if c == run_c: run_l = int(tmp_l) if tmp_l else None run_this = True if not run_this: result.add_message(True, 'Ignoring: %s-*'%c) continue for l in [128, 512, 1024, 4096]: if not run_l or run_l == l: result.add(self.test_one_crypto(c, l)) else: result.add_message(True, 'Ignoring: %s-%s'%(c, l)) #result.add(self.test_one_crypto(c)) return result
def check_bound(self, filter, warn, crit, expected): alias = "%s/%s/%s" % (filter, warn, crit) result = TestResult("Checking %s" % alias) args = ["file=%s" % self.work_path, "column-split=,", "filter=%s" % filter, "warn=%s" % warn, "crit=%s" % crit] # log("Command: %s"%args) (ret, msg, perf) = self.core.simple_query("check_logfile", args) log("%s : %s -- %s" % (filter, msg, perf)) result.add_message(ret == expected, "Check status", "Invalid check status: %s" % ret) return result
def test_one_crypto(self, crypto, length=512): log('Testing: %s %d' % (crypto, length)) conf = self.conf conf.set_string('/settings/NSCA/test_nsca_server', 'encryption', '%s' % crypto) conf.set_string('/settings/NSCA/test_nsca_server', 'password', 'pwd-%s' % crypto) conf.set_int('/settings/NSCA/test_nsca_server', 'payload length', length) self.core.reload('test_nsca_server') conf.set_string('/settings/NSCA/test_nsca_client/targets/default', 'address', 'nsca://127.0.0.1:35667') conf.set_string('/settings/NSCA/test_nsca_client/targets/default', 'encryption', '%s' % crypto) conf.set_string('/settings/NSCA/test_nsca_client/targets/default', 'password', 'default-%s' % crypto) conf.set_int('/settings/NSCA/test_nsca_client/targets/default', 'payload length', length * 3) conf.set_string('/settings/NSCA/test_nsca_client/targets/invalid', 'address', 'nsca://127.0.0.1:25667') conf.set_string('/settings/NSCA/test_nsca_client/targets/invalid', 'encryption', 'none') conf.set_string('/settings/NSCA/test_nsca_client/targets/invalid', 'password', 'invalid-%s' % crypto) conf.set_int('/settings/NSCA/test_nsca_client/targets/invalid', 'payload length', length * 2) conf.set_string('/settings/NSCA/test_nsca_client/targets/valid', 'address', 'nsca://127.0.0.1:15667') conf.set_string('/settings/NSCA/test_nsca_client/targets/valid', 'encryption', '%s' % crypto) conf.set_string('/settings/NSCA/test_nsca_client/targets/valid', 'password', 'pwd-%s' % crypto) conf.set_int('/settings/NSCA/test_nsca_client/targets/valid', 'payload length', length) self.core.reload('test_nsca_client') result = TestResult('Testing: %s/%d' % (crypto, length)) result.add_message(isOpen('localhost', 15667), 'Checking that port is open') for target in ['valid', 'test_rp', 'invalid']: result.add( self.test_one_crypto_full(crypto, status.UNKNOWN, 'unknown', target, length)) result.add( self.test_one_crypto_full(crypto, status.OK, 'ok', target, length)) result.add( self.test_one_crypto_full(crypto, status.WARNING, 'warn', target, length)) result.add( self.test_one_crypto_full(crypto, status.CRITICAL, 'crit', target, length)) return result
def check_bound(self, filter, warn, crit, expected): alias = '%s/%s/%s'%(filter, warn, crit) result = TestResult('Checking %s'%alias) args = ['file=%s'%self.work_path, 'column-split=,', 'filter=%s'%filter, 'warn=%s'%warn, 'crit=%s'%crit] #log("Command: %s"%args) (ret, msg, perf) = self.core.simple_query('check_logfile', args) log("Messge: %s"%msg) log("Perf: %s"%perf) result.add_message(ret == expected, 'Check status', 'Invalid check status: %s'%ret) return result
def check_no_files(self): self.setup_files() result = TestResult('Checking no files') args = ['path=%s\\aaa.txt'%self.work_path] (ret, msg, perf) = self.core.simple_query('check_files', args) #log("Messge: %s"%msg) #log("Perf: %s"%perf) result.add_message(ret == status.UNKNOWN, 'Check that we get correct status back', 'Return status was wrong: %s'%ret) #count = self.get_count(perf) result.assert_equals(msg, 'No files found', 'Validate return message') return result
def check_cli_query(self, query, count, check, ns = None): result = TestResult('Checking CLI query %s'%query) args = ['--select', query, '--simple'] if ns != None: args.extend(['--namespace', ns]) (ret, ns_msgs) = self.core.simple_exec('any', 'wmi', args) result.assert_equals(ret, 1, 'Check that --select returns ok') result.assert_equals(len(ns_msgs), 1, 'Check that --select returns one entry') if len(ns_msgs) > 0: result.add_message(count(ns_msgs[0].splitlines()), 'Check that it contains the right number of rows') result.add_message(check(ns_msgs[0]), 'Check that it contains the right data') return result
def check_files(self, filter, text, expected): alias = '%s: %s'%(text, filter) result = TestResult('Checking %s'%alias) args = ['file=%s'%self.work_path, 'column-spli=,', 'filter=%s'%filter, 'warn=count gt %d'%expected, 'crit=count gt %d'%expected] #log("Command: %s"%args) (ret, msg, perf) = self.core.simple_query('check_logfile', args) #log("Messge: %s"%msg) #log("Perf: %s"%perf) count = self.get_count(perf) result.add_message(count == expected, 'Check that we get correct number of files', 'Invalid result: got %s expected %s'%(count, expected)) result.add_message(ret == status.OK, 'Check that we get correct status back (OK)', 'We did not get a OK back as expected: %s'%ret) return result
def check_cli_query(self, query, count, check, ns = None): result = TestResult('Checking CLI query %s'%query) args = ['--select', query, '--simple'] if ns != None: args.extend(['--namespace', ns]) (ret, ns_msgs) = core.simple_exec('any', 'wmi', args) result.assert_equals(ret, status.OK, 'Check that --select returns ok') result.assert_equals(len(ns_msgs), 1, 'Check that --select returns one entry') if len(ns_msgs) > 0: result.add_message(count(ns_msgs[0].splitlines()), 'Check that it contains the right number of rows') result.add_message(check(ns_msgs[0]), 'Check that it contains the right data') return result
def run_test(self): result = TestResult('Checking CheckEventLog') cache = TestResult('Checking CheckEventLog CACHE') (res, msg, perf) = Core.get().simple_query('CheckEventLogCACHE', ['warn=eq:1', 'crit=eq:2']) cache.assert_equals(res, status.OK, "Validate cache is empty") cache.assert_equals(msg, 'Eventlog check ok', "Validate cache is ok: %s"%msg) a_list = ['a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a'] result.add_message(self.test_create('Application Error', 1000, 'error', 0, 0, 0, a_list), 'Testing to create a log message') sleep(500) result.assert_equals(self.last_message, 'error Application Error: ', 'Verify that message is sent through') result.assert_equals(self.message_count, 1, 'Verify that onlyt one message is sent through') result.add_message(self.test_create('Application Error', 1000, 'info', 2, 1, 5, a_list), 'Testing to create a log message') sleep(500) result.assert_equals(self.last_message, 'info Application Error: ', 'Verify that message is sent through') result.assert_equals(self.message_count, 1, 'Verify that onlyt one message is sent through') (res, msg, perf) = Core.get().simple_query('CheckEventLogCACHE', ['warn=eq:1', 'crit=eq:2']) cache.assert_equals(res, status.CRITICAL, "Validate cache has items") cache.assert_equals(msg, 'error Application Error: , info Application Error: , eventlog: 2 = critical', "Validate cache is ok: %s"%msg) cache.assert_equals(perf, "'eventlog'=2;1;2", "Validate cache is ok: %s"%msg) (res, msg, perf) = Core.get().simple_query('CheckEventLogCACHE', ['warn=eq:1', 'crit=eq:2']) cache.assert_equals(res, status.OK, "Validate cache is empty (again)") cache.assert_equals(msg, 'Eventlog check ok', "Validate cache is ok: %s"%msg) result.add(cache) r = TestResult('Checking filters') r.add(self.test_w_expected('id = 1000 and generated gt 1m', '%generated%', 0)) r.add(self.test_w_expected('id = 1000 and generated gt -1m', '%generated%', 2)) r.add(self.test_w_expected('id = 1000 and generated gt -1m and id = 1000', '%generated%: %id%, %category%', 2)) r.add(self.test_w_expected('id = 1000 and generated gt -1m and category = 1', '%category%', 1)) r.add(self.test_w_expected('id = 1000 and generated gt -1m and category = 0', '%category%', 1)) r.add(self.test_w_expected("id = 1000 and generated gt -1m and level = 'error'", '%level%', 1)) r.add(self.test_w_expected("id = 1000 and generated gt -1m and level = 'info'", '%level%', 1)) result.add(r) r = TestResult('Checking syntax') r.add(self.test_syntax('id = 1000 and generated gt -2m and category = 0', '%source% - %type% - %category%', 'Application Error - error - 0')) r.add(self.test_syntax('id = 1000 and generated gt -2m and category = 1', '%source% - %type% - %category%', 'Application Error - info - 1')) r.add(self.test_syntax('id = 1000 and generated gt -2m and category = 0', '%facility% - %qualifier% - %customer%', '0 - 0 - 0')) r.add(self.test_syntax('id = 1000 and generated gt -2m and category = 1', '%facility% - %qualifier% - %customer%', '5 - 5 - 0')) r.add(self.test_syntax('id = 1000 and generated gt -2m and category = 0', '%rawid% - %severity% - %log%', '1000 - success - Application')) r.add(self.test_syntax('id = 1000 and generated gt -2m and category = 1', '%rawid% - %severity% - %log%', '2147812328 - warning - Application')) r.add(self.test_syntax('id = 1000 and generated gt -2m and category = 0', '%id% - %strings%', '1000 - a, a, a, a, a, a, a, a, a, a, a, a, a, ')) r.add(self.test_syntax('id = 1000 and generated gt -2m and category = 1', '%id% - %strings%', '1000 - a, a, a, a, a, a, a, a, a, a, a, a, a, ')) result.add(r) return result
def check_files(self, filter, text, expected, extra_args): self.setup_files() alias = '%s: %s' % (text, filter) result = TestResult('Checking %s' % alias) args = [ 'path=%s' % self.work_path, 'filter=%s' % filter, 'syntax=%filename%: %size% %write%', 'warn=gt:1', 'crit=gt:3' ] args.extend(extra_args) (ret, msg, perf) = self.core.simple_query('CheckFiles', args) #log("Messge: %s"%msg) #log("Perf: %s"%perf) count = self.get_count(perf) result.add_message( count == expected, 'Check that we get correct number of files', 'Invalid result: got %s expected %s' % (count, expected)) if expected > 3: result.add_message( ret == status.CRITICAL, 'Check that we get correct status back (CRIT)', 'We did not get a CRIT back as expected: %s' % ret) elif expected > 1: result.add_message( ret == status.WARNING, 'Check that we get correct status back (WARN)', 'We did not get a WARN back as expected: %s' % ret) else: result.add_message( ret == status.OK, 'Check that we get correct status back (OK)', 'We did not get a OK back as expected: %s' % ret) return result
def check_no_files(self): self.setup_files() result = TestResult('Checking no files') args = ['path=%s\\aaa.txt' % self.work_path] (ret, msg, perf) = self.core.simple_query('check_files', args) #log("Messge: %s"%msg) #log("Perf: %s"%perf) result.add_message(ret == status.UNKNOWN, 'Check that we get correct status back', 'Return status was wrong: %s' % ret) #count = self.get_count(perf) result.assert_equals(msg, 'No files found', 'Validate return message') return result
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 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) = core.simple_query('CheckProcState', [ 'ShowAll', 'critCount=%s:%d' % (s, asked), '%s=started' % 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), 'Expected %s' % (expected)) return result
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 check_bound(self, filter, warn, crit, expected): alias = '%s/%s/%s' % (filter, warn, crit) result = TestResult('Checking %s' % alias) args = [ 'file=%s' % self.work_path, 'column-split=,', 'filter=%s' % filter, 'warn=%s' % warn, 'crit=%s' % crit ] #log("Command: %s"%args) (ret, msg, perf) = self.core.simple_query('check_logfile', args) log("%s : %s -- %s" % (filter, msg, perf)) result.add_message(ret == expected, 'Check status', 'Invalid check status: %s' % ret) return result
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 submit_via_exec(self, encryption, target, length, source, status, msg, perf, tag): uid = str(uuid.uuid4()) args = [ #'--exec', 'submit', '--alias', uid, '--result', '%d' % status, '--retries', '0', '--message', '%s - %s' % (uid, msg), '--target', target, ] if (target == 'valid'): pass else: args.extend([ '--address', '127.0.0.1:15667', '--encryption', encryption, '--password', 'pwd-%s' % encryption, '--payload-length', '%d' % length, ]) (result_code, result_message) = self.core.simple_exec('test_nsca_client', 'nsca_submit', args) result = TestResult( 'Testing payload submission (via command line exec): %s' % tag) result.add_message(result_code == 0, 'Testing to send message using %s/exec:1' % tag) result.add_message( len(result_message) == 1, 'Testing to send message using %s/exec:2' % tag) if len(result_message) == 1: result.assert_equals( result_message[0], "Submission successful", 'Testing to send message using %s/exec:3' % tag) self.wait_and_validate(uid, result, msg, perf, '%s/exec' % tag) return result
def check_files(self, filter, text, expected): alias = "%s: %s" % (text, filter) result = TestResult("Checking %s" % alias) args = [ "file=%s" % self.work_path, "column-split=,", "filter=%s" % filter, "warn=count gt %d" % expected, "crit=count gt %d" % expected, ] # log("Command: %s"%args) (ret, msg, perf) = self.core.simple_query("check_logfile", args) log("%s : %s -- %s" % (filter, msg, perf)) count = self.get_count(perf) result.add_message(count == expected, "%s - number of files" % filter, "got %s expected %s" % (count, expected)) result.add_message(ret == status.OK, "%s -- status", "got %s expected OK" % ret) return result
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_files(self, filter, text, expected): alias = '%s: %s' % (text, filter) result = TestResult('Checking %s' % alias) args = [ 'file=%s' % self.work_path, 'column-split=,', 'filter=%s' % filter, 'warn=count gt %d' % expected, 'crit=count gt %d' % expected ] #log("Command: %s"%args) (ret, msg, perf) = self.core.simple_query('check_logfile', args) log("%s : %s -- %s" % (filter, msg, perf)) count = self.get_count(perf) result.add_message(count == expected, '%s - number of files' % filter, 'got %s expected %s' % (count, expected)) result.add_message(ret == status.OK, '%s -- status', 'got %s expected OK' % ret) return result
def run_test(self): self.core.load_module('Scheduler', self.sched_alias) result = TestResult() start = time() last_major = 0 elapsed = time()-start while elapsed < 60: if elapsed > 0: log("testing scheduler %d%% (collected %d instance in %d seconds)"%(elapsed/60*100, self.results_count, elapsed)) sleep(2000) elapsed = time()-start result.add_message(True, 'Summary Collected %d instance in %d seconds: %d/s'%(self.results_count, elapsed, self.results_count/elapsed)) self.check_one(result, "rand", 5, 10) self.check_one(result, "1s", 55, 65) self.check_one(result, "short", 10, 14) self.check_one(result, "30s", 1, 3) self.check_one(result, "explicit", 10, 14) self.check_one(result, "10s", 5, 7) return result
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() 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 run_test(self): global time_to_run, check_per_second result = TestResult() start = time() if isinstance(time_to_run, str) and time_to_run == 'infinate': time_to_run = -1 elif isinstance(time_to_run, str): time_to_run = 5 if time_to_run == -1: total_count = -1 else: total_count = check_per_second*time_to_run if time_to_run != -1: self.background = False last_major = 0 while self.results_count < total_count: old_stress_count = self.results_count old_noop_count = self.check_count sleep(5000) result.add_message(True, 'Commands/second: %d/%d'%( (self.results_count-old_stress_count)/5, (self.check_count-old_noop_count)/5 ) ) if (self.results_count*100/total_count) > last_major + 10: last_major = last_major + 10 log('%d%% Complete: %d checks per second <%d/%d>'%(self.results_count*100/total_count, (self.results_count-old_stress_count)/5, self.results_count, total_count)) elapsed = (time() - start) if elapsed == 0: elapsed = 1 result.add_message(True, 'Summary Collected %d instance in %d seconds: %d/s'%(self.results_count, elapsed, self.results_count/elapsed)) else: self.background = True result.add_message(True, 'Test running in background, run py_unittest_collect to collect results at any time.') return result
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 submit_payload(self, encryption, target, length, source, status, msg, perf, tag): message = plugin_pb2.SubmitRequestMessage() message.header.version = plugin_pb2.Common.VERSION_1 message.header.recipient_id = target message.channel = 'nsca_test_outbox' host = message.header.hosts.add() host.id = target if (target == 'valid'): pass else: host.address = "127.0.0.1:15667" enc = host.metadata.add() enc.key = "encryption" enc.value = encryption enc = host.metadata.add() enc.key = "password" enc.value = 'pwd-%s' % encryption enc = host.metadata.add() enc.key = "payload length" enc.value = '%d' % length uid = str(uuid.uuid4()) payload = message.payload.add() payload.result = status payload.command = uid payload.message = '%s - %s' % (uid, msg) payload.source = source (result_code, err) = self.core.submit('nsca_test_outbox', message.SerializeToString()) result = TestResult('Testing payload submission (via API): %s' % tag) result.add_message( len(err) == 0, 'Testing to send message using %s/sbp' % tag, err) self.wait_and_validate(uid, result, msg, perf, '%s/spb' % tag) return result
def check_files(self, filter, text, expected, extra_args): self.setup_files() alias = '%s: %s'%(text, filter) result = TestResult('Checking %s'%alias) args = ['path=%s'%self.work_path, 'filter=%s'%filter, 'syntax=%filename%: %size% %write%', 'warn=gt:1', 'crit=gt:3'] args.extend(extra_args) (ret, msg, perf) = core.simple_query('CheckFiles', args) count = self.get_count(perf) result.add_message(count == expected, 'Check that we get correct number of files', 'Invalid result: got %s expected %s'%(count, expected)) if expected > 3: result.add_message(ret == status.CRITICAL, 'Check that we get correct status back (CRIT)', 'We did not get a CRIT back as expected: %s'%ret) elif expected > 1: result.add_message(ret == status.WARNING, 'Check that we get correct status back (WARN)', 'We did not get a WARN back as expected: %s'%ret) else: result.add_message(ret == status.OK, 'Check that we get correct status back (OK)', 'We did not get a OK back as expected: %s'%ret) return result;
def submit_payload(self, alias, ssl, length, source, status, msg, perf, target): message = plugin_pb2.QueryRequestMessage() message.header.destination_id = target message.header.command = 'nrpe_forward' host = message.header.hosts.add() host.address = "127.0.0.1:15666" host.id = target if (target == 'valid'): pass else: enc = host.metadata.add() enc.key = "use ssl" enc.value = '%s'%ssl enc = host.metadata.add() enc.key = "payload length" enc.value = '%d'%length enc = host.metadata.add() enc.key = "timeout" enc.value = '5' uid = str(uuid.uuid4()) payload = message.payload.add() payload.command = 'check_py_nrpe_test_s' payload.arguments.append(uid) rmsg = self.get_request(uid) rmsg.status = status rmsg.message = msg rmsg.perfdata = perf self.set_request(rmsg) (result_code, response) = self.core.query('ignored', message.SerializeToString()) response_message = plugin_pb2.QueryResponseMessage() response_message.ParseFromString(response) result = TestResult('Testing NRPE: %s for %s'%(alias, target)) found = False for i in range(0,10): if self.has_response(uid): rmsg = self.get_response(uid) #result.add_message(rmsg.got_response, 'Testing to recieve message using %s'%alias) result.add_message(rmsg.got_simple_response, 'Testing to recieve simple message using %s'%alias) result.add_message(len(response_message.payload) == 1, 'Verify that we only get one payload response for %s'%alias, '%s != 1'%len(response_message.payload)) if len(response_message.payload) == 1 and len(response_message.payload[0].lines) == 1: result.assert_equals(response_message.payload[0].result, status, 'Verify that status is sent through %s'%alias) result.assert_equals(response_message.payload[0].lines[0].message, msg, 'Verify that message is sent through %s'%alias) #result.assert_equals(rmsg.perfdata, perf, 'Verify that performance data is sent through') self.del_response(uid) found = True break else: log('Waiting for %s (%s/%s)'%(uid,alias,target)) sleep(500) if not found: result.add_message(False, 'Testing to recieve message using %s'%alias) return result
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(self): global time_to_run, check_per_second result = TestResult() start = time() if isinstance(time_to_run, str) and time_to_run == 'infinate': time_to_run = -1 elif isinstance(time_to_run, str): time_to_run = 5 if time_to_run == -1: total_count = -1 else: total_count = check_per_second * time_to_run if time_to_run != -1: self.background = False last_major = 0 while self.results_count < total_count: old_stress_count = self.results_count old_noop_count = self.check_count sleep(5000) result.add_message( True, 'Commands/second: %d/%d' % ((self.results_count - old_stress_count) / 5, (self.check_count - old_noop_count) / 5)) if (self.results_count * 100 / total_count) > last_major + 10: last_major = last_major + 10 log('%d%% Complete: %d checks per second <%d/%d>' % (self.results_count * 100 / total_count, (self.results_count - old_stress_count) / 5, self.results_count, total_count)) elapsed = (time() - start) if elapsed == 0: elapsed = 1 result.add_message( True, 'Summary Collected %d instance in %d seconds: %d/s' % (self.results_count, elapsed, self.results_count / elapsed)) else: self.background = True result.add_message( True, 'Test running in background, run py_unittest_collect to collect results at any time.' ) return result
def run_test(self): result = TestResult('Checking CheckEventLog') cache = TestResult('Checking CheckEventLog CACHE') (res, msg, perf) = Core.get().simple_query('CheckEventLogCACHE', ['warn=eq:1', 'crit=eq:2']) cache.assert_equals(res, status.OK, "Validate cache is empty") cache.assert_equals(msg, 'Eventlog check ok', "Validate cache is ok: %s"%msg) a_list = ['a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a'] result.add_message(self.test_create('Application Error', 1000, 'error', 'success', 0, 0, a_list), 'Testing to create a log message') result.add_message(self.test_create('Application Error', 1000, 'warning', 'informational', 1, 5, a_list), 'Testing to create a log message') result.add_message(self.test_create('Application Error', 1000, 'success', 'warning', 2, 5, a_list), 'Testing to create a log message') result.add_message(self.test_create('Application Error', 1000, 'info', 'error', 3, 5, a_list), 'Testing to create a log message') for x in range(1,10): sleep(100) if len(self.messages) == 4: break log('Recieved %d messages.'%len(self.messages)) result.assert_equals(len(self.messages), 4, 'Verify that all 4 messages are sent through') for msg in self.messages: if msg.message.startswith('X1'): r = TestResult('Validating message X1') r.assert_equals(msg.message, 'X1 warning Application Error: ', 'Verify message') r.assert_equals(msg.channel, 'pytest_evlog_01', 'Verify channel') r.assert_equals(msg.tag, '001', 'Verify tag') r.assert_equals(msg.status, status.WARNING, 'Verify status') result.add(r) elif msg.message.startswith('X2'): r = TestResult('Validating message X2') r.assert_equals(msg.message, 'X2 success Application Error: ', 'Verify message') r.assert_equals(msg.channel, 'pytest_evlog_02', 'Verify channel') r.assert_equals(msg.tag, '002', 'Verify tag') r.assert_equals(msg.status, status.CRITICAL, 'Verify status') result.add(r) elif msg.message.startswith('X3'): r = TestResult('Validating message X3') r.assert_equals(msg.message, 'X3 info Application Error: ', 'Verify message') r.assert_equals(msg.channel, 'pytest_evlog_01', 'Verify channel') r.assert_equals(msg.tag, '001', 'Verify tag') r.assert_equals(msg.status, status.UNKNOWN, 'Verify status') result.add(r) elif msg.message.startswith('X4'): r = TestResult('Validating message X4') r.assert_equals(msg.message, 'X4 error Application Error: ', 'Verify message') r.assert_equals(msg.channel, 'pytest_evlog_01', 'Verify channel') r.assert_equals(msg.tag, '001', 'Verify tag') r.assert_equals(msg.status, status.OK, 'Verify status') result.add(r) (res, msg, perf) = Core.get().simple_query('CheckEventLogCACHE', ['warn=eq:1', 'crit=eq:4']) cache.assert_equals(res, status.CRITICAL, "Validate cache has items: %s"%msg) cache.assert_equals(msg, 'X4 error Application Error: , X1 warning Application Error: , X2 success Application Error: , X3 info Application Error: , eventlog: 4 = critical', "Validate cache message") cache.assert_equals(perf, "'eventlog'=4;1;4", "Validate cache performance") (res, msg, perf) = Core.get().simple_query('CheckEventLogCACHE', ['warn=eq:1', 'crit=eq:2']) cache.assert_equals(res, status.OK, "Validate cache is empty (again)") cache.assert_equals(msg, 'Eventlog check ok', "Validate cache is ok: %s"%msg) result.add(cache) r = TestResult('Checking filters') r.add(self.test_w_expected('id = 1000 and generated gt 1m', '%generated%', 0)) r.add(self.test_w_expected('id = 1000 and generated gt -1m', '%generated%', 4)) r.add(self.test_w_expected('id = 1000 and generated gt -1m and id = 1000', '%generated%: %id%, %category%', 4)) r.add(self.test_w_expected('id = 1000 and generated gt -1m and category = 1', '%category%', 1)) r.add(self.test_w_expected('id = 1000 and generated gt -1m and category = 0', '%category%', 1)) r.add(self.test_w_expected("id = 1000 and generated gt -1m and level = 'error'", '%level%', 1)) r.add(self.test_w_expected("id = 1000 and generated gt -1m and level = 'info'", '%level%', 1)) result.add(r) r = TestResult('Checking syntax') r.add(self.test_syntax('id = 1000 and generated gt -2m and category = 0', '%source% - %type% - %category%', 'Application Error - error - 0')) r.add(self.test_syntax('id = 1000 and generated gt -2m and category = 1', '%source% - %type% - %category%', 'Application Error - warning - 1')) r.add(self.test_syntax('id = 1000 and generated gt -2m and category = 2', '%source% - %type% - %category%', 'Application Error - success - 2')) r.add(self.test_syntax('id = 1000 and generated gt -2m and category = 3', '%source% - %type% - %category%', 'Application Error - info - 3')) r.add(self.test_syntax('id = 1000 and generated gt -2m and category = 0', '%facility% - %qualifier% - %customer%', '0 - 0 - 0')) r.add(self.test_syntax('id = 1000 and generated gt -2m and category = 1', '%facility% - %qualifier% - %customer%', '5 - 5 - 0')) r.add(self.test_syntax('id = 1000 and generated gt -2m and category = 0', '%rawid% - %severity% - %log%', '1000 - success - Application')) r.add(self.test_syntax('id = 1000 and generated gt -2m and category = 1', '%rawid% - %severity% - %log%', '1074070504 - informational - Application')) r.add(self.test_syntax('id = 1000 and generated gt -2m and category = 2', '%rawid% - %severity% - %log%', '2147812328 - warning - Application')) r.add(self.test_syntax('id = 1000 and generated gt -2m and category = 3', '%rawid% - %severity% - %log%', '3221554152 - error - Application')) r.add(self.test_syntax('id = 1000 and generated gt -2m and category = 0', '%id% - %strings%', '1000 - a, a, a, a, a, a, a, a, a, a, a, a, a, ')) r.add(self.test_syntax('id = 1000 and generated gt -2m and category = 1', '%id% - %strings%', '1000 - a, a, a, a, a, a, a, a, a, a, a, a, a, ')) result.add(r) return result
def run_test_counters(self): result = TestResult('Checking CheckCounter') (result_code, result_message) = core.simple_exec('any', 'pdh', ['--list', '--porcelain']) 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 = [] for x in range(1, 10): try: str = random.choice(data) (alias, counter, message) = str.split(',', 2) (retcode, retmessage, retperf) = core.simple_query('CheckCounter', [ 'index', 'ShowAll', 'MaxWarn=10', 'Counter:001=%s' % counter ]) result.add_message(retcode != status.UNKNOWN, 'Queried normal: %s' % counter) result.add_message( len(retmessage) > 0, 'Queried normal (got message): %s' % retmessage) result.add_message( len(retperf) > 0, 'Queried normal (got perf): %s' % retperf) if retcode != status.UNKNOWN: counters.append('Counter:%d=%s' % (x, counter)) except Exception as e: result.add_message(False, 'Invalid counter found "%s": %s' % (str, e)) args = ['index', 'ShowAll', 'MaxWarn=10'] args.extend(counters) (retcode, retmessage, retperf) = core.simple_query('CheckCounter', args) result.add_message( retcode != status.UNKNOWN, 'Queried normal list of %d counters' % len(counters)) result.add_message( len(retmessage) > 0, 'Queried normal (got message): %s' % retmessage) result.add_message( len(retperf) > 0, 'Queried normal (got perf): %s' % retperf) result.add_message( len(counters) == len(retperf.split(' ')), 'Got all responses: %d' % len(counters)) return result
def run_test(self): result = TestResult('Checking CheckEventLog') cache = TestResult('Checking CheckEventLog CACHE') (res, msg, perf) = Core.get().simple_query('CheckEventLogCACHE', ['warn=eq:1', 'crit=eq:2']) cache.assert_equals(res, status.OK, "Validate cache is empty") cache.assert_equals(msg, 'Eventlog check ok', "Validate cache is ok: %s" % msg) a_list = [ 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a' ] result.add_message( self.test_create('Application Error', 1000, 'error', 'success', 0, 0, a_list), 'Testing to create a log message') result.add_message( self.test_create('Application Error', 1000, 'warning', 'informational', 1, 5, a_list), 'Testing to create a log message') result.add_message( self.test_create('Application Error', 1000, 'success', 'warning', 2, 5, a_list), 'Testing to create a log message') result.add_message( self.test_create('Application Error', 1000, 'info', 'error', 3, 5, a_list), 'Testing to create a log message') for x in range(1, 10): sleep(100) if len(self.messages) == 4: break log('Recieved %d messages.' % len(self.messages)) result.assert_equals(len(self.messages), 4, 'Verify that all 4 messages are sent through') for msg in self.messages: if msg.message.startswith('X1'): r = TestResult('Validating message X1') r.assert_equals(msg.message, 'X1 warning Application Error: ', 'Verify message') r.assert_equals(msg.channel, 'pytest_evlog_01', 'Verify channel') r.assert_equals(msg.tag, '001', 'Verify tag') r.assert_equals(msg.status, status.WARNING, 'Verify status') result.add(r) elif msg.message.startswith('X2'): r = TestResult('Validating message X2') r.assert_equals(msg.message, 'X2 success Application Error: ', 'Verify message') r.assert_equals(msg.channel, 'pytest_evlog_02', 'Verify channel') r.assert_equals(msg.tag, '002', 'Verify tag') r.assert_equals(msg.status, status.CRITICAL, 'Verify status') result.add(r) elif msg.message.startswith('X3'): r = TestResult('Validating message X3') r.assert_equals(msg.message, 'X3 info Application Error: ', 'Verify message') r.assert_equals(msg.channel, 'pytest_evlog_01', 'Verify channel') r.assert_equals(msg.tag, '001', 'Verify tag') r.assert_equals(msg.status, status.UNKNOWN, 'Verify status') result.add(r) elif msg.message.startswith('X4'): r = TestResult('Validating message X4') r.assert_equals(msg.message, 'X4 error Application Error: ', 'Verify message') r.assert_equals(msg.channel, 'pytest_evlog_01', 'Verify channel') r.assert_equals(msg.tag, '001', 'Verify tag') r.assert_equals(msg.status, status.OK, 'Verify status') result.add(r) (res, msg, perf) = Core.get().simple_query('CheckEventLogCACHE', ['warn=eq:1', 'crit=eq:4']) cache.assert_equals(res, status.CRITICAL, "Validate cache has items: %s" % msg) cache.assert_equals( msg, 'X4 error Application Error: , X1 warning Application Error: , X2 success Application Error: , X3 info Application Error: , eventlog: 4 = critical', "Validate cache message") cache.assert_equals(perf, "'eventlog'=4;1;4", "Validate cache performance") (res, msg, perf) = Core.get().simple_query('CheckEventLogCACHE', ['warn=eq:1', 'crit=eq:2']) cache.assert_equals(res, status.OK, "Validate cache is empty (again)") cache.assert_equals(msg, 'Eventlog check ok', "Validate cache is ok: %s" % msg) result.add(cache) r = TestResult('Checking filters') r.add( self.test_w_expected('id = 1000 and generated gt 1m', '%generated%', 0)) r.add( self.test_w_expected('id = 1000 and generated gt -1m', '%generated%', 4)) r.add( self.test_w_expected( 'id = 1000 and generated gt -1m and id = 1000', '%generated%: %id%, %category%', 4)) r.add( self.test_w_expected( 'id = 1000 and generated gt -1m and category = 1', '%category%', 1)) r.add( self.test_w_expected( 'id = 1000 and generated gt -1m and category = 0', '%category%', 1)) r.add( self.test_w_expected( "id = 1000 and generated gt -1m and level = 'error'", '%level%', 1)) r.add( self.test_w_expected( "id = 1000 and generated gt -1m and level = 'info'", '%level%', 1)) result.add(r) r = TestResult('Checking syntax') r.add( self.test_syntax('id = 1000 and generated gt -2m and category = 0', '%source% - %type% - %category%', 'Application Error - error - 0')) r.add( self.test_syntax('id = 1000 and generated gt -2m and category = 1', '%source% - %type% - %category%', 'Application Error - warning - 1')) r.add( self.test_syntax('id = 1000 and generated gt -2m and category = 2', '%source% - %type% - %category%', 'Application Error - success - 2')) r.add( self.test_syntax('id = 1000 and generated gt -2m and category = 3', '%source% - %type% - %category%', 'Application Error - info - 3')) r.add( self.test_syntax('id = 1000 and generated gt -2m and category = 0', '%facility% - %qualifier% - %customer%', '0 - 0 - 0')) r.add( self.test_syntax('id = 1000 and generated gt -2m and category = 1', '%facility% - %qualifier% - %customer%', '5 - 5 - 0')) r.add( self.test_syntax('id = 1000 and generated gt -2m and category = 0', '%rawid% - %severity% - %log%', '1000 - success - Application')) r.add( self.test_syntax('id = 1000 and generated gt -2m and category = 1', '%rawid% - %severity% - %log%', '1074070504 - informational - Application')) r.add( self.test_syntax('id = 1000 and generated gt -2m and category = 2', '%rawid% - %severity% - %log%', '2147812328 - warning - Application')) r.add( self.test_syntax('id = 1000 and generated gt -2m and category = 3', '%rawid% - %severity% - %log%', '3221554152 - error - Application')) r.add( self.test_syntax('id = 1000 and generated gt -2m and category = 0', '%id% - %strings%', '1000 - a, a, a, a, a, a, a, a, a, a, a, a, a, ')) r.add( self.test_syntax('id = 1000 and generated gt -2m and category = 1', '%id% - %strings%', '1000 - a, a, a, a, a, a, a, a, a, a, a, a, a, ')) result.add(r) return result
def run_test_counters(self): result = TestResult('Checking CheckCounter') (result_code, result_message) = core.simple_exec('any', 'pdh', ['--list', '--porcelain']) 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 = [] for x in range(1,10): try: str = random.choice(data) (alias, counter, message) = str.split(',', 2) (retcode, retmessage, retperf) = core.simple_query('CheckCounter', ['index', 'ShowAll', 'MaxWarn=10', 'Counter:001=%s'%counter]) result.add_message(retcode != status.UNKNOWN, 'Queried normal: %s'%counter) result.add_message(len(retmessage) > 0, 'Queried normal (got message): %s'%retmessage) result.add_message(len(retperf) > 0, 'Queried normal (got perf): %s'%retperf) if retcode != status.UNKNOWN: counters.append('Counter:%d=%s'%(x, counter)) except Exception as e: result.add_message(False, 'Invalid counter found "%s": %s'%(str, e)) args = ['index', 'ShowAll', 'MaxWarn=10'] args.extend(counters) (retcode, retmessage, retperf) = core.simple_query('CheckCounter', args) result.add_message(retcode != status.UNKNOWN, 'Queried normal list of %d counters'%len(counters)) result.add_message(len(retmessage) > 0, 'Queried normal (got message): %s'%retmessage) result.add_message(len(retperf) > 0, 'Queried normal (got perf): %s'%retperf) result.add_message(len(counters) == len(retperf.split(' ')), 'Got all responses: %d'%len(counters)) return result