2
# -*- mode: python; coding: utf-8; after-save-hook: (lambda () (let ((command (if (and (boundp 'tramp-file-name-structure) (string-match (car tramp-file-name-structure) (buffer-file-name))) (tramp-file-name-localname (tramp-dissect-file-name (buffer-file-name))) (buffer-file-name)))) (if (= (shell-command (format "%s --check" (shell-quote-argument command)) "*Test*") 0) (let ((w (get-buffer-window "*Test*"))) (if w (delete-window w)) (kill-buffer "*Test*")) (display-buffer "*Test*")))); -*-
2
# -*- mode: python; coding: utf-8 -*-
4
4
# Mandos Monitor - Control and monitor the Mandos server
6
# Copyright © 2008-2019 Teddy Hogeborn
7
# Copyright © 2008-2019 Björn Påhlsson
6
# Copyright © 2008-2017 Teddy Hogeborn
7
# Copyright © 2008-2017 Björn Påhlsson
9
9
# This file is part of Mandos.
48
log = logging.getLogger(sys.argv[0])
49
logging.basicConfig(level="INFO", # Show info level messages
50
format="%(message)s") # Show basic log messages
52
46
if sys.version_info.major == 2:
64
58
"Interval": "Interval",
66
60
"Fingerprint": "Fingerprint",
68
61
"CheckerRunning": "Check Is Running",
69
62
"LastEnabled": "Last Enabled",
70
63
"ApprovalPending": "Approval Is Pending",
351
344
if options.all and not has_actions(options):
352
345
parser.error("--all requires an action.")
349
fail_count, test_count = doctest.testmod()
350
sys.exit(os.EX_OK if fail_count == 0 else 1)
355
353
bus = dbus.SystemBus()
356
354
mandos_dbus_objc = bus.get_object(busname, server_path)
357
355
except dbus.exceptions.DBusException:
358
log.critical("Could not connect to Mandos server")
356
print("Could not connect to Mandos server", file=sys.stderr)
361
359
mandos_serv = dbus.Interface(mandos_dbus_objc,
380
378
os.dup2(stderrcopy, sys.stderr.fileno())
381
379
os.close(stderrcopy)
382
380
except dbus.exceptions.DBusException as e:
383
log.critical("Failed to access Mandos server through D-Bus:"
381
print("Access denied: "
382
"Accessing mandos server through D-Bus: {}".format(e),
387
386
# Compile dict of (clients: properties) to process
398
397
clients[client_objc] = client
401
log.critical("Client not found on server: %r", name)
400
print("Client not found on server: {!r}"
401
.format(name), file=sys.stderr)
404
404
if not has_actions(options) and clients:
405
405
if options.verbose or options.dump_json:
406
406
keywords = ("Name", "Enabled", "Timeout", "LastCheckedOK",
407
"Created", "Interval", "Host", "KeyID",
408
"Fingerprint", "CheckerRunning",
409
"LastEnabled", "ApprovalPending",
410
"ApprovedByDefault", "LastApprovalRequest",
411
"ApprovalDelay", "ApprovalDuration",
412
"Checker", "ExtendedTimeout", "Expires",
407
"Created", "Interval", "Host", "Fingerprint",
408
"CheckerRunning", "LastEnabled",
409
"ApprovalPending", "ApprovedByDefault",
410
"LastApprovalRequest", "ApprovalDelay",
411
"ApprovalDuration", "Checker",
412
"ExtendedTimeout", "Expires",
413
413
"LastCheckerStatus")
415
415
keywords = defaultkeywords
492
492
client.Approve(dbus.Boolean(False),
493
493
dbus_interface=client_interface)
496
class Test_milliseconds_to_string(unittest.TestCase):
498
self.assertEqual(milliseconds_to_string(93785000),
500
def test_no_days(self):
501
self.assertEqual(milliseconds_to_string(7385000), "02:03:05")
502
def test_all_zero(self):
503
self.assertEqual(milliseconds_to_string(0), "00:00:00")
504
def test_no_fractional_seconds(self):
505
self.assertEqual(milliseconds_to_string(400), "00:00:00")
506
self.assertEqual(milliseconds_to_string(900), "00:00:00")
507
self.assertEqual(milliseconds_to_string(1900), "00:00:01")
510
def should_only_run_tests():
511
parser = argparse.ArgumentParser(add_help=False)
512
parser.add_argument("--check", action='store_true')
513
args, unknown_args = parser.parse_known_args()
514
run_tests = args.check
516
# Remove --check argument from sys.argv
517
sys.argv[1:] = unknown_args
520
# Add all tests from doctest strings
521
def load_tests(loader, tests, none):
523
tests.addTests(doctest.DocTestSuite())
526
496
if __name__ == "__main__":
527
if should_only_run_tests():
528
# Call using ./tdd-python-script --check [--verbose]