Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
	def submit_payload(self, encryption, target, length, source, status, msg, perf, tag):
		message = plugin_pb2.SubmitRequestMessage()

		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
		line = payload.lines.add()
		line.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.assert_equals(result_code, True, 'Submission (%s) return ok status'%tag)
		result.assert_equals(err, 'Submission successful', 'Submission (%s) returned correct status'%tag)
		self.wait_and_validate(uid, result, msg, perf, '%s/spb'%tag)
		return result
Ejemplo n.º 3
0
	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
Ejemplo n.º 4
0
	def run_test(self):
		result = TestResult('Testing W32 file systems')
		result.add(self.check_cli_ns())
		result.add(self.check_cli_ls(None, 'Win32_Processor', 'LogFileEventConsumer'))
		result.add(self.check_cli_ls('root\subscription', 'LogFileEventConsumer', 'Win32_Processor'))
		result.add(self.check_cli_query('SELECT DeviceId, AddressWidth, Caption, Name FROM Win32_Processor', lambda x:x>1, lambda x:'CPU0' in x))
		return result
Ejemplo n.º 5
0
	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
Ejemplo n.º 6
0
    def do_one_test(self, ssl=True):
        conf = Settings.get()
        conf.set_bool('/settings/nscp/test_nscp_server', 'use ssl', ssl)
        conf.set_bool('/settings/nscp/test_nscp_server', 'allow arguments',
                      True)
        # TODO: conf.set_string('/settings/nscp/test_nscp_server', 'certificate', ssl)
        core.reload('test_nscp_server')

        conf.set_string('/settings/nscp/test_nscp_client/targets/default',
                        'address', 'nscp://127.0.0.1:35668')
        conf.set_bool('/settings/nscp/test_nscp_client/targets/default',
                      'use ssl', not ssl)

        conf.set_string('/settings/nscp/test_nscp_client/targets/invalid',
                        'address', 'nscp://127.0.0.1:25668')
        conf.set_bool('/settings/nscp/test_nscp_client/targets/invalid',
                      'use ssl', not ssl)

        conf.set_string('/settings/nscp/test_nscp_client/targets/valid',
                        'address', 'nscp://127.0.0.1:15668')
        conf.set_bool('/settings/nscp/test_nscp_client/targets/valid',
                      'use ssl', ssl)
        core.reload('test_nscp_client')

        result = TestResult()
        #result.add_message(isOpen('127.0.0.1', 15668), '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, 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
Ejemplo n.º 7
0
	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
Ejemplo n.º 8
0
	def run_test(self):
		result = TestResult()
		result.add(self.do_one_test(ssl=False))
		#result.add(self.do_one_test(ssl=True))
		#result.add(self.do_one_test(ssl=True, length=4096))
		#result.add(self.do_one_test(ssl=True, length=65536))
		#result.add(self.do_one_test(ssl=True, length=1048576))
		return result
Ejemplo n.º 9
0
 def run_test(self):
     result = TestResult()
     result.add(self.do_one_test(ssl=False))
     #result.add(self.do_one_test(ssl=True))
     #result.add(self.do_one_test(ssl=True, length=4096))
     #result.add(self.do_one_test(ssl=True, length=65536))
     #result.add(self.do_one_test(ssl=True, length=1048576))
     return result
Ejemplo n.º 10
0
 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
Ejemplo n.º 11
0
	def run_test(self):
		result = TestResult()
		cryptos = ["none", "xor", "des", "3des", "cast128", "xtea", "blowfish", "twofish", "rc2", "aes", "aes256", "aes192", "aes128", "serpent", "gost", "3way"]
		for c in cryptos:
			for l in [128, 512, 1024, 4096]:
				result.add(self.test_one_crypto(c, l))
			#result.add(self.test_one_crypto(c))
		
		return result
