Skip to content

Commit 5b95253

Browse files
committed
refactor(mypy): add stricter rules to more test modules
1 parent 53e837f commit 5b95253

15 files changed

+87
-38
lines changed

pyproject.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ module = [
164164
"tests.feature_activation.*",
165165
# "tests.p2p.*",
166166
"tests.pubsub.*",
167-
# "tests.simulation.*",
167+
"tests.simulation.*",
168168
]
169169
disallow_untyped_defs = true
170170

tests/consensus/test_consensus2.py

+2
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ def test_two_conflicts_intertwined_once(self) -> None:
7575

7676
self.graphviz = GraphvizVisualizer(manager1.tx_storage, include_verifications=True, include_funds=True)
7777

78+
assert manager1.wallet is not None
7879
address = manager1.wallet.get_unused_address(mark_as_used=False)
7980
value = 10
8081
initial = gen_new_tx(manager1, address, value)
@@ -110,6 +111,7 @@ def test_two_conflicts_intertwined_multiple_times(self) -> None:
110111

111112
self.graphviz = GraphvizVisualizer(manager1.tx_storage, include_verifications=True, include_funds=True)
112113

114+
assert manager1.wallet is not None
113115
address = manager1.wallet.get_unused_address(mark_as_used=False)
114116
value = 10
115117
initial = gen_new_tx(manager1, address, value)

