2 from twisted.trial import unittest
3 from twisted.application import service
5 from foolscap import Tub, eventual
6 from foolscap.logging import log
8 from allmydata import upload, offloaded
9 from allmydata.util import hashutil
13 class CHKUploadHelper_fake(offloaded.CHKUploadHelper):
14 def start_encrypted(self, eu):
17 d2 = eu.get_all_encoding_parameters()
18 def _got_parms(parms):
19 needed_shares, happy, total_shares, segsize = parms
20 return (hashutil.uri_extension_hash(""),
21 needed_shares, total_shares, size)
22 d2.addCallback(_got_parms)
24 d.addCallback(_got_size)
27 class CHKUploadHelper_already_uploaded(offloaded.CHKUploadHelper):
29 res = {'uri_extension_hash': hashutil.uri_extension_hash("")}
32 class FakeClient(service.MultiService):
33 DEFAULT_ENCODING_PARAMETERS = {"k":25,
36 "max_segment_size": 1*MiB,
38 def log(self, *args, **kwargs):
39 return log.msg(*args, **kwargs)
40 def get_push_to_ourselves(self):
42 def get_encoding_parameters(self):
43 return self.DEFAULT_ENCODING_PARAMETERS
45 def flush_but_dont_ignore(res):
46 d = eventual.flushEventualQueue()
52 class AssistedUpload(unittest.TestCase):
58 t.setServiceParent(self.s)
60 # we never actually use this for network traffic, so it can use a
62 t.setLocation("bogus:1234")
64 self.helper = h = offloaded.Helper(".")
65 h.chk_upload_helper_class = CHKUploadHelper_fake
66 h.setServiceParent(self.s)
67 self.helper_furl = t.registerReference(h)
70 d = self.s.stopService()
71 d.addCallback(eventual.fireEventually)
72 d.addBoth(flush_but_dont_ignore)
77 u = upload.Uploader(self.helper_furl)
78 u.setServiceParent(self.s)
81 d = eventual.fireEventually()
82 d.addCallback(eventual.fireEventually)
83 d.addCallback(eventual.fireEventually)
88 DATA = "I need help\n" * 1000
89 return u.upload_data(DATA)
93 d.addCallback(_uploaded)
98 def test_already_uploaded(self):
99 self.helper.chk_upload_helper_class = CHKUploadHelper_already_uploaded
100 u = upload.Uploader(self.helper_furl)
101 u.setServiceParent(self.s)
104 d = eventual.fireEventually()
105 d.addCallback(eventual.fireEventually)
106 d.addCallback(eventual.fireEventually)
111 DATA = "I need help\n" * 1000
112 return u.upload_data(DATA)
113 d.addCallback(_ready)
116 d.addCallback(_uploaded)