Changeset 2695af9 in trunk for src/allmydata
- Timestamp:
- 2009-10-26T16:28:09Z (16 years ago)
- Branches:
- master
- Children:
- 1be4d45
- Parents:
- 768c76a
- Location:
- src/allmydata
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified src/allmydata/dirnode.py ¶
r768c76a r2695af9 136 136 # produce it for the sake of older readers. 137 137 138 def pack_children(filenode, children): 138 class MustBeDeepImmutable(Exception): 139 """You tried to add a non-deep-immutable node to a deep-immutable 140 directory.""" 141 142 def pack_children(filenode, children, deep_immutable=False): 139 143 """Take a dict that maps: 140 144 children[unicode_name] = (IFileSystemNode, metadata_dict) … … 143 147 accept an AuxValueDict, in which case I'll use the auxilliary cached data 144 148 as the pre-packed entry, which is faster than re-packing everything each 145 time.""" 149 time. 150 151 If deep_immutable is True, I will require that all my children are deeply 152 immutable, and will raise a MustBeDeepImmutable exception if not. 153 """ 154 146 155 has_aux = isinstance(children, AuxValueDict) 147 156 entries = [] … … 149 158 assert isinstance(name, unicode) 150 159 entry = None 160 (child, metadata) = children[name] 161 if deep_immutable and child.is_mutable(): 162 # TODO: consider adding IFileSystemNode.is_deep_immutable() 163 raise MustBeDeepImmutable("child '%s' is mutable" % (name,)) 151 164 if has_aux: 152 165 entry = children.get_aux(name) 153 166 if not entry: 154 (child, metadata) = children[name]155 167 assert IFilesystemNode.providedBy(child), (name,child) 156 168 assert isinstance(metadata, dict) -
TabularUnified src/allmydata/test/test_dirnode.py ¶
r768c76a r2695af9 761 761 return d 762 762 763 class MinimalFakeMutableFile: 764 def get_writekey(self): 765 return "writekey" 766 763 767 class Packing(unittest.TestCase): 764 768 # This is a base32-encoded representation of the directory tree … … 823 827 self.failUnlessEqual(file1_rwcap, 824 828 children[u'file1'][0].get_uri()) 829 830 def _make_kids(self, nm, which): 831 caps = {"imm": "URI:CHK:n7r3m6wmomelk4sep3kw5cvduq:os7ijw5c3maek7pg65e5254k2fzjflavtpejjyhshpsxuqzhcwwq:3:20:14861", 832 "lit": "URI:LIT:n5xgk", # LIT for "one" 833 "write": "URI:SSK:vfvcbdfbszyrsaxchgevhmmlii:euw4iw7bbnkrrwpzuburbhppuxhc3gwxv26f6imekhz7zyw2ojnq", 834 "read": "URI:SSK-RO:e3mdrzfwhoq42hy5ubcz6rp3o4:ybyibhnp3vvwuq2vaw2ckjmesgkklfs6ghxleztqidihjyofgw7q", 835 "dirwrite": "URI:DIR2:n6x24zd3seu725yluj75q5boaa:mm6yoqjhl6ueh7iereldqxue4nene4wl7rqfjfybqrehdqmqskvq", 836 "dirread": "URI:DIR2-RO:b7sr5qsifnicca7cbk3rhrhbvq:mm6yoqjhl6ueh7iereldqxue4nene4wl7rqfjfybqrehdqmqskvq", 837 } 838 kids = {} 839 for name in which: 840 kids[unicode(name)] = (nm.create_from_cap(caps[name]), {}) 841 return kids 842 843 def test_deep_immutable(self): 844 nm = NodeMaker(None, None, None, None, None, None, {"k": 3, "n": 10}, 845 None) 846 fn = MinimalFakeMutableFile() 847 848 kids = self._make_kids(nm, ["imm", "lit", "write", "read", 849 "dirwrite", "dirread"]) 850 packed = dirnode.pack_children(fn, kids, deep_immutable=False) 851 self.failUnlessIn("lit", packed) 852 853 kids = self._make_kids(nm, ["imm", "lit"]) 854 packed = dirnode.pack_children(fn, kids, deep_immutable=True) 855 self.failUnlessIn("lit", packed) 856 857 kids = self._make_kids(nm, ["imm", "lit", "write"]) 858 e = self.failUnlessRaises(dirnode.MustBeDeepImmutable, 859 dirnode.pack_children, 860 fn, kids, deep_immutable=True) 861 862 # read-only is not enough: all children must be immutable 863 kids = self._make_kids(nm, ["imm", "lit", "read"]) 864 e = self.failUnlessRaises(dirnode.MustBeDeepImmutable, 865 dirnode.pack_children, 866 fn, kids, deep_immutable=True) 867 868 kids = self._make_kids(nm, ["imm", "lit", "dirwrite"]) 869 e = self.failUnlessRaises(dirnode.MustBeDeepImmutable, 870 dirnode.pack_children, 871 fn, kids, deep_immutable=True) 872 873 kids = self._make_kids(nm, ["imm", "lit", "dirread"]) 874 e = self.failUnlessRaises(dirnode.MustBeDeepImmutable, 875 dirnode.pack_children, 876 fn, kids, deep_immutable=True) 825 877 826 878 class FakeMutableFile:
Note: See TracChangeset
for help on using the changeset viewer.