1# -*- coding; utf-8 -*-
2"""
3test_head_request
4~~~~~~~~~~~~~~~~~
5"""
6import h2.connection
7import pytest
8
9
10class TestHeadRequest(object):
11    example_request_headers = [
12        (b':authority', b'example.com'),
13        (b':path', b'/'),
14        (b':scheme', b'https'),
15        (b':method', b'HEAD'),
16    ]
17
18    example_response_headers = [
19        (b':status', b'200'),
20        (b'server', b'fake-serv/0.1.0'),
21        (b'content_length', b'1'),
22    ]
23
24    def test_non_zero_content_and_no_body(self, frame_factory):
25
26        c = h2.connection.H2Connection()
27        c.initiate_connection()
28        c.send_headers(1, self.example_request_headers, end_stream=True)
29
30        f = frame_factory.build_headers_frame(
31            self.example_response_headers,
32            flags=['END_STREAM']
33        )
34        events = c.receive_data(f.serialize())
35
36        assert len(events) == 2
37        event = events[0]
38
39        assert isinstance(event, h2.events.ResponseReceived)
40        assert event.stream_id == 1
41        assert event.headers == self.example_response_headers
42
43    def test_reject_non_zero_content_and_body(self, frame_factory):
44        c = h2.connection.H2Connection()
45        c.initiate_connection()
46        c.send_headers(1, self.example_request_headers)
47
48        headers = frame_factory.build_headers_frame(
49            self.example_response_headers
50        )
51        data = frame_factory.build_data_frame(data=b'\x01')
52
53        c.receive_data(headers.serialize())
54        with pytest.raises(h2.exceptions.InvalidBodyLengthError):
55            c.receive_data(data.serialize())
56