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
def test_set_remove(): headers = web.HTTPHeaders() headers.set(test_key, test_value) assert headers.get(test_key) == test_value headers.remove(test_key)
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
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]
def test_setitem_delitem(): headers = web.HTTPHeaders() headers[test_key] = test_value assert headers[test_key] == test_value del headers[test_key]
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
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
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
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
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
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
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
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
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
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
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
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()
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
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
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
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
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'
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
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:]
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
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