[Repoze-checkins] r1122 - in repoze.accelerator/trunk/repoze/accelerator: . tests

Chris McDonough chrism at agendaless.com
Sun Jun 22 20:16:06 EDT 2008


Author: Chris McDonough <chrism at agendaless.com>
Date: Sun Jun 22 20:16:06 2008
New Revision: 1122

Log:
Better policy store tests.


Modified:
   repoze.accelerator/trunk/repoze/accelerator/policy.py
   repoze.accelerator/trunk/repoze/accelerator/tests/test_policy.py

Modified: repoze.accelerator/trunk/repoze/accelerator/policy.py
==============================================================================
--- repoze.accelerator/trunk/repoze/accelerator/policy.py	(original)
+++ repoze.accelerator/trunk/repoze/accelerator/policy.py	Sun Jun 22 20:16:06 2008
@@ -159,7 +159,7 @@
             # XXX purge?
 
     def store(self, status, response_headers, environ):
-        request_headers = parse_headers(environ)
+        request_headers = list(parse_headers(environ))
 
         # abort if we shouldn't store this response
         request_method = environ.get('REQUEST_METHOD', 'GET')
@@ -191,7 +191,7 @@
             vary_header_names.extend(
                 [ x.strip().lower() for x in vary.split(',') ])
         if self.always_vary_on_headers:
-            vary_header_names.extend(list(self.always_vary_on))
+            vary_header_names.extend(list(self.always_vary_on_headers))
 
         if '*' in vary_header_names:
             return

Modified: repoze.accelerator/trunk/repoze/accelerator/tests/test_policy.py
==============================================================================
--- repoze.accelerator/trunk/repoze/accelerator/tests/test_policy.py	(original)
+++ repoze.accelerator/trunk/repoze/accelerator/tests/test_policy.py	Sun Jun 22 20:16:06 2008
@@ -65,89 +65,192 @@
         result = policy.store('200 OK', headers, environ)
         self.assertEqual(result, None)
 
-    def test_store_not_cacheable_cachecontrol_no_cache(self):
+    def test_store_not_cacheable_non_2XX_response(self):
         storage = DummyStorage()
         policy = self._makeOne(storage)
         environ = self._makeEnviron()
         headers = self._makeHeaders()
-        headers.append(('cache-control', 'no-cache'))
+        result = policy.store('500 Error', headers, environ)
+        self.assertEqual(result, None)
+
+    def test_store_not_cacheable_cc_maxage_zero(self):
+        storage = DummyStorage()
+        policy = self._makeOne(storage)
+        environ = self._makeEnviron()
+        headers = self._makeHeaders()
+        headers.append(('Cache-Control', 'max-age=0'))
         result = policy.store('200 OK', headers, environ)
         self.assertEqual(result, None)
 
-    def test_store_not_cacheable_non_2XX_response(self):
+    def test_store_not_cacheable_nostore_https_responses(self):
         storage = DummyStorage()
         policy = self._makeOne(storage)
+        policy.store_https_responses = False
         environ = self._makeEnviron()
+        environ['wsgi.url_scheme'] = 'https'
         headers = self._makeHeaders()
-        result = policy.store('500 Error', headers, environ)
+        result = policy.store('200 OK', headers, environ)
         self.assertEqual(result, None)
 
-    def test_store_allowed_request_method_cacheable(self):
+    def test_store_not_cacheable_no_date_header(self):
         storage = DummyStorage()
         policy = self._makeOne(storage)
+        environ = self._makeEnviron()
+        headers = [('Cache-Control', 'max-age=400')]
+        result = policy.store('200 OK', headers, environ)
+        self.assertEqual(result, None)
+
+    def test_store_allowed_request_method_cacheable(self):
+        storage = DummyStorage(store_result=True)
+        policy = self._makeOne(storage)
         policy.allowed_methods = ('FOO',)
         environ = self._makeEnviron()
         environ['REQUEST_METHOD'] = 'FOO'
         headers = self._makeHeaders()
         result = policy.store('200 OK', headers, environ)
-        self.assertEqual(result, None)
+        self.assertEqual(result, True)
         self.assertEqual(storage.url, 'http://example.com')
         self.assertEqual(storage.status, '200 OK')
         self.assertEqual(storage.outheaders, headers)
 
     def test_store_no_request_method_cacheable(self):
