|
19 | 19 | from osc_lib import exceptions |
20 | 20 | from osc_lib import utils |
21 | 21 |
|
| 22 | +from openstackclient.identity import common |
22 | 23 | from openstackclient.identity.v3 import role |
23 | 24 | from openstackclient.tests.unit import fakes |
24 | 25 | from openstackclient.tests.unit.identity.v3 import fakes as identity_fakes |
@@ -708,6 +709,47 @@ def test_role_remove_user_system(self): |
708 | 709 | ) |
709 | 710 | self.assertIsNone(result) |
710 | 711 |
|
| 712 | + @mock.patch.object(common, 'find_user') |
| 713 | + def test_role_remove_non_existent_user_system(self, find_mock): |
| 714 | + # Simulate the user not being in keystone, the client should gracefully |
| 715 | + # handle this exception and send the request to remove the role since |
| 716 | + # keystone supports removing role assignments with non-existent actors |
| 717 | + # (e.g., users or groups). |
| 718 | + find_mock.side_effect = exceptions.CommandError |
| 719 | + |
| 720 | + arglist = [ |
| 721 | + '--user', identity_fakes.user_id, |
| 722 | + '--system', 'all', |
| 723 | + identity_fakes.role_name |
| 724 | + ] |
| 725 | + if self._is_inheritance_testcase(): |
| 726 | + arglist.append('--inherited') |
| 727 | + verifylist = [ |
| 728 | + ('user', identity_fakes.user_id), |
| 729 | + ('group', None), |
| 730 | + ('system', 'all'), |
| 731 | + ('domain', None), |
| 732 | + ('project', None), |
| 733 | + ('role', identity_fakes.role_name), |
| 734 | + ('inherited', self._is_inheritance_testcase()), |
| 735 | + ] |
| 736 | + parsed_args = self.check_parser(self.cmd, arglist, verifylist) |
| 737 | + |
| 738 | + result = self.cmd.take_action(parsed_args) |
| 739 | + |
| 740 | + # Set expected values |
| 741 | + kwargs = { |
| 742 | + 'user': identity_fakes.user_id, |
| 743 | + 'system': 'all', |
| 744 | + 'os_inherit_extension_inherited': self._is_inheritance_testcase(), |
| 745 | + } |
| 746 | + # RoleManager.revoke(role, user=, group=, domain=, project=) |
| 747 | + self.roles_mock.revoke.assert_called_with( |
| 748 | + identity_fakes.role_id, |
| 749 | + **kwargs |
| 750 | + ) |
| 751 | + self.assertIsNone(result) |
| 752 | + |
711 | 753 | def test_role_remove_user_domain(self): |
712 | 754 | arglist = [ |
713 | 755 | '--user', identity_fakes.user_name, |
@@ -741,6 +783,46 @@ def test_role_remove_user_domain(self): |
741 | 783 | ) |
742 | 784 | self.assertIsNone(result) |
743 | 785 |
|
| 786 | + @mock.patch.object(common, 'find_user') |
| 787 | + def test_role_remove_non_existent_user_domain(self, find_mock): |
| 788 | + # Simulate the user not being in keystone, the client the gracefully |
| 789 | + # handle this exception and send the request to remove the role since |
| 790 | + # keystone will validate. |
| 791 | + find_mock.side_effect = exceptions.CommandError |
| 792 | + |
| 793 | + arglist = [ |
| 794 | + '--user', identity_fakes.user_id, |
| 795 | + '--domain', identity_fakes.domain_name, |
| 796 | + identity_fakes.role_name |
| 797 | + ] |
| 798 | + if self._is_inheritance_testcase(): |
| 799 | + arglist.append('--inherited') |
| 800 | + verifylist = [ |
| 801 | + ('user', identity_fakes.user_id), |
| 802 | + ('group', None), |
| 803 | + ('system', None), |
| 804 | + ('domain', identity_fakes.domain_name), |
| 805 | + ('project', None), |
| 806 | + ('role', identity_fakes.role_name), |
| 807 | + ('inherited', self._is_inheritance_testcase()), |
| 808 | + ] |
| 809 | + parsed_args = self.check_parser(self.cmd, arglist, verifylist) |
| 810 | + |
| 811 | + result = self.cmd.take_action(parsed_args) |
| 812 | + |
| 813 | + # Set expected values |
| 814 | + kwargs = { |
| 815 | + 'user': identity_fakes.user_id, |
| 816 | + 'domain': identity_fakes.domain_id, |
| 817 | + 'os_inherit_extension_inherited': self._is_inheritance_testcase(), |
| 818 | + } |
| 819 | + # RoleManager.revoke(role, user=, group=, domain=, project=) |
| 820 | + self.roles_mock.revoke.assert_called_with( |
| 821 | + identity_fakes.role_id, |
| 822 | + **kwargs |
| 823 | + ) |
| 824 | + self.assertIsNone(result) |
| 825 | + |
744 | 826 | def test_role_remove_user_project(self): |
745 | 827 | arglist = [ |
746 | 828 | '--user', identity_fakes.user_name, |
@@ -774,6 +856,46 @@ def test_role_remove_user_project(self): |
774 | 856 | ) |
775 | 857 | self.assertIsNone(result) |
776 | 858 |
|
| 859 | + @mock.patch.object(common, 'find_user') |
| 860 | + def test_role_remove_non_existent_user_project(self, find_mock): |
| 861 | + # Simulate the user not being in keystone, the client the gracefully |
| 862 | + # handle this exception and send the request to remove the role since |
| 863 | + # keystone will validate. |
| 864 | + find_mock.side_effect = exceptions.CommandError |
| 865 | + |
| 866 | + arglist = [ |
| 867 | + '--user', identity_fakes.user_id, |
| 868 | + '--project', identity_fakes.project_name, |
| 869 | + identity_fakes.role_name |
| 870 | + ] |
| 871 | + if self._is_inheritance_testcase(): |
| 872 | + arglist.append('--inherited') |
| 873 | + verifylist = [ |
| 874 | + ('user', identity_fakes.user_id), |
| 875 | + ('group', None), |
| 876 | + ('system', None), |
| 877 | + ('domain', None), |
| 878 | + ('project', identity_fakes.project_name), |
| 879 | + ('role', identity_fakes.role_name), |
| 880 | + ('inherited', self._is_inheritance_testcase()), |
| 881 | + ] |
| 882 | + parsed_args = self.check_parser(self.cmd, arglist, verifylist) |
| 883 | + |
| 884 | + result = self.cmd.take_action(parsed_args) |
| 885 | + |
| 886 | + # Set expected values |
| 887 | + kwargs = { |
| 888 | + 'user': identity_fakes.user_id, |
| 889 | + 'project': identity_fakes.project_id, |
| 890 | + 'os_inherit_extension_inherited': self._is_inheritance_testcase(), |
| 891 | + } |
| 892 | + # RoleManager.revoke(role, user=, group=, domain=, project=) |
| 893 | + self.roles_mock.revoke.assert_called_with( |
| 894 | + identity_fakes.role_id, |
| 895 | + **kwargs |
| 896 | + ) |
| 897 | + self.assertIsNone(result) |
| 898 | + |
777 | 899 | def test_role_remove_group_system(self): |
778 | 900 | arglist = [ |
779 | 901 | '--group', identity_fakes.group_name, |
@@ -809,6 +931,46 @@ def test_role_remove_group_system(self): |
809 | 931 | ) |
810 | 932 | self.assertIsNone(result) |
811 | 933 |
|
| 934 | + @mock.patch.object(common, 'find_group') |
| 935 | + def test_role_remove_non_existent_group_system(self, find_mock): |
| 936 | + # Simulate the user not being in keystone, the client the gracefully |
| 937 | + # handle this exception and send the request to remove the role since |
| 938 | + # keystone will validate. |
| 939 | + find_mock.side_effect = exceptions.CommandError |
| 940 | + |
| 941 | + arglist = [ |
| 942 | + '--group', identity_fakes.group_id, |
| 943 | + '--system', 'all', |
| 944 | + identity_fakes.role_name |
| 945 | + ] |
| 946 | + if self._is_inheritance_testcase(): |
| 947 | + arglist.append('--inherited') |
| 948 | + verifylist = [ |
| 949 | + ('user', None), |
| 950 | + ('group', identity_fakes.group_id), |
| 951 | + ('system', 'all'), |
| 952 | + ('domain', None), |
| 953 | + ('project', None), |
| 954 | + ('role', identity_fakes.role_name), |
| 955 | + ('inherited', self._is_inheritance_testcase()), |
| 956 | + ] |
| 957 | + parsed_args = self.check_parser(self.cmd, arglist, verifylist) |
| 958 | + |
| 959 | + result = self.cmd.take_action(parsed_args) |
| 960 | + |
| 961 | + # Set expected values |
| 962 | + kwargs = { |
| 963 | + 'group': identity_fakes.group_id, |
| 964 | + 'system': 'all', |
| 965 | + 'os_inherit_extension_inherited': self._is_inheritance_testcase(), |
| 966 | + } |
| 967 | + # RoleManager.revoke(role, user=, group=, domain=, project=) |
| 968 | + self.roles_mock.revoke.assert_called_with( |
| 969 | + identity_fakes.role_id, |
| 970 | + **kwargs |
| 971 | + ) |
| 972 | + self.assertIsNone(result) |
| 973 | + |
812 | 974 | def test_role_remove_group_domain(self): |
813 | 975 | arglist = [ |
814 | 976 | '--group', identity_fakes.group_name, |
@@ -843,6 +1005,46 @@ def test_role_remove_group_domain(self): |
843 | 1005 | ) |
844 | 1006 | self.assertIsNone(result) |
845 | 1007 |
|
| 1008 | + @mock.patch.object(common, 'find_group') |
| 1009 | + def test_role_remove_non_existent_group_domain(self, find_mock): |
| 1010 | + # Simulate the user not being in keystone, the client the gracefully |
| 1011 | + # handle this exception and send the request to remove the role since |
| 1012 | + # keystone will validate. |
| 1013 | + find_mock.side_effect = exceptions.CommandError |
| 1014 | + |
| 1015 | + arglist = [ |
| 1016 | + '--group', identity_fakes.group_id, |
| 1017 | + '--domain', identity_fakes.domain_name, |
| 1018 | + identity_fakes.role_name |
| 1019 | + ] |
| 1020 | + if self._is_inheritance_testcase(): |
| 1021 | + arglist.append('--inherited') |
| 1022 | + verifylist = [ |
| 1023 | + ('user', None), |
| 1024 | + ('group', identity_fakes.group_id), |
| 1025 | + ('system', None), |
| 1026 | + ('domain', identity_fakes.domain_name), |
| 1027 | + ('project', None), |
| 1028 | + ('role', identity_fakes.role_name), |
| 1029 | + ('inherited', self._is_inheritance_testcase()), |
| 1030 | + ] |
| 1031 | + parsed_args = self.check_parser(self.cmd, arglist, verifylist) |
| 1032 | + |
| 1033 | + result = self.cmd.take_action(parsed_args) |
| 1034 | + |
| 1035 | + # Set expected values |
| 1036 | + kwargs = { |
| 1037 | + 'group': identity_fakes.group_id, |
| 1038 | + 'domain': identity_fakes.domain_id, |
| 1039 | + 'os_inherit_extension_inherited': self._is_inheritance_testcase(), |
| 1040 | + } |
| 1041 | + # RoleManager.revoke(role, user=, group=, domain=, project=) |
| 1042 | + self.roles_mock.revoke.assert_called_with( |
| 1043 | + identity_fakes.role_id, |
| 1044 | + **kwargs |
| 1045 | + ) |
| 1046 | + self.assertIsNone(result) |
| 1047 | + |
846 | 1048 | def test_role_remove_group_project(self): |
847 | 1049 | arglist = [ |
848 | 1050 | '--group', identity_fakes.group_name, |
@@ -876,6 +1078,46 @@ def test_role_remove_group_project(self): |
876 | 1078 | ) |
877 | 1079 | self.assertIsNone(result) |
878 | 1080 |
|
| 1081 | + @mock.patch.object(common, 'find_group') |
| 1082 | + def test_role_remove_non_existent_group_project(self, find_mock): |
| 1083 | + # Simulate the user not being in keystone, the client the gracefully |
| 1084 | + # handle this exception and send the request to remove the role since |
| 1085 | + # keystone will validate. |
| 1086 | + find_mock.side_effect = exceptions.CommandError |
| 1087 | + |
| 1088 | + arglist = [ |
| 1089 | + '--group', identity_fakes.group_id, |
| 1090 | + '--project', identity_fakes.project_name, |
| 1091 | + identity_fakes.role_name |
| 1092 | + ] |
| 1093 | + if self._is_inheritance_testcase(): |
| 1094 | + arglist.append('--inherited') |
| 1095 | + verifylist = [ |
| 1096 | + ('user', None), |
| 1097 | + ('group', identity_fakes.group_id), |
| 1098 | + ('system', None), |
| 1099 | + ('domain', None), |
| 1100 | + ('project', identity_fakes.project_name), |
| 1101 | + ('role', identity_fakes.role_name), |
| 1102 | + ('inherited', self._is_inheritance_testcase()), |
| 1103 | + ] |
| 1104 | + parsed_args = self.check_parser(self.cmd, arglist, verifylist) |
| 1105 | + |
| 1106 | + result = self.cmd.take_action(parsed_args) |
| 1107 | + |
| 1108 | + # Set expected values |
| 1109 | + kwargs = { |
| 1110 | + 'group': identity_fakes.group_id, |
| 1111 | + 'project': identity_fakes.project_id, |
| 1112 | + 'os_inherit_extension_inherited': self._is_inheritance_testcase(), |
| 1113 | + } |
| 1114 | + # RoleManager.revoke(role, user=, group=, domain=, project=) |
| 1115 | + self.roles_mock.revoke.assert_called_with( |
| 1116 | + identity_fakes.role_id, |
| 1117 | + **kwargs |
| 1118 | + ) |
| 1119 | + self.assertIsNone(result) |
| 1120 | + |
879 | 1121 | def test_role_remove_domain_role_on_group_domain(self): |
880 | 1122 | self.roles_mock.get.return_value = fakes.FakeResource( |
881 | 1123 | None, |
|
0 commit comments