Show More
@@ -1,45 +1,92 b'' | |||
|
1 | 1 | # -*- coding: utf-8 -*- |
|
2 | 2 | |
|
3 | 3 | # Copyright (C) 2016-2016 RhodeCode GmbH |
|
4 | 4 | # |
|
5 | 5 | # This program is free software: you can redistribute it and/or modify |
|
6 | 6 | # it under the terms of the GNU Affero General Public License, version 3 |
|
7 | 7 | # (only), as published by the Free Software Foundation. |
|
8 | 8 | # |
|
9 | 9 | # This program is distributed in the hope that it will be useful, |
|
10 | 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
11 | 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
12 | 12 | # GNU General Public License for more details. |
|
13 | 13 | # |
|
14 | 14 | # You should have received a copy of the GNU Affero General Public License |
|
15 | 15 | # along with this program. If not, see <http://www.gnu.org/licenses/>. |
|
16 | 16 | # |
|
17 | 17 | # This program is dual-licensed. If you wish to learn more about the |
|
18 | 18 | # RhodeCode Enterprise Edition, including its added features, Support services, |
|
19 | 19 | # and proprietary license terms, please see https://rhodecode.com/licenses/ |
|
20 | 20 | |
|
21 | 21 | |
|
22 | 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 | 72 | @pytest.fixture(params=[ |
|
26 | 73 | ('rhodecode.authentication.plugins.auth_crowd', 'egg:rhodecode-enterprise-ce#crowd'), |
|
27 | 74 | ('rhodecode.authentication.plugins.auth_headers', 'egg:rhodecode-enterprise-ce#headers'), |
|
28 | 75 | ('rhodecode.authentication.plugins.auth_jasig_cas', 'egg:rhodecode-enterprise-ce#jasig_cas'), |
|
29 | 76 | ('rhodecode.authentication.plugins.auth_ldap', 'egg:rhodecode-enterprise-ce#ldap'), |
|
30 | 77 | ('rhodecode.authentication.plugins.auth_pam', 'egg:rhodecode-enterprise-ce#pam'), |
|
31 | 78 | ('rhodecode.authentication.plugins.auth_rhodecode', 'egg:rhodecode-enterprise-ce#rhodecode'), |
|
32 | 79 | ('rhodecode.authentication.plugins.auth_token', 'egg:rhodecode-enterprise-ce#token'), |
|
33 | 80 | ]) |
|
34 | 81 | def auth_plugin(request): |
|
35 | 82 | """ |
|
36 | 83 | Fixture that provides instance for each authentication plugin. These |
|
37 | 84 | instances are NOT the instances which are registered to the authentication |
|
38 | 85 | registry. |
|
39 | 86 | """ |
|
40 | 87 | from importlib import import_module |
|
41 | 88 | |
|
42 | 89 | # Create plugin instance. |
|
43 | 90 | module, plugin_id = request.param |
|
44 | 91 | plugin_module = import_module(module) |
|
45 | 92 | return plugin_module.plugin_factory(plugin_id) |
General Comments 0
You need to be logged in to leave comments.
Login now