3 from twisted.trial import unittest
4 from twisted.application import service
7 from allmydata import client, introducer
8 from allmydata.util import version
9 from foolscap.eventual import flushEventualQueue
11 class MyIntroducerClient(introducer.IntroducerClient):
16 return [ y for x, y, z in c.get_permuted_peers(key) ]
18 class Basic(unittest.TestCase):
19 def test_loadable(self):
20 basedir = "test_client.Basic.test_loadable"
22 open(os.path.join(basedir, "introducer.furl"), "w").write("")
23 open(os.path.join(basedir, "vdrive.furl"), "w").write("")
24 c = client.Client(basedir)
26 def test_loadable_without_vdrive(self):
27 basedir = "test_client.Basic.test_loadable_without_vdrive"
29 open(os.path.join(basedir, "introducer.furl"), "w").write("")
30 c = client.Client(basedir)
32 def test_sizelimit_1(self):
33 basedir = "client.Basic.test_sizelimit_1"
35 open(os.path.join(basedir, "introducer.furl"), "w").write("")
36 open(os.path.join(basedir, "vdrive.furl"), "w").write("")
37 open(os.path.join(basedir, "sizelimit"), "w").write("1000")
38 c = client.Client(basedir)
39 self.failUnlessEqual(c.getServiceNamed("storageserver").sizelimit,
42 def test_sizelimit_2(self):
43 basedir = "client.Basic.test_sizelimit_2"
45 open(os.path.join(basedir, "introducer.furl"), "w").write("")
46 open(os.path.join(basedir, "vdrive.furl"), "w").write("")
47 open(os.path.join(basedir, "sizelimit"), "w").write("10K")
48 c = client.Client(basedir)
49 self.failUnlessEqual(c.getServiceNamed("storageserver").sizelimit,
52 def test_sizelimit_3(self):
53 basedir = "client.Basic.test_sizelimit_3"
55 open(os.path.join(basedir, "introducer.furl"), "w").write("")
56 open(os.path.join(basedir, "vdrive.furl"), "w").write("")
57 open(os.path.join(basedir, "sizelimit"), "w").write("5mB")
58 c = client.Client(basedir)
59 self.failUnlessEqual(c.getServiceNamed("storageserver").sizelimit,
62 def test_sizelimit_4(self):
63 basedir = "client.Basic.test_sizelimit_4"
65 open(os.path.join(basedir, "introducer.furl"), "w").write("")
66 open(os.path.join(basedir, "vdrive.furl"), "w").write("")
67 open(os.path.join(basedir, "sizelimit"), "w").write("78Gb")
68 c = client.Client(basedir)
69 self.failUnlessEqual(c.getServiceNamed("storageserver").sizelimit,
72 def test_sizelimit_bad(self):
73 basedir = "client.Basic.test_sizelimit_bad"
75 open(os.path.join(basedir, "introducer.furl"), "w").write("")
76 open(os.path.join(basedir, "vdrive.furl"), "w").write("")
77 open(os.path.join(basedir, "sizelimit"), "w").write("bogus")
78 c = client.Client(basedir)
79 self.failUnlessEqual(c.getServiceNamed("storageserver").sizelimit,
82 def test_permute(self):
83 basedir = "test_client.Basic.test_permute"
85 open(os.path.join(basedir, "introducer.furl"), "w").write("")
86 open(os.path.join(basedir, "vdrive.furl"), "w").write("")
87 c = client.Client(basedir)
88 c.introducer_client = MyIntroducerClient()
89 for k in ["%d" % i for i in range(5)]:
90 c.introducer_client.connections[k] = None
91 self.failUnlessEqual(permute(c, "one"), ['3','1','0','4','2'])
92 self.failUnlessEqual(permute(c, "two"), ['0','4','2','1','3'])
93 c.introducer_client.connections.clear()
94 self.failUnlessEqual(permute(c, "one"), [])
96 c2 = client.Client(basedir)
97 c2.introducer_client = MyIntroducerClient()
98 for k in ["%d" % i for i in range(5)]:
99 c2.introducer_client.connections[k] = None
100 self.failUnlessEqual(permute(c2, "one"), ['3','1','0','4','2'])
102 def test_versions(self):
103 basedir = "test_client.Basic.test_versions"
105 open(os.path.join(basedir, "introducer.furl"), "w").write("")
106 open(os.path.join(basedir, "vdrive.furl"), "w").write("")
107 c = client.Client(basedir)
108 mine, oldest = c.remote_get_versions()
109 self.failUnlessEqual(version.Version(mine), allmydata.__version__)
111 def flush_but_dont_ignore(res):
112 d = flushEventualQueue()
118 class Run(unittest.TestCase):
121 self.sparent = service.MultiService()
122 self.sparent.startService()
124 d = self.sparent.stopService()
125 d.addBoth(flush_but_dont_ignore)
128 def test_loadable(self):
129 basedir = "test_client.Run.test_loadable"
131 dummy = "pb://wl74cyahejagspqgy4x5ukrvfnevlknt@127.0.0.1:58889/bogus"
132 open(os.path.join(basedir, "introducer.furl"), "w").write(dummy)
133 open(os.path.join(basedir, "suicide_prevention_hotline"), "w")
134 c = client.Client(basedir)
136 def test_reloadable(self):
137 basedir = "test_client.Run.test_reloadable"
139 dummy = "pb://wl74cyahejagspqgy4x5ukrvfnevlknt@127.0.0.1:58889/bogus"
140 open(os.path.join(basedir, "introducer.furl"), "w").write(dummy)
141 c1 = client.Client(basedir)
142 c1.setServiceParent(self.sparent)
144 d = c1.disownServiceParent()
146 c2 = client.Client(basedir)
147 c2.setServiceParent(self.sparent)
148 return c2.disownServiceParent()
149 d.addCallback(_restart)