2016-03-08 10:29:59 -08:00
|
|
|
import webtest
|
|
|
|
|
|
|
|
from io import BytesIO
|
2016-03-11 11:10:22 -08:00
|
|
|
from webagg.app import ResAggApp
|
2016-03-08 10:29:59 -08:00
|
|
|
import requests
|
|
|
|
|
|
|
|
from webagg.handlers import DefaultResourceHandler
|
|
|
|
from webagg.aggregator import SimpleAggregator
|
2016-03-11 11:10:22 -08:00
|
|
|
from webagg.proxyindexsource import ProxyMementoIndexSource, UpstreamAggIndexSource
|
2016-03-08 10:29:59 -08:00
|
|
|
|
|
|
|
from pywb.warc.recordloader import ArcWarcRecordLoader
|
|
|
|
|
2016-03-11 11:10:22 -08:00
|
|
|
from .testutils import LiveServerTests, BaseTestClass
|
2016-03-08 10:29:59 -08:00
|
|
|
|
|
|
|
|
2016-03-11 11:10:22 -08:00
|
|
|
class TestUpstream(LiveServerTests, BaseTestClass):
|
2016-03-08 10:29:59 -08:00
|
|
|
def setup(self):
|
|
|
|
app = ResAggApp()
|
|
|
|
|
2016-03-11 11:10:22 -08:00
|
|
|
base_url = 'http://localhost:{0}'.format(self.server.port)
|
2016-03-08 10:29:59 -08:00
|
|
|
app.add_route('/upstream',
|
|
|
|
DefaultResourceHandler(SimpleAggregator(
|
|
|
|
{'upstream': UpstreamAggIndexSource(base_url + '/live')})
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
app.add_route('/upstream_opt',
|
|
|
|
DefaultResourceHandler(SimpleAggregator(
|
|
|
|
{'upstream_opt': ProxyMementoIndexSource.upstream_resource(base_url + '/live')})
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
self.base_url = base_url
|
2016-05-10 16:31:44 -07:00
|
|
|
self.testapp = webtest.TestApp(app)
|
2016-03-08 10:29:59 -08:00
|
|
|
|
|
|
|
|
|
|
|
def test_live_paths(self):
|
|
|
|
res = requests.get(self.base_url + '/')
|
2016-03-21 11:04:52 -07:00
|
|
|
assert set(res.json().keys()) == {'/live/postreq', '/live'}
|
2016-03-08 10:29:59 -08:00
|
|
|
|
|
|
|
def test_upstream_paths(self):
|
|
|
|
res = self.testapp.get('/')
|
|
|
|
assert set(res.json.keys()) == {'/upstream/postreq', '/upstream', '/upstream_opt', '/upstream_opt/postreq'}
|
|
|
|
|
|
|
|
def test_live_1(self):
|
|
|
|
resp = requests.get(self.base_url + '/live/resource?url=http://httpbin.org/get', stream=True)
|
2016-03-08 10:56:03 -08:00
|
|
|
assert resp.headers['WebAgg-Source-Coll'] == 'live'
|
2016-03-08 10:29:59 -08:00
|
|
|
|
|
|
|
record = ArcWarcRecordLoader().parse_record_stream(resp.raw, no_record_parse=False)
|
|
|
|
assert record.rec_headers.get_header('WARC-Target-URI') == 'http://httpbin.org/get'
|
|
|
|
assert record.status_headers.get_header('Date') != ''
|
|
|
|
|
|
|
|
def test_upstream_1(self):
|
|
|
|
resp = self.testapp.get('/upstream/resource?url=http://httpbin.org/get')
|
2016-03-08 10:56:03 -08:00
|
|
|
assert resp.headers['WebAgg-Source-Coll'] == 'upstream:live'
|
2016-03-08 10:29:59 -08:00
|
|
|
|
|
|
|
raw = BytesIO(resp.body)
|
|
|
|
|
|
|
|
record = ArcWarcRecordLoader().parse_record_stream(raw, no_record_parse=False)
|
|
|
|
assert record.rec_headers.get_header('WARC-Target-URI') == 'http://httpbin.org/get'
|
|
|
|
assert record.status_headers.get_header('Date') != ''
|
|
|
|
|
|
|
|
def test_upstream_2(self):
|
|
|
|
resp = self.testapp.get('/upstream_opt/resource?url=http://httpbin.org/get')
|
2016-03-08 10:56:03 -08:00
|
|
|
assert resp.headers['WebAgg-Source-Coll'] == 'upstream_opt:live', resp.headers
|
2016-03-08 10:29:59 -08:00
|
|
|
|
|
|
|
raw = BytesIO(resp.body)
|
|
|
|
|
|
|
|
record = ArcWarcRecordLoader().parse_record_stream(raw, no_record_parse=False)
|
|
|
|
assert record.rec_headers.get_header('WARC-Target-URI') == 'http://httpbin.org/get'
|
|
|
|
assert record.status_headers.get_header('Date') != ''
|
|
|
|
|
|
|
|
|
|
|
|
|