mirror of
https://github.com/tahoe-lafs/tahoe-lafs.git
synced 2024-12-23 06:42:26 +00:00
Avoid using nevow FakeRequest in storage test.
Use twisted.web.server.Request instead, with a DummyChannel. There's still one line of inevitable nevow now, because of code in web/common.py; but that should be easily replaceable once we switch that over.
This commit is contained in:
parent
de5d04ab79
commit
0af744610f
@ -13,6 +13,16 @@ from twisted.trial import unittest
|
||||
from twisted.internet import defer
|
||||
from twisted.application import service
|
||||
from twisted.web.template import flattenString
|
||||
|
||||
# We need to use `nevow.inevow.IRequest` for now for compatibility
|
||||
# with the code in web/common.py. Once nevow bits are gone from
|
||||
# web/common.py, we can use `twisted.web.iweb.IRequest` here.
|
||||
from nevow.inevow import IRequest
|
||||
|
||||
from twisted.web.server import Request
|
||||
from twisted.web.test.test_web import DummyChannel
|
||||
from zope.interface import implements
|
||||
|
||||
from foolscap.api import fireEventually
|
||||
import itertools
|
||||
from allmydata import interfaces
|
||||
@ -37,7 +47,6 @@ from allmydata.mutable.layout import MDMFSlotWriteProxy, MDMFSlotReadProxy, \
|
||||
SHARE_HASH_CHAIN_SIZE
|
||||
from allmydata.interfaces import BadWriteEnablerError
|
||||
from allmydata.test.common import LoggingServiceParent, ShouldFailMixin
|
||||
from nevow.testutil import FakeRequest
|
||||
from allmydata.test.no_network import NoNetworkServer
|
||||
from allmydata.web.storage import (
|
||||
StorageStatus,
|
||||
@ -2985,28 +2994,20 @@ def renderSynchronously(ss):
|
||||
deferred = flattenString(None, elem)
|
||||
return unittest.TestCase().successResultOf(deferred)
|
||||
|
||||
def renderDeferred(resource, **kwargs):
|
||||
"""
|
||||
Use this to exercise an overridden MultiFormatResource.render(),
|
||||
usually for output=json or render_GET. It returns a Deferred.
|
||||
def renderDeferred(ss):
|
||||
elem = StorageStatusElement(ss._storage, ss._nickname)
|
||||
return flattenString(None, elem)
|
||||
|
||||
:param _MultiFormatResource resource: an HTTP resource to be rendered.
|
||||
class JSONRequest(Request):
|
||||
implements(IRequest)
|
||||
|
||||
"""
|
||||
# We should be using twisted.web's DummyRequest here instead of
|
||||
# nevow's FakeRequest, but right now it is a bit of a problem: see
|
||||
# web/common.py. MultiFormatResource.render() makes a get_arg()
|
||||
# call, which does a IRequest(ctx_or_req). IRequest can handle
|
||||
# FakeRequest, but it can't handle DummyRequest.
|
||||
req = FakeRequest(**kwargs)
|
||||
req.fields = None
|
||||
d = defer.maybeDeferred(resource.render, req)
|
||||
def _done(res):
|
||||
if isinstance(res, str):
|
||||
return res + req.v
|
||||
return req.v
|
||||
d.addCallback(_done)
|
||||
return d
|
||||
def __init__(self, **kwargs):
|
||||
Request.__init__(self, DummyChannel(), **kwargs)
|
||||
self.args = {"t": ["json"]}
|
||||
self.fields = {}
|
||||
|
||||
def renderJSON(resource):
|
||||
return resource.render(JSONRequest())
|
||||
|
||||
class MyBucketCountingCrawler(BucketCountingCrawler):
|
||||
def finished_prefix(self, cycle, prefix):
|
||||
@ -4096,7 +4097,7 @@ class LeaseCrawler(unittest.TestCase, pollmixin.PollMixin):
|
||||
return d
|
||||
|
||||
def render_json(self, page):
|
||||
d = renderDeferred(page, args={"t": ["json"]})
|
||||
d = renderJSON(page)
|
||||
return d
|
||||
|
||||
class WebStatus(unittest.TestCase, pollmixin.PollMixin):
|
||||
@ -4140,7 +4141,7 @@ class WebStatus(unittest.TestCase, pollmixin.PollMixin):
|
||||
return d
|
||||
|
||||
def render_json(self, page):
|
||||
d = renderDeferred(page, args={"t": ["json"]})
|
||||
d = renderJSON(page)
|
||||
return d
|
||||
|
||||
def test_status_no_disk_stats(self):
|
||||
|
Loading…
Reference in New Issue
Block a user