-
Notifications
You must be signed in to change notification settings - Fork 7
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Added test cases with PRC, that seem to work?
- Loading branch information
1 parent
425cb59
commit 57d59d7
Showing
4 changed files
with
64 additions
and
18 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
57 changes: 57 additions & 0 deletions
57
packaging/irods_prc_tests/test_rule_engine_plugin_metadata_guard_atomic.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
from irods.session import iRODSSession | ||
from irods.meta import iRODSMeta | ||
from irods.meta import iRODSMeta, AVUOperation | ||
|
||
import irods.exception | ||
|
||
import sys | ||
import unittest | ||
import tempfile | ||
import shutil | ||
import os | ||
import json | ||
|
||
class test_metadata_guard(unittest.TestCase): | ||
|
||
@classmethod | ||
def setUpClass(cls): | ||
with iRODSSession(host='localhost', port=1247, user='rods', password='rods', zone='tempZone') as session: | ||
a = session.users.create_with_password('alice', 'test') | ||
with iRODSSession(host='localhost', port=1247, user='alice', password='test', zone='tempZone') as new_session: | ||
new_session.data_objects.create("/tempZone/home/alice/test1") | ||
coll = session.collections.get("/tempZone") | ||
if 'irods::metadata_guard' not in coll.metadata: | ||
coll.metadata.add('irods::metadata_guard', '{"prefixes": ["irods::"], "admin_only": true}') | ||
cls.temp_path = os.path.join(tempfile.mkdtemp(), 'irods_config_backup') | ||
shutil.copy2('/etc/irods/server_config.json', cls.temp_path) | ||
with open('/etc/irods/server_config.json', 'r+') as config_file: | ||
config_json = json.load(config_file) | ||
config_json['plugin_configuration']['rule_engines'].insert(0, json.loads('{"instance_name":"irods_rule_engine_plugin-metadata_guard-instance","plugin_name":"irods_rule_engine_plugin-metadata_guard","plugin_specific_configuration":{}}')) | ||
with open('/etc/irods/server_config.json', 'wt') as config_file: | ||
json.dump(config_json, config_file) | ||
|
||
@classmethod | ||
def tearDownClass(cls): | ||
shutil.copy2(cls.temp_path,'/etc/irods/server_config.json') | ||
|
||
def test_guard_atomic_operations_admin_only(self): | ||
with iRODSSession(host='localhost', port=1247, user='rods', password='rods', zone='tempZone') as session: | ||
coll = session.collections.get("/tempZone") | ||
coll.metadata['irods::metadata_guard'] = iRODSMeta('irods::metadata_guard', '{"prefixes": ["irods::"], "admin_only": true}') | ||
with iRODSSession(host='localhost', port=1247, user='alice', password='test', zone='tempZone') as session: | ||
obj = session.data_objects.get("/tempZone/home/alice/test1") | ||
obj.metadata.apply_atomic_operations( AVUOperation(operation='add', avu=iRODSMeta('unguarded::atr1','val1'))) | ||
self.assertEqual(obj.metadata['unguarded::atr1'], iRODSMeta('unguarded::atr1', 'val1')) | ||
self.assertRaises(irods.exception.CAT_INSUFFICIENT_PRIVILEGE_LEVEL, lambda: obj.metadata.apply_atomic_operations( AVUOperation(operation='add', avu=iRODSMeta('irods::atr','val')))) | ||
|
||
def test_guard_atomic_operations_editor_list(self): | ||
with iRODSSession(host='localhost', port=1247, user='rods', password='rods', zone='tempZone') as session: | ||
coll = session.collections.get("/tempZone") | ||
coll.metadata['irods::metadata_guard'] = iRODSMeta('irods::metadata_guard', '{"prefixes": ["irods::"], "admin_only": false, "editors": {"type": "user", "name": "alice"}}') | ||
with iRODSSession(host='localhost', port=1247, user='alice', password='test', zone='tempZone') as session: | ||
obj = session.data_objects.get("/tempZone/home/alice/test1") | ||
obj.metadata.apply_atomic_operations( AVUOperation(operation='add', avu=iRODSMeta('irods::atr2','val2'))) | ||
self.assertEqual(obj.metadata['irods::atr2'], iRODSMeta('irods::atr2', 'val2')) | ||
|
||
if __name__ == '__main__': | ||
unittest.main() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters