view tests/test_fileapp.txt @ 34:aca8cb6bfd63 default tip

fix documentation + bump version
author Jeff Hammel <jhammel@mozilla.com>
date Mon, 05 Mar 2012 14:09:43 -0800
parents 86b519dd8467
children
line wrap: on
line source

Test FileApp
============

The obligatory imports::

    >>> import fileserver
    >>> import os
    >>> from paste.fixture import TestApp
    >>> from webob import Request

Make a single file server::

    >>> filename = os.path.join(here, 'example', 'helloworld.txt')
    >>> os.path.exists(filename)
    True
    >>> app = fileserver.FileApp(filename)
    >>> testapp = TestApp(app)
    >>> response = testapp.get('/')
    >>> response.status
    200
    >>> response.body == file(filename).read()
    True

With conditional_response on, and with last_modified and etag set, we
can do conditional requests::

    >>> content_length = os.path.getsize(filename)
    >>> content_length # don't ask me why the 'L'
    6L
    >>> req = Request.blank('/')
    >>> res = req.get_response(app)
    >>> print res
    200 OK
    Content-Type: text/plain; charset=UTF-8
    Content-Length: 6
    Last-Modified: ... GMT
    ETag: ...-...
    <BLANKLINE>
    hello
    <BLANKLINE>
    >>> req2 = Request.blank('/')
    >>> req2.if_none_match = res.etag
    >>> req2.get_response(app)
    <Response ... 304 Not Modified>
    >>> req3 = Request.blank('/')
    >>> req3.if_modified_since = res.last_modified
    >>> req3.get_response(app)
    <Response ... 304 Not Modified>

We can even do Range requests::

    >>> req = Request.blank('/')
    >>> res = req.get_response(app)
    >>> req2 = Request.blank('/')
    >>> # Re-fetch the first 3 bytes:
    >>> req2.range = (0, 3)
    >>> res2 = req2.get_response(app)
    >>> res2
    <Response ... 206 Partial Content>
    >>> res2.body
    'hel'
    >>> # Now, conditional range support:
    >>> req3 = Request.blank('/')
    >>> req3.if_range = res.etag
    >>> req3.range = (0, 3)
    >>> req3.get_response(app)
    <Response ... 206 Partial Content>
    >>> req3.if_range = 'invalid-etag'
    >>> req3.get_response(app)
    <Response ... 200 OK>