2 from twisted.trial import unittest
3 from twisted.python.failure import Failure
4 from cStringIO import StringIO
6 from allmydata import upload
7 from allmydata.uri import unpack_uri
9 from test_encode import FakePeer
12 def __init__(self, mode="good"):
14 def get_permuted_peers(self, verifierid):
15 return [ ("%20d"%fakeid, "%20d"%fakeid, FakePeer(self.mode),) for fakeid in range(50) ]
17 class GoodServer(unittest.TestCase):
19 self.node = FakeClient(mode="good")
20 self.u = upload.Uploader()
22 self.u.parent = self.node
24 def _check(self, uri):
25 self.failUnless(isinstance(uri, str))
26 self.failUnless(uri.startswith("URI:"))
28 self.failUnless(isinstance(d['verifierid'], str))
29 self.failUnlessEqual(len(d['verifierid']), 20)
30 self.failUnless(isinstance(d['fileid'], str))
31 self.failUnlessEqual(len(d['fileid']), 20)
32 self.failUnless(isinstance(d['key'], str))
33 self.failUnlessEqual(len(d['key']), 16)
34 self.failUnless(isinstance(d['codec_params'], str))
37 data = "This is some data to upload"
38 d = self.u.upload_data(data)
39 d.addCallback(self._check)
41 testData.timeout = 300
43 def testFileHandle(self):
44 data = "This is some data to upload"
45 d = self.u.upload_filehandle(StringIO(data))
46 d.addCallback(self._check)
48 testFileHandle.timeout = 300
50 def testFilename(self):
51 fn = "Uploader-testFilename.data"
53 data = "This is some data to upload"
56 d = self.u.upload_filename(fn)
57 d.addCallback(self._check)
59 testFilename.test = 300
61 class FullServer(unittest.TestCase):
63 self.node = FakeClient(mode="full")
64 self.u = upload.Uploader()
66 self.u.parent = self.node
68 def _should_fail(self, f):
69 self.failUnless(isinstance(f, Failure) and f.check(upload.NotEnoughPeersError))
72 data = "This is some data to upload"
73 d = self.u.upload_data(data)
74 d.addBoth(self._should_fail)
79 # upload with exactly 75 peers (shares_of_happiness)
80 # have a download fail
81 # cancel a download (need to implement more cancel stuff)