mirror of
https://github.com/tahoe-lafs/tahoe-lafs.git
synced 2025-02-07 20:00:20 +00:00
Add tests for the ophandle expiration behavior in #577
This commit is contained in:
parent
09177a6e19
commit
bcdc78bd44
@ -367,6 +367,14 @@ class WebMixin(object):
|
|||||||
self.fail("%s was supposed to Error(404), not get '%s'" %
|
self.fail("%s was supposed to Error(404), not get '%s'" %
|
||||||
(which, res))
|
(which, res))
|
||||||
|
|
||||||
|
def should302(self, res, which):
|
||||||
|
if isinstance(res, failure.Failure):
|
||||||
|
res.trap(error.Error)
|
||||||
|
self.failUnlessEqual(res.value.status, "302")
|
||||||
|
else:
|
||||||
|
self.fail("%s was supposed to Error(302), not get '%s'" %
|
||||||
|
(which, res))
|
||||||
|
|
||||||
|
|
||||||
class Web(WebMixin, WebErrorMixin, testutil.StallMixin, unittest.TestCase):
|
class Web(WebMixin, WebErrorMixin, testutil.StallMixin, unittest.TestCase):
|
||||||
def test_create(self):
|
def test_create(self):
|
||||||
@ -2889,6 +2897,82 @@ class Web(WebMixin, WebErrorMixin, testutil.StallMixin, unittest.TestCase):
|
|||||||
"/operations/130?t=status&output=JSON"))
|
"/operations/130?t=status&output=JSON"))
|
||||||
return d
|
return d
|
||||||
|
|
||||||
|
def test_uncollected_ophandle_expiration(self):
|
||||||
|
# uncollected ophandles should expire after 4 days
|
||||||
|
def _make_uncollected_ophandle(ophandle):
|
||||||
|
d = self.POST(self.public_url +
|
||||||
|
"/foo/?t=start-manifest&ophandle=%d" % ophandle,
|
||||||
|
followRedirect=False)
|
||||||
|
# When we start the operation, the webapi server will want
|
||||||
|
# to redirect us to the page for the ophandle, so we get
|
||||||
|
# confirmation that the operation has started. If the
|
||||||
|
# manifest operation has finished by the time we get there,
|
||||||
|
# following that redirect (by setting followRedirect=True
|
||||||
|
# above) has the side effect of collecting the ophandle that
|
||||||
|
# we've just created, which means that we can't use the
|
||||||
|
# ophandle to test the uncollected timeout anymore. So,
|
||||||
|
# instead, catch the 302 here and don't follow it.
|
||||||
|
d.addBoth(self.should302, "uncollected_ophandle_creation")
|
||||||
|
return d
|
||||||
|
# Create an ophandle, don't collect it, then advance the clock by
|
||||||
|
# 4 days - 1 second and make sure that the ophandle is still there.
|
||||||
|
d = _make_uncollected_ophandle(131)
|
||||||
|
d.addCallback(lambda ign:
|
||||||
|
self.clock.advance((96*60*60) - 1)) # 96 hours = 4 days
|
||||||
|
d.addCallback(lambda ign:
|
||||||
|
self.GET("/operations/131?t=status&output=JSON"))
|
||||||
|
def _check1(res):
|
||||||
|
data = simplejson.loads(res)
|
||||||
|
self.failUnless("finished" in data, res)
|
||||||
|
d.addCallback(_check1)
|
||||||
|
# Create an ophandle, don't collect it, then try to collect it
|
||||||
|
# after 4 days. It should be gone.
|
||||||
|
d.addCallback(lambda ign:
|
||||||
|
_make_uncollected_ophandle(132))
|
||||||
|
d.addCallback(lambda ign:
|
||||||
|
self.clock.advance(96*60*60))
|
||||||
|
d.addCallback(lambda ign:
|
||||||
|
self.shouldHTTPError("test_uncollected_ophandle_expired_after_100_hours",
|
||||||
|
404, "404 Not Found",
|
||||||
|
"unknown/expired handle '132'",
|
||||||
|
self.GET,
|
||||||
|
"/operations/132?t=status&output=JSON"))
|
||||||
|
return d
|
||||||
|
|
||||||
|
def test_collected_ophandle_expiration(self):
|
||||||
|
# collected ophandles should expire after 1 day
|
||||||
|
def _make_collected_ophandle(ophandle):
|
||||||
|
d = self.POST(self.public_url +
|
||||||
|
"/foo/?t=start-manifest&ophandle=%d" % ophandle,
|
||||||
|
followRedirect=True)
|
||||||
|
# By following the initial redirect, we collect the ophandle
|
||||||
|
# we've just created.
|
||||||
|
return d
|
||||||
|
# Create a collected ophandle, then collect it after 23 hours
|
||||||
|
# and 59 seconds to make sure that it is still there.
|
||||||
|
d = _make_collected_ophandle(133)
|
||||||
|
d.addCallback(lambda ign:
|
||||||
|
self.clock.advance((24*60*60) - 1))
|
||||||
|
d.addCallback(lambda ign:
|
||||||
|
self.GET("/operations/133?t=status&output=JSON"))
|
||||||
|
def _check1(res):
|
||||||
|
data = simplejson.loads(res)
|
||||||
|
self.failUnless("finished" in data, res)
|
||||||
|
d.addCallback(_check1)
|
||||||
|
# Create another uncollected ophandle, then try to collect it
|
||||||
|
# after 24 hours to make sure that it is gone.
|
||||||
|
d.addCallback(lambda ign:
|
||||||
|
_make_collected_ophandle(134))
|
||||||
|
d.addCallback(lambda ign:
|
||||||
|
self.clock.advance(24*60*60))
|
||||||
|
d.addCallback(lambda ign:
|
||||||
|
self.shouldHTTPError("test_collected_ophandle_expired_after_1000_minutes",
|
||||||
|
404, "404 Not Found",
|
||||||
|
"unknown/expired handle '134'",
|
||||||
|
self.GET,
|
||||||
|
"/operations/134?t=status&output=JSON"))
|
||||||
|
return d
|
||||||
|
|
||||||
def test_incident(self):
|
def test_incident(self):
|
||||||
d = self.POST("/report_incident", details="eek")
|
d = self.POST("/report_incident", details="eek")
|
||||||
def _done(res):
|
def _done(res):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user