blob: 6deb883d4e033a7cbc3186e0c0355dd4e7711e36 [file] [log] [blame]
Makarand Dharmapurikar323bfa72016-12-01 10:51:10 -08001import logging
Makarand Dharmapurikarecc32882016-12-01 15:22:50 -08002import time
Makarand Dharmapurikar8c579172016-12-12 13:58:15 -08003
Makarand Dharmapurikar323bfa72016-12-01 10:51:10 -08004import http2_base_server
5
6class TestcaseGoaway(object):
7 """
8 This test does the following:
9 Process incoming request normally, i.e. send headers, data and trailers.
10 Then send a GOAWAY frame with the stream id of the processed request.
Makarand Dharmapurikar8c579172016-12-12 13:58:15 -080011 It checks that the next request is made on a different TCP connection.
Makarand Dharmapurikar323bfa72016-12-01 10:51:10 -080012 """
13 def __init__(self, iteration):
14 self._base_server = http2_base_server.H2ProtocolBaseServer()
15 self._base_server._handlers['RequestReceived'] = self.on_request_received
16 self._base_server._handlers['DataReceived'] = self.on_data_received
Makarand Dharmapurikar323bfa72016-12-01 10:51:10 -080017 self._base_server._handlers['SendDone'] = self.on_send_done
18 self._base_server._handlers['ConnectionLost'] = self.on_connection_lost
19 self._ready_to_send = False
20 self._iteration = iteration
21
22 def get_base_server(self):
23 return self._base_server
24
25 def on_connection_lost(self, reason):
Makarand Dharmapurikar8c579172016-12-12 13:58:15 -080026 logging.info('Disconnect received. Count %d' % self._iteration)
Makarand Dharmapurikar323bfa72016-12-01 10:51:10 -080027 # _iteration == 2 => Two different connections have been used.
Makarand Dharmapurikara16ea7f2016-12-02 10:17:03 -080028 if self._iteration == 2:
Makarand Dharmapurikar323bfa72016-12-01 10:51:10 -080029 self._base_server.on_connection_lost(reason)
30
Makarand Dharmapurikar4350e742016-12-01 14:24:22 -080031 def on_send_done(self, stream_id):
32 self._base_server.on_send_done_default(stream_id)
Makarand Dharmapurikar8c579172016-12-12 13:58:15 -080033 logging.info('Sending GOAWAY for stream %d:' % stream_id)
Makarand Dharmapurikar4350e742016-12-01 14:24:22 -080034 self._base_server._conn.close_connection(error_code=0, additional_data=None, last_stream_id=stream_id)
35 self._base_server._stream_status[stream_id] = False
Makarand Dharmapurikar323bfa72016-12-01 10:51:10 -080036
37 def on_request_received(self, event):
38 self._ready_to_send = False
39 self._base_server.on_request_received_default(event)
40
41 def on_data_received(self, event):
42 self._base_server.on_data_received_default(event)
Makarand Dharmapurikar4350e742016-12-01 14:24:22 -080043 sr = self._base_server.parse_received_data(event.stream_id)
Makarand Dharmapurikar323bfa72016-12-01 10:51:10 -080044 if sr:
Makarand Dharmapurikar8c579172016-12-12 13:58:15 -080045 logging.info('Creating response size = %s' % sr.response_size)
Makarand Dharmapurikar323bfa72016-12-01 10:51:10 -080046 response_data = self._base_server.default_response_data(sr.response_size)
47 self._ready_to_send = True
Makarand Dharmapurikar4350e742016-12-01 14:24:22 -080048 self._base_server.setup_send(response_data, event.stream_id)