-        storage = DummyStorage()
+        storage = DummyStorage(store_result=True)
         policy = self._makeOne(storage)
         environ = self._makeEnviron()
         del environ['REQUEST_METHOD']
         headers = self._makeHeaders()
         result = policy.store('200 OK', headers, environ)
-        self.assertEqual(result, None)
+        self.assertEqual(result, True)
         self.assertEqual(storage.url, 'http://example.com')
         self.assertEqual(storage.status, '200 OK')
         self.assertEqual(storage.outheaders, headers)
 
     def test_store_get_request_method_cacheable(self):
-        storage = DummyStorage()
+        storage = DummyStorage(store_result=True)
         policy = self._makeOne(storage)
         environ = self._makeEnviron()
         headers = self._makeHeaders()
         result = policy.store('200 OK', headers, environ)
+        self.assertEqual(result, True)
+        self.assertEqual(storage.url, 'http://example.com')
+        self.assertEqual(storage.status, '200 OK')
+        self.assertEqual(storage.outheaders, headers)
+
+    def test_store_with_request_vary(self):
+        storage = DummyStorage(store_result=True)
+        policy = self._makeOne(storage)
+        environ = self._makeEnviron()
+        headers = self._makeHeaders()
+        headers.append(('Vary', 'Cookie'))
+        environ['HTTP_COOKIE'] = '12345'
+        result = policy.store('200 OK', headers, environ)
+        self.assertEqual(result, True)
+        self.assertEqual(storage.url, 'http://example.com')
+        self.assertEqual(storage.status, '200 OK')
+        self.assertEqual(storage.outheaders, headers)
+        self.assertEqual(storage.req_discrims, [('cookie', '12345')])
+
+    def test_store_with_always_request_vary(self):
+        storage = DummyStorage(store_result=True)
+        policy = self._makeOne(storage)
+        policy.always_vary_on_headers = ('cookie',)
+        environ = self._makeEnviron()
+        headers = self._makeHeaders()
+        environ['HTTP_COOKIE'] = '12345'
+        result = policy.store('200 OK', headers, environ)
+        self.assertEqual(result, True)
+        self.assertEqual(storage.url, 'http://example.com')
+        self.assertEqual(storage.status, '200 OK')
+        self.assertEqual(storage.outheaders, headers)
+        self.assertEqual(storage.req_discrims, [('cookie', '12345')])
+
+    def test_store_with_always_request_vary_and_plain_request_vary(self):
+        storage = DummyStorage(store_result=True)
+        policy = self._makeOne(storage)
+        policy.always_vary_on_headers = ('cookie',)
+        environ = self._makeEnviron()
+        headers = self._makeHeaders()
+        headers.append(('Vary', 'X-Foo'))
+        environ['HTTP_COOKIE'] = '12345'
+        environ['HTTP_X_FOO'] = 'xfoo'
+        result = policy.store('200 OK', headers, environ)
+        self.assertEqual(result, True)
+        self.assertEqual(storage.url, 'http://example.com')
+        self.assertEqual(storage.status, '200 OK')
+        self.assertEqual(storage.outheaders, headers)
+        self.assertEqual(storage.req_discrims,
+                         [('cookie', '12345'), ('x-foo', 'xfoo')])
+
+    def test_store_with_always_request_vary_star(self):
+        storage = DummyStorage(store_result=True)
+        policy = self._makeOne(storage)
+        environ = self._makeEnviron()
+        headers = self._makeHeaders()
+        headers.append(('Vary', '*'))
+        result = policy.store('200 OK', headers, environ)
         self.assertEqual(result, None)
+
+    def test_store_with_environ_vary(self):
+        storage = DummyStorage(store_result=True)
+        policy = self._makeOne(storage)
+        policy.always_vary_on_environ = ('REMOTE_USER',)
+        environ = self._makeEnviron()
+        headers = self._makeHeaders()
+        environ['REMOTE_USER'] = '12345'
+        result = policy.store('200 OK', headers, environ)
+        self.assertEqual(result, True)
         self.assertEqual(storage.url, 'http://example.com')
         self.assertEqual(storage.status, '200 OK')
         self.assertEqual(storage.outheaders, headers)
