Browse Source

test_onionmc.py: add line protocol, channel tests

add-joinmarket
zebra-lucky 1 year ago
parent
commit
bfce4ce656
  1. 91
      electrum/plugins/joinmarket/tests/jmdaemon/test_onionmc.py

91
electrum/plugins/joinmarket/tests/jmdaemon/test_onionmc.py

@ -9,7 +9,8 @@ from electrum.plugins.joinmarket.jmdaemon import (
from electrum.plugins.joinmarket.jmdaemon.onionmc import (
PEER_STATUS_UNCONNECTED, PEER_STATUS_CONNECTED, PEER_STATUS_HANDSHAKED,
PEER_STATUS_DISCONNECTED, NOT_SERVING_ONION_HOSTNAME, OnionPeerError,
OnionCustomMessageDecodingError, OnionCustomMessage, JM_MESSAGE_TYPES)
OnionCustomMessageDecodingError, OnionCustomMessage, JM_MESSAGE_TYPES,
OnionPeer, OnionDirectoryPeerNotFound)
from electrum.plugins.joinmarket.jmdaemon.onionmc_support import (
TorClientService)
@ -72,6 +73,9 @@ class OnionBaseTestCase(JMTestCase):
async def on_pubkey(self, pubkey):
print("received pubkey: " + pubkey)
async def on_nick_leave(self, nick, msgchan):
print('simulated on_nick_leave', nick, msgchan)
async def junk_pubmsgs(self, mc):
# start a raw IRCMessageChannel instance in a thread;
# then call send_* on it with various errant messages
@ -137,6 +141,7 @@ class OnionBaseTestCase(JMTestCase):
mc.on_connect = self.on_connect
mc.on_disconnect = self.on_disconnect
mc.on_welcome = self.on_welcome
mc.on_nick_leave = self.on_nick_leave
for p in self.mc.peers:
p.connect()
p._status = PEER_STATUS_HANDSHAKED
@ -165,6 +170,19 @@ class OnionCustomMessageTestCase(OnionBaseTestCase):
assert msg.msgtype == 1
class OnionLineProtocolTestCase(OnionBaseTestCase):
async def test_connection_lost(self):
protocol = self.peer.reconnecting_service.protocol
protocol.connection_lost(Exception('dummy connection lost'))
async def test_line_received(self):
protocol = self.peer.reconnecting_service.protocol
protocol.line_received(
b'{"line": "dummymsg", "type": 1}')
protocol.line_received(b'dummymsg')
class OnionClientFactoryTestCase(OnionBaseTestCase):
async def test_register_disconnection(self):
@ -242,3 +260,74 @@ class OnionPeerTestCase(OnionBaseTestCase):
async def test_notify_message_unsendable(self):
peer = self.peer
peer.notify_message_unsendable()
class OnionMessageChannelTestCase(OnionBaseTestCase):
async def test_info_callback(self):
self.mc.info_callback('dummymsg')
async def test_setup_error_callback(self):
self.mc.setup_error_callback('dummymsg')
async def test_shutdown_callback(self):
self.mc.shutdown_callback('dummymsg')
async def test_get_pubmsg(self):
assert self.mc.get_pubmsg('dummymsg', 'dummynick') == (
'dummynick!PUBLICdummymsg')
async def test_get_privmsg(self):
assert self.mc.get_privmsg(
'dummynick', 'cmd', 'dummymsg', 'dummy2') == (
'dummy2!dummynick!cmd dummymsg')
async def test_pubmsg(self):
await self.mc._pubmsg('dummymsg')
async def test_should_try_to_connect(self):
assert not self.mc.should_try_to_connect(None)
mc = self.mc
peer = OnionPeer(mc, mc.socks5_host, mc.socks5_port,
(NOT_SERVING_ONION_HOSTNAME, -1), False, 'dummynick')
assert not self.mc.should_try_to_connect(peer)
peer = OnionPeer(mc, mc.socks5_host, mc.socks5_port,
('host', 5222), True, 'dummynick')
assert not self.mc.should_try_to_connect(peer)
assert not self.mc.should_try_to_connect(mc.self_as_peer)
peer = OnionPeer(mc, mc.socks5_host, mc.socks5_port,
('host', 5222), False, 'dummynick')
peer._status = PEER_STATUS_HANDSHAKED
assert not self.mc.should_try_to_connect(peer)
peer._status = PEER_STATUS_UNCONNECTED
assert self.mc.should_try_to_connect(peer)
async def test_privmsg(self):
await self.mc._privmsg('dummynick', 'cmd', 'dummymsg')
async def test_announce_orders(self):
await self.mc._announce_orders(['a', 'b', 'c'])
async def test_get_directory_for_nick(self):
mc = self.mc
dummynick = 'dummynick'
with self.assertRaises(OnionDirectoryPeerNotFound):
mc.get_directory_for_nick(dummynick)
mc.active_directories[dummynick] = {}
with self.assertRaises(OnionDirectoryPeerNotFound):
mc.get_directory_for_nick(dummynick)
mc.active_directories[dummynick][self.peer] = False
with self.assertRaises(OnionDirectoryPeerNotFound):
mc.get_directory_for_nick(dummynick)
mc.active_directories[dummynick][self.peer] = True
assert mc.get_directory_for_nick(dummynick) == self.peer
async def test_on_nick_leave_directory(self):
mc = self.mc
dp = self.peer
dummynick = 'dummynick'
assert not await mc.on_nick_leave_directory(dummynick, dp)
mc.active_directories[dummynick] = {}
assert not await mc.on_nick_leave_directory(dummynick, dp)
mc.active_directories[dummynick][self.peer] = True
await mc.on_nick_leave_directory(dummynick, dp)

Loading…
Cancel
Save