Ticket #948: test-dirnode-lit.darcspatch.txt

File test-dirnode-lit.darcspatch.txt, 10.4 KB (added by zooko, at 2010-02-22T05:37:15Z)

add tests of literal dirnodes (the current code already passes these tests) This patch replaces the previous patch by the same name, which was buggy.

Line 
1Sun Feb 21 22:27:33 MST 2010  zooko@zooko.com
2  * dirnode: add tests of literal dirnodes (the current code already passes these tests)
3
4New patches:
5
6[dirnode: add tests of literal dirnodes (the current code already passes these tests)
7zooko@zooko.com**20100222052733
8 Ignore-this: 1fd7fa613c6f3e83dbbc6df03144bb4c
9] {
10hunk ./src/allmydata/test/test_dirnode.py 6
11 from zope.interface import implements
12 from twisted.trial import unittest
13 from twisted.internet import defer
14+from twisted.internet.interfaces import IConsumer
15 from allmydata import uri, dirnode
16 from allmydata.client import Client
17 from allmydata.immutable import upload
18hunk ./src/allmydata/test/test_dirnode.py 27
19 from base64 import b32decode
20 import common_util as testutil
21 
22+class MemAccum:
23+    implements(IConsumer)
24+    def registerProducer(self, producer, streaming):
25+        self.producer = producer
26+        self.producer.resumeProducing()
27+        pass
28+    def unregisterProducer(self):
29+        pass
30+    def write(self, data):
31+        assert not hasattr(self, 'data')
32+        self.data = data
33+        self.producer.resumeProducing()
34+
35+setup_py_uri = "URI:CHK:n7r3m6wmomelk4sep3kw5cvduq:os7ijw5c3maek7pg65e5254k2fzjflavtpejjyhshpsxuqzhcwwq:3:20:14861"
36+one_uri = "URI:LIT:n5xgk" # LIT for "one"
37+mut_write_uri = "URI:SSK:vfvcbdfbszyrsaxchgevhmmlii:euw4iw7bbnkrrwpzuburbhppuxhc3gwxv26f6imekhz7zyw2ojnq"
38+empty_litdir_uri = "URI:DIR2-LIT:"
39+tiny_litdir_uri = "URI:DIR2-LIT:gqytunj2onug64tufqzdcosvkjetutcjkq5gw4tvm5vwszdgnz5hgyzufqydulbshj5x2lbm" # contains one child which is itself also LIT
40+mut_read_uri = "URI:SSK-RO:jf6wkflosyvntwxqcdo7a54jvm:euw4iw7bbnkrrwpzuburbhppuxhc3gwxv26f6imekhz7zyw2ojnq"
41+future_write_uri = "x-tahoe-crazy://I_am_from_the_future."
42+future_read_uri = "x-tahoe-crazy-readonly://I_am_from_the_future."
43+
44 class Dirnode(GridTestMixin, unittest.TestCase,
45               testutil.ShouldFailMixin, testutil.StallMixin, ErrorMixin):
46     timeout = 240 # It takes longer than 120 seconds on Francois's arm box.
47hunk ./src/allmydata/test/test_dirnode.py 76
48         c = self.g.clients[0]
49         nm = c.nodemaker
50 
51-        setup_py_uri = "URI:CHK:n7r3m6wmomelk4sep3kw5cvduq:os7ijw5c3maek7pg65e5254k2fzjflavtpejjyhshpsxuqzhcwwq:3:20:14861"
52-        one_uri = "URI:LIT:n5xgk" # LIT for "one"
53-        mut_write_uri = "URI:SSK:vfvcbdfbszyrsaxchgevhmmlii:euw4iw7bbnkrrwpzuburbhppuxhc3gwxv26f6imekhz7zyw2ojnq"
54-        mut_read_uri = "URI:SSK-RO:jf6wkflosyvntwxqcdo7a54jvm:euw4iw7bbnkrrwpzuburbhppuxhc3gwxv26f6imekhz7zyw2ojnq"
55-        future_write_uri = "x-tahoe-crazy://I_am_from_the_future."
56-        future_read_uri = "x-tahoe-crazy-readonly://I_am_from_the_future."
57         kids = {u"one": (nm.create_from_cap(one_uri), {}),
58                 u"two": (nm.create_from_cap(setup_py_uri),
59                          {"metakey": "metavalue"}),
60hunk ./src/allmydata/test/test_dirnode.py 82
61                 u"mut": (nm.create_from_cap(mut_write_uri, mut_read_uri), {}),
62                 u"fut": (nm.create_from_cap(future_write_uri, future_read_uri), {}),
63                 u"fro": (nm.create_from_cap(None, future_read_uri), {}),
64+                u"empty_litdir": (nm.create_from_cap(empty_litdir_uri), {}),
65+                u"tiny_litdir": (nm.create_from_cap(tiny_litdir_uri), {}),
66                 }
67         d = c.create_dirnode(kids)
68         
69hunk ./src/allmydata/test/test_dirnode.py 101
70         
71         def _check_kids(children):
72             self.failUnlessEqual(sorted(children.keys()),
73-                                 [u"fro", u"fut", u"mut", u"one", u"two"])
74+                                 [u"empty_litdir", u"fro", u"fut", u"mut", u"one", u"tiny_litdir", u"two"])
75             one_node, one_metadata = children[u"one"]
76             two_node, two_metadata = children[u"two"]
77             mut_node, mut_metadata = children[u"mut"]
78hunk ./src/allmydata/test/test_dirnode.py 107
79             fut_node, fut_metadata = children[u"fut"]
80             fro_node, fro_metadata = children[u"fro"]
81+            emptylit_node, emptylit_metadata = children[u"empty_litdir"]
82+            tinylit_node, tinylit_metadata = children[u"tiny_litdir"]
83             
84             self.failUnlessEqual(one_node.get_size(), 3)
85             self.failUnlessEqual(one_node.get_uri(), one_uri)
86hunk ./src/allmydata/test/test_dirnode.py 133
87             self.failUnlessEqual(fro_node.get_uri(), "ro." + future_read_uri)
88             self.failUnlessEqual(fut_node.get_readonly_uri(), "ro." + future_read_uri)
89             self.failUnless(isinstance(fro_metadata, dict), fro_metadata)
90+
91+            self.failIf(emptylit_node.is_unknown())
92+            self.failIf(tinylit_node.is_unknown())
93+
94+            d2 = defer.succeed(None)
95+            d2.addCallback(lambda ignored: emptylit_node.list())
96+            d2.addCallback(lambda children: self.failUnlessEqual(children, {}))
97+            d2.addCallback(lambda ignored: tinylit_node.list())
98+            d2.addCallback(lambda children: self.failUnlessEqual(set(children.keys()), set(['short'])))
99+            d2.addCallback(lambda ignored: tinylit_node.list())
100+            d2.addCallback(lambda children: children['short'][0].read(MemAccum()))
101+            d2.addCallback(lambda accum: self.failUnlessEqual(accum.data, "The end."))
102+            return d2
103+
104         d.addCallback(_check_kids)
105 
106         d.addCallback(lambda ign: nm.create_new_mutable_directory(kids))
107hunk ./src/allmydata/test/test_dirnode.py 176
108         c = self.g.clients[0]
109         nm = c.nodemaker
110 
111-        setup_py_uri = "URI:CHK:n7r3m6wmomelk4sep3kw5cvduq:os7ijw5c3maek7pg65e5254k2fzjflavtpejjyhshpsxuqzhcwwq:3:20:14861"
112-        one_uri = "URI:LIT:n5xgk" # LIT for "one"
113-        mut_write_uri = "URI:SSK:vfvcbdfbszyrsaxchgevhmmlii:euw4iw7bbnkrrwpzuburbhppuxhc3gwxv26f6imekhz7zyw2ojnq"
114-        mut_read_uri = "URI:SSK-RO:e3mdrzfwhoq42hy5ubcz6rp3o4:ybyibhnp3vvwuq2vaw2ckjmesgkklfs6ghxleztqidihjyofgw7q"
115-        future_write_uri = "x-tahoe-crazy://I_am_from_the_future."
116-        future_read_uri = "x-tahoe-crazy-readonly://I_am_from_the_future."
117         kids = {u"one": (nm.create_from_cap(one_uri), {}),
118                 u"two": (nm.create_from_cap(setup_py_uri),
119                          {"metakey": "metavalue"}),
120hunk ./src/allmydata/test/test_dirnode.py 180
121                 u"fut": (nm.create_from_cap(None, future_read_uri), {}),
122+                u"empty_litdir": (nm.create_from_cap(empty_litdir_uri), {}),
123+                u"tiny_litdir": (nm.create_from_cap(tiny_litdir_uri), {}),
124                 }
125         d = c.create_immutable_dirnode(kids)
126         
127hunk ./src/allmydata/test/test_dirnode.py 201
128         d.addCallback(_created)
129         
130         def _check_kids(children):
131-            self.failUnlessEqual(sorted(children.keys()), [u"fut", u"one", u"two"])
132+            self.failUnlessEqual(set(children.keys()), set([u"fut", u"one", u"two", u"empty_litdir", u"tiny_litdir"]))
133             one_node, one_metadata = children[u"one"]
134             two_node, two_metadata = children[u"two"]
135             fut_node, fut_metadata = children[u"fut"]
136hunk ./src/allmydata/test/test_dirnode.py 205
137+            emptylit_node, emptylit_metadata = children[u"empty_litdir"]
138+            tinylit_node, tinylit_metadata = children[u"tiny_litdir"]
139 
140             self.failUnlessEqual(one_node.get_size(), 3)
141             self.failUnlessEqual(one_node.get_uri(), one_uri)
142hunk ./src/allmydata/test/test_dirnode.py 222
143             self.failUnlessEqual(fut_node.get_uri(), "imm." + future_read_uri)
144             self.failUnlessEqual(fut_node.get_readonly_uri(), "imm." + future_read_uri)
145             self.failUnless(isinstance(fut_metadata, dict), fut_metadata)
146+
147+            d2 = defer.succeed(None)
148+            d2.addCallback(lambda ignored: emptylit_node.list())
149+            d2.addCallback(lambda children: self.failUnlessEqual(children, {}))
150+            d2.addCallback(lambda ignored: tinylit_node.list())
151+            d2.addCallback(lambda children: self.failUnlessEqual(set(children.keys()), set(['short'])))
152+            d2.addCallback(lambda ignored: tinylit_node.list())
153+            d2.addCallback(lambda children: children['short'][0].read(MemAccum()))
154+            d2.addCallback(lambda accum: self.failUnlessEqual(accum.data, "The end."))
155+            return d2
156+
157         d.addCallback(_check_kids)
158         
159         d.addCallback(lambda ign: nm.create_from_cap(self.cap.to_string()))
160}
161
162Context:
163
164[More cleanups to test_cli using new utilities for reading and writing files.
165david-sarah@jacaranda.org**20100206013855
166 Ignore-this: 9fd2294406b346bfe9144fff6a61f789
167]
168[Fix race conditions and missing callback in allmydata.test.test_cli.Cp.test_copy_using_filecap, add utilities for one-liner reading and writing of files, and fix cases in test_cli where files were not being closed after writing.
169david-sarah@jacaranda.org**20100206013727
170 Ignore-this: 49da6c33190d526a4ae84c472f04d5f4
171]
172[setup: comment-out the dependency on pycrypto, see #953
173zooko@zooko.com**20100215050844
174 Ignore-this: 2751120921ff35b8189d8fcd896da149
175]
176[Add tests for #939
177Kevan Carstensen <kevan@isnotajoke.com>**20100212062137
178 Ignore-this: 5459e8c64ba76cca70aa720e68549637
179]
180[Alter CLI utilities to handle nonexistent aliases better
181Kevan Carstensen <kevan@isnotajoke.com>**20100211024318
182 Ignore-this: e698ea4a57f5fe27c24336581ca0cf65
183]
184[adding pycrypto to the auto dependencies
185secorp@allmydata.com**20100206054314
186 Ignore-this: b873fc00a6a5b001d30d479e6053cf2f
187]
188[docs running.html - "tahoe run ." does not work with the current installation, replaced with "tahoe start ."
189secorp@allmydata.com**20100206165320
190 Ignore-this: fdb2dcb0e417d303cd43b1951a4f8c03
191]
192[web/storage.py: display total-seen on the last-complete-cycle line. For #940.
193Brian Warner <warner@lothar.com>**20100208002010
194 Ignore-this: c0ed860f3e9628d3171d2b055d96c5aa
195]
196[code coverage: replace figleaf with coverage.py, should work on py2.6 now.
197Brian Warner <warner@lothar.com>**20100203165421
198 Ignore-this: 46ab590360be6a385cb4fc4e68b6b42c
199 
200 It still lacks the right HTML report (the builtin report is very pretty, but
201 lacks the "lines uncovered" numbers that I want), and the half-finished
202 delta-from-last-run measurements.
203]
204[More comprehensive changes and ticket references for NEWS
205david-sarah@jacaranda.org**20100202061256
206 Ignore-this: 696cf0106e8a7fd388afc5b55fba8a1b
207]
208[docs: install.html: link into Python 2.5.5 download page
209zooko@zooko.com**20100202065852
210 Ignore-this: 1a9471b8175b7de5741d8445a7ede29d
211]
212[TAG allmydata-tahoe-1.6.0
213zooko@zooko.com**20100202061125
214 Ignore-this: dee6ade7ac1452cf5d1d9c69a8146d84
215]
216Patch bundle hash:
217563cb58440ac6de6d750b4dbf66761a4dc167317