def test_fallback_check_error(self):
        """
        test reactor.check_headers method
        interface didn't returned any best header. will try again in
        """
        header_timestamp = int(
            time.time()) - self.sut.new_headers_fallback_poll_interval - 1
        loc_header = {
            "block_height": 1,
            "block_hash": "ff" * 32,
            "timestamp": header_timestamp
        }
        self.interface.get_header.side_effect = [exceptions.NoPeersException]
        self.sut.synced = True
        self.sut.set_last_processed_header(loc_header)
        self.loop.run_until_complete(self.sut.check_headers())
        self.assertFalse(self.sut.lock.locked())

        Mock.assert_called_once_with(self.delay_task_runner,
                                     coro_call('check_headers'), 30)
        Mock.assert_called_with(self.interface.get_header,
                                2,
                                fail_silent_out_of_range=True,
                                get_peer=True)
        Mock.assert_called_once_with(self.electrod_loop.create_task,
                                     self.delay_task_runner())

        self.assertEqual(1, len(self.interface.method_calls))
        self.assertEqual(1, len(self.electrod_loop.method_calls))
        self.assertEqual(0, len(self.repo.method_calls))
 def test_check_new_header_same_header(self):
     """
     test on fallback method check_headers
     no new header received
     """
     header_timestamp = int(time.time()) - 100
     loc_header = net_header = {
         "block_height": 1,
         "block_hash": "ff" * 32,
         "timestamp": header_timestamp - 700,
         'header_bytes': b'',
         'prev_block_hash': '00' * 32
     }
     peer = Mock(server_info='mock_peer')
     self.interface.get_header.side_effect = [
         async_coro((peer, net_header))
     ]
     self.sut.synced = True
     self.sut.set_last_processed_header(loc_header)
     self.assertFalse(self.sut.lock.locked())
     self.loop.run_until_complete(self.sut.check_headers())
     Mock.assert_called_once_with(self.delay_task_runner,
                                  coro_call('check_headers'),
                                  in_range(655, 660))
     Mock.assert_has_calls(self.interface.get_header,
                           calls=[
                               call(2,
                                    fail_silent_out_of_range=True,
                                    get_peer=True),
                           ],
                           any_order=True)
     self.assertEqual(1, len(self.interface.method_calls))
     self.assertEqual(1, len(self.electrod_loop.method_calls))
     self.assertEqual(0, len(self.repo.method_calls))
    def test_error_fetching_new_network_best_header(self):
        """
        test reactor.check_headers method
        interface can't find, due race conditions, peers to fetch the headers
        NoPeersException is raised
        """
        header_timestamp = int(
            time.time()) - self.sut.new_headers_fallback_poll_interval - 1
        loc_header = {
            "block_height": 1,
            "block_hash": "ff" * 32,
            "timestamp": header_timestamp
        }
        self.interface.get_header.side_effect = exceptions.NoPeersException
        self.sut.synced = True
        self.sut.set_last_processed_header(loc_header)
        self.loop.run_until_complete(self.sut.check_headers())
        self.assertFalse(self.sut.lock.locked())

        Mock.assert_called_once_with(self.delay_task_runner,
                                     coro_call('check_headers'), 30)
        Mock.assert_called_with(self.interface.get_header,
                                2,
                                fail_silent_out_of_range=True,
                                get_peer=True)
        Mock.assert_called_once_with(self.electrod_loop.create_task,
                                     self.delay_task_runner())

        self.assertEqual(1, len(self.interface.method_calls))
        self.assertEqual(1, len(self.electrod_loop.method_calls))
        self.assertEqual(0, len(self.repo.method_calls))
Exemplo n.º 4
0
 def test_subscribe_error(self):
     self.sut.loop = self.electrod_loop
     self.delayer.return_value = 'delayer'
     self.client.subscribe.side_effect = ConnectionError
     self.loop.run_until_complete(self.sut.subscribe(
         'cafe', 'babe', 'c0ca'))
     Mock.assert_called_with(self.electrod_loop.create_task, 'delayer')
     Mock.assert_called_with(self.delayer, coro_call('on_error'))