Ejemplo n.º 12
0
 def test_syntax(self, filter, syntax, expected):
     result = TestResult('Validating syntax: %s' % syntax)
     (res, msg, perf) = self.core.simple_query('CheckEventLog', [
         'file=Application', 'warn=ne:1',
         'filter=%s' % filter,
         'syntax=%s' % syntax, 'descriptions', 'scan-range=-10m'
     ])
     result.assert_equals(msg, expected,
                          "Validate message rendering syntax: %s" % msg)
     return result
Ejemplo n.º 13
0
	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
Ejemplo n.º 14
0
 def test_one(self, ssl=True, state=status.UNKNOWN, tag='TODO'):
     result = TestResult('Testing NSCP: %s/%s with various targets' %
                         (ssl, tag))
     #for t in ['valid', 'test_rp', 'invalid']:
     for t in ['valid']:
         result.add(
             self.submit_payload('%s/%s' % (ssl, tag), ssl,
                                 '%ssrc%s' % (tag, tag), state,
                                 '%smsg%s' % (tag, tag), '', t))
     return result
Ejemplo n.º 15
0
	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, 
			'--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) = 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, len(result_message))
		if len(result_message) > 0:
			result.add_message(len(result_message[0]) == 0, 'Testing to send message using %s/exec:3'%tag, result_message[0])
			self.wait_and_validate(uid, result, msg, perf, '%s/exec'%tag)
		else:
			result.add_message(False, 'Sending faliled: giving up on %s'%tag)
		return result
Ejemplo n.º 16
0
	def run_test(self):
		result = TestResult('Testing W32 file systems')
		result.add(self.check_cli_ns())
		result.add(self.check_cli_ls(None, 'Win32_Processor', 'LogFileEventConsumer'))
		result.add(self.check_cli_ls('root\subscription', 'LogFileEventConsumer', 'Win32_Processor'))
		result.add(self.check_cli_query('SELECT DeviceId, AddressWidth, Caption, Name FROM Win32_Processor', lambda x:x>1, lambda x:'CPU0' in x))
		return result
Ejemplo n.º 17
0
	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
Ejemplo n.º 18
0
	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
Ejemplo n.º 19
0
	def check_cli_ls(self, ns, expected, missing):
		result = TestResult('Checking CLI list-classes %s'%ns)
		args = ['--list-classes', '--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 --list-classes returns ok')
		result.assert_equals(len(ns_msgs), 1, 'Check that --list-classes returns one entry')
		if len(ns_msgs) > 0:
			result.assert_contains(ns_msgs[0], expected, 'Check that --list-classes contains %s'%expected)
			result.assert_not_contains(ns_msgs[0], missing, 'Check that --list-classes does not contains %s'%missing)
		return result
Ejemplo n.º 20
0
	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
Ejemplo n.º 21
0
    def run_test(self):
        result = TestResult()
        cryptos = [
            "none", "xor", "des", "3des", "cast128", "xtea", "blowfish",
            "twofish", "rc2", "aes", "aes256", "aes192", "aes128", "serpent",
            "gost", "3way"
        ]
        for c in cryptos:
            for l in [128, 512, 1024, 4096]:
                result.add(self.test_one_crypto(c, l))
            #result.add(self.test_one_crypto(c))

        return result
Ejemplo n.º 22
0
 def test_create(self, source, id, level, severity, category, facility,
                 arguments):
     result = TestResult(
         'Creating log message: i:%d, l:%s, s:%s, c:%d, f:%d' %
         (id, level, severity, category, facility))
     args = [
         '--source',
         source,
         '--id',
         id,  # Any number (corresponds with message identifier)								-- Identifies message
         '--level',
         level,  # error(1), warning(2), success(0), info(4), auditSuccess(8), auditFailure(10)	-- Loglevel severity (ie log level)
         '--severity',
         severity,  # success(0), informational(1), warning(2), error(3) 							-- Developer severity (ie classification)
         '--category',
         category,  #
         '--facility',
         facility  #
     ]
     for f in arguments:
         args.append('--argument')
         args.append(f)
     (ret, msg) = self.core.simple_exec('eventlog', 'insert', args)
     result.assert_equals(ret, 0, 'return code')
     result.assert_equals(len(msg), 1, 'Message length')
     if len(msg) == 1:
         result.assert_equals(msg[0], 'Message reported successfully',
                              'Status message')
     return result
