|
14 | 14 | # limitations under the License. |
15 | 15 |
|
16 | 16 | from __future__ import absolute_import |
| 17 | + |
| 18 | +import mock |
| 19 | + |
| 20 | +from oslo_config import cfg |
| 21 | + |
17 | 22 | from st2tests.base import CleanDbTestCase |
18 | 23 | from st2common.constants.keyvalue import FULL_SYSTEM_SCOPE, FULL_USER_SCOPE |
19 | 24 | from st2common.constants.keyvalue import SYSTEM_SCOPE, USER_SCOPE |
| 25 | +from st2common.constants.types import ResourceType |
| 26 | +from st2common.exceptions.rbac import ResourceAccessDeniedError |
| 27 | +from st2common.models.db.auth import UserDB |
20 | 28 | from st2common.models.db.keyvalue import KeyValuePairDB |
21 | 29 | from st2common.persistence.keyvalue import KeyValuePair |
| 30 | +from st2common.rbac.backends.noop import NoOpRBACUtils |
| 31 | +from st2common.rbac.types import PermissionType |
22 | 32 | from st2common.services.keyvalues import KeyValueLookup, UserKeyValueLookup |
| 33 | +from st2tests import config |
| 34 | + |
| 35 | +USER = "stanley" |
| 36 | +RESOURCE_UUID = "%s:%s:%s" % ( |
| 37 | + ResourceType.KEY_VALUE_PAIR, |
| 38 | + FULL_USER_SCOPE, |
| 39 | + "stanley:foobar", |
| 40 | +) |
23 | 41 |
|
24 | 42 |
|
25 | 43 | class TestKeyValueLookup(CleanDbTestCase): |
| 44 | + @classmethod |
| 45 | + def setUpClass(cls): |
| 46 | + super(TestKeyValueLookup, cls).setUpClass() |
| 47 | + config.parse_args() |
| 48 | + cfg.CONF.set_override(name="backend", override="noop", group="rbac") |
| 49 | + |
26 | 50 | def test_lookup_with_key_prefix(self): |
27 | 51 | KeyValuePair.add_or_update( |
28 | 52 | KeyValuePairDB( |
@@ -171,3 +195,27 @@ def test_lookup_cast(self): |
171 | 195 | self.assertEqual(str(lookup.count), "5.5") |
172 | 196 | self.assertEqual(float(lookup.count), 5.5) |
173 | 197 | self.assertEqual(int(lookup.count), 5) |
| 198 | + |
| 199 | + @mock.patch.object( |
| 200 | + NoOpRBACUtils, |
| 201 | + "assert_user_has_resource_db_permission", |
| 202 | + mock.MagicMock( |
| 203 | + side_effect=ResourceAccessDeniedError( |
| 204 | + user_db=UserDB(name=USER), |
| 205 | + resource_api_or_db=KeyValuePairDB(uid=RESOURCE_UUID), |
| 206 | + permission_type=PermissionType.KEY_VALUE_PAIR_VIEW, |
| 207 | + ) |
| 208 | + ), |
| 209 | + ) |
| 210 | + def test_system_kvp_lookup_unauthorized(self): |
| 211 | + secret_value = ( |
| 212 | + "0055A2D9A09E1071931925933744965EEA7E23DCF59A8D1D7A3" |
| 213 | + + "64338294916D37E83C4796283C584751750E39844E2FD97A3727DB5D553F638" |
| 214 | + ) |
| 215 | + |
| 216 | + k1 = KeyValuePair.add_or_update( |
| 217 | + KeyValuePairDB(name="k1", value=secret_value, secret=True) |
| 218 | + ) |
| 219 | + |
| 220 | + lookup = KeyValueLookup() |
| 221 | + self.assertRaises(ResourceAccessDeniedError, getattr, lookup, "k1") |
0 commit comments