]> git.rkrishnan.org Git - tahoe-lafs/tahoe-lafs.git/blob - src/allmydata/test/test_client.py
activate storage size limits in the client. Closes #34.
[tahoe-lafs/tahoe-lafs.git] / src / allmydata / test / test_client.py
1
2 import os
3 from twisted.trial import unittest
4 from twisted.application import service
5
6 import allmydata
7 from allmydata import client, introducer
8 from allmydata.util import version
9 from foolscap.eventual import flushEventualQueue
10
11 class MyIntroducerClient(introducer.IntroducerClient):
12     def __init__(self):
13         self.connections = {}
14
15 def permute(c, key):
16     return [ y for x, y, z in c.get_permuted_peers(key) ]
17
18 class Basic(unittest.TestCase):
19     def test_loadable(self):
20         basedir = "test_client.Basic.test_loadable"
21         os.mkdir(basedir)
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)
25
26     def test_loadable_without_vdrive(self):
27         basedir = "test_client.Basic.test_loadable_without_vdrive"
28         os.mkdir(basedir)
29         open(os.path.join(basedir, "introducer.furl"), "w").write("")
30         c = client.Client(basedir)
31
32     def test_sizelimit_1(self):
33         basedir = "client.Basic.test_sizelimit_1"
34         os.mkdir(basedir)
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,
40                              1000)
41
42     def test_sizelimit_2(self):
43         basedir = "client.Basic.test_sizelimit_2"
44         os.mkdir(basedir)
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,
50                              10*1000)
51
52     def test_sizelimit_3(self):
53         basedir = "client.Basic.test_sizelimit_3"
54         os.mkdir(basedir)
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,
60                              5*1000*1000)
61
62     def test_sizelimit_4(self):
63         basedir = "client.Basic.test_sizelimit_4"
64         os.mkdir(basedir)
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,
70                              78*1000*1000*1000)
71
72     def test_sizelimit_bad(self):
73         basedir = "client.Basic.test_sizelimit_bad"
74         os.mkdir(basedir)
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,
80                              None)
81
82     def test_permute(self):
83         basedir = "test_client.Basic.test_permute"
84         os.mkdir(basedir)
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"), [])
95
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'])
101
102     def test_versions(self):
103         basedir = "test_client.Basic.test_versions"
104         os.mkdir(basedir)
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__)
110
111 def flush_but_dont_ignore(res):
112     d = flushEventualQueue()
113     def _done(ignored):
114         return res
115     d.addCallback(_done)
116     return d
117
118 class Run(unittest.TestCase):
119
120     def setUp(self):
121         self.sparent = service.MultiService()
122         self.sparent.startService()
123     def tearDown(self):
124         d = self.sparent.stopService()
125         d.addBoth(flush_but_dont_ignore)
126         return d
127
128     def test_loadable(self):
129         basedir = "test_client.Run.test_loadable"
130         os.mkdir(basedir)
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)
135
136     def test_reloadable(self):
137         basedir = "test_client.Run.test_reloadable"
138         os.mkdir(basedir)
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)
143
144         d = c1.disownServiceParent()
145         def _restart(res):
146             c2 = client.Client(basedir)
147             c2.setServiceParent(self.sparent)
148             return c2.disownServiceParent()
149         d.addCallback(_restart)
150         return d
151