Ejemplo n.º 23
0
 def test_w_expected(self, filter, syntax, expected):
     result = TestResult('Validating filter: %s' % filter)
     (res, msg, perf) = Core.get().simple_query('CheckEventLog', [
         'file=Application', 'debug=true',
         'warn=ne:%d' % expected,
         'crit=ne:%d' % expected,
         'filter=%s' % filter,
         'syntax=%s' % syntax
     ])
     result.assert_equals(res, status.OK,
                          "Validate status OK for %s" % filter)
     (res, msg, perf) = Core.get().simple_query('CheckEventLog', [
         'file=Application', 'debug=true',
         'warn=eq:%d' % expected,
         'crit=ne:%d' % expected,
         'filter=%s' % filter,
         'syntax=%s' % syntax
     ])
     result.assert_equals(res, status.WARNING,
                          "Validate status OK for %s" % filter)
     (res, msg, perf) = Core.get().simple_query('CheckEventLog', [
         'file=Application', 'debug=true',
         'warn=eq:%d' % expected,
         'crit=eq:%d' % expected,
         'filter=%s' % filter,
         'syntax=%s' % syntax
     ])
     result.assert_equals(res, status.CRITICAL,
                          "Validate status CRIT for %s" % filter)
     return result
Ejemplo n.º 24
0
    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
Ejemplo n.º 25
0
 def test_w_expected(self, filter, syntax, expected):
     result = TestResult('Validating filter: %s (%d)' % (filter, expected))
     (res, msg, perf) = self.core.simple_query('CheckEventLog', [
         'file=Application', 'debug=false',
         'warn=gt:%d' % expected,
         'crit=gt:%d' % expected,
         'filter=%s' % filter,
         'syntax=%s' % syntax, 'scan-range=-10m',
         'top-syntax=${status} ${count}==%d: ${list}' % expected
     ])
     result.assert_equals(res, status.OK,
                          "Validate status OK for %s" % filter)
     (res, msg, perf) = self.core.simple_query('CheckEventLog', [
         'file=Application', 'debug=false',
         'warn=eq:%d' % expected,
         'crit=gt:%d' % expected,
         'filter=%s' % filter,
         'syntax=%s' % syntax, 'scan-range=-10m',
         'top-syntax=${status} ${count}==%d: ${list}' % expected
     ])
     result.assert_equals(res, status.WARNING,
                          "Validate status OK for %s" % filter)
     (res, msg, perf) = self.core.simple_query('CheckEventLog', [
         'file=Application', 'debug=false',
         'warn=eq:%d' % expected,
         'crit=eq:%d' % expected,
         'filter=%s' % filter,
         'syntax=%s' % syntax, 'scan-range=-10m',
         'top-syntax=${status} ${count}==%d: ${list}' % expected
     ])
     result.assert_equals(res, status.CRITICAL,
                          "Validate status CRIT for %s" % filter)
     return result
Ejemplo n.º 26
0
 def check_ts_query(self, task, code):
     result = TestResult('Checking task %s'%task)
     for i in [0, 1, 2, 3, 4]:
         # check_tasksched "filter=title = 'NSCPSample_CRIT'" "warn=exit_code != 3"
         args = ["filter=title = 'NSCPSample_%s'"%task, 
             "warn=exit_code = %d"%i]
         log_debug(', '.join(args))
         (ret, msg, perf) = self.core.simple_query('check_tasksched', args)
         
         if i == code:
             result.assert_equals(ret, status.WARNING, 'Verify WARN result: %s'%msg)
         else:
             result.assert_equals(ret, status.OK, 'Verify OK result: %s'%msg)
         
     return result
