blob: 8f6b8a1b840ec1aaadbf665809f57e61f91f2541 [file] [log] [blame]
Jan Tattermusch7897ae92017-06-07 22:57:36 +02001# Copyright 2016 gRPC authors.
ncteisen65a45ae2016-12-15 14:35:17 -08002#
Jan Tattermusch7897ae92017-06-07 22:57:36 +02003# Licensed under the Apache License, Version 2.0 (the "License");
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at
ncteisen65a45ae2016-12-15 14:35:17 -08006#
Jan Tattermusch7897ae92017-06-07 22:57:36 +02007# http://www.apache.org/licenses/LICENSE-2.0
ncteisen65a45ae2016-12-15 14:35:17 -08008#
Jan Tattermusch7897ae92017-06-07 22:57:36 +02009# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12# See the License for the specific language governing permissions and
13# limitations under the License.
ncteisen65a45ae2016-12-15 14:35:17 -080014
Makarand Dharmapurikar323bfa72016-12-01 10:51:10 -080015import logging
Makarand Dharmapurikar8c579172016-12-12 13:58:15 -080016
Makarand Dharmapurikar323bfa72016-12-01 10:51:10 -080017import http2_base_server
18
19class TestcasePing(object):
20 """
21 This test injects PING frames before and after header and data. Keeps count
22 of outstanding ping response and asserts when the count is non-zero at the
23 end of the test.
24 """
25 def __init__(self):
26 self._base_server = http2_base_server.H2ProtocolBaseServer()
27 self._base_server._handlers['RequestReceived'] = self.on_request_received
28 self._base_server._handlers['DataReceived'] = self.on_data_received
29 self._base_server._handlers['ConnectionLost'] = self.on_connection_lost
30
31 def get_base_server(self):
32 return self._base_server
33
34 def on_request_received(self, event):
35 self._base_server.default_ping()
36 self._base_server.on_request_received_default(event)
37 self._base_server.default_ping()
38
39 def on_data_received(self, event):
40 self._base_server.on_data_received_default(event)
Makarand Dharmapurikar4350e742016-12-01 14:24:22 -080041 sr = self._base_server.parse_received_data(event.stream_id)
42 if sr:
Makarand Dharmapurikar8c579172016-12-12 13:58:15 -080043 logging.info('Creating response size = %s' % sr.response_size)
Makarand Dharmapurikar4350e742016-12-01 14:24:22 -080044 response_data = self._base_server.default_response_data(sr.response_size)
45 self._base_server.default_ping()
46 self._base_server.setup_send(response_data, event.stream_id)
47 self._base_server.default_ping()
Makarand Dharmapurikar323bfa72016-12-01 10:51:10 -080048
49 def on_connection_lost(self, reason):
Makarand Dharmapurikar8c579172016-12-12 13:58:15 -080050 logging.info('Disconnect received. Ping Count %d' % self._base_server._outstanding_pings)
Makarand Dharmapurikar323bfa72016-12-01 10:51:10 -080051 assert(self._base_server._outstanding_pings == 0)
52 self._base_server.on_connection_lost(reason)