|
8 | 8 | from irods.manager.metadata_manager import InvalidAtomicAVURequest |
9 | 9 | from irods.models import (DataObject, Collection, Resource) |
10 | 10 | import irods.test.helpers as helpers |
| 11 | +import irods.keywords as kw |
| 12 | +from irods.session import iRODSSession |
11 | 13 | from six.moves import range |
12 | 14 | from six import PY3 |
13 | 15 |
|
@@ -218,6 +220,41 @@ def test_remove_obj_meta(self): |
218 | 220 | assert len(meta) == 0 |
219 | 221 |
|
220 | 222 |
|
| 223 | + def test_metadata_manipulations_with_admin_kw__364__365(self): |
| 224 | + try: |
| 225 | + d = user = None |
| 226 | + adm = self.sess |
| 227 | + # Create a rodsuser, and a session for that roduser. |
| 228 | + user = adm.users.create ( 'bobby','rodsuser' ) |
| 229 | + user.modify('password','bpass') |
| 230 | + with iRODSSession (port=adm.port,zone=adm.zone,host=adm.host, user=user.name,password='bpass') as ses: |
| 231 | + # Create a data object owned by the rodsuser. Set AVUs in various ways and guarantee each attempt |
| 232 | + # has the desired effect. |
| 233 | + d = ses.data_objects.create('/{adm.zone}/home/{user.name}/testfile'.format(**locals())) |
| 234 | + |
| 235 | + d.metadata.set('a','aa','1') |
| 236 | + self.assertIn(('a','aa','1'), d.metadata.items()) |
| 237 | + |
| 238 | + d.metadata.set('a','aa') |
| 239 | + self.assertEqual([('a','aa')], [tuple(_) for _ in d.metadata.items()]) |
| 240 | + |
| 241 | + d.metadata['a'] = iRODSMeta('a','bb') |
| 242 | + self.assertEqual([('a','bb')], [tuple(_) for _ in d.metadata.items()]) |
| 243 | + |
| 244 | + # Now the admin does two AVU-set operations. A successful test of these operations' success |
| 245 | + # includes that both ('x','y') has been added and ('a','b','c') has overwritten ('a','bb'). |
| 246 | + |
| 247 | + da = adm.data_objects.get(d.path) |
| 248 | + da.metadata.set('a','b','c',**{kw.ADMIN_KW:''}) |
| 249 | + da.metadata(admin = True)['x'] = iRODSMeta('x','y') |
| 250 | + d = ses.data_objects.get(d.path) # assure metadata are not cached |
| 251 | + self.assertEqual(set([('x','y'), ('a','b','c')]), |
| 252 | + set(tuple(_) for _ in d.metadata.items())) |
| 253 | + finally: |
| 254 | + if d: d.unlink(force=True) |
| 255 | + if user: user.remove() |
| 256 | + |
| 257 | + |
221 | 258 | def test_add_coll_meta(self): |
222 | 259 | # add metadata to test collection |
223 | 260 | self.sess.metadata.add(Collection, self.coll_path, |
|
0 commit comments