Ejemplo n.º 27
0
 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
Ejemplo n.º 28
0
 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
Ejemplo n.º 29
0
	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
Ejemplo n.º 30
0
	def check_cli_ns(self):
		result = TestResult('Checking CLI list-ns')
		(ret, ns_msgs) = self.core.simple_exec('any', 'wmi', ['--list-all-ns', '--namespace', 'root'])
		result.assert_equals(ret, 1, 'Check that --list-all-ns returns ok')
		result.assert_equals(len(ns_msgs), 1, 'Check that --list-all-ns returns one entry')
		if len(ns_msgs) > 0:
			result.assert_contains(ns_msgs[0], 'CIMV2', 'Check that --list-all-ns contains cimv2')
		return result
Ejemplo n.º 31
0
 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
Ejemplo n.º 32
0
	def do_one_test(self, script, expected = status.OK, message = "Foo Bar", args=[], cleanup=True):
		result = TestResult('%s (%s)'%(script, args))
		(ret, msg, perf) = self.core.simple_query(script, args)
		if cleanup and os.name != 'nt':
			message = message.replace('"', '')
			message = message.replace('$ARG1$', '$')
			message = message.replace('$ARG2$', '$')
			message = message.replace('$ARG3$', '$')
			message = message.replace('\r', '')
		result.assert_equals(ret, expected, 'Validate return code for %s'%script)
		result.assert_equals(msg, message, 'Validate return message for %s'%script)
		if msg != message:
			diff = difflib.ndiff(msg.splitlines(1), message.splitlines(1))
			print ''.join(diff),
		return result
Ejemplo n.º 33
0
	def check_cli_ls(self, ns, expected, missing):
		result = TestResult('Checking CLI list-classes %s'%ns)
		args = ['--list-classes', '--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 --list-classes returns ok')
		result.assert_equals(len(ns_msgs), 1, 'Check that --list-classes returns one entry')
		if len(ns_msgs) > 0:
			result.assert_contains(ns_msgs[0], expected, 'Check that --list-classes contains %s'%expected)
			result.assert_not_contains(ns_msgs[0], missing, 'Check that --list-classes does not contains %s'%missing)
		return result
Ejemplo n.º 34
0
	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
Ejemplo n.º 35
0
 def test_one(self, ssl=True, length=1024, state=status.UNKNOWN, tag="TODO"):
     result = TestResult("Testing NRPE: %s/%s/%s with various targets" % (ssl, length, tag))
     for t in ["valid", "test_rp", "invalid"]:
         result.add(
             self.submit_payload(
                 "%s/%s/%s" % (ssl, length, tag),
                 ssl,
                 length,
                 "%ssrc%s" % (tag, tag),
                 state,
                 "%smsg%s" % (tag, tag),
                 "",
                 t,
             )
         )
     return result
Ejemplo n.º 36
0
 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
Ejemplo n.º 37
0
	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
Ejemplo n.º 38
0
	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
Ejemplo n.º 39
0
	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
Ejemplo n.º 40
0
 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
Ejemplo n.º 41
0
	def check_cli_ns(self):
		result = TestResult('Checking CLI list-ns')
		(ret, ns_msgs) = core.simple_exec('any', 'wmi', ['--list-all-ns', '--namespace', 'root'])
		result.assert_equals(ret, status.OK, 'Check that --list-all-ns returns ok')
		result.assert_equals(len(ns_msgs), 1, 'Check that --list-all-ns returns one entry')
		if len(ns_msgs) > 0:
			result.assert_contains(ns_msgs[0], 'CIMV2', 'Check that --list-all-ns contains cimv2')
		return result
Ejemplo n.º 42
0
	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
Ejemplo n.º 43
0
	def run_test_proc(self):
		result = TestResult('Checking CheckProcState')
		
		for j in range(0,3):
			result.append(self.test_one_proc_int('notepad.exe', 0, j))
		
		pids = []
		for i in range(1,4):
			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))

		for p in pids:
			subprocess.Popen("taskkill /F /T /PID %i"%p , shell=True)

		return result
Ejemplo n.º 44
0
	def test_w_expected(self, filter, syntax, expected):
		result = TestResult('Validating filter: %s (%d)'%(filter, expected))
		(res, msg, perf) = self.core.simple_query('CheckEventLog', ['file=Application', 'debug=false', 'warn=gt:%d'%expected, 'crit=gt:%d'%expected, 'filter=%s'%filter, 'syntax=%s'%syntax, 'scan-range=-10m', 'top-syntax=${status} ${count}==%d: ${list}'%expected])
		result.assert_equals(res, status.OK, "Validate status OK for %s"%filter)
		(res, msg, perf) = self.core.simple_query('CheckEventLog', ['file=Application', 'debug=false', 'warn=eq:%d'%expected, 'crit=gt:%d'%expected, 'filter=%s'%filter, 'syntax=%s'%syntax, 'scan-range=-10m', 'top-syntax=${status} ${count}==%d: ${list}'%expected])
		result.assert_equals(res, status.WARNING, "Validate status OK for %s"%filter)
		(res, msg, perf) = self.core.simple_query('CheckEventLog', ['file=Application', 'debug=false', 'warn=eq:%d'%expected, 'crit=eq:%d'%expected, 'filter=%s'%filter, 'syntax=%s'%syntax, 'scan-range=-10m', 'top-syntax=${status} ${count}==%d: ${list}'%expected])
		result.assert_equals(res, status.CRITICAL, "Validate status CRIT for %s"%filter)
		return result
Ejemplo n.º 45
0
	def test_w_expected(self, filter, syntax, expected):
		result = TestResult('Validating filter: %s'%filter)
		(res, msg, perf) = Core.get().simple_query('CheckEventLog', ['file=Application', 'debug=true', 'warn=ne:%d'%expected, 'crit=ne:%d'%expected, 'filter=%s'%filter, 'syntax=%s'%syntax])
		result.assert_equals(res, status.OK, "Validate status OK for %s"%filter)
		(res, msg, perf) = Core.get().simple_query('CheckEventLog', ['file=Application', 'debug=true', 'warn=eq:%d'%expected, 'crit=ne:%d'%expected, 'filter=%s'%filter, 'syntax=%s'%syntax])
		result.assert_equals(res, status.WARNING, "Validate status OK for %s"%filter)
		(res, msg, perf) = Core.get().simple_query('CheckEventLog', ['file=Application', 'debug=true', 'warn=eq:%d'%expected, 'crit=eq:%d'%expected, 'filter=%s'%filter, 'syntax=%s'%syntax])
		result.assert_equals(res, status.CRITICAL, "Validate status CRIT for %s"%filter)
		return result
Ejemplo n.º 46
0
	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;
Ejemplo n.º 47
0
    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
Ejemplo n.º 48
0
    def do_one_test(self,
                    script,
                    expected=status.OK,
                    message="Foo Bar",
                    args=[],
                    cleanup=True):
        result = TestResult('%s (%s)' % (script, args))
        (ret, msg, perf) = self.core.simple_query(script, args)
        if cleanup and os.name != 'nt':
            message = message.replace('"', '')
            message = message.replace('$ARG1$', '$')
            message = message.replace('$ARG2$', '$')
            message = message.replace('$ARG3$', '$')

        message = message.replace('\r', '\n')
        message = message.replace('\n\n', '\n')
        msg = msg.replace('\r', '\n')
        msg = msg.replace('\n\n', '\n')

        result.assert_equals(ret, expected,
                             'Validate return code for %s' % script)
        result.assert_equals(msg, message,
                             'Validate return message for %s' % script)
        if msg != message:
            diff = difflib.ndiff(msg.splitlines(1), message.splitlines(1))
            for l in diff:
                log_error(l)
        return result
