def test_parse_byte_range():
    eq_((0, 499), RangeHTTPServer.parse_byte_range('bytes=0-499'))
    eq_((987, 1024), RangeHTTPServer.parse_byte_range('bytes=987-1024'))
    eq_((None, None), RangeHTTPServer.parse_byte_range(''))
    eq_((10, None), RangeHTTPServer.parse_byte_range('bytes=10-'))

    with assert_raises(ValueError):
        RangeHTTPServer.parse_byte_range('bytes=abc')
    with assert_raises(ValueError):
        RangeHTTPServer.parse_byte_range('characters=0-10')
    with assert_raises(ValueError):
        RangeHTTPServer.parse_byte_range('bytes=100-2')
def test_copy_byte_range():
    inbuffer = StringIO(u'0123456789abcdefghijklmnopqrstuvwxyz')
    outbuffer = StringIO()

    RangeHTTPServer.copy_byte_range(inbuffer, outbuffer, 4, 10)
    eq_('456789a', outbuffer.getvalue())

    outbuffer = StringIO()
    RangeHTTPServer.copy_byte_range(inbuffer, outbuffer, 0, 4)
    eq_('01234', outbuffer.getvalue())

    outbuffer = StringIO()
    RangeHTTPServer.copy_byte_range(inbuffer, outbuffer, 26)
    eq_('qrstuvwxyz', outbuffer.getvalue())

    outbuffer = StringIO()
    RangeHTTPServer.copy_byte_range(inbuffer, outbuffer, 0, 9, 10)
    eq_('0123456789', outbuffer.getvalue())

    inbuffer.seek(0)
    outbuffer = StringIO()
    RangeHTTPServer.copy_byte_range(inbuffer, outbuffer)
    eq_('0123456789abcdefghijklmnopqrstuvwxyz', outbuffer.getvalue())