def test_put_continue(tmp_put):
    expect = web.HTTPHeaders()
    expect.set('Expect', '100-continue')

    headers, response, handler = run('PUT',
                                     '/continue',
                                     tmp_put,
                                     headers=expect,
                                     body=test_string,
                                     modify=True,
                                     return_handler=True)

    # check response
    assert response[0] == 204
    assert response[1] == ''

    # check continue
    assert handler.response.wfile.getvalue(
    ) == b'HTTP/1.1 100 Continue\r\n\r\n'

    headers, response = run('GET', '/continue', tmp_put)

    # check response
    assert response[0] == 200
    assert response[1].read() == test_string
Ejemplo n.º 2
0
def test_set_remove():
    headers = web.HTTPHeaders()

    headers.set(test_key, test_value)

    assert headers.get(test_key) == test_value

    headers.remove(test_key)
Ejemplo n.º 3
0
def test_set_multiple():
    headers = web.HTTPHeaders()

    headers.set(test_key, test_value)
    headers.set(test_key, test_value)

    assert headers.get(test_key) == test_value
    assert headers.getlist(test_key) == [test_value] * 2
Ejemplo n.º 4
0
def test_set_overwrite():
    headers = web.HTTPHeaders()

    headers.set(test_key, test_value, True)
    headers.set(test_key, test_value, True)

    assert headers.get(test_key) == test_value
    assert headers.getlist(test_key) == [test_value]
Ejemplo n.º 5
0
def test_setitem_delitem():
    headers = web.HTTPHeaders()

    headers[test_key] = test_value

    assert headers[test_key] == test_value

    del headers[test_key]
Ejemplo n.º 6
0
def test_case():
    headers = web.HTTPHeaders()

    headers.set(case_key, case_value)

    assert headers.get(case_key_title) == case_value

    assert headers.retrieve(case_key_title) == case_header
Ejemplo n.º 7
0
def test_clear():
    headers = web.HTTPHeaders()

    headers.set(test_key, test_value)
    headers.set(poor_key, poor_value)

    headers.clear()

    assert len(headers) == 0
def test_continue():
    request_headers = web.HTTPHeaders()
    request_headers.set('Expect', '100-continue')

    headers, response, response_obj = run('PUT',
                                          headers=request_headers,
                                          return_response_obj=True)

    # check response_obj
    assert response_obj.wfile.getvalue() == b'HTTP/1.1 100 Continue\r\n\r\n'
def test_check_continue():
    request_headers = web.HTTPHeaders()
    request_headers.set('Expect', '100-continue')

    with pytest.raises(web.HTTPError) as error:
        headers, response = run('PUT',
                                headers=request_headers,
                                handler=NoContinueHandler)

    assert error.value.code == 417
Ejemplo n.º 10
0
def test_len():
    headers = web.HTTPHeaders()

    headers.set(test_key, test_value)

    assert len(headers) == 1

    headers.set(poor_key, poor_value)

    assert len(headers) == 2
def test_body_bad_length():
    request_headers = web.HTTPHeaders()
    request_headers.set('Content-Length', 'BadNumber')

    with pytest.raises(web.HTTPError) as error:
        headers, response = run('PUT',
                                headers=request_headers,
                                body=test_message)

    assert error.value.code == 400
def test_body_too_large_continue():
    long_body = mock.MockBytes()
    long_body.set_len(web.max_request_size + 1)

    request_headers = web.HTTPHeaders()
    request_headers.set('Expect', '100-continue')

    with pytest.raises(web.HTTPError) as error:
        headers, response = run('PUT', body=long_body, headers=request_headers)

    assert error.value.code == 413
Ejemplo n.º 13
0
def test_put_too_large(tmp_put):
    # check response
    request_headers = web.HTTPHeaders()
    request_headers.set('Content-Length', str(file.max_file_size + 1))
    with pytest.raises(web.HTTPError) as error:
        headers, response = run('PUT',
                                '/test',
                                tmp_put,
                                headers=request_headers,
                                body='',
                                modify=True)

    assert error.value.code == 413
Ejemplo n.º 14
0
def test_put_chunked_incomplete(tmp_put):
    # check response
    request_headers = web.HTTPHeaders()
    request_headers.set('Transfer-Encoding', 'chunked')
    with pytest.raises(web.HTTPError) as error:
        headers, response = run('PUT',
                                '/test',
                                tmp_put,
                                headers=request_headers,
                                body='3\r\n12',
                                modify=True)

    assert error.value.code == 400
