# -*- coding; utf-8 -*- """ test_head_request ~~~~~~~~~~~~~~~~~ """ import h2.connection import pytest class TestHeadRequest(object): example_request_headers = [ (b':authority', b'example.com'), (b':path', b'/'), (b':scheme', b'https'), (b':method', b'HEAD'), ] example_response_headers = [ (b':status', b'200'), (b'server', b'fake-serv/0.1.0'), (b'content_length', b'1'), ] def test_non_zero_content_and_no_body(self, frame_factory): c = h2.connection.H2Connection() c.initiate_connection() c.send_headers(1, self.example_request_headers, end_stream=True) f = frame_factory.build_headers_frame( self.example_response_headers, flags=['END_STREAM'] ) events = c.receive_data(f.serialize()) assert len(events) == 2 event = events[0] assert isinstance(event, h2.events.ResponseReceived) assert event.stream_id == 1 assert event.headers == self.example_response_headers def test_reject_non_zero_content_and_body(self, frame_factory): c = h2.connection.H2Connection() c.initiate_connection() c.send_headers(1, self.example_request_headers) headers = frame_factory.build_headers_frame( self.example_response_headers ) data = frame_factory.build_data_frame(data=b'\x01') c.receive_data(headers.serialize()) with pytest.raises(h2.exceptions.InvalidBodyLengthError): c.receive_data(data.serialize())