Example #1
0
 def test_max_age_expiration(self):
     "Cookie will expire if max_age is provided"
     response = HttpResponse()
     response.set_cookie("max_age", max_age=10)
     max_age_cookie = response.cookies["max_age"]
     self.assertEqual(max_age_cookie["max-age"], 10)
     self.assertEqual(max_age_cookie["expires"], cookie_date(time.time() + 10))
Example #2
0
    def test_iter_content(self):
        r = HttpResponse(['abc', 'def', 'ghi'])
        self.assertEqual(r.content, b'abcdefghi')

        #test iter content via property
        r = HttpResponse()
        r.content = ['idan', 'alex', 'jacob']
        self.assertEqual(r.content, b'idanalexjacob')

        r = HttpResponse()
        r.content = [1, 2, 3]
        self.assertEqual(r.content, b'123')

        #test retrieval explicitly using iter and odd inputs
        r = HttpResponse()
        r.content = ['1', '2', 3, '\u079e']
        my_iter = r.__iter__()
        result = list(my_iter)
        #'\xde\x9e' == unichr(1950).encode('utf-8')
        self.assertEqual(result, [b'1', b'2', b'3', b'\xde\x9e'])
        self.assertEqual(r.content, b'123\xde\x9e')

        #with Content-Encoding header
        r = HttpResponse([1,1,2,4,8])
        r['Content-Encoding'] = 'winning'
        self.assertEqual(r.content, b'11248')
        r.content = ['\u079e',]
        self.assertRaises(UnicodeEncodeError,
                          getattr, r, 'content')
Example #3
0
    def test_is_extendable(self):
        """
        Tests that the XFrameOptionsMiddleware method that determines the
        X-Frame-Options header value can be overridden based on something in
        the request or response.
        """
        class OtherXFrameOptionsMiddleware(XFrameOptionsMiddleware):
            # This is just an example for testing purposes...
            def get_xframe_options_value(self, request, response):
                if getattr(request, 'sameorigin', False):
                    return 'SAMEORIGIN'
                if getattr(response, 'sameorigin', False):
                    return 'SAMEORIGIN'
                return 'DENY'

        settings.X_FRAME_OPTIONS = 'DENY'
        response = HttpResponse()
        response.sameorigin = True
        r = OtherXFrameOptionsMiddleware().process_response(HttpRequest(),
                                                            response)
        self.assertEqual(r['X-Frame-Options'], 'SAMEORIGIN')

        request = HttpRequest()
        request.sameorigin = True
        r = OtherXFrameOptionsMiddleware().process_response(request,
                                                            HttpResponse())
        self.assertEqual(r['X-Frame-Options'], 'SAMEORIGIN')

        settings.X_FRAME_OPTIONS = 'SAMEORIGIN'
        r = OtherXFrameOptionsMiddleware().process_response(HttpRequest(),
                                                       HttpResponse())
        self.assertEqual(r['X-Frame-Options'], 'DENY')
Example #4
0
 def test_detects_tampering(self):
     response = HttpResponse()
     response.set_signed_cookie('c', 'hello')
     request = HttpRequest()
     request.COOKIES['c'] = response.cookies['c'].value[:-2] + '$$'
     self.assertRaises(signing.BadSignature,
         request.get_signed_cookie, 'c')
Example #5
0
    def test_unicode_headers(self):
        r = HttpResponse()

        # If we insert a unicode value it will be converted to an ascii
        r['value'] = 'test value'
        self.assertTrue(isinstance(r['value'], str))

        # An error is raised when a unicode object with non-ascii is assigned.
        self.assertRaises(UnicodeEncodeError, r.__setitem__, 'value', 't\xebst value')

        # An error is raised when  a unicode object with non-ASCII format is
        # passed as initial mimetype or content_type.
        self.assertRaises(UnicodeEncodeError, HttpResponse,
                content_type='t\xebst value')

        # HttpResponse headers must be convertible to ASCII.
        self.assertRaises(UnicodeEncodeError, HttpResponse,
                content_type='t\xebst value')

        # The response also converts unicode keys to strings.)
        r['test'] = 'testing key'
        l = list(r.items())
        l.sort()
        self.assertEqual(l[1], ('test', 'testing key'))

        # It will also raise errors for keys with non-ascii data.
        self.assertRaises(UnicodeEncodeError, r.__setitem__, 't\xebst key', 'value')
Example #6
0
 def test_aware_expiration(self):
     "Cookie accepts an aware datetime as expiration time"
     response = HttpResponse()
     expires = (datetime.utcnow() + timedelta(seconds=10)).replace(tzinfo=utc)
     time.sleep(0.001)
     response.set_cookie("datetime", expires=expires)
     datetime_cookie = response.cookies["datetime"]
     self.assertEqual(datetime_cookie["max-age"], 10)
Example #7
0
 def test_httponly_cookie(self):
     response = HttpResponse()
     response.set_cookie("example", httponly=True)
     example_cookie = response.cookies["example"]
     # A compat cookie may be in use -- check that it has worked
     # both as an output string, and using the cookie attributes
     self.assertTrue("; httponly" in str(example_cookie))
     self.assertTrue(example_cookie["httponly"])
