mirror of
https://github.com/tahoe-lafs/tahoe-lafs.git
synced 2024-12-25 15:41:06 +00:00
tests/no_network: move GET into the GridTestMixin class
This commit is contained in:
parent
6f981e4eab
commit
2e7f64d392
@ -1,6 +1,7 @@
|
|||||||
|
|
||||||
import re
|
import re
|
||||||
from twisted.internet import defer
|
from twisted.internet import defer
|
||||||
|
from twisted.web import client
|
||||||
from nevow.testutil import FakeRequest
|
from nevow.testutil import FakeRequest
|
||||||
from nevow import inevow, context
|
from nevow import inevow, context
|
||||||
|
|
||||||
@ -58,3 +59,24 @@ class WebRenderingMixin:
|
|||||||
s = re.sub(r'\s+', ' ', s)
|
s = re.sub(r'\s+', ' ', s)
|
||||||
return s
|
return s
|
||||||
|
|
||||||
|
|
||||||
|
class MyGetter(client.HTTPPageGetter):
|
||||||
|
handleStatus_206 = lambda self: self.handleStatus_200()
|
||||||
|
|
||||||
|
class HTTPClientHEADFactory(client.HTTPClientFactory):
|
||||||
|
protocol = MyGetter
|
||||||
|
|
||||||
|
def noPage(self, reason):
|
||||||
|
# Twisted-2.5.0 and earlier had a bug, in which they would raise an
|
||||||
|
# exception when the response to a HEAD request had no body (when in
|
||||||
|
# fact they are defined to never have a body). This was fixed in
|
||||||
|
# Twisted-8.0 . To work around this, we catch the
|
||||||
|
# PartialDownloadError and make it disappear.
|
||||||
|
if (reason.check(client.PartialDownloadError)
|
||||||
|
and self.method.upper() == "HEAD"):
|
||||||
|
self.page("")
|
||||||
|
return
|
||||||
|
return client.HTTPClientFactory.noPage(self, reason)
|
||||||
|
|
||||||
|
class HTTPClientGETFactory(client.HTTPClientFactory):
|
||||||
|
protocol = MyGetter
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
import os.path
|
import os.path
|
||||||
import sha
|
import sha
|
||||||
from twisted.application import service
|
from twisted.application import service
|
||||||
|
from twisted.internet import reactor
|
||||||
from foolscap import Referenceable
|
from foolscap import Referenceable
|
||||||
from foolscap.eventual import fireEventually
|
from foolscap.eventual import fireEventually
|
||||||
from base64 import b32encode
|
from base64 import b32encode
|
||||||
@ -24,6 +25,7 @@ from allmydata.client import Client
|
|||||||
from allmydata.storage.server import StorageServer, storage_index_to_dir
|
from allmydata.storage.server import StorageServer, storage_index_to_dir
|
||||||
from allmydata.util import fileutil, idlib, hashutil, rrefutil
|
from allmydata.util import fileutil, idlib, hashutil, rrefutil
|
||||||
from allmydata.introducer.client import RemoteServiceConnector
|
from allmydata.introducer.client import RemoteServiceConnector
|
||||||
|
from allmydata.test.common_web import HTTPClientGETFactory
|
||||||
|
|
||||||
class IntentionalError(Exception):
|
class IntentionalError(Exception):
|
||||||
pass
|
pass
|
||||||
@ -283,3 +285,19 @@ class GridTestMixin:
|
|||||||
sharedata = open(i_sharefile, "rb").read()
|
sharedata = open(i_sharefile, "rb").read()
|
||||||
corruptdata = corruptor(sharedata)
|
corruptdata = corruptor(sharedata)
|
||||||
open(i_sharefile, "wb").write(corruptdata)
|
open(i_sharefile, "wb").write(corruptdata)
|
||||||
|
|
||||||
|
def GET(self, urlpath, followRedirect=False, return_response=False,
|
||||||
|
method="GET", clientnum=0, **kwargs):
|
||||||
|
# if return_response=True, this fires with (data, statuscode,
|
||||||
|
# respheaders) instead of just data.
|
||||||
|
assert not isinstance(urlpath, unicode)
|
||||||
|
url = self.client_baseurls[clientnum] + urlpath
|
||||||
|
factory = HTTPClientGETFactory(url, method=method,
|
||||||
|
followRedirect=followRedirect, **kwargs)
|
||||||
|
reactor.connectTCP("localhost", self.client_webports[clientnum],factory)
|
||||||
|
d = factory.deferred
|
||||||
|
def _got_data(data):
|
||||||
|
return (data, factory.status, factory.response_headers)
|
||||||
|
if return_response:
|
||||||
|
d.addCallback(_got_data)
|
||||||
|
return factory.deferred
|
||||||
|
@ -23,6 +23,9 @@ from allmydata.mutable.common import UnrecoverableFileError
|
|||||||
import common_util as testutil
|
import common_util as testutil
|
||||||
from allmydata.test.no_network import GridTestMixin
|
from allmydata.test.no_network import GridTestMixin
|
||||||
|
|
||||||
|
from allmydata.test.common_web import HTTPClientGETFactory, \
|
||||||
|
HTTPClientHEADFactory
|
||||||
|
|
||||||
# create a fake uploader/downloader, and a couple of fake dirnodes, then
|
# create a fake uploader/downloader, and a couple of fake dirnodes, then
|
||||||
# create a webserver that works against them
|
# create a webserver that works against them
|
||||||
|
|
||||||
@ -115,27 +118,6 @@ class FakeClient(service.MultiService):
|
|||||||
def list_all_helper_statuses(self):
|
def list_all_helper_statuses(self):
|
||||||
return []
|
return []
|
||||||
|
|
||||||
class MyGetter(client.HTTPPageGetter):
|
|
||||||
handleStatus_206 = lambda self: self.handleStatus_200()
|
|
||||||
|
|
||||||
class HTTPClientHEADFactory(client.HTTPClientFactory):
|
|
||||||
protocol = MyGetter
|
|
||||||
|
|
||||||
def noPage(self, reason):
|
|
||||||
# Twisted-2.5.0 and earlier had a bug, in which they would raise an
|
|
||||||
# exception when the response to a HEAD request had no body (when in
|
|
||||||
# fact they are defined to never have a body). This was fixed in
|
|
||||||
# Twisted-8.0 . To work around this, we catch the
|
|
||||||
# PartialDownloadError and make it disappear.
|
|
||||||
if (reason.check(client.PartialDownloadError)
|
|
||||||
and self.method.upper() == "HEAD"):
|
|
||||||
self.page("")
|
|
||||||
return
|
|
||||||
return client.HTTPClientFactory.noPage(self, reason)
|
|
||||||
|
|
||||||
class HTTPClientGETFactory(client.HTTPClientFactory):
|
|
||||||
protocol = MyGetter
|
|
||||||
|
|
||||||
class WebMixin(object):
|
class WebMixin(object):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.s = FakeClient()
|
self.s = FakeClient()
|
||||||
@ -2546,22 +2528,6 @@ class Util(unittest.TestCase):
|
|||||||
|
|
||||||
class Grid(GridTestMixin, WebErrorMixin, unittest.TestCase, ShouldFailMixin):
|
class Grid(GridTestMixin, WebErrorMixin, unittest.TestCase, ShouldFailMixin):
|
||||||
|
|
||||||
def GET(self, urlpath, followRedirect=False, return_response=False,
|
|
||||||
method="GET", clientnum=0, **kwargs):
|
|
||||||
# if return_response=True, this fires with (data, statuscode,
|
|
||||||
# respheaders) instead of just data.
|
|
||||||
assert not isinstance(urlpath, unicode)
|
|
||||||
url = self.client_baseurls[clientnum] + urlpath
|
|
||||||
factory = HTTPClientGETFactory(url, method=method,
|
|
||||||
followRedirect=followRedirect, **kwargs)
|
|
||||||
reactor.connectTCP("localhost", self.client_webports[clientnum],factory)
|
|
||||||
d = factory.deferred
|
|
||||||
def _got_data(data):
|
|
||||||
return (data, factory.status, factory.response_headers)
|
|
||||||
if return_response:
|
|
||||||
d.addCallback(_got_data)
|
|
||||||
return factory.deferred
|
|
||||||
|
|
||||||
def CHECK(self, ign, which, args, clientnum=0):
|
def CHECK(self, ign, which, args, clientnum=0):
|
||||||
fileurl = self.fileurls[which]
|
fileurl = self.fileurls[which]
|
||||||
url = fileurl + "?" + args
|
url = fileurl + "?" + args
|
||||||
|
Loading…
Reference in New Issue
Block a user