--- a/web/test/unittest_http.py Thu Aug 29 16:20:33 2013 +0200
+++ b/web/test/unittest_http.py Thu Aug 29 16:21:52 2013 +0200
@@ -1,15 +1,30 @@
+# copyright 2003-2013 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
+# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
+#
+# This file is part of CubicWeb.
+#
+# CubicWeb is free software: you can redistribute it and/or modify it under the
+# terms of the GNU Lesser General Public License as published by the Free
+# Software Foundation, either version 2.1 of the License, or (at your option)
+# any later version.
+#
+# CubicWeb is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+# details.
+#
+# You should have received a copy of the GNU Lesser General Public License along
+# with CubicWeb. If not, see <http://www.gnu.org/licenses/>.
from logilab.common.testlib import TestCase, unittest_main, tag, Tags
-from cubicweb.web import StatusResponse
from cubicweb.devtools.fake import FakeRequest
def _test_cache(hin, hout, method='GET'):
- """forge and process a request
+ """forge and process an HTTP request using given headers in/out and method,
+ then return it once its .is_client_cache_valid() method has been called.
- return status code and the request object
-
- status is None is no cache is involved
+ req.status_out is None if the page should have been calculated.
"""
# forge request
req = FakeRequest(method=method)
@@ -18,12 +33,9 @@
for key, value in hout:
req.headers_out.addRawHeader(key, str(value))
# process
- status = None
- try:
- req.validate_cache()
- except StatusResponse as ex:
- status = ex.status
- return status, req
+ req.status_out = None
+ req.is_client_cache_valid()
+ return req
class HTTPCache(TestCase):
"""Check that the http cache logiac work as expected
@@ -48,42 +60,42 @@
def test_IN_none_OUT_none(self):
#: test that no caching is requested when not data is available
#: on any side
- status, req =_test_cache((),())
- self.assertIsNone(status)
+ req =_test_cache((), ())
+ self.assertIsNone(req.status_out)
def test_IN_Some_OUT_none(self):
#: test that no caching is requested when no data is available
#: server (origin) side
hin = [('if-modified-since','Sat, 14 Apr 2012 14:39:32 GM'),
]
- status, req = _test_cache(hin, ())
- self.assertIsNone(status)
+ req = _test_cache(hin, ())
+ self.assertIsNone(req.status_out)
hin = [('if-none-match','babar/huitre'),
]
- status, req = _test_cache(hin, ())
- self.assertIsNone(status)
+ req = _test_cache(hin, ())
+ self.assertIsNone(req.status_out)
hin = [('if-modified-since','Sat, 14 Apr 2012 14:39:32 GM'),
('if-none-match','babar/huitre'),
]
- status, req = _test_cache(hin, ())
- self.assertIsNone(status)
+ req = _test_cache(hin, ())
+ self.assertIsNone(req.status_out)
def test_IN_none_OUT_Some(self):
#: test that no caching is requested when no data is provided
#: by the client
hout = [('last-modified','Sat, 14 Apr 2012 14:39:32 GM'),
]
- status, req = _test_cache((), hout)
- self.assertIsNone(status)
+ req = _test_cache((), hout)
+ self.assertIsNone(req.status_out)
hout = [('etag','babar/huitre'),
]
- status, req = _test_cache((), hout)
- self.assertIsNone(status)
+ req = _test_cache((), hout)
+ self.assertIsNone(req.status_out)
hout = [('last-modified', 'Sat, 14 Apr 2012 14:39:32 GM'),
('etag','babar/huitre'),
]
- status, req = _test_cache((), hout)
- self.assertIsNone(status)
+ req = _test_cache((), hout)
+ self.assertIsNone(req.status_out)
@tag('last_modified')
def test_last_modified_newer(self):
@@ -93,8 +105,8 @@
]
hout = [('last-modified', 'Sat, 14 Apr 2012 14:39:32 GM'),
]
- status, req = _test_cache(hin, hout)
- self.assertCache(None, status, 'origin is newer than client')
+ req = _test_cache(hin, hout)
+ self.assertCache(None, req.status_out, 'origin is newer than client')
@tag('last_modified')
def test_last_modified_older(self):
@@ -103,8 +115,8 @@
]
hout = [('last-modified', 'Sat, 14 Apr 2012 14:39:32 GM'),
]
- status, req = _test_cache(hin, hout)
- self.assertCache(304, status, 'origin is older than client')
+ req = _test_cache(hin, hout)
+ self.assertCache(304, req.status_out, 'origin is older than client')
@tag('last_modified')
def test_last_modified_same(self):
@@ -113,8 +125,8 @@
]
hout = [('last-modified', 'Sat, 14 Apr 2012 14:39:32 GM'),
]
- status, req = _test_cache(hin, hout)
- self.assertCache(304, status, 'origin is equal to client')
+ req = _test_cache(hin, hout)
+ self.assertCache(304, req.status_out, 'origin is equal to client')
@tag('etag')
def test_etag_mismatch(self):
@@ -124,8 +136,8 @@
]
hout = [('etag', 'celestine'),
]
- status, req = _test_cache(hin, hout)
- self.assertCache(None, status, 'etag mismatch')
+ req = _test_cache(hin, hout)
+ self.assertCache(None, req.status_out, 'etag mismatch')
@tag('etag')
def test_etag_match(self):
@@ -134,23 +146,23 @@
]
hout = [('etag', 'babar'),
]
- status, req = _test_cache(hin, hout)
- self.assertCache(304, status, 'etag match')
+ req = _test_cache(hin, hout)
+ self.assertCache(304, req.status_out, 'etag match')
# etag match in multiple
hin = [('if-none-match', 'loutre'),
('if-none-match', 'babar'),
]
hout = [('etag', 'babar'),
]
- status, req = _test_cache(hin, hout)
- self.assertCache(304, status, 'etag match in multiple')
+ req = _test_cache(hin, hout)
+ self.assertCache(304, req.status_out, 'etag match in multiple')
# client use "*" as etag
hin = [('if-none-match', '*'),
]
hout = [('etag', 'babar'),
]
- status, req = _test_cache(hin, hout)
- self.assertCache(304, status, 'client use "*" as etag')
+ req = _test_cache(hin, hout)
+ self.assertCache(304, req.status_out, 'client use "*" as etag')
@tag('etag', 'last_modified')
def test_both(self):
@@ -162,8 +174,8 @@
hout = [('etag', 'loutre'),
('last-modified', 'Sat, 15 Apr 2012 14:39:32 GM'),
]
- status, req = _test_cache(hin, hout)
- self.assertCache(None, status, 'both wrong')
+ req = _test_cache(hin, hout)
+ self.assertCache(None, req.status_out, 'both wrong')
@tag('etag', 'last_modified')
def test_both_etag_mismatch(self):
@@ -174,8 +186,8 @@
hout = [('etag', 'loutre'),
('last-modified', 'Sat, 13 Apr 2012 14:39:32 GM'),
]
- status, req = _test_cache(hin, hout)
- self.assertCache(None, status, 'both but etag mismatch')
+ req = _test_cache(hin, hout)
+ self.assertCache(None, req.status_out, 'both but etag mismatch')
@tag('etag', 'last_modified')
def test_both_but_modified(self):
@@ -186,8 +198,8 @@
hout = [('etag', 'babar'),
('last-modified', 'Sat, 15 Apr 2012 14:39:32 GM'),
]
- status, req = _test_cache(hin, hout)
- self.assertCache(None, status, 'both but modified')
+ req = _test_cache(hin, hout)
+ self.assertCache(None, req.status_out, 'both but modified')
@tag('etag', 'last_modified')
def test_both_ok(self):
@@ -198,8 +210,8 @@
hout = [('etag', 'babar'),
('last-modified', 'Sat, 13 Apr 2012 14:39:32 GM'),
]
- status, req = _test_cache(hin, hout)
- self.assertCache(304, status, 'both ok')
+ req = _test_cache(hin, hout)
+ self.assertCache(304, req.status_out, 'both ok')
@tag('etag', 'HEAD')
def test_head_verb(self):
@@ -210,15 +222,15 @@
]
hout = [('etag', 'rhino/really-not-babar'),
]
- status, req = _test_cache(hin, hout, method='HEAD')
- self.assertCache(200, status, 'modifier HEAD verb')
+ req = _test_cache(hin, hout, method='HEAD')
+ self.assertCache(200, req.status_out, 'modifier HEAD verb')
# not modified
hin = [('if-none-match', 'babar'),
]
hout = [('etag', 'babar'),
]
- status, req = _test_cache(hin, hout, method='HEAD')
- self.assertCache(304, status, 'not modifier HEAD verb')
+ req = _test_cache(hin, hout, method='HEAD')
+ self.assertCache(304, req.status_out, 'not modifier HEAD verb')
@tag('etag', 'POST')
def test_post_verb(self):
@@ -227,15 +239,15 @@
]
hout = [('etag', 'rhino/really-not-babar'),
]
- status, req = _test_cache(hin, hout, method='POST')
- self.assertCache(None, status, 'modifier HEAD verb')
+ req = _test_cache(hin, hout, method='POST')
+ self.assertCache(None, req.status_out, 'modifier HEAD verb')
# not modified
hin = [('if-none-match', 'babar'),
]
hout = [('etag', 'babar'),
]
- status, req = _test_cache(hin, hout, method='POST')
- self.assertCache(412, status, 'not modifier HEAD verb')
+ req = _test_cache(hin, hout, method='POST')
+ self.assertCache(412, req.status_out, 'not modifier HEAD verb')
@tag('expires')
def test_expires_added(self):
@@ -246,8 +258,8 @@
]
hout = [('etag', 'rhino/really-not-babar'),
]
- status, req = _test_cache(hin, hout)
- self.assertCache(None, status, 'modifier HEAD verb')
+ req = _test_cache(hin, hout)
+ self.assertCache(None, req.status_out, 'modifier HEAD verb')
value = req.headers_out.getHeader('expires')
self.assertIsNotNone(value)
@@ -258,8 +270,8 @@
]
hout = [('etag', 'babar'),
]
- status, req = _test_cache(hin, hout)
- self.assertCache(304, status, 'not modifier HEAD verb')
+ req = _test_cache(hin, hout)
+ self.assertCache(304, req.status_out, 'not modifier HEAD verb')
value = req.headers_out.getHeader('expires')
self.assertIsNone(value)
@@ -272,8 +284,8 @@
hout = [('etag', 'rhino/really-not-babar'),
('expires', DATE),
]
- status, req = _test_cache(hin, hout)
- self.assertCache(None, status, 'not modifier HEAD verb')
+ req = _test_cache(hin, hout)
+ self.assertCache(None, req.status_out, 'not modifier HEAD verb')
value = req.headers_out.getRawHeaders('expires')
self.assertEqual(value, [DATE])