Broke up code in multiple modules..
This commit is contained in:
parent
af37b809aa
commit
323bfa733d
|
|
@ -0,0 +1,51 @@
|
|||
import logging
|
||||
import http2_base_server
|
||||
|
||||
class TestcaseGoaway(object):
|
||||
"""
|
||||
This test does the following:
|
||||
Process incoming request normally, i.e. send headers, data and trailers.
|
||||
Then send a GOAWAY frame with the stream id of the processed request.
|
||||
It assert that the next request is made on a different TCP connection.
|
||||
"""
|
||||
def __init__(self, iteration):
|
||||
self._base_server = http2_base_server.H2ProtocolBaseServer()
|
||||
self._base_server._handlers['RequestReceived'] = self.on_request_received
|
||||
self._base_server._handlers['DataReceived'] = self.on_data_received
|
||||
self._base_server._handlers['WindowUpdated'] = self.on_window_update_default
|
||||
self._base_server._handlers['SendDone'] = self.on_send_done
|
||||
self._base_server._handlers['ConnectionLost'] = self.on_connection_lost
|
||||
self._ready_to_send = False
|
||||
self._iteration = iteration
|
||||
|
||||
def get_base_server(self):
|
||||
return self._base_server
|
||||
|
||||
def on_connection_lost(self, reason):
|
||||
logging.info('Disconnect received. Count %d'%self._iteration)
|
||||
# _iteration == 2 => Two different connections have been used.
|
||||
if self._iteration == 2:
|
||||
self._base_server.on_connection_lost(reason)
|
||||
|
||||
def on_send_done(self):
|
||||
self._base_server.on_send_done_default()
|
||||
if self._base_server._stream_id == 1:
|
||||
logging.info('Sending GOAWAY for stream 1')
|
||||
self._base_server._conn.close_connection(error_code=0, additional_data=None, last_stream_id=1)
|
||||
|
||||
def on_request_received(self, event):
|
||||
self._ready_to_send = False
|
||||
self._base_server.on_request_received_default(event)
|
||||
|
||||
def on_data_received(self, event):
|
||||
self._base_server.on_data_received_default(event)
|
||||
sr = self._base_server.parse_received_data(self._base_server._recv_buffer)
|
||||
if sr:
|
||||
logging.info('Creating response size = %s'%sr.response_size)
|
||||
response_data = self._base_server.default_response_data(sr.response_size)
|
||||
self._ready_to_send = True
|
||||
self._base_server.setup_send(response_data)
|
||||
|
||||
def on_window_update_default(self, event):
|
||||
if self._ready_to_send:
|
||||
self._base_server.default_send()
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
import logging
|
||||
import http2_base_server
|
||||
from hyperframe.frame import SettingsFrame
|
||||
|
||||
class TestcaseSettingsMaxStreams(object):
|
||||
"""
|
||||
This test sets MAX_CONCURRENT_STREAMS to 1 and asserts that at any point
|
||||
only 1 stream is active.
|
||||
"""
|
||||
def __init__(self):
|
||||
self._base_server = http2_base_server.H2ProtocolBaseServer()
|
||||
self._base_server._handlers['DataReceived'] = self.on_data_received
|
||||
self._base_server._handlers['ConnectionMade'] = self.on_connection_made
|
||||
|
||||
def get_base_server(self):
|
||||
return self._base_server
|
||||
|
||||
def on_connection_made(self):
|
||||
logging.info('Connection Made')
|
||||
self._base_server._conn.initiate_connection()
|
||||
self._base_server._conn.update_settings({SettingsFrame.MAX_CONCURRENT_STREAMS: 1})
|
||||
self._base_server.transport.setTcpNoDelay(True)
|
||||
self._base_server.transport.write(self._base_server._conn.data_to_send())
|
||||
|
||||
def on_data_received(self, event):
|
||||
self._base_server.on_data_received_default(event)
|
||||
sr = self._base_server.parse_received_data(self._base_server._recv_buffer)
|
||||
logging.info('Creating response size = %s'%sr.response_size)
|
||||
response_data = self._base_server.default_response_data(sr.response_size)
|
||||
self._base_server.setup_send(response_data)
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
import logging
|
||||
import http2_base_server
|
||||
|
||||
class TestcasePing(object):
|
||||
"""
|
||||
This test injects PING frames before and after header and data. Keeps count
|
||||
of outstanding ping response and asserts when the count is non-zero at the
|
||||
end of the test.
|
||||
"""
|
||||
def __init__(self):
|
||||
self._base_server = http2_base_server.H2ProtocolBaseServer()
|
||||
self._base_server._handlers['RequestReceived'] = self.on_request_received
|
||||
self._base_server._handlers['DataReceived'] = self.on_data_received
|
||||
self._base_server._handlers['ConnectionLost'] = self.on_connection_lost
|
||||
|
||||
def get_base_server(self):
|
||||
return self._base_server
|
||||
|
||||
def on_request_received(self, event):
|
||||
self._base_server.default_ping()
|
||||
self._base_server.on_request_received_default(event)
|
||||
self._base_server.default_ping()
|
||||
|
||||
def on_data_received(self, event):
|
||||
self._base_server.on_data_received_default(event)
|
||||
sr = self._base_server.parse_received_data(self._base_server._recv_buffer)
|
||||
logging.info('Creating response size = %s'%sr.response_size)
|
||||
response_data = self._base_server.default_response_data(sr.response_size)
|
||||
self._base_server.default_ping()
|
||||
self._base_server.setup_send(response_data)
|
||||
self._base_server.default_ping()
|
||||
|
||||
def on_connection_lost(self, reason):
|
||||
logging.info('Disconnect received. Ping Count %d'%self._base_server._outstanding_pings)
|
||||
assert(self._base_server._outstanding_pings == 0)
|
||||
self._base_server.on_connection_lost(reason)
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
import http2_base_server
|
||||
|
||||
class TestcaseRstStreamAfterData(object):
|
||||
"""
|
||||
In response to an incoming request, this test sends headers, followed by
|
||||
data, followed by a reset stream frame. Client asserts that the RPC failed.
|
||||
"""
|
||||
def __init__(self):
|
||||
self._base_server = http2_base_server.H2ProtocolBaseServer()
|
||||
self._base_server._handlers['DataReceived'] = self.on_data_received
|
||||
|
||||
def get_base_server(self):
|
||||
return self._base_server
|
||||
|
||||
def on_data_received(self, event):
|
||||
self._base_server.on_data_received_default(event)
|
||||
sr = self._base_server.parse_received_data(self._base_server._recv_buffer)
|
||||
assert(sr is not None)
|
||||
response_data = self._base_server.default_response_data(sr.response_size)
|
||||
self._ready_to_send = True
|
||||
self._base_server.setup_send(response_data)
|
||||
# send reset stream
|
||||
self._base_server.send_reset_stream()
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
import http2_base_server
|
||||
|
||||
class TestcaseRstStreamAfterHeader(object):
|
||||
"""
|
||||
In response to an incoming request, this test sends headers, followed by
|
||||
a reset stream frame. Client asserts that the RPC failed.
|
||||
"""
|
||||
def __init__(self):
|
||||
self._base_server = http2_base_server.H2ProtocolBaseServer()
|
||||
self._base_server._handlers['RequestReceived'] = self.on_request_received
|
||||
|
||||
def get_base_server(self):
|
||||
return self._base_server
|
||||
|
||||
def on_request_received(self, event):
|
||||
# send initial headers
|
||||
self._base_server.on_request_received_default(event)
|
||||
# send reset stream
|
||||
self._base_server.send_reset_stream()
|
||||
Loading…
Reference in New Issue