2 from twisted.trial import unittest
3 from allmydata import provisioning
4 ReliabilityModel = None
6 from allmydata.reliability import ReliabilityModel
8 pass # might not be importable, since it needs NumPy
10 from nevow import inevow
11 from zope.interface import implements
14 implements(inevow.IRequest)
17 class Provisioning(unittest.TestCase):
18 def getarg(self, name, astype=int):
19 if name in self.fields:
20 return astype(self.fields[name])
24 pt = provisioning.ProvisioningTool()
27 #r.fields = self.fields
28 #ctx = RequestContext()
29 #unfilled = pt.renderSynchronously(ctx)
30 lots_of_stan = pt.do_forms(self.getarg)
32 self.fields = {'filled': True,
34 "files_per_user": 1000,
35 "space_per_user": 1e9,
37 "encoding_parameters": "3-of-10-5",
39 "ownership_mode": "A",
45 #filled = pt.renderSynchronously(ctx)
46 more_stan = pt.do_forms(self.getarg)
48 # trigger the wraparound configuration
49 self.fields["num_servers"] = 5
50 #filled = pt.renderSynchronously(ctx)
51 more_stan = pt.do_forms(self.getarg)
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)
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)
70 class Reliability(unittest.TestCase):
72 if ReliabilityModel is None:
73 raise unittest.SkipTest("reliability model requires NumPy")
74 r = ReliabilityModel.run(delta=100000,
75 report_period=3*MONTH,
77 self.failUnlessEqual(len(r.samples), 20)