505
505
MillisecondsValueArgumentMixIn):
506
506
property = "ApprovalDuration"
508
def has_actions(options):
509
return any((options.enable,
511
options.bump_timeout,
512
options.start_checker,
513
options.stop_checker,
516
options.checker is not None,
517
options.timeout is not None,
518
options.extended_timeout is not None,
519
options.interval is not None,
520
options.approved_by_default is not None,
521
options.approval_delay is not None,
522
options.approval_duration is not None,
523
options.host is not None,
524
options.secret is not None,
508
528
def add_command_line_options(parser):
509
529
parser.add_argument("--version", action="version",
510
530
version="%(prog)s {}".format(version),
536
556
help="Remove client")
537
557
parser.add_argument("-c", "--checker",
538
558
help="Set checker command for client")
539
parser.add_argument("-t", "--timeout", type=string_to_delta,
559
parser.add_argument("-t", "--timeout",
540
560
help="Set timeout for client")
541
parser.add_argument("--extended-timeout", type=string_to_delta,
561
parser.add_argument("--extended-timeout",
542
562
help="Set extended timeout for client")
543
parser.add_argument("-i", "--interval", type=string_to_delta,
563
parser.add_argument("-i", "--interval",
544
564
help="Set checker interval for client")
545
565
approve_deny_default = parser.add_mutually_exclusive_group()
546
566
approve_deny_default.add_argument(
551
571
"--deny-by-default", action="store_false",
552
572
dest="approved_by_default",
553
573
help="Set client to be denied by default")
554
parser.add_argument("--approval-delay", type=string_to_delta,
574
parser.add_argument("--approval-delay",
555
575
help="Set delay before client approve/deny")
556
parser.add_argument("--approval-duration", type=string_to_delta,
576
parser.add_argument("--approval-duration",
557
577
help="Set duration of one client approval")
558
578
parser.add_argument("-H", "--host", help="Set host for client")
559
579
parser.add_argument("-s", "--secret",
652
672
options = parser.parse_args()
654
def has_actions(options):
655
return any((options.enable,
657
options.bump_timeout,
658
options.start_checker,
659
options.stop_checker,
662
options.checker is not None,
663
options.timeout is not None,
664
options.extended_timeout is not None,
665
options.interval is not None,
666
options.approved_by_default is not None,
667
options.approval_delay is not None,
668
options.approval_duration is not None,
669
options.host is not None,
670
options.secret is not None,
674
674
if has_actions(options) and not (options.client or options.all):
675
675
parser.error("Options require clients names or --all.")
676
676
if options.verbose and has_actions(options):
1100
1100
class TestSetTimeoutCmd(TestValueArgumentPropertyCmd):
1101
1101
command = SetTimeoutCmd
1102
1102
property = "Timeout"
1103
values_to_set = [datetime.timedelta(),
1104
datetime.timedelta(minutes=5),
1105
datetime.timedelta(seconds=1),
1106
datetime.timedelta(weeks=1),
1107
datetime.timedelta(weeks=52)]
1108
values_to_get = [0, 300000, 1000, 604800000, 31449600000]
1103
values_to_set = ["P0D", "PT5M", "PT1S", "PT120S", "P1Y"]
1104
values_to_get = [0, 300000, 1000, 120000, 31449600000]
1110
1106
class TestSetExtendedTimeoutCmd(TestValueArgumentPropertyCmd):
1111
1107
command = SetExtendedTimeoutCmd
1112
1108
property = "ExtendedTimeout"
1113
values_to_set = [datetime.timedelta(),
1114
datetime.timedelta(minutes=5),
1115
datetime.timedelta(seconds=1),
1116
datetime.timedelta(weeks=1),
1117
datetime.timedelta(weeks=52)]
1118
values_to_get = [0, 300000, 1000, 604800000, 31449600000]
1109
values_to_set = ["P0D", "PT5M", "PT1S", "PT120S", "P1Y"]
1110
values_to_get = [0, 300000, 1000, 120000, 31449600000]
1120
1112
class TestSetIntervalCmd(TestValueArgumentPropertyCmd):
1121
1113
command = SetIntervalCmd
1122
1114
property = "Interval"
1123
values_to_set = [datetime.timedelta(),
1124
datetime.timedelta(minutes=5),
1125
datetime.timedelta(seconds=1),
1126
datetime.timedelta(weeks=1),
1127
datetime.timedelta(weeks=52)]
1128
values_to_get = [0, 300000, 1000, 604800000, 31449600000]
1115
values_to_set = ["P0D", "PT5M", "PT1S", "PT120S", "P1Y"]
1116
values_to_get = [0, 300000, 1000, 120000, 31449600000]
1130
1118
class TestSetApprovalDelayCmd(TestValueArgumentPropertyCmd):
1131
1119
command = SetApprovalDelayCmd
1132
1120
property = "ApprovalDelay"
1133
values_to_set = [datetime.timedelta(),
1134
datetime.timedelta(minutes=5),
1135
datetime.timedelta(seconds=1),
1136
datetime.timedelta(weeks=1),
1137
datetime.timedelta(weeks=52)]
1138
values_to_get = [0, 300000, 1000, 604800000, 31449600000]
1121
values_to_set = ["P0D", "PT5M", "PT1S", "PT120S", "P1Y"]
1122
values_to_get = [0, 300000, 1000, 120000, 31449600000]
1140
1124
class TestSetApprovalDurationCmd(TestValueArgumentPropertyCmd):
1141
1125
command = SetApprovalDurationCmd
1142
1126
property = "ApprovalDuration"
1143
values_to_set = [datetime.timedelta(),
1144
datetime.timedelta(minutes=5),
1145
datetime.timedelta(seconds=1),
1146
datetime.timedelta(weeks=1),
1147
datetime.timedelta(weeks=52)]
1148
values_to_get = [0, 300000, 1000, 604800000, 31449600000]
1127
values_to_set = ["P0D", "PT5M", "PT1S", "PT120S", "P1Y"]
1128
values_to_get = [0, 300000, 1000, 120000, 31449600000]
1150
1130
class Test_command_from_options(unittest.TestCase):
1151
1131
def setUp(self):
1169
1149
self.assert_command_from_args(["--verbose"], PrintTableCmd,
1172
def test_print_table_verbose_short(self):
1173
self.assert_command_from_args(["-v"], PrintTableCmd,
1176
1152
def test_enable(self):
1177
1153
self.assert_command_from_args(["--enable", "foo"], EnableCmd)
1179
def test_enable_short(self):
1180
self.assert_command_from_args(["-e", "foo"], EnableCmd)
1182
1155
def test_disable(self):
1183
1156
self.assert_command_from_args(["--disable", "foo"],
1186
def test_disable_short(self):
1187
self.assert_command_from_args(["-d", "foo"], DisableCmd)
1189
1159
def test_bump_timeout(self):
1190
1160
self.assert_command_from_args(["--bump-timeout", "foo"],
1191
1161
BumpTimeoutCmd)
1193
def test_bump_timeout_short(self):
1194
self.assert_command_from_args(["-b", "foo"], BumpTimeoutCmd)
1196
1163
def test_start_checker(self):
1197
1164
self.assert_command_from_args(["--start-checker", "foo"],
1198
1165
StartCheckerCmd)
1205
1172
self.assert_command_from_args(["--remove", "foo"],
1208
def test_remove_short(self):
1209
self.assert_command_from_args(["-r", "foo"], RemoveCmd)
1211
1175
def test_checker(self):
1212
1176
self.assert_command_from_args(["--checker", ":", "foo"],
1213
1177
SetCheckerCmd, value_to_set=":")
1215
def test_checker_empty(self):
1216
self.assert_command_from_args(["--checker", "", "foo"],
1217
SetCheckerCmd, value_to_set="")
1219
def test_checker_short(self):
1220
self.assert_command_from_args(["-c", ":", "foo"],
1221
SetCheckerCmd, value_to_set=":")
1223
1179
def test_timeout(self):
1224
1180
self.assert_command_from_args(["--timeout", "PT5M", "foo"],
1226
1182
value_to_set=300000)
1228
def test_timeout_short(self):
1229
self.assert_command_from_args(["-t", "PT5M", "foo"],
1231
value_to_set=300000)
1233
1184
def test_extended_timeout(self):
1234
1185
self.assert_command_from_args(["--extended-timeout", "PT15M",
1288
1229
"foo"], SetSecretCmd,
1289
1230
value_to_set=value)
1291
def test_secret_devnull_short(self):
1292
self.assert_command_from_args(["-s", os.path.devnull, "foo"],
1293
SetSecretCmd, value_to_set=b"")
1295
def test_secret_tempfile_short(self):
1296
with tempfile.NamedTemporaryFile(mode="r+b") as f:
1297
value = b"secret\0xyzzy\nbar"
1300
self.assert_command_from_args(["-s", f.name, "foo"],
1304
1232
def test_approve(self):
1305
1233
self.assert_command_from_args(["--approve", "foo"],
1308
def test_approve_short(self):
1309
self.assert_command_from_args(["-A", "foo"], ApproveCmd)
1311
1236
def test_deny(self):
1312
1237
self.assert_command_from_args(["--deny", "foo"], DenyCmd)
1314
def test_deny_short(self):
1315
self.assert_command_from_args(["-D", "foo"], DenyCmd)
1317
1239
def test_dump_json(self):
1318
1240
self.assert_command_from_args(["--dump-json"], DumpJSONCmd)