Example #8
0
    def test_non_string_content(self):
        #Bug 16494: HttpResponse should behave consistently with non-strings
        r = HttpResponse(12345)
        self.assertEqual(r.content, b'12345')

        #test content via property
        r = HttpResponse()
        r.content = 12345
        self.assertEqual(r.content, b'12345')
Example #9
0
 def test_can_use_salt(self):
     response = HttpResponse()
     response.set_signed_cookie('a', 'hello', salt='one')
     request = HttpRequest()
     request.COOKIES['a'] = response.cookies['a'].value
     value = request.get_signed_cookie('a', salt='one')
     self.assertEqual(value, 'hello')
     self.assertRaises(signing.BadSignature,
         request.get_signed_cookie, 'a', salt='two')
Example #10
0
 def test_can_set_and_read_signed_cookies(self):
     response = HttpResponse()
     response.set_signed_cookie('c', 'hello')
     self.assertIn('c', response.cookies)
     self.assertTrue(response.cookies['c'].value.startswith('hello:'))
     request = HttpRequest()
     request.COOKIES['c'] = response.cookies['c'].value
     value = request.get_signed_cookie('c')
     self.assertEqual(value, 'hello')
Example #11
0
 def test_near_expiration(self):
     "Cookie will expire when an near expiration time is provided"
     response = HttpResponse()
     # There is a timing weakness in this test; The
     # expected result for max-age requires that there be
     # a very slight difference between the evaluated expiration
     # time, and the time evaluated in set_cookie(). If this
     # difference doesn't exist, the cookie time will be
     # 1 second larger. To avoid the problem, put in a quick sleep,
     # which guarantees that there will be a time difference.
     expires = datetime.utcnow() + timedelta(seconds=10)
     time.sleep(0.001)
     response.set_cookie("datetime", expires=expires)
     datetime_cookie = response.cookies["datetime"]
     self.assertEqual(datetime_cookie["max-age"], 10)
Example #12
0
    def test_session_save_on_500(self):
        request = RequestFactory().get('/')
        response = HttpResponse('Horrible error')
        response.status_code = 500
        middleware = SessionMiddleware()

        # Simulate a request the modifies the session
        middleware.process_request(request)
        request.session['hello'] = 'world'

        # Handle the response through the middleware
        response = middleware.process_response(request, response)

        # Check that the value wasn't saved above.
        self.assertNotIn('hello', request.session.load())
Example #13
0
    def test_file_interface(self):
        r = HttpResponse()
        r.write(b"hello")
        self.assertEqual(r.tell(), 5)
        r.write("привет")
        self.assertEqual(r.tell(), 17)

        r = HttpResponse(['abc'])
        self.assertRaises(Exception, r.write, 'def')
Example #14
0
    def test_max_age_argument(self):
        value = 'hello'
        _time = time.time
        time.time = lambda: 123456789
        try:
            response = HttpResponse()
            response.set_signed_cookie('c', value)
            request = HttpRequest()
            request.COOKIES['c'] = response.cookies['c'].value
            self.assertEqual(request.get_signed_cookie('c'), value)

            time.time = lambda: 123456800
            self.assertEqual(request.get_signed_cookie('c', max_age=12), value)
            self.assertEqual(request.get_signed_cookie('c', max_age=11), value)
            self.assertRaises(signing.SignatureExpired,
                request.get_signed_cookie, 'c', max_age = 10)
        finally:
            time.time = _time
Example #15
0
    def test_response_exempt(self):
        """
        Tests that if the response has a xframe_options_exempt attribute set
        to False then it still sets the header, but if it's set to True then
        it does not.
        """
        settings.X_FRAME_OPTIONS = 'SAMEORIGIN'
        response = HttpResponse()
        response.xframe_options_exempt = False
        r = XFrameOptionsMiddleware().process_response(HttpRequest(),
                                                       response)
        self.assertEqual(r['X-Frame-Options'], 'SAMEORIGIN')

        response = HttpResponse()
        response.xframe_options_exempt = True
        r = XFrameOptionsMiddleware().process_response(HttpRequest(),
                                                       response)
        self.assertEqual(r.get('X-Frame-Options', None), None)
Example #16
0
def view_with_secure(request):
    "A view that indicates if the request was secure"
    response = HttpResponse()
    response.test_was_secure_request = request.is_secure()
    return response
Example #17
0
 def test_default_argument_supresses_exceptions(self):
     response = HttpResponse()
     response.set_signed_cookie('c', 'hello')
     request = HttpRequest()
     request.COOKIES['c'] = response.cookies['c'].value[:-2] + '$$'
     self.assertEqual(request.get_signed_cookie('c', default=None), None)
Example #18
0
 def test_far_expiration(self):
     "Cookie will expire when an distant expiration time is provided"
     response = HttpResponse()
     response.set_cookie("datetime", expires=datetime(2028, 1, 1, 4, 5, 6))
     datetime_cookie = response.cookies["datetime"]
     self.assertEqual(datetime_cookie["expires"], "Sat, 01-Jan-2028 04:05:06 GMT")
Example #19
0
 def test_dict_behavior(self):
     """
     Test for bug #14020: Make HttpResponse.get work like dict.get
     """
     r = HttpResponse()
     self.assertEqual(r.get('test'), None)