Ejemplo n.º 49
0
    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
Ejemplo n.º 50
0
    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
Ejemplo n.º 51
0
	def do_one_test(self, ssl=True):
		conf = Settings.get()
		conf.set_bool('/settings/nscp/test_nscp_server', 'use ssl', ssl)
		conf.set_bool('/settings/nscp/test_nscp_server', 'allow arguments', True)
		# TODO: conf.set_string('/settings/nscp/test_nscp_server', 'certificate', ssl)
		core.reload('test_nscp_server')

		conf.set_string('/settings/nscp/test_nscp_client/targets/default', 'address', 'nscp://127.0.0.1:35668')
		conf.set_bool('/settings/nscp/test_nscp_client/targets/default', 'use ssl', not ssl)

		conf.set_string('/settings/nscp/test_nscp_client/targets/invalid', 'address', 'nscp://127.0.0.1:25668')
		conf.set_bool('/settings/nscp/test_nscp_client/targets/invalid', 'use ssl', not ssl)

		conf.set_string('/settings/nscp/test_nscp_client/targets/valid', 'address', 'nscp://127.0.0.1:15668')
		conf.set_bool('/settings/nscp/test_nscp_client/targets/valid', 'use ssl', ssl)
		core.reload('test_nscp_client')
		
		result = TestResult()
		#result.add_message(isOpen('127.0.0.1', 15668), '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, 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
Ejemplo n.º 52
0
    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
Ejemplo n.º 53
0
 def test_one_crypto_full(self, encryption, state, key, target, length):
     result = TestResult('Testing %s/%s' % (encryption, key))
     result.add(
         self.submit_payload(
             encryption, target, length, '%ssrc%s' % (key, key), state,
             '%smsg%s' % (key, key), '',
             '%s/%s/%d/%s' % (state, encryption, length, target)))
     result.add(
         self.submit_via_exec(
             encryption, target, length, '%ssrc%s' % (key, key), state,
             '%smsg%s' % (key, key), '',
             '%s/%s/%d/%s' % (state, encryption, length, target)))
     return result
Ejemplo n.º 54
0
    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
Ejemplo n.º 55
0
 def check_ts_query(self, task, code):
     result = TestResult('Checking task %s'%task)
     for i in [0, 1, 2, 3, 4]:
         # check_tasksched "filter=title = 'NSCPSample_CRIT'" "warn=exit_code != 3"
         args = ["filter=title = 'NSCPSample_%s'"%task, 
             "warn=exit_code = %d"%i]
         log_debug(', '.join(args))
         (ret, msg, perf) = self.core.simple_query('check_tasksched', args)
         
         if i == code:
             result.assert_equals(ret, status.WARNING, 'Verify WARN result: %s'%msg)
         else:
             result.assert_equals(ret, status.OK, 'Verify OK result: %s'%msg)
         
     return result
Ejemplo n.º 56
0
 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
Ejemplo n.º 57
0
    def run_test_proc(self):
        result = TestResult('Checking CheckProcState')

        for j in range(0, 3):
            result.append(self.test_one_proc_int('notepad.exe', 0, j))

        pids = []
        for i in range(1, 4):
            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))

        for p in pids:
            subprocess.Popen("taskkill /F /T /PID %i" % p, shell=True)

        return result
Ejemplo n.º 58
0
 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
Ejemplo n.º 59
0
    def submit_payload(self, encryption, target, length, source, status, msg,
                       perf, tag):
        message = plugin_pb2.SubmitRequestMessage()

        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
        line = payload.lines.add()
        line.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.assert_equals(result_code, True,
                             'Submission (%s) return ok status' % tag)
        result.assert_equals(err, 'Submission successful',
                             'Submission (%s) returned correct status' % tag)
        self.wait_and_validate(uid, result, msg, perf, '%s/spb' % tag)
        return result