finish fixing/testing manager.py
This commit is contained in:
parent
e55787c693
commit
40dadfeb71
|
@ -38,6 +38,13 @@ class ReceivedHintsTooEarly(Exception):
|
|||
pass
|
||||
|
||||
|
||||
class UnexpectedKCM(Exception):
|
||||
pass
|
||||
|
||||
|
||||
class UnknownMessageType(Exception):
|
||||
pass
|
||||
|
||||
def make_side():
|
||||
return bytes_to_hexstr(os.urandom(6))
|
||||
|
||||
|
@ -94,7 +101,7 @@ class Manager(object):
|
|||
_next_subchannel_id = None # initialized in choose_role
|
||||
|
||||
m = MethodicalMachine()
|
||||
set_trace = getattr(m, "_setTrace", lambda self, f: None)
|
||||
set_trace = getattr(m, "_setTrace", lambda self, f: None) # pragma: no cover
|
||||
|
||||
def __attrs_post_init__(self):
|
||||
self._got_versions_d = Deferred()
|
||||
|
@ -214,8 +221,9 @@ class Manager(object):
|
|||
self._inbound.handle_data(r.scid, r.data)
|
||||
else: # isinstance(r, Close)
|
||||
self._inbound.handle_close(r.scid)
|
||||
return
|
||||
if isinstance(r, KCM):
|
||||
log.err("got unexpected KCM")
|
||||
log.err(UnexpectedKCM())
|
||||
elif isinstance(r, Ping):
|
||||
self.handle_ping(r.ping_id)
|
||||
elif isinstance(r, Pong):
|
||||
|
@ -223,7 +231,7 @@ class Manager(object):
|
|||
elif isinstance(r, Ack):
|
||||
self._outbound.handle_ack(r.resp_seqnum) # retire queued messages
|
||||
else:
|
||||
log.err("received unknown message type {}".format(r))
|
||||
log.err(UnknownMessageType("{}".format(r)))
|
||||
|
||||
# pings, pongs, and acks are not queued
|
||||
def send_ping(self, ping_id):
|
||||
|
|
|
@ -11,9 +11,11 @@ from ..._dilation import roles
|
|||
from ..._dilation.encode import to_be4
|
||||
from ..._dilation.manager import (Dilator, Manager, make_side,
|
||||
OldPeerCannotDilateError,
|
||||
UnknownDilationMessageType)
|
||||
UnknownDilationMessageType,
|
||||
UnexpectedKCM,
|
||||
UnknownMessageType)
|
||||
from ..._dilation.subchannel import _WormholeAddress
|
||||
from ..._dilation.connection import Open, Data, Close, Ack
|
||||
from ..._dilation.connection import Open, Data, Close, Ack, KCM, Ping, Pong
|
||||
from .common import clear_mock_calls
|
||||
|
||||
|
||||
|
@ -570,10 +572,74 @@ class TestManager(unittest.TestCase):
|
|||
self.assertEqual(c4.mock_calls, [mock.call.start()])
|
||||
clear_mock_calls(c3, connector4, c4)
|
||||
|
||||
def test_stop(self):
|
||||
pass
|
||||
|
||||
|
||||
def test_mirror(self):
|
||||
# receive a PLEASE with the same side as us: shouldn't happen
|
||||
pass
|
||||
m, h = make_manager(leader=True)
|
||||
|
||||
m.start()
|
||||
clear_mock_calls(h.send)
|
||||
e = self.assertRaises(ValueError, m.rx_PLEASE, {"side": LEADER})
|
||||
self.assertEqual(str(e), "their side shouldn't be equal: reflection?")
|
||||
|
||||
def test_ping_pong(self):
|
||||
m, h = make_manager(leader=False)
|
||||
|
||||
m.got_record(KCM())
|
||||
self.flushLoggedErrors(UnexpectedKCM)
|
||||
|
||||
m.got_record(Ping(1))
|
||||
self.assertEqual(h.outbound.mock_calls,
|
||||
[mock.call.send_if_connected(Pong(1))])
|
||||
clear_mock_calls(h.outbound)
|
||||
|
||||
m.got_record(Pong(2))
|
||||
# currently ignored, will eventually update a timer
|
||||
|
||||
m.got_record("not recognized")
|
||||
e = self.flushLoggedErrors(UnknownMessageType)
|
||||
self.assertEqual(len(e), 1)
|
||||
self.assertEqual(str(e[0].value), "not recognized")
|
||||
|
||||
m.send_ping(3)
|
||||
self.assertEqual(h.outbound.mock_calls,
|
||||
[mock.call.send_if_connected(Pong(3))])
|
||||
clear_mock_calls(h.outbound)
|
||||
|
||||
def test_subchannel(self):
|
||||
m, h = make_manager(leader=True)
|
||||
sc = object()
|
||||
|
||||
m.subchannel_pauseProducing(sc)
|
||||
self.assertEqual(h.inbound.mock_calls, [
|
||||
mock.call.subchannel_pauseProducing(sc)])
|
||||
clear_mock_calls(h.inbound)
|
||||
|
||||
m.subchannel_resumeProducing(sc)
|
||||
self.assertEqual(h.inbound.mock_calls, [
|
||||
mock.call.subchannel_resumeProducing(sc)])
|
||||
clear_mock_calls(h.inbound)
|
||||
|
||||
m.subchannel_stopProducing(sc)
|
||||
self.assertEqual(h.inbound.mock_calls, [
|
||||
mock.call.subchannel_stopProducing(sc)])
|
||||
clear_mock_calls(h.inbound)
|
||||
|
||||
p = object()
|
||||
streaming = object()
|
||||
|
||||
m.subchannel_registerProducer(sc, p, streaming)
|
||||
self.assertEqual(h.outbound.mock_calls, [
|
||||
mock.call.subchannel_registerProducer(sc, p, streaming)])
|
||||
clear_mock_calls(h.outbound)
|
||||
|
||||
m.subchannel_unregisterProducer(sc)
|
||||
self.assertEqual(h.outbound.mock_calls, [
|
||||
mock.call.subchannel_unregisterProducer(sc)])
|
||||
clear_mock_calls(h.outbound)
|
||||
|
||||
m.subchannel_closed("scid", sc)
|
||||
self.assertEqual(h.inbound.mock_calls, [
|
||||
mock.call.subchannel_closed("scid", sc)])
|
||||
self.assertEqual(h.outbound.mock_calls, [
|
||||
mock.call.subchannel_closed("scid", sc)])
|
||||
clear_mock_calls(h.inbound, h.outbound)
|
||||
|
|
Loading…
Reference in New Issue
Block a user