예제 #1
0
    def test_register_and_share_transaction(self):
        n1 = None
        n2 = None
        try:
            n1 = Node.start(node_id='1')
            p1 = n1.proxy()
            n2 = Node.start(node_id='2')
            p2 = n2.proxy()
            p1.register_peer(p2)

            t = Transaction(seller_id='s',
                            buyer_id='b',
                            timestamp=datetime(2017,
                                               11,
                                               1,
                                               1,
                                               2,
                                               3,
                                               tzinfo=pytz.UTC),
                            amount=32.1)
            p1.register_transaction(t)
            self.assertEqual(p1.pending_transactions.get(), {t.hash: t})
            self.assertEqual(p2.pending_transactions.get(), {t.hash: t})
        finally:
            n1.stop()
            n2.stop()
예제 #2
0
    def test_share_chain_rejected(self):
        try:
            blk = {
                'timestamp': '2017-01-02T03:04:05.000123Z',
                'prev_hash': '1234',
                'data': {
                    'foo': 'bar'
                }
            }
            blk2 = {
                'timestamp': '2017-01-02T03:04:05.000123Z',
                'prev_hash': Block.from_dict(blk).hash,
                'data': {
                    'woo': 'hoo'
                }
            }
            dct = {'blocks': [blk, blk2]}
            chain = Chain.from_dict(dct)
            node_id = 'blah'
            backend = MockFileBackend(chains={node_id: chain})
            n1 = Node.start(node_id=node_id, backend=backend)
            p1 = n1.proxy()

            short_chain = Chain.from_dict({'blocks': [blk]})
            blk3 = {
                'timestamp': '2017-01-02T03:04:05.000123Z',
                'prev_hash': Block.from_dict(blk).hash,
                'data': {
                    'p': 'b'
                }
            }
            dct2 = {'blocks': [blk, blk3]}
            chain2 = Chain.from_dict(dct2)
            n2 = Node.start(node_id='2',
                            backend=MockFileBackend({'2': short_chain}))
            n3 = Node.start(node_id='3',
                            backend=MockFileBackend({'3': chain2}))
            n4 = Node.start(node_id='4',
                            backend=MockFileBackend({'4': chain2}))
            p2 = n2.proxy()
            p3 = n3.proxy()
            p4 = n4.proxy()
            p1.register_peer(p2)
            p1.register_peer(p3)
            p1.register_peer(p4)
            p1.share_chain().get()
            self.assertEqual(p1.chain.get(), short_chain)
            self.assertEqual(p2.chain.get(), short_chain)
            self.assertEqual(p3.chain.get(), chain2)
            self.assertEqual(p4.chain.get(), chain2)
        finally:
            n1.stop()
            n2.stop()
            n3.stop()
            n4.stop()
예제 #3
0
 def test_register_peer(self):
     n1 = None
     n2 = None
     try:
         n1 = Node.start(node_id='1')
         p1 = n1.proxy()
         n2 = Node.start(node_id='2')
         p2 = n2.proxy()
         p1.register_peer(p2)
         self.assertEqual(p1.peer_proxies.get(), [p2])
     finally:
         n1.stop()
         n2.stop()
예제 #4
0
 def test_receive_chain_accept(self):
     n1 = None
     try:
         blk = {
             'timestamp': '2017-01-02T03:04:05.000123Z',
             'prev_hash': '1234',
             'data': {
                 'foo': 'bar'
             }
         }
         dct = {'blocks': [blk]}
         chain = Chain.from_dict(dct)
         node_id = 'blah'
         backend = MockFileBackend(chains={node_id: chain})
         n1 = Node.start(node_id=node_id, backend=backend)
         p1 = n1.proxy()
         chain2 = copy.deepcopy(chain)
         blk2 = {
             'timestamp': '2017-01-02T03:04:05.000123Z',
             'prev_hash': Block.from_dict(blk).hash,
             'data': {
                 'a': 'b'
             }
         }
         chain2.add_block(Block.from_dict(blk2))
         res = p1.receive_chain(chain2).get()
         self.assertEqual(res, ACCEPTED)
         self.assertEqual(p1.chain.get(), chain2)
     finally:
         n1.stop()
예제 #5
0
 def test_should_mine(self):
     n1 = None
     try:
         n1 = Node.start(node_id='1')
         p1 = n1.proxy()
         p1.pending_transactions = {
             i: i
             for i in xrange(Node.BLOCK_SIZE - 1)
         }
         self.assertFalse(p1.should_mine().get())
         p1.pending_transactions = {i: i for i in xrange(Node.BLOCK_SIZE)}
         self.assertTrue(p1.should_mine().get())
     finally:
         n1.stop()
예제 #6
0
 def test_chain(self):
     node = None
     try:
         node_id = 'aaa'
         blk = {
             'timestamp': '2017-01-02T03:04:05.000123Z',
             'prev_hash': '1234',
             'data': {
                 'foo': 'bar'
             }
         }
         dct = {'blocks': [blk]}
         chain = Chain.from_dict(dct)
         backend = MockFileBackend(chains={node_id: chain})
         node = Node.start(node_id=node_id, backend=backend)
         proxy = node.proxy()
         self.assertEqual(proxy.chain.get(), chain)
     finally:
         node.stop()
예제 #7
0
    def test_receive_chain_reject(self):
        n1 = None
        try:
            blk = {
                'timestamp': '2017-01-02T03:04:05.000123Z',
                'prev_hash': '1234',
                'data': {
                    'foo': 'bar'
                }
            }
            blk2 = {
                'timestamp': '2017-01-02T03:04:05.000123Z',
                'prev_hash': Block.from_dict(blk).hash,
                'data': {
                    'woo': 'hoo'
                }
            }
            dct = {'blocks': [blk, blk2]}
            chain = Chain.from_dict(dct)
            node_id = 'blah'
            backend = MockFileBackend(chains={node_id: chain})
            n1 = Node.start(node_id=node_id, backend=backend)
            p1 = n1.proxy()

            dct2 = {
                'blocks': [{
                    'timestamp': '2017-01-02T03:04:05.000123Z',
                    'prev_hash': 'abc',
                    'data': {
                        'x': 'y'
                    }
                }]
            }
            chain2 = Chain.from_dict(dct2)
            res = p1.receive_chain(chain2).get()
            self.assertEqual(res, REJECTED)
            self.assertEqual(p1.chain.get(), chain)
        finally:
            n1.stop()