Browse Source

delete useless tests, change test_proto to actually fail on error

Malte Kraus 8 năm trước cách đây
mục cha
commit
3f27a1591e
4 tập tin đã thay đổi với 22 bổ sung67 xóa
  1. 0 17
      tests/mock_protocol.py
  2. 0 14
      tests/test_merkle.py
  3. 0 26
      tests/test_mining.py
  4. 22 10
      tests/test_proto.py

+ 0 - 17
tests/mock_protocol.py

@@ -1,17 +0,0 @@
-from src.mining import Miner
-
-class MockProtocol:
-    def __init__(self):
-        self.block_receive_handlers = []
-        self.trans_receive_handlers = []
-
-    def fake_block_received(self, block):
-        for handler in self.block_receive_handlers:
-            handler(block)
-
-    def fake_trans_received(self, trans):
-        for handler in self.trans_receive_handlers:
-            handler(trans)
-
-    def broadcast_primary_block(self, block):
-        self.fake_block_received(block)

+ 0 - 14
tests/test_merkle.py

@@ -1,14 +0,0 @@
-from src.merkle import merkle_tree
-
-class Val:
-    def __init__(self, hash_val):
-        self.hash_val = hash_val
-
-    def get_hash(self):
-        return self.hash_val
-
-    def __str__(self):
-        return str(self.hash_val)
-
-if __name__ == '__main__':
-    print(merkle_tree([Val(bytes([i])) for i in range(10)]))

+ 0 - 26
tests/test_mining.py

@@ -1,26 +0,0 @@
-from .mock_protocol import MockProtocol
-from src.mining import Miner
-from src.block import GENESIS_BLOCK
-from src.crypto import Signing
-from src.transaction import Transaction, TransactionInput, TransactionTarget
-
-from time import sleep
-
-reward_key = Signing.generatePrivateKey()
-
-proto = MockProtocol()
-miner1 = Miner(proto, reward_key)
-miner2 = Miner(proto, reward_key)
-miner2.chain_changed()
-
-
-
-sleep(5)
-#proto.fake_block_received(GENESIS_BLOCK)
-strans1 = miner2.chainbuilder.primary_block_chain.head.transactions[0]
-strans1 = TransactionInput(strans1.get_hash(), 0)
-trans = Transaction([strans1], [])
-trans.sign([reward_key])
-miner2.chainbuilder.new_transaction_received(trans)
-sleep(5)
-print(len(miner2.chainbuilder.primary_block_chain.blocks))

+ 22 - 10
tests/test_proto.py

@@ -18,17 +18,29 @@ miner1.start_mining()
 
 
 sleep(5)
-strans1 = miner2.chainbuilder.primary_block_chain.blocks[20].transactions[0]
-strans1 = TransactionInput(strans1.get_hash(), 0)
-trans = Transaction([strans1], [])
+target_key = Signing.generatePrivateKey()
+reward_trans = miner2.chainbuilder.primary_block_chain.blocks[20].transactions[0]
+trans_in = TransactionInput(reward_trans.get_hash(), 0)
+trans_targ = TransactionTarget(target_key, reward_trans.targets[0].amount)
+
+trans = Transaction([trans_in], [trans_targ])
 trans.sign([reward_key])
-print(trans.verify(miner1.chainbuilder.primary_block_chain, set()))
+assert trans.verify(miner1.chainbuilder.primary_block_chain, set()), "transaction should be valid"
+
 proto2.received('transaction', trans.to_json_compatible(), None)
 sleep(5)
-print(len(miner1.chainbuilder.primary_block_chain.blocks))
-print(len(miner2.chainbuilder.primary_block_chain.blocks))
-hashes1 = [b.hash for b in miner1.chainbuilder.primary_block_chain.blocks[:70]]
-hashes2 = [b.hash for b in miner2.chainbuilder.primary_block_chain.blocks[:70]]
-print(hashes1 == hashes2)
+chain_len1 = len(miner1.chainbuilder.primary_block_chain.blocks)
+chain_len2 = len(miner2.chainbuilder.primary_block_chain.blocks)
+print("Length of chain of miner 1: {}".format(chain_len1))
+print("Length of chain of miner 2: {}".format(chain_len2))
+
+assert max(chain_len1, chain_len2) * 90 // 100 < min(chain_len1, chain_len2), "chain lengths are VERY different"
+
+chain1 = miner1.chainbuilder.primary_block_chain
+hashes1 = [b.hash for b in chain1.blocks[:chain_len1 * 90 // 100]]
+hashes2 = [b.hash for b in miner2.chainbuilder.primary_block_chain.blocks[:chain_len1 * 90 // 100]]
+assert hashes1 == hashes2, "first 90% of chains should be identical"
+
+assert not trans.verify(miner1.chainbuilder.primary_block_chain, set()), "inserted transaction should be spent and therefore invalid"
 
-print(trans.verify(miner1.chainbuilder.primary_block_chain, set()))
+assert chain1.is_coin_still_valid(TransactionInput(trans.get_hash(), 0)), "someone spent our coins?"