refactor test and make it faster

This commit is contained in:
Victor Shyba 2019-06-03 16:47:08 -03:00 committed by Lex Berezhny
parent 08609e9760
commit a14b91cdda

View file

@ -1,10 +1,11 @@
import logging import logging
import asyncio import asyncio
from unittest.mock import Mock
from torba.client.baseledger import BaseLedger
from torba.client.basenetwork import BaseNetwork from torba.client.basenetwork import BaseNetwork
from torba.rpc import RPCSession from torba.rpc import RPCSession
from torba.stream import StreamController from torba.testcase import IntegrationTestCase, AsyncioTestCase
from torba.testcase import IntegrationTestCase
class ReconnectTests(IntegrationTestCase): class ReconnectTests(IntegrationTestCase):
@ -43,28 +44,30 @@ class ReconnectTests(IntegrationTestCase):
await self.ledger.start() await self.ledger.start()
self.assertTrue(self.ledger.network.is_connected) self.assertTrue(self.ledger.network.is_connected)
class ServerPickingTestCase(AsyncioTestCase):
async def _make_fake_server(self, latency=1.0, port=1337): async def _make_fake_server(self, latency=1.0, port=1337):
# local fake server with artificial latency # local fake server with artificial latency
proto = RPCSession() proto = RPCSession()
proto.handle_request = lambda _: asyncio.sleep(latency) proto.handle_request = lambda _: asyncio.sleep(latency)
server = await self.loop.create_server(lambda: proto, host='127.0.0.1', port=port) server = await self.loop.create_server(lambda: proto, host='127.0.0.1', port=port)
self.addCleanup(server.close) self.addCleanup(server.close)
return ('127.0.0.1', port)
async def test_pick_fastest(self): async def test_pick_fastest(self):
original_servers = self.ledger.config['default_servers'] ledger = Mock(config={
original_servers.clear() 'default_servers': [
for index in reversed(range(4)): # reversed so the slowest is the first await self._make_fake_server(latency=1.5, port=1340),
port = 1337 + index await self._make_fake_server(latency=0.1, port=1337),
await self._make_fake_server(latency=index, port=port) await self._make_fake_server(latency=1.0, port=1339),
original_servers.append(('127.0.0.1', port)) await self._make_fake_server(latency=0.5, port=1338),
],
'connect_timeout': 30
})
fastest = ('127.0.0.1', 1337) network = BaseNetwork(ledger)
self.ledger.config['default_servers'] = original_servers
self.ledger.config['connect_timeout'] = 30
network = BaseNetwork(self.ledger)
self.addCleanup(network.stop) self.addCleanup(network.stop)
asyncio.ensure_future(network.start()) asyncio.ensure_future(network.start())
await asyncio.wait_for(network.on_connected.first, timeout=1) await asyncio.wait_for(network.on_connected.first, timeout=1)
self.assertTrue(network.is_connected) self.assertTrue(network.is_connected)
self.assertEqual(network.client.server, fastest) self.assertEqual(network.client.server, ('127.0.0.1', 1337))