Ejemplo n.º 15
0
def test_put_chunked_too_large(tmp_put):
    # check response
    request_headers = web.HTTPHeaders()
    request_headers.set('Transfer-Encoding', 'chunked')
    with pytest.raises(web.HTTPError) as error:
        headers, response = run('PUT',
                                '/test',
                                tmp_put,
                                headers=request_headers,
                                body='{:x}\r\n'.format(file.max_file_size + 1),
                                modify=True)

    assert error.value.code == 413
Ejemplo n.º 16
0
def test_get_bad_value_range(tmp_get):
    request_headers = web.HTTPHeaders()
    request_headers.set('Range', 'bytes=a-b')
    headers, response = run('GET', '/test', tmp_get, headers=request_headers)

    # check headers
    assert int(headers.get('Content-Length')) == len(test_string)
    assert headers.get('Accept-Ranges') == 'bytes'
    assert headers.get('Content-Type') is None
    assert headers.get('Content-Range') is None

    # check response
    assert response[0] == 200
    assert response[1].read() == test_string
Ejemplo n.º 17
0
def test_iter():
    headers = web.HTTPHeaders()

    headers.set(test_key, test_value)
    headers.set(poor_key, poor_value)
    headers.set(case_key, case_value)

    header_list = []

    for header in headers:
        header_list.append(header)

    assert test_header in header_list
    assert good_header in header_list
    assert case_header in header_list
Ejemplo n.º 18
0
def test_json_bad_decode():
    json_headers = web.HTTPHeaders()
    json_headers.set('Content-Type', 'application/json')

    request = mock.MockHTTPRequest(None, ('', 0),
                                   None,
                                   headers=json_headers,
                                   body=test_bad,
                                   method='POST',
                                   handler=JSONNoneHandler)

    with pytest.raises(web.HTTPError) as error:
        request.response.headers, request.handler.respond()

    assert error.value.code == 400
Ejemplo n.º 19
0
def test_auth_token():
    request_headers = web.HTTPHeaders()
    request_headers.set('Authorization', 'Token ' + test_token)

    request = mock.MockHTTPRequest(None, ('', 0),
                                   None,
                                   headers=request_headers,
                                   method='GET',
                                   handler=TokenHandler)

    headers, response = request.response.headers, request.handler.respond()

    assert headers.get('WWW-Authenticate') is None

    assert response[0] == 204
Ejemplo n.º 20
0
def test_auth_any_forbidden():
    request_headers = web.HTTPHeaders()
    request_headers.set('Authorization', 'Any none')

    request = mock.MockHTTPRequest(None, ('', 0),
                                   None,
                                   headers=request_headers,
                                   method='GET',
                                   handler=ForbiddenHandler)

    with pytest.raises(web.HTTPError) as error:
        request.handler.respond()

    assert error.value.headers is None
    assert error.value.code == 403
Ejemplo n.º 21
0
def test_form_multipart_extra():
    request_headers = web.HTTPHeaders()
    request_headers.set('Content-Type',
                        'multipart/form-data; boundary=' + test_boundary)

    request = mock.MockHTTPRequest(None, ('', 0),
                                   None,
                                   body=test_mime_extra + test_separator +
                                   test_end,
                                   headers=request_headers,
                                   method='POST',
                                   handler=EchoHandler)

    request.handler.respond()

    assert request.body['binary_utf8'] == test_binary.decode()
Ejemplo n.º 22
0
def test_auth_basic():
    request_headers = web.HTTPHeaders()
    request_headers.set('Authorization',
                        'Basic ' + base64.b64encode(b'a:a').decode())

    request = mock.MockHTTPRequest(None, ('', 0),
                                   None,
                                   headers=request_headers,
                                   method='GET',
                                   handler=BasicHandler)

    headers, response = request.response.headers, request.handler.respond()

    assert headers.get('WWW-Authenticate') is None

    assert response[0] == 204
Ejemplo n.º 23
0
def test_auth_nonexistent():
    request_headers = web.HTTPHeaders()
    request_headers.set('Authorization', 'Nonexistent none')

    request = mock.MockHTTPRequest(None, ('', 0),
                                   None,
                                   headers=request_headers,
                                   method='GET',
                                   handler=Handler)

    with pytest.raises(web.HTTPError) as error:
        request.handler.respond()

    assert error.value.headers.get(
        'WWW-Authenticate') == 'Any realm="' + test_realm + '"'
    assert error.value.code == 401