tests/consensus/test_soft_voided.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ def _run_test(
3939
simulator.run(300)
4040

4141
manager2 = self.create_peer(soft_voided_tx_ids=soft_voided_tx_ids, simulator=simulator)
42-
manager2.soft_voided_tx_ids = soft_voided_tx_ids
4342

4443
graphviz = GraphvizVisualizer(manager2.tx_storage, include_verifications=True, include_funds=True)
4544

@@ -83,6 +82,7 @@ def _run_test(
8382
metaD1 = txD1.get_metadata()
8483
self.assertEqual({txA.hash, txD1.hash}, metaD1.voided_by)
8584

85+
assert manager2.wallet is not None
8686
address = manager2.wallet.get_unused_address(mark_as_used=False)
8787
value = 1
8888
txC = gen_new_tx(manager2, address, value)

tests/consensus/test_soft_voided2.py

+1
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@ def _run_test(self, simulator: Simulator, soft_voided_tx_ids: set[VertexId]) ->
119119

120120
self.graphviz = GraphvizVisualizer(manager1.tx_storage, include_verifications=True, include_funds=True)
121121

122+
assert manager1.wallet is not None
122123
address = manager1.wallet.get_unused_address(mark_as_used=False)
123124
value = 10
124125
initial = gen_new_tx(manager1, address, value)

tests/consensus/test_soft_voided3.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from hathor.simulator import FakeConnection, RandomTransactionGenerator, Simulator
55
from hathor.simulator.trigger import StopAfterNTransactions
66
from hathor.simulator.utils import gen_new_tx
7-
from hathor.transaction import Transaction
7+
from hathor.transaction import BaseTransaction
88
from hathor.types import VertexId
99
from tests import unittest
1010
from tests.simulation.base import SimulatorTestCase
@@ -14,7 +14,7 @@
1414
class BaseSoftVoidedTestCase(SimulatorTestCase):
1515
seed_config = 5988775361793628169
1616

17-
def assertNoParentsAreSoftVoided(self, tx: Transaction) -> None:
17+
def assertNoParentsAreSoftVoided(self, tx: BaseTransaction) -> None:
1818
assert tx.storage is not None
1919
for h in tx.parents:
2020
tx2 = tx.storage.get_transaction(h)
@@ -39,7 +39,6 @@ def _run_test(
3939
simulator.run(300)
4040

4141
manager2 = self.create_peer(soft_voided_tx_ids=soft_voided_tx_ids, simulator=simulator)
42-
manager2.soft_voided_tx_ids = soft_voided_tx_ids
4342

4443
graphviz = GraphvizVisualizer(manager2.tx_storage, include_verifications=True, include_funds=True)
4544

@@ -92,6 +91,7 @@ def _run_test(
9291
graphviz.labels[blk1.hash] = 'blk1'
9392

9493
simulator.run(10)
94+
assert manager2.wallet is not None
9595
address = manager2.wallet.get_unused_address(mark_as_used=True)
9696
txC = gen_new_tx(manager2, address, 6400)
9797
if txD1.hash not in txC.parents:

tests/consensus/test_soft_voided4.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from hathor.simulator import FakeConnection, RandomTransactionGenerator, Simulator
55
from hathor.simulator.trigger import StopAfterNTransactions
66
from hathor.simulator.utils import gen_new_double_spending
7+
from hathor.transaction import Transaction
78
from hathor.types import VertexId
89
from tests import unittest
910
from tests.simulation.base import SimulatorTestCase
@@ -31,7 +32,6 @@ def _run_test(
3132
gen_tx1.stop()
3233

3334
manager2 = self.create_peer(soft_voided_tx_ids=set(soft_voided_tx_ids), simulator=simulator)
34-
manager2.soft_voided_tx_ids = set(soft_voided_tx_ids)
3535

3636
self.graphviz = GraphvizVisualizer(manager2.tx_storage, include_verifications=True, include_funds=True)
3737

@@ -69,9 +69,11 @@ def _run_test(
6969
self.graphviz.labels[txB_hash] = 'txB'
7070

7171
txB = manager2.tx_storage.get_transaction(txB_hash)
72+
assert isinstance(txB, Transaction)
7273

7374
# Get the tx confirmed by the soft voided that will be voided
7475
tx_base = manager2.tx_storage.get_transaction(txB.parents[0])
76+
assert isinstance(tx_base, Transaction)
7577
txC = gen_new_double_spending(manager2, use_same_parents=False, tx=tx_base)
7678
self.graphviz.labels[tx_base.hash] = 'tx_base'
7779
txC.weight = 30

tests/event/event_simulation_tester.py

+1
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ def _create_artifacts(self) -> None:
4747
self.settings = artifacts.settings
4848

4949
event_ws_factory = self.manager._event_manager._event_ws_factory
50+
assert event_ws_factory is not None
5051
event_ws_factory.openHandshakeTimeout = 0
5152

5253
self.protocol = event_ws_factory.buildProtocol(addr=Mock())

tests/event/test_event_simulation_scenarios.py

+5
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ class BaseEventSimulationScenariosTest(BaseEventSimulationTester):
4444

4545
def test_only_load(self) -> None:
4646
stream_id = self.manager._event_manager._stream_id
47+
assert stream_id is not None
4748
Scenario.ONLY_LOAD.simulate(self.simulator, self.manager)
4849
self._start_stream()
4950

@@ -66,6 +67,7 @@ def test_only_load(self) -> None:
6667

6768
def test_single_chain_one_block(self) -> None:
6869
stream_id = self.manager._event_manager._stream_id
70+
assert stream_id is not None
6971
Scenario.SINGLE_CHAIN_ONE_BLOCK.simulate(self.simulator, self.manager)
7072
self._start_stream()
7173

@@ -94,6 +96,7 @@ def test_single_chain_one_block(self) -> None:
9496

9597
def test_single_chain_blocks_and_transactions(self) -> None:
9698
stream_id = self.manager._event_manager._stream_id
99+
assert stream_id is not None
97100
Scenario.SINGLE_CHAIN_BLOCKS_AND_TRANSACTIONS.simulate(self.simulator, self.manager)
98101
self._start_stream()
99102

@@ -159,6 +162,7 @@ def test_single_chain_blocks_and_transactions(self) -> None:
159162

160163
def test_reorg(self) -> None:
161164
stream_id = self.manager._event_manager._stream_id
165+
assert stream_id is not None
162166
Scenario.REORG.simulate(self.simulator, self.manager)
163167
self._start_stream()
164168

@@ -207,6 +211,7 @@ def test_reorg(self) -> None:
207211

208212
def test_unvoided_transaction(self) -> None:
209213
stream_id = self.manager._event_manager._stream_id
214+
assert stream_id is not None
210215
Scenario.UNVOIDED_TRANSACTION.simulate(self.simulator, self.manager)
211216
self._start_stream()
212217

tests/feature_activation/test_feature_simulation.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
from hathor.feature_activation.settings import Settings as FeatureSettings
2727
from hathor.simulator import FakeConnection
2828
from hathor.transaction.exceptions import BlockMustSignalError
29+
from hathor.util import not_none
2930
from tests import unittest
3031
from tests.resources.base_resource import StubSite
3132
from tests.simulation.base import SimulatorTestCase
@@ -615,7 +616,7 @@ def test_feature_from_existing_storage(self) -> None:
615616
calculate_new_state_mock.reset_mock()
616617

617618
manager1.stop()
618-
artifacts1.rocksdb_storage.close()
619+
not_none(artifacts1.rocksdb_storage).close()
619620

620621
# new builder is created with the same storage from the previous manager
621622
builder2 = self.get_simulator_builder_from_dir(rocksdb_dir).set_settings(settings)

tests/p2p/test_sync_v2.py

+2
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
StopWhenTrue,
1717
Trigger,
1818
)
19+
from hathor.transaction.storage import TransactionRocksDBStorage
1920
from hathor.transaction.storage.traversal import DFSWalk
2021
from tests.simulation.base import SimulatorTestCase
2122
from tests.utils import HAS_ROCKSDB
@@ -89,6 +90,7 @@ def _run_restart_test(self, *, full_verification: bool, use_tx_storage_cache: bo
8990
conn12.disconnect(Failure(Exception('testing')))
9091
self.simulator.remove_connection(conn12)
9192
manager2.stop()
93+
assert isinstance(manager2.tx_storage, TransactionRocksDBStorage)
9294
manager2.tx_storage._rocksdb_storage.close()
9395
del manager2
9496

tests/simulation/base.py

+11-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
from typing import Optional
22

3+
from hathor.manager import HathorManager
34
from hathor.simulator import Simulator
5+
from hathor.types import VertexId
46
from tests import unittest
57

68

@@ -9,7 +11,7 @@ class SimulatorTestCase(unittest.TestCase):
911

1012
seed_config: Optional[int] = None
1113

12-
def setUp(self):
14+
def setUp(self) -> None:
1315
super().setUp()
1416

1517
self.simulator = Simulator(self.seed_config)
@@ -19,11 +21,17 @@ def setUp(self):
1921
print('Simulation seed config:', self.simulator.seed)
2022
print('-'*30)
2123

22-
def tearDown(self):
24+
def tearDown(self) -> None:
2325
self.simulator.stop()
2426
super().tearDown()
2527

26-
def create_peer(self, enable_sync_v1=None, enable_sync_v2=None, soft_voided_tx_ids=None, simulator=None):
28+
def create_peer( # type: ignore[override]
29+
self,
30+
enable_sync_v1: bool | None = None,
31+
enable_sync_v2: bool | None = None,
32+
soft_voided_tx_ids: set[VertexId] = set(),
33+
simulator: Simulator | None = None
34+
) -> HathorManager:
2735
if enable_sync_v1 is None:
2836
assert hasattr(self, '_enable_sync_v1'), ('`_enable_sync_v1` has no default by design, either set one on '
2937
'the test class or pass `enable_sync_v1` by argument')

tests/simulation/test_simulator.py

+12-11
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,22 @@
11
import pytest
22

3+
from hathor.manager import HathorManager
34
from hathor.simulator import FakeConnection
4-
from hathor.simulator.trigger import All as AllTriggers, StopWhenSynced
5+
from hathor.simulator.trigger import All as AllTriggers, StopWhenSynced, Trigger
56
from hathor.verification.vertex_verifier import VertexVerifier
67
from tests import unittest
78
from tests.simulation.base import SimulatorTestCase
89

910

1011
class BaseRandomSimulatorTestCase(SimulatorTestCase):
11-
def test_verify_pow(self):
12+
def test_verify_pow(self) -> None:
1213
manager1 = self.create_peer()
1314
# just get one of the genesis, we don't really need to create any transaction
1415
tx = next(iter(manager1.tx_storage.get_all_genesis()))
1516
# optional argument must be valid, it just has to not raise any exception, there's no assert for that
1617
VertexVerifier(settings=self._settings, daa=manager1.daa).verify_pow(tx, override_weight=0.)
1718

18-
def test_one_node(self):
19+
def test_one_node(self) -> None:
1920
manager1 = self.create_peer()
2021

2122
miner1 = self.simulator.create_miner(manager1, hashpower=100e6)
@@ -29,7 +30,7 @@ def test_one_node(self):
2930
# FIXME: the setup above produces 0 new blocks and transactions
3031
# self.assertGreater(manager1.tx_storage.get_vertices_count(), 3)
3132

32-
def test_two_nodes(self):
33+
def test_two_nodes(self) -> None:
3334
manager1 = self.create_peer()
3435
manager2 = self.create_peer()
3536

@@ -63,10 +64,10 @@ def test_two_nodes(self):
6364
self.assertTrue(conn12.is_connected)
6465
self.assertTipsEqual(manager1, manager2)
6566

66-
def test_many_miners_since_beginning(self):
67-
nodes = []
67+
def test_many_miners_since_beginning(self) -> None:
68+
nodes: list[HathorManager] = []
6869
miners = []
69-
stop_triggers = []
70+
stop_triggers: list[Trigger] = []
7071

7172
for hashpower in [10e6, 5e6, 1e6, 1e6, 1e6]:
7273
manager = self.create_peer()
@@ -96,11 +97,11 @@ def test_many_miners_since_beginning(self):
9697
self.assertTipsEqual(nodes[0], node)
9798

9899
@pytest.mark.flaky(max_runs=5, min_passes=1)
99-
def test_new_syncing_peer(self):
100+
def test_new_syncing_peer(self) -> None:
100101
nodes = []
101102
miners = []
102103
tx_generators = []
103-
stop_triggers = []
104+
stop_triggers: list[Trigger] = []
104105

105106
manager = self.create_peer()
106107
nodes.append(manager)
@@ -162,15 +163,15 @@ class SyncV2RandomSimulatorTestCase(unittest.SyncV2Params, BaseRandomSimulatorTe
162163
class SyncBridgeRandomSimulatorTestCase(unittest.SyncBridgeParams, SyncV2RandomSimulatorTestCase):
163164
__test__ = True
164165

165-
def test_compare_mempool_implementations(self):
166+
def test_compare_mempool_implementations(self) -> None:
166167
manager1 = self.create_peer()
167168
manager2 = self.create_peer()
168169

169170
# XXX: make sure we have both indexes
170171
tx_storage = manager1.tx_storage
171172
assert tx_storage.indexes is not None
172173
assert tx_storage.indexes.mempool_tips is not None
173-
assert manager1.tx_storage.indexes.tx_tips is not None
174+
assert manager1.tx_storage.indexes and manager1.tx_storage.indexes.tx_tips is not None
174175
mempool_tips = tx_storage.indexes.mempool_tips
175176

176177
miner1 = self.simulator.create_miner(manager1, hashpower=10e6)

tests/simulation/test_simulator_itself.py

+14-6
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import pytest
22

3+
from hathor.manager import HathorManager
4+
from hathor.p2p.peer_id import PeerId
35
from hathor.simulator import FakeConnection, Simulator
46
from tests import unittest
57

@@ -11,7 +13,7 @@ class BaseSimulatorSelfTestCase(unittest.TestCase):
1113

1214
__test__ = False
1315

14-
def setUp(self):
16+
def setUp(self) -> None:
1517
super().setUp()
1618

1719
seed = None
@@ -29,14 +31,20 @@ def setUp(self):
2931
print('Simulation seed config:', self.simulator1.seed)
3032
print('-' * 30)
3133

32-
def tearDown(self):
34+
def tearDown(self) -> None:
3335
super().tearDown()
3436

3537
self.simulator1.stop()
3638
self.simulator2.stop()
3739
self.simulator3.stop()
3840

39-
def create_simulator_peer(self, simulator, peer_id_pool, enable_sync_v1=None, enable_sync_v2=None):
41+
def create_simulator_peer(
42+
self,
43+
simulator: Simulator,
44+
peer_id_pool: list[PeerId],
45+
enable_sync_v1: bool | None = None,
46+
enable_sync_v2: bool | None = None
47+
) -> HathorManager:
4048
if enable_sync_v1 is None:
4149
assert hasattr(self, '_enable_sync_v1'), ('`_enable_sync_v1` has no default by design, either set one on '
4250
'the test class or pass `enable_sync_v1` by argument')
@@ -54,7 +62,7 @@ def create_simulator_peer(self, simulator, peer_id_pool, enable_sync_v1=None, en
5462

5563
return simulator.create_peer(builder)
5664

57-
def _simulate_run(self, run_i, simulator):
65+
def _simulate_run(self, run_i: int, simulator: Simulator) -> list[HathorManager]:
5866
# XXX: the following was adapted from test_new_syncing_peer, it doesn't matter too much, but has good coverage
5967
# of different behaviors that can be affected by non-determinism on the fullnode implementation
6068

@@ -110,7 +118,7 @@ def _simulate_run(self, run_i, simulator):
110118

111119
# XXX: marked as flaky because of a known random issue
112120
@pytest.mark.flaky(max_runs=3, min_passes=1)
113-
def test_determinism_full_runs(self):
121+
def test_determinism_full_runs(self) -> None:
114122
# sanity assert as to not mess up with it on the setup
115123
self.assertEqual(self.simulator1.seed, self.simulator2.seed)
116124
self.assertEqual(self.simulator1.seed, self.simulator3.seed)
@@ -128,7 +136,7 @@ def test_determinism_full_runs(self):
128136

129137
# XXX: marked as flaky because of a known random issue
130138
@pytest.mark.flaky(max_runs=3, min_passes=1)
131-
def test_determinism_interleaved(self):
139+
def test_determinism_interleaved(self) -> None:
132140
# sanity assert as to not mess up with it on the setup
133141
self.assertEqual(self.simulator1.seed, self.simulator2.seed)
134142

0 commit comments

Comments
 (0)