Change OphandleTable to use a deterministic clock, so we can test it
authorKevan Carstensen <kevan@isnotajoke.com>
Sat, 20 Feb 2010 21:07:13 +0000 (13:07 -0800)
committerKevan Carstensen <kevan@isnotajoke.com>
Sat, 20 Feb 2010 21:07:13 +0000 (13:07 -0800)
commit81ad52d6ebf05f4fe55be1c0b805aa9fcb55e7cf
tree9d8b8e038f3636500581f8b3ab27bf3792d420dc
parentbcdc78bd446f28e26fd4726e10308160bedc4366
Change OphandleTable to use a deterministic clock, so we can test it

To test the changes for #577, we need a deterministic way to simulate
the passage of long periods of time. twisted.internet.task.Clock seems,
from my Googling, to be the way to go for this functionality. I changed
a few things so that OphandleTable would use twisted.internet.task.Clock
when testing:

  * WebishServer.__init___ now takes an optional 'clock' parameter,
  * which it passes to the root.Root instance it creates.
  * root.Root.__init__ now takes an optional 'clock' parameter, which it
    passes to the OphandleTable.__init__ method.
  * OphandleTable.__init__ now takes an optional 'clock' parameter. If
    it is provided, and it isn't None, its callLater method will be used
    to schedule ophandle expirations (as opposed to using
    reactor.callLater, which is what OphandleTable does normally).
  * The WebMixin object in test_web.py now sets a self.clock parameter,
    which is a twisted.internet.task.Clock that it feeds to the
    WebishServer it creates.

Tests using the WebMixin can control the passage of time in
OphandleTable by accessing self.clock.
src/allmydata/test/test_web.py
src/allmydata/web/operations.py
src/allmydata/web/root.py
src/allmydata/webish.py