Exemplo n.º 5
0
 def test_rpc_call_error(self):
     self.delayer.return_value = 'delayed'
     self.client.RPC.return_value = ConnectionError
     res = self.loop.run_until_complete(
         self.sut.rpc_call('method', ('cafe', 'babe')))
     self.assertEqual(res, None)
     Mock.assert_called_once_with(self.electrod_loop.create_task, 'delayed')
     Mock.assert_called_once_with(self.delayer, coro_call('on_error'))
Exemplo n.º 6
0
    def test_connect_ok(self):
        async def parallel():
            await asyncio.sleep(3)
            for peer in self.peers:
                self.sut.add_peer(peer)

            await asyncio.sleep(5)
            self.sut._keepalive = False

        self.online_checker.side_effect = [async_coro(False), async_coro(True)]
        self.loop.run_until_complete(
            asyncio.gather(parallel(), self.sut.connect()))
        Mock.assert_has_calls(self.loopmock.create_task,
                              calls=[
                                  call(coro_call('_connect_peer')),
                                  call(coro_call('_connect_peer'))
                              ])
 def test_locked_get_header_fallback_task(self):
     self.sut.synced = True
     self.loop.run_until_complete(self.sut.lock.acquire())
     self.loop.run_until_complete(self.sut.check_headers())
     self.sut.lock.release()
     Mock.assert_called_once_with(self.delay_task_runner,
                                  coro_call('check_headers'),
                                  in_range(29, 30))
    def test_check_headers_new_header(self):
        """
        test on fallback method check_headers
        new header received
        """
        header_timestamp = int(time.time()) - 100
        loc_header = {
            "block_height": 1,
            "block_hash": "ff" * 32,
            "timestamp": header_timestamp - 700,
            'header_bytes': b'',
            'prev_block_hash': '00' * 32
        }
        net_header = {
            "block_height": 2,
            "block_hash": "aa" * 32,
            "timestamp": header_timestamp,
            'header_bytes': b'',
            'prev_block_hash': 'ff' * 32
        }
        peer = Mock()
        self.interface.get_header.side_effect = [
            async_coro((peer, net_header))
        ]
        self.sut.synced = True
        self.sut.set_last_processed_header(loc_header)
        self.assertFalse(self.sut.lock.locked())
        peer = Mock(server_info='mock_peer')
        peer.close.return_value = True
        self.repo.get_best_header.return_value = loc_header
        self.repo.save_header.side_effect = lambda a, b, c, d: True

        self.loop.run_until_complete(self.sut.check_headers())
        Mock.assert_called_once_with(self.delay_task_runner,
                                     coro_call('check_headers'), 30)
        self.assertEqual(1, len(self.interface.method_calls))
        self.assertEqual(2, len(self.electrod_loop.method_calls))
        self.assertEqual(0, len(self.repo.method_calls))
        self.assertTrue(self.sut.synced)
    def test_last_header_received_less_than_min_polling_interval(self):
        """
        test reactor.check_headers method
        last header is saved less than polling interval value (default: 660)
        """
        header_timestamp = int(time.time()) - 100
        loc_header = {
            "block_height": 1,
            "block_hash": "ff" * 32,
            "timestamp": header_timestamp
        }

        self.sut.synced = True
        self.sut.set_last_processed_header(loc_header)
        self.loop.run_until_complete(self.sut.check_headers())
        self.assertFalse(self.sut.lock.locked())

        Mock.assert_called_once_with(self.delay_task_runner,
                                     coro_call('check_headers'),
                                     in_range(559, 560))
        self.assertEqual(0, len(self.interface.method_calls))
        self.assertEqual(1, len(self.electrod_loop.method_calls))
        self.assertEqual(0, len(self.repo.method_calls))
 def test_connectionpool_offline(self):
     self.interface.is_pool_online = False
     self.loop.run_until_complete(self.sut.check_headers())
     Mock.assert_called_with(self.delay_task_runner,
                             coro_call('check_headers'),
                             self.sut.new_headers_fallback_poll_interval)
 def test_not_synced_yet_fallback_task(self):
     self.sut.synced = False
     self.loop.run_until_complete(self.sut.check_headers())
     Mock.assert_called_once_with(self.delay_task_runner,
                                  coro_call('check_headers'),
                                  in_range(29, 30))