|
17 | 17 |
|
18 | 18 | import os.path |
19 | 19 |
|
| 20 | +import fixtures |
20 | 21 | import mock |
| 22 | +from oslo_config import cfg |
21 | 23 | from oslo_policy import policy as oslo_policy |
22 | 24 | from oslo_serialization import jsonutils |
23 | 25 | import requests_mock |
| 26 | +import yaml |
24 | 27 |
|
25 | 28 | from nova import context |
26 | 29 | from nova import exception |
@@ -572,3 +575,70 @@ def test_rule_missing(self): |
572 | 575 | self.system_reader_or_owner_rules + |
573 | 576 | self.allow_nobody_rules + special_rules) |
574 | 577 | self.assertEqual(set([]), result) |
| 578 | + |
| 579 | + |
| 580 | +class PickPolicyFileTestCase(test.NoDBTestCase): |
| 581 | + |
| 582 | + def setUp(self): |
| 583 | + super(PickPolicyFileTestCase, self).setUp() |
| 584 | + self.data = { |
| 585 | + 'rule_admin': 'True', |
| 586 | + 'rule_admin2': 'is_admin:True' |
| 587 | + } |
| 588 | + policy.CONF.clear_override('policy_file', group='oslo_policy') |
| 589 | + self.tmpdir = self.useFixture(fixtures.TempDir()) |
| 590 | + original_search_dirs = cfg._search_dirs |
| 591 | + |
| 592 | + def fake_search_dirs(dirs, name): |
| 593 | + dirs.append(self.tmpdir.path) |
| 594 | + return original_search_dirs(dirs, name) |
| 595 | + |
| 596 | + self.stub_out('oslo_config.cfg._search_dirs', fake_search_dirs) |
| 597 | + |
| 598 | + def test_non_config_policy_file(self): |
| 599 | + tmpfilename = 'nova-policy.yaml' |
| 600 | + self.flags(policy_file=tmpfilename, group='oslo_policy') |
| 601 | + selected_policy_file = policy.pick_policy_file( |
| 602 | + policy_file='non-config-file') |
| 603 | + self.assertEqual(policy.CONF.oslo_policy.policy_file, tmpfilename) |
| 604 | + self.assertEqual(selected_policy_file, 'non-config-file') |
| 605 | + |
| 606 | + def test_overridden_policy_file(self): |
| 607 | + tmpfilename = 'nova-policy.yaml' |
| 608 | + self.flags(policy_file=tmpfilename, group='oslo_policy') |
| 609 | + selected_policy_file = policy.pick_policy_file(policy_file=None) |
| 610 | + self.assertEqual(policy.CONF.oslo_policy.policy_file, tmpfilename) |
| 611 | + self.assertEqual(selected_policy_file, tmpfilename) |
| 612 | + |
| 613 | + def test_only_new_default_policy_file_exist(self): |
| 614 | + tmpfilename = os.path.join(self.tmpdir.path, 'policy.yaml') |
| 615 | + with open(tmpfilename, 'w') as fh: |
| 616 | + yaml.dump(self.data, fh) |
| 617 | + |
| 618 | + selected_policy_file = policy.pick_policy_file(policy_file=None) |
| 619 | + self.assertEqual(policy.CONF.oslo_policy.policy_file, 'policy.yaml') |
| 620 | + self.assertEqual(selected_policy_file, 'policy.yaml') |
| 621 | + |
| 622 | + @mock.patch.object(policy.CONF, 'get_location') |
| 623 | + def test_only_old_default_policy_file_exist(self, mock_get): |
| 624 | + mock_get.return_value = cfg.LocationInfo(cfg.Locations.set_default, |
| 625 | + 'None') |
| 626 | + tmpfilename = os.path.join(self.tmpdir.path, 'policy.json') |
| 627 | + with open(tmpfilename, 'w') as fh: |
| 628 | + jsonutils.dump(self.data, fh) |
| 629 | + |
| 630 | + selected_policy_file = policy.pick_policy_file(policy_file=None) |
| 631 | + self.assertEqual(policy.CONF.oslo_policy.policy_file, 'policy.yaml') |
| 632 | + self.assertEqual(selected_policy_file, 'policy.json') |
| 633 | + |
| 634 | + def test_both_default_policy_file_exist(self): |
| 635 | + tmpfilename1 = os.path.join(self.tmpdir.path, 'policy.json') |
| 636 | + with open(tmpfilename1, 'w') as fh: |
| 637 | + jsonutils.dump(self.data, fh) |
| 638 | + tmpfilename2 = os.path.join(self.tmpdir.path, 'policy.yaml') |
| 639 | + with open(tmpfilename2, 'w') as fh: |
| 640 | + yaml.dump(self.data, fh) |
| 641 | + |
| 642 | + selected_policy_file = policy.pick_policy_file(policy_file=None) |
| 643 | + self.assertEqual(policy.CONF.oslo_policy.policy_file, 'policy.yaml') |
| 644 | + self.assertEqual(selected_policy_file, 'policy.yaml') |
0 commit comments