Show More
@@ -1,45 +1,92 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 |
|
2 | |||
3 | # Copyright (C) 2016-2016 RhodeCode GmbH |
|
3 | # Copyright (C) 2016-2016 RhodeCode GmbH | |
4 | # |
|
4 | # | |
5 | # This program is free software: you can redistribute it and/or modify |
|
5 | # This program is free software: you can redistribute it and/or modify | |
6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
6 | # it under the terms of the GNU Affero General Public License, version 3 | |
7 | # (only), as published by the Free Software Foundation. |
|
7 | # (only), as published by the Free Software Foundation. | |
8 | # |
|
8 | # | |
9 | # This program is distributed in the hope that it will be useful, |
|
9 | # This program is distributed in the hope that it will be useful, | |
10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 | # GNU General Public License for more details. |
|
12 | # GNU General Public License for more details. | |
13 | # |
|
13 | # | |
14 | # You should have received a copy of the GNU Affero General Public License |
|
14 | # You should have received a copy of the GNU Affero General Public License | |
15 | # along with this program. If not, see <http://www.gnu.org/licenses/>. |
|
15 | # along with this program. If not, see <http://www.gnu.org/licenses/>. | |
16 | # |
|
16 | # | |
17 | # This program is dual-licensed. If you wish to learn more about the |
|
17 | # This program is dual-licensed. If you wish to learn more about the | |
18 | # RhodeCode Enterprise Edition, including its added features, Support services, |
|
18 | # RhodeCode Enterprise Edition, including its added features, Support services, | |
19 | # and proprietary license terms, please see https://rhodecode.com/licenses/ |
|
19 | # and proprietary license terms, please see https://rhodecode.com/licenses/ | |
20 |
|
20 | |||
21 |
|
21 | |||
22 | import pytest |
|
22 | import pytest | |
23 |
|
23 | |||
24 |
|
24 | |||
|
25 | class EnabledAuthPlugin(): | |||
|
26 | """ | |||
|
27 | Context manager that updates the 'auth_plugins' setting in DB to enable | |||
|
28 | a plugin. Previous setting is restored on exit. The rhodecode auth plugin | |||
|
29 | is also enabled because it is needed to login the test users. | |||
|
30 | """ | |||
|
31 | ||||
|
32 | def __init__(self, plugin): | |||
|
33 | self.new_value = set([ | |||
|
34 | 'egg:rhodecode-enterprise-ce#rhodecode', | |||
|
35 | plugin.get_id() | |||
|
36 | ]) | |||
|
37 | ||||
|
38 | def __enter__(self): | |||
|
39 | from rhodecode.model.settings import SettingsModel | |||
|
40 | self._old_value = SettingsModel().get_auth_plugins() | |||
|
41 | SettingsModel().create_or_update_setting( | |||
|
42 | 'auth_plugins', ','.join(self.new_value)) | |||
|
43 | ||||
|
44 | def __exit__(self, type, value, traceback): | |||
|
45 | from rhodecode.model.settings import SettingsModel | |||
|
46 | SettingsModel().create_or_update_setting( | |||
|
47 | 'auth_plugins', ','.join(self._old_value)) | |||
|
48 | ||||
|
49 | ||||
|
50 | class DisabledAuthPlugin(): | |||
|
51 | """ | |||
|
52 | Context manager that updates the 'auth_plugins' setting in DB to disable | |||
|
53 | a plugin. Previous setting is restored on exit. | |||
|
54 | """ | |||
|
55 | ||||
|
56 | def __init__(self, plugin): | |||
|
57 | self.plugin_id = plugin.get_id() | |||
|
58 | ||||
|
59 | def __enter__(self): | |||
|
60 | from rhodecode.model.settings import SettingsModel | |||
|
61 | self._old_value = SettingsModel().get_auth_plugins() | |||
|
62 | new_value = [id_ for id_ in self._old_value if id_ != self.plugin_id] | |||
|
63 | SettingsModel().create_or_update_setting( | |||
|
64 | 'auth_plugins', ','.join(new_value)) | |||
|
65 | ||||
|
66 | def __exit__(self, type, value, traceback): | |||
|
67 | from rhodecode.model.settings import SettingsModel | |||
|
68 | SettingsModel().create_or_update_setting( | |||
|
69 | 'auth_plugins', ','.join(self._old_value)) | |||
|
70 | ||||
|
71 | ||||
25 | @pytest.fixture(params=[ |
|
72 | @pytest.fixture(params=[ | |
26 | ('rhodecode.authentication.plugins.auth_crowd', 'egg:rhodecode-enterprise-ce#crowd'), |
|
73 | ('rhodecode.authentication.plugins.auth_crowd', 'egg:rhodecode-enterprise-ce#crowd'), | |
27 | ('rhodecode.authentication.plugins.auth_headers', 'egg:rhodecode-enterprise-ce#headers'), |
|
74 | ('rhodecode.authentication.plugins.auth_headers', 'egg:rhodecode-enterprise-ce#headers'), | |
28 | ('rhodecode.authentication.plugins.auth_jasig_cas', 'egg:rhodecode-enterprise-ce#jasig_cas'), |
|
75 | ('rhodecode.authentication.plugins.auth_jasig_cas', 'egg:rhodecode-enterprise-ce#jasig_cas'), | |
29 | ('rhodecode.authentication.plugins.auth_ldap', 'egg:rhodecode-enterprise-ce#ldap'), |
|
76 | ('rhodecode.authentication.plugins.auth_ldap', 'egg:rhodecode-enterprise-ce#ldap'), | |
30 | ('rhodecode.authentication.plugins.auth_pam', 'egg:rhodecode-enterprise-ce#pam'), |
|
77 | ('rhodecode.authentication.plugins.auth_pam', 'egg:rhodecode-enterprise-ce#pam'), | |
31 | ('rhodecode.authentication.plugins.auth_rhodecode', 'egg:rhodecode-enterprise-ce#rhodecode'), |
|
78 | ('rhodecode.authentication.plugins.auth_rhodecode', 'egg:rhodecode-enterprise-ce#rhodecode'), | |
32 | ('rhodecode.authentication.plugins.auth_token', 'egg:rhodecode-enterprise-ce#token'), |
|
79 | ('rhodecode.authentication.plugins.auth_token', 'egg:rhodecode-enterprise-ce#token'), | |
33 | ]) |
|
80 | ]) | |
34 | def auth_plugin(request): |
|
81 | def auth_plugin(request): | |
35 | """ |
|
82 | """ | |
36 | Fixture that provides instance for each authentication plugin. These |
|
83 | Fixture that provides instance for each authentication plugin. These | |
37 | instances are NOT the instances which are registered to the authentication |
|
84 | instances are NOT the instances which are registered to the authentication | |
38 | registry. |
|
85 | registry. | |
39 | """ |
|
86 | """ | |
40 | from importlib import import_module |
|
87 | from importlib import import_module | |
41 |
|
88 | |||
42 | # Create plugin instance. |
|
89 | # Create plugin instance. | |
43 | module, plugin_id = request.param |
|
90 | module, plugin_id = request.param | |
44 | plugin_module = import_module(module) |
|
91 | plugin_module = import_module(module) | |
45 | return plugin_module.plugin_factory(plugin_id) |
|
92 | return plugin_module.plugin_factory(plugin_id) |
General Comments 0
You need to be logged in to leave comments.
Login now