3 from twisted.trial import unittest
4 from twisted.application import service
5 from twisted.internet import reactor, defer
8 from allmydata import client, introducer
9 from allmydata.util import version_class, idlib
10 from foolscap.eventual import flushEventualQueue
12 class MyIntroducerClient(introducer.IntroducerClient):
17 return [ y for x, y, z in c.get_permuted_peers(key) ]
19 class Basic(unittest.TestCase):
20 def test_loadable(self):
21 basedir = "test_client.Basic.test_loadable"
23 open(os.path.join(basedir, "introducer.furl"), "w").write("")
24 open(os.path.join(basedir, "vdrive.furl"), "w").write("")
25 c = client.Client(basedir)
27 def test_loadable_without_vdrive(self):
28 basedir = "test_client.Basic.test_loadable_without_vdrive"
30 open(os.path.join(basedir, "introducer.furl"), "w").write("")
31 c = client.Client(basedir)
33 def test_secrets(self):
34 basedir = "test_client.Basic.test_secrets"
36 open(os.path.join(basedir, "introducer.furl"), "w").write("")
37 open(os.path.join(basedir, "vdrive.furl"), "w").write("")
38 c = client.Client(basedir)
39 secret_file = os.path.join(basedir, "secret")
40 self.failUnless(os.path.exists(secret_file))
41 renew_secret = c.get_renewal_secret()
42 self.failUnless(idlib.b2a(renew_secret))
43 cancel_secret = c.get_cancel_secret()
44 self.failUnless(idlib.b2a(cancel_secret))
46 def test_sizelimit_1(self):
47 basedir = "client.Basic.test_sizelimit_1"
49 open(os.path.join(basedir, "introducer.furl"), "w").write("")
50 open(os.path.join(basedir, "vdrive.furl"), "w").write("")
51 open(os.path.join(basedir, "sizelimit"), "w").write("1000")
52 c = client.Client(basedir)
53 self.failUnlessEqual(c.getServiceNamed("storageserver").sizelimit,
56 def test_sizelimit_2(self):
57 basedir = "client.Basic.test_sizelimit_2"
59 open(os.path.join(basedir, "introducer.furl"), "w").write("")
60 open(os.path.join(basedir, "vdrive.furl"), "w").write("")
61 open(os.path.join(basedir, "sizelimit"), "w").write("10K")
62 c = client.Client(basedir)
63 self.failUnlessEqual(c.getServiceNamed("storageserver").sizelimit,
66 def test_sizelimit_3(self):
67 basedir = "client.Basic.test_sizelimit_3"
69 open(os.path.join(basedir, "introducer.furl"), "w").write("")
70 open(os.path.join(basedir, "vdrive.furl"), "w").write("")
71 open(os.path.join(basedir, "sizelimit"), "w").write("5mB")
72 c = client.Client(basedir)
73 self.failUnlessEqual(c.getServiceNamed("storageserver").sizelimit,
76 def test_sizelimit_4(self):
77 basedir = "client.Basic.test_sizelimit_4"
79 open(os.path.join(basedir, "introducer.furl"), "w").write("")
80 open(os.path.join(basedir, "vdrive.furl"), "w").write("")
81 open(os.path.join(basedir, "sizelimit"), "w").write("78Gb")
82 c = client.Client(basedir)
83 self.failUnlessEqual(c.getServiceNamed("storageserver").sizelimit,
86 def test_sizelimit_bad(self):
87 basedir = "client.Basic.test_sizelimit_bad"
89 open(os.path.join(basedir, "introducer.furl"), "w").write("")
90 open(os.path.join(basedir, "vdrive.furl"), "w").write("")
91 open(os.path.join(basedir, "sizelimit"), "w").write("bogus")
92 c = client.Client(basedir)
93 self.failUnlessEqual(c.getServiceNamed("storageserver").sizelimit,
96 def test_permute(self):
97 basedir = "test_client.Basic.test_permute"
99 open(os.path.join(basedir, "introducer.furl"), "w").write("")
100 open(os.path.join(basedir, "vdrive.furl"), "w").write("")
101 c = client.Client(basedir)
102 c.introducer_client = MyIntroducerClient()
103 for k in ["%d" % i for i in range(5)]:
104 c.introducer_client.connections[k] = None
105 self.failUnlessEqual(permute(c, "one"), ['3','1','0','4','2'])
106 self.failUnlessEqual(permute(c, "two"), ['0','4','2','1','3'])
107 c.introducer_client.connections.clear()
108 self.failUnlessEqual(permute(c, "one"), [])
110 c2 = client.Client(basedir)
111 c2.introducer_client = MyIntroducerClient()
112 for k in ["%d" % i for i in range(5)]:
113 c2.introducer_client.connections[k] = None
114 self.failUnlessEqual(permute(c2, "one"), ['3','1','0','4','2'])
116 def test_versions(self):
117 basedir = "test_client.Basic.test_versions"
119 open(os.path.join(basedir, "introducer.furl"), "w").write("")
120 open(os.path.join(basedir, "vdrive.furl"), "w").write("")
121 c = client.Client(basedir)
122 mine, oldest = c.remote_get_versions()
123 self.failUnlessEqual(version_class.Version(mine), allmydata.__version__)
125 def flush_but_dont_ignore(res):
126 d = flushEventualQueue()
132 class Run(unittest.TestCase):
135 self.sparent = service.MultiService()
136 self.sparent.startService()
138 d = self.sparent.stopService()
139 d.addBoth(flush_but_dont_ignore)
142 def test_loadable(self):
143 basedir = "test_client.Run.test_loadable"
145 dummy = "pb://wl74cyahejagspqgy4x5ukrvfnevlknt@127.0.0.1:58889/bogus"
146 open(os.path.join(basedir, "introducer.furl"), "w").write(dummy)
147 open(os.path.join(basedir, "suicide_prevention_hotline"), "w")
148 c = client.Client(basedir)
150 def stall(self, res=None, delay=1):
152 reactor.callLater(delay, d.callback, res)
155 def test_reloadable(self):
156 basedir = "test_client.Run.test_reloadable"
158 dummy = "pb://wl74cyahejagspqgy4x5ukrvfnevlknt@127.0.0.1:58889/bogus"
159 open(os.path.join(basedir, "introducer.furl"), "w").write(dummy)
160 c1 = client.Client(basedir)
161 c1.setServiceParent(self.sparent)
163 d = self.stall(delay=0.1)
164 d.addCallback(lambda res: c1.disownServiceParent())
166 c2 = client.Client(basedir)
167 c2.setServiceParent(self.sparent)
168 return c2.disownServiceParent()
169 d.addCallback(_restart)