From ecc32885f097ece2c46187166c496e3dd2d70229 Mon Sep 17 00:00:00 2001
From: Makarand Dharmapurikar <makarandd@google.com>
Date: Thu, 1 Dec 2016 15:22:50 -0800
Subject: [PATCH] WIP

---
 test/http2_test/http2_base_server.py | 11 ++++++-----
 test/http2_test/http2_test_server.py |  1 +
 test/http2_test/test_goaway.py       |  4 +++-
 3 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/test/http2_test/http2_base_server.py b/test/http2_test/http2_base_server.py
index 44fb575c0f..cbc26b11b1 100644
--- a/test/http2_test/http2_base_server.py
+++ b/test/http2_test/http2_base_server.py
@@ -113,9 +113,6 @@ class H2ProtocolBaseServer(Protocol):
       return
 
     while self._send_remaining[stream_id] > 0:
-      if self._stream_status[stream_id] is False:
-        logging.info('Stream %d is closed.'%stream_id)
-        break
       lfcw = self._conn.local_flow_control_window(stream_id)
       if lfcw == 0:
         break
@@ -125,7 +122,11 @@ class H2ProtocolBaseServer(Protocol):
                     (lfcw, self._send_offset, self._send_offset + bytes_to_send,
                     stream_id))
       data = self._data_to_send[self._send_offset : self._send_offset + bytes_to_send]
-      self._conn.send_data(stream_id, data, False)
+      try:
+        self._conn.send_data(stream_id, data, False)
+      except ProtocolError:
+        logging.info('Stream %d is closed'%stream_id)
+        break
       self._send_remaining[stream_id] -= bytes_to_send
       self._send_offset += bytes_to_send
       if self._send_remaining[stream_id] == 0:
@@ -163,7 +164,7 @@ class H2ProtocolBaseServer(Protocol):
     asked in request """
     grpc_msg_size = struct.unpack('i',recv_buffer[1:5][::-1])[0]
     if len(recv_buffer) != GRPC_HEADER_SIZE + grpc_msg_size:
-      logging.error('not enough data to decode req proto. size = %d, needed %s'%(len(recv_buffer), 5+grpc_msg_size))
+      #logging.error('not enough data to decode req proto. size = %d, needed %s'%(len(recv_buffer), 5+grpc_msg_size))
       return None
     req_proto_str = recv_buffer[5:5+grpc_msg_size]
     sr = messages_pb2.SimpleRequest()
diff --git a/test/http2_test/http2_test_server.py b/test/http2_test/http2_test_server.py
index 7ec781d2aa..35308c4787 100644
--- a/test/http2_test/http2_test_server.py
+++ b/test/http2_test/http2_test_server.py
@@ -21,6 +21,7 @@ class H2Factory(Factory):
 
   def buildProtocol(self, addr):
     self._num_streams += 1
+    logging.info('New Connection: %d'%self._num_streams)
     if self._testcase == 'rst_after_header':
       t = test_rst_after_header.TestcaseRstStreamAfterHeader()
     elif self._testcase == 'rst_after_data':
diff --git a/test/http2_test/test_goaway.py b/test/http2_test/test_goaway.py
index 7dd7cb7948..4c46cab8f9 100644
--- a/test/http2_test/test_goaway.py
+++ b/test/http2_test/test_goaway.py
@@ -1,4 +1,5 @@
 import logging
+import time
 import http2_base_server
 
 class TestcaseGoaway(object):
@@ -23,11 +24,12 @@ class TestcaseGoaway(object):
   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:
+    if self._iteration == 200:
       self._base_server.on_connection_lost(reason)
 
   def on_send_done(self, stream_id):
     self._base_server.on_send_done_default(stream_id)
+    time.sleep(1)
     logging.info('Sending GOAWAY for stream %d:'%stream_id)
     self._base_server._conn.close_connection(error_code=0, additional_data=None, last_stream_id=stream_id)
     self._base_server._stream_status[stream_id] = False
-- 
GitLab