+        self.assertEqual(storage.env_discrims, [('REMOTE_USER', '12345')])
+
+    def test_store_with_environ_vary_and_req_vary(self):
+        storage = DummyStorage(store_result=True)
+        policy = self._makeOne(storage)
+        policy.always_vary_on_environ = ('REMOTE_USER',)
+        environ = self._makeEnviron()
+        headers = self._makeHeaders()
+        headers.append(('Vary', 'Cookie'))
+        environ['REMOTE_USER'] = '12345'
+        environ['HTTP_COOKIE'] = '12345'
+        result = policy.store('200 OK', headers, environ)
+        self.assertEqual(result, True)
+        self.assertEqual(storage.url, 'http://example.com')
+        self.assertEqual(storage.status, '200 OK')
+        self.assertEqual(storage.outheaders, headers)
+        self.assertEqual(storage.req_discrims, [('cookie', '12345')])
+        self.assertEqual(storage.env_discrims, [('REMOTE_USER', '12345')])
 
     def test_fetch_fails_post_request_method(self):
-        storage = DummyStorage(result=123)
+        storage = DummyStorage(fetch_result=False)
         policy = self._makeOne(storage)
         environ = self._makeEnviron()
         environ['REQUEST_METHOD'] = 'POST'
         result = policy.fetch(environ)
-        self.failIfEqual(result, 123)
+        self.failIfEqual(result, False)
 
     def test_fetch_fails_pragma_no_cache(self):
-        storage = DummyStorage(result=123)
+        storage = DummyStorage(fetch_result=False)
         policy = self._makeOne(storage)
         environ = self._makeEnviron()
         environ['HTTP_PRAGMA'] = 'no-cache'
         result = policy.fetch(environ)
-        self.failIfEqual(result, 123)
+        self.failIfEqual(result, False)
 
     def test_fetch_fails_cachecontrol_no_cache(self):
-        storage = DummyStorage(result=123)
+        storage = DummyStorage(fetch_result=False)
         policy = self._makeOne(storage)
         environ = self._makeEnviron()
         environ['HTTP_PRAGMA'] = 'no-cache'
         result = policy.fetch(environ)
-        self.failIfEqual(result, 123)
+        self.failIfEqual(result, False)
 
     def test_fetch_succeeds_no_request_method(self):
-        from email.Utils import formatdate
-        now = formatdate()
+        headers = self._makeHeaders()
         cc = 'max-age=4000'
-        expected = (200, [('Date', now), ('Cache-Control', cc)], [], [], [])
-        storage = DummyStorage(result=[expected])
+        headers.append(('Cache-Control', cc))
+        expected = (200, headers, [], [], [])
+        storage = DummyStorage(fetch_result=[expected])
         policy = self._makeOne(storage)
         environ = self._makeEnviron()
         del environ['REQUEST_METHOD']
@@ -155,20 +258,20 @@
         self.assertEqual(result, expected[:3])
 
     def test_fetch_succeeds_get_request_method(self):
-        from email.Utils import formatdate
-        now = formatdate()
+        headers = self._makeHeaders()
         cc = 'max-age=4000'
-        expected = (200, [('Date', now), ('Cache-Control', cc)], [], [], [])
-        storage = DummyStorage(result=[expected])
+        headers.append(('Cache-Control', cc))
+        expected = (200, headers, [], [], [])
+        storage = DummyStorage(fetch_result=[expected])
         policy = self._makeOne(storage)
         environ = self._makeEnviron()
         result = policy.fetch(environ)
         self.assertEqual(result, expected[:3])
 
 class DummyStorage:
-    def __init__(self, result=None, writer=None):
-        self.result = result
-        self.writer = writer
+    def __init__(self, fetch_result=None, store_result=None):
+        self.fetch_result = fetch_result
+        self.store_result = store_result
 
     def store(self, url, status, outheaders, req_discrims, env_discrims):
         self.url = url
@@ -176,7 +279,7 @@
         self.outheaders = outheaders
         self.req_discrims = req_discrims
         self.env_discrims = env_discrims
-        return self.writer
+        return self.store_result
 
     def fetch(self, url):
-        return self.result
+        return self.fetch_result


More information about the Repoze-checkins mailing list