aboutsummaryrefslogtreecommitdiffhomepage
path: root/test/http2_test
diff options
context:
space:
mode:
authorGravatar Makarand Dharmapurikar <makarandd@google.com>2016-12-01 10:56:52 -0800
committerGravatar Makarand Dharmapurikar <makarandd@google.com>2016-12-01 10:56:52 -0800
commit28d198008a6da19d28f0c34f7b3a4441f9c9d9ff (patch)
tree6ada32186c2e46605962cf1944f54947ccbade00 /test/http2_test
parent323bfa733d8b23c19d48601dd4d9d5f71ab3bc5f (diff)
minor cleanup..
Diffstat (limited to 'test/http2_test')
-rw-r--r--test/http2_test/http2_base_server.py19
-rw-r--r--test/http2_test/http2_test_server.py149
2 files changed, 26 insertions, 142 deletions
diff --git a/test/http2_test/http2_base_server.py b/test/http2_test/http2_base_server.py
index 07bd37cae9..91caa74fcc 100644
--- a/test/http2_test/http2_base_server.py
+++ b/test/http2_test/http2_base_server.py
@@ -1,16 +1,11 @@
import struct
import messages_pb2
-import functools
-import argparse
import logging
-import time
-from twisted.internet.defer import Deferred, inlineCallbacks
-from twisted.internet.protocol import Protocol, Factory
-from twisted.internet import endpoints, reactor, error, defer
+from twisted.internet.protocol import Protocol
+from twisted.internet import reactor
from h2.connection import H2Connection
from h2.events import RequestReceived, DataReceived, WindowUpdated, RemoteSettingsChanged, PingAcknowledged
-from threading import Lock
READ_CHUNK_SIZE = 16384
GRPC_HEADER_SIZE = 5
@@ -20,6 +15,7 @@ class H2ProtocolBaseServer(Protocol):
self._conn = H2Connection(client_side=False)
self._recv_buffer = ''
self._handlers = {}
+ self._handlers['ConnectionMade'] = self.on_connection_made_default
self._handlers['DataReceived'] = self.on_data_received_default
self._handlers['WindowUpdated'] = self.on_window_update_default
self._handlers['RequestReceived'] = self.on_request_received_default
@@ -33,14 +29,17 @@ class H2ProtocolBaseServer(Protocol):
self._handlers = handlers
def connectionMade(self):
+ self._handlers['ConnectionMade']()
+
+ def connectionLost(self, reason):
+ self._handlers['ConnectionLost'](reason)
+
+ def on_connection_made_default(self):
logging.info('Connection Made')
self._conn.initiate_connection()
self.transport.setTcpNoDelay(True)
self.transport.write(self._conn.data_to_send())
- def connectionLost(self, reason):
- self._handlers['ConnectionLost'](reason)
-
def on_connection_lost(self, reason):
logging.info('Disconnected %s'%reason)
reactor.callFromThread(reactor.stop)
diff --git a/test/http2_test/http2_test_server.py b/test/http2_test/http2_test_server.py
index be5f1593eb..7ec781d2aa 100644
--- a/test/http2_test/http2_test_server.py
+++ b/test/http2_test/http2_test_server.py
@@ -1,135 +1,17 @@
"""
HTTP2 Test Server. Highly experimental work in progress.
"""
-import struct
-import messages_pb2
import argparse
import logging
-import time
-from twisted.internet.defer import Deferred, inlineCallbacks
-from twisted.internet.protocol import Protocol, Factory
-from twisted.internet import endpoints, reactor, error, defer
-from h2.connection import H2Connection
-from h2.events import RequestReceived, DataReceived, WindowUpdated, RemoteSettingsChanged
-from threading import Lock
+from twisted.internet.protocol import Factory
+from twisted.internet import endpoints, reactor
import http2_base_server
-
-READ_CHUNK_SIZE = 16384
-GRPC_HEADER_SIZE = 5
-
-class TestcaseRstStreamAfterHeader(object):
- 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()
-
-class TestcaseRstStreamAfterData(object):
- 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)
- assert(sr.response_size <= 2048) # so it can fit into one flow control window
- 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()
-
-class TestcaseGoaway(object):
- """
- Process incoming request normally. After sending trailer response,
- send GOAWAY with stream id = 1.
- assert that the next request is made on a different 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:
- time.sleep(1)
- 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()
-
-class TestcasePing(object):
- """
- """
- 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['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)
+import test_rst_after_header
+import test_rst_after_data
+import test_goaway
+import test_ping
+import test_max_streams
class H2Factory(Factory):
def __init__(self, testcase):
@@ -139,15 +21,18 @@ class H2Factory(Factory):
def buildProtocol(self, addr):
self._num_streams += 1
- if self._testcase == 'rst_stream_after_header':
- t = TestcaseRstStreamAfterHeader(self._num_streams)
- elif self._testcase == 'rst_stream_after_data':
- t = TestcaseRstStreamAfterData(self._num_streams)
+ if self._testcase == 'rst_after_header':
+ t = test_rst_after_header.TestcaseRstStreamAfterHeader()
+ elif self._testcase == 'rst_after_data':
+ t = test_rst_after_data.TestcaseRstStreamAfterData()
elif self._testcase == 'goaway':
- t = TestcaseGoaway(self._num_streams)
+ t = test_goaway.TestcaseGoaway(self._num_streams)
elif self._testcase == 'ping':
- t = TestcasePing(self._num_streams)
+ t = test_ping.TestcasePing()
+ elif self._testcase == 'max_streams':
+ t = TestcaseSettingsMaxStreams(self._num_streams)
else:
+ logging.error('Unknown test case: %s'%self._testcase)
assert(0)
return t.get_base_server()
@@ -157,7 +42,7 @@ if __name__ == "__main__":
parser.add_argument("test")
parser.add_argument("port")
args = parser.parse_args()
- if args.test not in ['rst_stream_after_header', 'rst_stream_after_data', 'goaway', 'ping']:
+ if args.test not in ['rst_after_header', 'rst_after_data', 'goaway', 'ping', 'max_streams']:
print 'unknown test: ', args.test
endpoint = endpoints.TCP4ServerEndpoint(reactor, int(args.port), backlog=128)
endpoint.listen(H2Factory(args.test))