|
21 | 21 | # pylint: disable=missing-function-docstring |
22 | 22 | # pylint: disable=missing-class-docstring |
23 | 23 | from unittest.mock import Mock, patch |
| 24 | +from qubesadmin.tests.mock_app import MockQube |
24 | 25 | from qrexec.policy.parser import Rule |
25 | 26 | from ..global_config.policy_handler import PolicyHandler |
26 | | -from ..global_config.policy_rules import RuleSimple, SimpleVerbDescription |
| 27 | +from ..global_config.policy_rules import ( |
| 28 | + RuleDispVM, |
| 29 | + RuleSimple, |
| 30 | + SimpleVerbDescription, |
| 31 | +) |
27 | 32 | from ..global_config.rule_list_widgets import ( |
28 | 33 | VMWidget, |
29 | 34 | ActionWidget, |
30 | 35 | RuleListBoxRow, |
31 | 36 | NoActionListBoxRow, |
32 | 37 | FilteredListBoxRow, |
| 38 | + DispvmRuleRow, |
33 | 39 | ) |
34 | 40 |
|
35 | 41 | import gi |
@@ -298,6 +304,56 @@ def test_limited_selection_row(test_qapp): |
298 | 304 | assert not rule_row.target_widget.model.is_vm_available(vm_vault) |
299 | 305 |
|
300 | 306 |
|
| 307 | +def test_dispvm_rule_row_includes_named_disposables(test_qapp): |
| 308 | + mock_handler = Mock(spec=PolicyHandler) |
| 309 | + mock_handler.verify_new_rule.return_value = None |
| 310 | + rule = RuleDispVM( |
| 311 | + Rule.from_line( |
| 312 | + None, |
| 313 | + "Service * test-blue @dispvm allow target=@dispvm", |
| 314 | + filepath=None, |
| 315 | + lineno=0, |
| 316 | + ) |
| 317 | + ) |
| 318 | + |
| 319 | + rule_row = DispvmRuleRow(parent_handler=mock_handler, rule=rule, qapp=test_qapp) |
| 320 | + |
| 321 | + default_dvm = test_qapp.domains["default-dvm"] |
| 322 | + named_dispvm = test_qapp.domains["test-disp"] |
| 323 | + regular_appvm = test_qapp.domains["test-vm"] |
| 324 | + |
| 325 | + assert rule_row.target_widget.model.is_vm_available(default_dvm) |
| 326 | + assert rule_row.target_widget.model.is_vm_available(named_dispvm) |
| 327 | + assert not rule_row.target_widget.model.is_vm_available(regular_appvm) |
| 328 | + |
| 329 | + |
| 330 | +def test_dispvm_rule_row_excludes_volatile_disposables(test_qapp): |
| 331 | + mock_handler = Mock(spec=PolicyHandler) |
| 332 | + mock_handler.verify_new_rule.return_value = None |
| 333 | + test_qapp._qubes["volatile-disp"] = MockQube( |
| 334 | + name="volatile-disp", |
| 335 | + qapp=test_qapp, |
| 336 | + klass="DispVM", |
| 337 | + template="default-dvm", |
| 338 | + auto_cleanup=True, |
| 339 | + ) |
| 340 | + test_qapp.update_vm_calls() |
| 341 | + rule = RuleDispVM( |
| 342 | + Rule.from_line( |
| 343 | + None, |
| 344 | + "Service * test-blue @dispvm allow target=@dispvm", |
| 345 | + filepath=None, |
| 346 | + lineno=0, |
| 347 | + ) |
| 348 | + ) |
| 349 | + |
| 350 | + rule_row = DispvmRuleRow(parent_handler=mock_handler, rule=rule, qapp=test_qapp) |
| 351 | + |
| 352 | + assert not rule_row.target_widget.model.is_vm_available( |
| 353 | + test_qapp.domains["volatile-disp"] |
| 354 | + ) |
| 355 | + |
| 356 | + |
301 | 357 | def test_rule_row_init_delete(test_qapp): |
302 | 358 | mock_handler = Mock(spec=PolicyHandler) |
303 | 359 | mock_handler.verify_new_rule.return_value = None |
|
0 commit comments