Ejemplo n.º 24
0
def test_form_multipart_bad_read():
    request_headers = web.HTTPHeaders()
    request_headers.set('Content-Type',
                        'multipart/form-data; boundary=' + test_boundary)

    request = mock.MockHTTPRequest(None, ('', 0),
                                   None,
                                   body=test_mime_empty,
                                   headers=request_headers,
                                   method='POST',
                                   handler=EchoHandler)

    with pytest.raises(web.HTTPError) as error:
        request.handler.respond()

    assert error.value.code == 500
Ejemplo n.º 25
0
def test_auth_basic_fail():
    request_headers = web.HTTPHeaders()
    request_headers.set('Authorization',
                        'Basic ' + base64.b64encode(b'a:b').decode())

    request = mock.MockHTTPRequest(None, ('', 0),
                                   None,
                                   headers=request_headers,
                                   method='GET',
                                   handler=BasicHandler)

    with pytest.raises(web.HTTPError) as error:
        request.handler.respond()

    assert error.value.headers.get(
        'WWW-Authenticate') == 'Basic realm="' + test_realm + '"'
    assert error.value.code == 401
Ejemplo n.º 26
0
def test_form_urlencoded():
    request_headers = web.HTTPHeaders()
    request_headers.set('Content-Type', 'application/x-www-form-urlencoded')

    request = mock.MockHTTPRequest(None, ('', 0),
                                   None,
                                   body=test_encoded,
                                   headers=request_headers,
                                   method='POST',
                                   handler=EchoHandler)

    request.handler.respond()

    assert request.body['test'] == 'tëst'
    assert request.body['foo'] == 'bar'
    assert request.body['wow'] == ''
    assert request.body['such'] == 'dog'
Ejemplo n.º 27
0
def test_contains():
    headers = web.HTTPHeaders()

    headers.set(test_key, test_value)
    headers.set(poor_key, poor_value)
    headers.set(case_key, case_value)

    assert test_key in headers
    assert poor_key in headers
    assert case_key in headers

    assert test_key.upper() in headers
    assert poor_key.upper() in headers
    assert case_key.upper() in headers

    assert test_key.lower() in headers
    assert poor_key.lower() in headers
    assert case_key.lower() in headers
Ejemplo n.º 28
0
def test_get_open_range(tmp_get):
    lower = 2
    length = len(test_string) - lower

    request_headers = web.HTTPHeaders()
    request_headers.set('Range', 'bytes=' + str(lower) + '-')
    headers, response = run('GET', '/test', tmp_get, headers=request_headers)

    # check headers
    assert int(headers.get('Content-Length')) == length
    assert headers.get('Accept-Ranges') == 'bytes'
    assert headers.get('Content-Type') is None
    assert headers.get('Content-Range') == 'bytes ' + str(lower) + '-' + str(
        len(test_string) - 1) + '/' + str(len(test_string))

    # check response
    assert response[0] == 206
    assert response[1].read(length) == test_string[lower:]
Ejemplo n.º 29
0
def test_form_multipart_too_many():
    request_headers = web.HTTPHeaders()
    request_headers.set('Content-Type',
                        'multipart/form-data; boundary=' + test_boundary)

    request = mock.MockHTTPRequest(None, ('', 0),
                                   None,
                                   body=(test_mime_basic + test_separator) *
                                   (form.max_multipart_fragments + 1) +
                                   test_end,
                                   headers=request_headers,
                                   method='POST',
                                   handler=EchoHandler)

    with pytest.raises(web.HTTPError) as error:
        request.handler.respond()

    assert error.value.code == 413
Ejemplo n.º 30
0
def test_put_chunked(tmp_put):
    request_headers = web.HTTPHeaders()
    request_headers.set('Transfer-Encoding', 'chunked')
    headers, response = run('PUT',
                            '/test',
                            tmp_put,
                            headers=request_headers,
                            body=test_chunked,
                            modify=True)

    # check response
    assert response[0] == 204
    assert response[1] == ''

    headers, response = run('GET', '/test', tmp_put)

    # check response
    assert response[0] == 200
    assert response[1].read() == test_multibyte