mirror of
https://github.com/django/django.git
synced 2025-10-24 06:06:09 +00:00
Fixed #717 - If-Modified-Since handling should compare dates according to RFC 2616
Thanks to Maniac for the report, julienb for the initial patch, and especially to aaugustin for the final patch and tests. git-svn-id: http://code.djangoproject.com/svn/django/trunk@15696 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
@@ -1,17 +1,20 @@
|
||||
# -*- coding:utf-8 -*-
|
||||
from datetime import datetime, timedelta
|
||||
from calendar import timegm
|
||||
from datetime import datetime
|
||||
|
||||
from django.test import TestCase
|
||||
from django.utils.http import parse_etags, quote_etag
|
||||
from django.utils import unittest
|
||||
from django.utils.http import parse_etags, quote_etag, parse_http_date
|
||||
|
||||
FULL_RESPONSE = 'Test conditional get response'
|
||||
LAST_MODIFIED = datetime(2007, 10, 21, 23, 21, 47)
|
||||
LAST_MODIFIED_STR = 'Sun, 21 Oct 2007 23:21:47 GMT'
|
||||
LAST_MODIFIED_NEWER_STR = 'Mon, 18 Oct 2010 16:56:23 GMT'
|
||||
LAST_MODIFIED_INVALID_STR = 'Mon, 32 Oct 2010 16:56:23 GMT'
|
||||
EXPIRED_LAST_MODIFIED_STR = 'Sat, 20 Oct 2007 23:21:47 GMT'
|
||||
ETAG = 'b4246ffc4f62314ca13147c9d4f76974'
|
||||
EXPIRED_ETAG = '7fae4cd4b0f81e7d2914700043aa8ed6'
|
||||
|
||||
|
||||
class ConditionalGet(TestCase):
|
||||
def assertFullResponse(self, response, check_last_modified=True, check_etag=True):
|
||||
self.assertEquals(response.status_code, 200)
|
||||
@@ -33,6 +36,12 @@ class ConditionalGet(TestCase):
|
||||
self.client.defaults['HTTP_IF_MODIFIED_SINCE'] = LAST_MODIFIED_STR
|
||||
response = self.client.get('/condition/')
|
||||
self.assertNotModified(response)
|
||||
self.client.defaults['HTTP_IF_MODIFIED_SINCE'] = LAST_MODIFIED_NEWER_STR
|
||||
response = self.client.get('/condition/')
|
||||
self.assertNotModified(response)
|
||||
self.client.defaults['HTTP_IF_MODIFIED_SINCE'] = LAST_MODIFIED_INVALID_STR
|
||||
response = self.client.get('/condition/')
|
||||
self.assertFullResponse(response)
|
||||
self.client.defaults['HTTP_IF_MODIFIED_SINCE'] = EXPIRED_LAST_MODIFIED_STR
|
||||
response = self.client.get('/condition/')
|
||||
self.assertFullResponse(response)
|
||||
@@ -118,7 +127,7 @@ class ConditionalGet(TestCase):
|
||||
self.assertFullResponse(response, check_last_modified=False)
|
||||
|
||||
|
||||
class ETagProcesing(TestCase):
|
||||
class ETagProcessing(unittest.TestCase):
|
||||
def testParsing(self):
|
||||
etags = parse_etags(r'"", "etag", "e\"t\"ag", "e\\tag", W/"weak"')
|
||||
self.assertEquals(etags, ['', 'etag', 'e"t"ag', r'e\tag', 'weak'])
|
||||
@@ -126,3 +135,20 @@ class ETagProcesing(TestCase):
|
||||
def testQuoting(self):
|
||||
quoted_etag = quote_etag(r'e\t"ag')
|
||||
self.assertEquals(quoted_etag, r'"e\\t\"ag"')
|
||||
|
||||
|
||||
class HttpDateProcessing(unittest.TestCase):
|
||||
def testParsingRfc1123(self):
|
||||
parsed = parse_http_date('Sun, 06 Nov 1994 08:49:37 GMT')
|
||||
self.assertEqual(datetime.utcfromtimestamp(parsed),
|
||||
datetime(1994, 11, 06, 8, 49, 37))
|
||||
|
||||
def testParsingRfc850(self):
|
||||
parsed = parse_http_date('Sunday, 06-Nov-94 08:49:37 GMT')
|
||||
self.assertEqual(datetime.utcfromtimestamp(parsed),
|
||||
datetime(1994, 11, 06, 8, 49, 37))
|
||||
|
||||
def testParsingAsctime(self):
|
||||
parsed = parse_http_date('Sun Nov 6 08:49:37 1994')
|
||||
self.assertEqual(datetime.utcfromtimestamp(parsed),
|
||||
datetime(1994, 11, 06, 8, 49, 37))
|
||||
|
||||
Reference in New Issue
Block a user