]> git.rkrishnan.org Git - tahoe-lafs/tahoe-lafs.git/blob - src/allmydata/test/test_provisioning.py
reliability: switch to NumPy, since Numeric is deprecated
[tahoe-lafs/tahoe-lafs.git] / src / allmydata / test / test_provisioning.py
1
2 from twisted.trial import unittest
3 from allmydata import provisioning
4 ReliabilityModel = None
5 try:
6     from allmydata.reliability import ReliabilityModel
7 except ImportError:
8     pass # might not be importable, since it needs NumPy
9
10 from nevow import inevow
11 from zope.interface import implements
12
13 class MyRequest:
14     implements(inevow.IRequest)
15     pass
16
17 class Provisioning(unittest.TestCase):
18     def getarg(self, name, astype=int):
19         if name in self.fields:
20             return astype(self.fields[name])
21         return None
22
23     def test_load(self):
24         pt = provisioning.ProvisioningTool()
25         self.fields = {}
26         #r = MyRequest()
27         #r.fields = self.fields
28         #ctx = RequestContext()
29         #unfilled = pt.renderSynchronously(ctx)
30         lots_of_stan = pt.do_forms(self.getarg)
31
32         self.fields = {'filled': True,
33                        "num_users": 50e3,
34                        "files_per_user": 1000,
35                        "space_per_user": 1e9,
36                        "sharing_ratio": 1.0,
37                        "encoding_parameters": "3-of-10-5",
38                        "num_servers": 30,
39                        "ownership_mode": "A",
40                        "download_rate": 100,
41                        "upload_rate": 10,
42                        "delete_rate": 10,
43                        "lease_timer": 7,
44                        }
45         #filled = pt.renderSynchronously(ctx)
46         more_stan = pt.do_forms(self.getarg)
47
48         # trigger the wraparound configuration
49         self.fields["num_servers"] = 5
50         #filled = pt.renderSynchronously(ctx)
51         more_stan = pt.do_forms(self.getarg)
52
53         # and other ownership modes
54         self.fields["ownership_mode"] = "B"
55         more_stan = pt.do_forms(self.getarg)
56         self.fields["ownership_mode"] = "E"
57         more_stan = pt.do_forms(self.getarg)
58
59     def test_provisioning_math(self):
60         self.failUnlessEqual(provisioning.binomial(10, 0), 1)
61         self.failUnlessEqual(provisioning.binomial(10, 1), 10)
62         self.failUnlessEqual(provisioning.binomial(10, 2), 45)
63         self.failUnlessEqual(provisioning.binomial(10, 9), 10)
64         self.failUnlessEqual(provisioning.binomial(10, 10), 1)
65
66 DAY=24*60*60
67 MONTH=31*DAY
68 YEAR=365*DAY
69
70 class Reliability(unittest.TestCase):
71     def test_basic(self):
72         if ReliabilityModel is None:
73             raise unittest.SkipTest("reliability model requires NumPy")
74         r = ReliabilityModel.run(delta=100000,
75                                  report_period=3*MONTH,
76                                  report_span=5*YEAR)
77         self.failUnlessEqual(len(r.samples), 20)