def test_journal_transaction_block_missing_transactions(self):
        # Test missing transactions, should return list of missing
        # transactions
        minfo = {'__SIGNATURE__': 'Test', "BlockNum": 0}
        trans_block = TransactionBlock(minfo)
        (gossip, journal) = self._create_journal()
        node = gossip.LocalNode
        trans_block.sign_from_node(node)
        missing = trans_block.missing_transactions(journal)
        # No missing transactions
        self.assertEquals(missing, [])

        minfo = {'__SIGNATURE__': 'Test', '__NONCE__': time.time(),
                 'Dependencies': []}
        transaction = Transaction(minfo)
        transaction.sign_from_node(node)
        trans_block.TransactionIDs += [transaction.Identifier]
        missing = trans_block.missing_transactions(journal)
        # One missing transactions
        self.assertEquals(missing, [transaction.Identifier])

        journal.transaction_store[transaction.Identifier] = transaction
        missing = trans_block.missing_transactions(journal)
        # Back to no missing transactions
        self.assertEquals(missing, [])
    def test_journal_transaction_block_update_block_weight(self):
        # Test block update weight
        minfo = {'__SIGNATURE__': 'Test', "BlockNum": 0}
        transBlock = TransactionBlock(minfo)
        transBlock.Status = tbStatus.valid
        signingkey = SigObj.generate_signing_key()
        ident = SigObj.generate_identifier(signingkey)
        node = Node(identifier=ident, signingkey=signingkey,
                    address=("localhost", 10003))
        # Takes a journal, create a temporary directory to use with the journal
        path = tempfile.mkdtemp()
        journal = Journal(node, DataDirectory=path)
        transBlock.sign_from_node(node)
        transBlock.update_block_weight(journal)
        # No transactions
        self.assertEquals(transBlock.TransactionDepth, 0)

        minfo = {'__SIGNATURE__': 'Test', '__NONCE__': time.time(),
                 'Dependencies': []}
        transaction = Transaction(minfo)
        transaction.sign_from_node(node)
        transBlock.TransactionIDs += [transaction.Identifier]
        transBlock.update_block_weight(journal)
        # One transaction
        self.assertEquals(transBlock.TransactionDepth, 1)

        minfo = {'__SIGNATURE__': 'Test', "BlockNum": 1,
                 'PreviousBlockID': transBlock.Identifier}
        newTransBlock = TransactionBlock(minfo)
        newTransBlock.Status = tbStatus.valid
        journal.BlockStore[transBlock.Identifier] = transBlock
        newTransBlock.update_block_weight(journal)
        # Get depth from previous block
        self.assertEquals(newTransBlock.TransactionDepth, 1)
    def test_journal_transaction_block_update_block_weight(self):
        # Test block update weight
        minfo = {'__SIGNATURE__': 'Test', "BlockNum": 0}
        trans_block = TransactionBlock(minfo)
        trans_block.Status = tbStatus.valid

        (gossip, journal) = self._create_journal()
        node = gossip.LocalNode
        trans_block.sign_from_node(gossip.LocalNode)
        trans_block.update_block_weight(journal)
        # No transactions
        self.assertEquals(trans_block.TransactionDepth, 0)

        minfo = {'__SIGNATURE__': 'Test', '__NONCE__': time.time(),
                 'Dependencies': []}
        transaction = Transaction(minfo)
        transaction.sign_from_node(node)
        trans_block.TransactionIDs += [transaction.Identifier]
        trans_block.update_block_weight(journal)
        # One transaction
        self.assertEquals(trans_block.TransactionDepth, 1)

        minfo = {'__SIGNATURE__': 'Test', "BlockNum": 1,
                 'PreviousBlockID': trans_block.Identifier}
        new_trans_block = TransactionBlock(minfo)
        new_trans_block.Status = tbStatus.valid
        journal.block_store[trans_block.Identifier] = trans_block
        new_trans_block.update_block_weight(journal)
        # Get depth from previous block
        self.assertEquals(new_trans_block.TransactionDepth, 1)
    def test_journal_transaction_block_missing_transactions(self):
        # Test missing transactions, should return list of missing transactions
        minfo = {'__SIGNATURE__': 'Test', "BlockNum": 0}
        transBlock = TransactionBlock(minfo)
        signingkey = SigObj.generate_signing_key()
        ident = SigObj.generate_identifier(signingkey)
        node = Node(identifier=ident, signingkey=signingkey,
                    address=("localhost", 10002))
        path = tempfile.mkdtemp()
        # Takes a journal, create a temporary directory to use with the journal
        journal = Journal(node, DataDirectory=path)
        transBlock.sign_from_node(node)
        missing = transBlock.missing_transactions(journal)
        # No missing transactions
        self.assertEquals(missing, [])

        minfo = {'__SIGNATURE__': 'Test', '__NONCE__': time.time(),
                 'Dependencies': []}
        transaction = Transaction(minfo)
        transaction.sign_from_node(node)
        transBlock.TransactionIDs += [transaction.Identifier]
        missing = transBlock.missing_transactions(journal)
        # One missing transactions
        self.assertEquals(missing, [transaction.Identifier])

        journal.TransactionStore[transaction.Identifier] = transaction
        missing = transBlock.missing_transactions(journal)
        # Back to no missing transactions
        self.assertEquals(missing, [])
    def test_journal_transaction_block_update_block_weight(self):
        # Test block update weight
        minfo = {'__SIGNATURE__': 'Test', "BlockNum": 0}
        trans_block = TransactionBlock(minfo)
        trans_block.Status = tbStatus.valid

        (gossip, journal) = self._create_journal()
        node = gossip.LocalNode
        trans_block.sign_from_node(gossip.LocalNode)
        trans_block.update_block_weight(journal)
        # No transactions
        self.assertEquals(trans_block.TransactionDepth, 0)

        minfo = {'__SIGNATURE__': 'Test', '__NONCE__': time.time(),
                 'Dependencies': []}
        transaction = Transaction(minfo)
        transaction.sign_from_node(node)
        trans_block.TransactionIDs += [transaction.Identifier]
        trans_block.update_block_weight(journal)
        # One transaction
        self.assertEquals(trans_block.TransactionDepth, 1)

        minfo = {'__SIGNATURE__': 'Test', "BlockNum": 1,
                 'PreviousBlockID': trans_block.Identifier}
        new_trans_block = TransactionBlock(minfo)
        new_trans_block.Status = tbStatus.valid
        journal.block_store[trans_block.Identifier] = trans_block
        new_trans_block.update_block_weight(journal)
        # Get depth from previous block
        self.assertEquals(new_trans_block.TransactionDepth, 1)
    def test_journal_transaction_block_missing_transactions(self):
        # Test missing transactions, should return list of missing
        # transactions
        minfo = {'__SIGNATURE__': 'Test', "BlockNum": 0}
        trans_block = TransactionBlock(minfo)
        (gossip, journal) = self._create_journal()
        node = gossip.LocalNode
        trans_block.sign_from_node(node)
        missing = trans_block.missing_transactions(journal)
        # No missing transactions
        self.assertEquals(missing, [])

        minfo = {'__SIGNATURE__': 'Test', '__NONCE__': time.time(),
                 'Dependencies': []}
        transaction = Transaction(minfo)
        transaction.sign_from_node(node)
        trans_block.TransactionIDs += [transaction.Identifier]
        missing = trans_block.missing_transactions(journal)
        # One missing transactions
        self.assertEquals(missing, [transaction.Identifier])

        journal.transaction_store[transaction.Identifier] = transaction
        missing = trans_block.missing_transactions(journal)
        # Back to no missing transactions
        self.assertEquals(missing, [])
    def test_journal_transaction_block_missing_transactions(self):
        # Test missing transactions, should return list of missing transactions
        minfo = {'__SIGNATURE__': 'Test', "BlockNum": 0}
        transBlock = TransactionBlock(minfo)
        signingkey = SigObj.generate_signing_key()
        ident = SigObj.generate_identifier(signingkey)
        node = Node(identifier=ident,
                    signingkey=signingkey,
                    address=("localhost", 10002))
        path = tempfile.mkdtemp()
        # Takes a journal, create a temporary directory to use with the journal
        journal = Journal(node, DataDirectory=path)
        transBlock.sign_from_node(node)
        missing = transBlock.missing_transactions(journal)
        # No missing transactions
        self.assertEquals(missing, [])

        minfo = {
            '__SIGNATURE__': 'Test',
            '__NONCE__': time.time(),
            'Dependencies': []
        }
        transaction = Transaction(minfo)
        transaction.sign_from_node(node)
        transBlock.TransactionIDs += [transaction.Identifier]
        missing = transBlock.missing_transactions(journal)
        # One missing transactions
        self.assertEquals(missing, [transaction.Identifier])

        journal.TransactionStore[transaction.Identifier] = transaction
        missing = transBlock.missing_transactions(journal)
        # Back to no missing transactions
        self.assertEquals(missing, [])
Ejemplo n.º 8
0
 def test_journal_transaction_add_to_pending(self):
     # Test transaction add_to_pending, should always return true
     minfo = {
         '__SIGNATURE__': 'Test',
         '__NONCE__': time.time(),
         'Dependencies': []
     }
     transaction = Transaction(minfo)
     self.assertTrue(transaction.add_to_pending())
Ejemplo n.º 9
0
 def test_journal_transaction_apply(self):
     # Test Transaction apply, Does nothing at this point
     minfo = {
         '__SIGNATURE__': 'Test',
         '__NONCE__': time.time(),
         'Dependencies': []
     }
     transaction = Transaction(minfo)
     transaction.apply("store")
 def test_journal_transaction_build_message(self):
     # Test that build_message returns a message of MessageType
     # TransactionMessage and that msg is linked to the transaction
     minfo = {'__SIGNATURE__': 'Test', '__NONCE__': time.time(),
              'Dependencies': []}
     transaction = Transaction(minfo)
     msg = transaction.build_message()
     self.assertEquals(msg.MessageType,
                       "/journal.messages.TransactionMessage/Transaction")
     self.assertEquals(msg.Transaction, transaction)
 def test_journal_transaction_build_message(self):
     # Test that build_message returns a message of MessageType
     # TransactionMessage and that msg is linked to the transaction
     minfo = {'__SIGNATURE__': 'Test', '__NONCE__': time.time(),
              'Dependencies': []}
     transaction = Transaction(minfo)
     msg = transaction.build_message()
     self.assertEquals(msg.MessageType,
                       "/journal.messages.TransactionMessage/Transaction")
     self.assertEquals(msg.Transaction, transaction)
 def test_journal_transaction_dump(self):
     # Test that transactions dump the correct info
     minfo = {'__SIGNATURE__': 'Test', '__NONCE__': time.time(),
              'Dependencies': []}
     time.sleep(.05)
     transaction = Transaction(minfo)
     tDic = transaction.dump()
     self.assertLess(tDic["Nonce"], time.time())
     self.assertEquals(tDic["Dependencies"], [])
     self.assertEquals(tDic["TransactionType"], '/Transaction')
Ejemplo n.º 13
0
 def test_journal_transaction_dump(self):
     # Test that transactions dump the correct info
     now = time.time()
     minfo = {'__SIGNATURE__': 'Test', '__NONCE__': now, 'Dependencies': []}
     transaction = Transaction(minfo)
     time.sleep(0.5)
     t_dict = transaction.dump()
     new = time.time()
     self.assertLess(t_dict["Nonce"], new)
     self.assertEqual(t_dict["Dependencies"], [])
     self.assertEqual(t_dict["TransactionType"], '/Transaction')
 def test_journal_transaction_dump(self):
     # Test that transactions dump the correct info
     now = time.time()
     minfo = {'__SIGNATURE__': 'Test', '__NONCE__': now,
              'Dependencies': []}
     transaction = Transaction(minfo)
     time.sleep(0.5)
     t_dict = transaction.dump()
     new = time.time()
     self.assertLess(t_dict["Nonce"], new)
     self.assertEquals(t_dict["Dependencies"], [])
     self.assertEquals(t_dict["TransactionType"], '/Transaction')
Ejemplo n.º 15
0
    def test_web_api_transaction(self):
        # Test _handletxnrequest
        local_node = self._create_node(8802)
        gossip = Gossip(local_node)
        path = tempfile.mkdtemp()
        # Setup ledger and RootPage
        ledger = Journal(gossip, data_directory=path, genesis_ledger=True)
        validator = TestValidator(ledger)
        transaction_page = TransactionPage(validator)

        # TransactionBlock to the ledger
        txns = []
        i = 0
        while i < 10:
            txn = Transaction()
            txn.sign_from_node(local_node)
            txns += [txn.Identifier]
            ledger.TransactionStore[txn.Identifier] = txn
            i += 1
        trans_block = self._create_tblock(local_node, 0, common.NullIdentifier,
                                          txns)
        ledger.BlockStore[trans_block.Identifier] = trans_block
        ledger.handle_advance(trans_block)
        # GET /transaction
        request = self._create_get_request("/transaction/", {})
        r = transaction_page.do_get(request)
        print request.path, r
        r = r[1:-1].replace('"', "")
        r = r.replace(" ", "").split(",")
        self.assertEquals(r, txns)
        # GET /transaction?blockcount=1
        request = self._create_get_request("/transaction", {"blockcount": [1]})
        r = transaction_page.do_get(request)
        r = r[1:-1].replace('"', "")
        r = r.replace(" ", "").split(",")
        self.assertEquals(r, txns)
        # Returns None if testing
        # GET /transaction/{TransactionID}
        request = self._create_get_request("/transaction/" + txns[1], {})
        txn = ledger.TransactionStore[txns[1]]
        tinfo = txn.dump()
        tinfo['Identifier'] = txn.Identifier
        tinfo['Status'] = txn.Status
        if txn.Status == tStatus.committed:
            tinfo['InBlock'] = txn.InBlock
        self.assertEquals(yaml.load(transaction_page.do_get(request)), tinfo)
        # GET /transaction/{TransactionID{}/InBlock
        request = self._create_get_request("/transaction/" + txns[1] +
                                           "/InBlock", {})
        self.assertEquals(transaction_page.do_get(request).replace('"', ""),
                          txn.InBlock)
Ejemplo n.º 16
0
    def test_web_api_transaction(self):
        # Test _handletxnrequest
        LocalNode = self._create_node(8802)
        path = tempfile.mkdtemp()
        # Setup ledger and RootPage
        ledger = Journal(LocalNode, DataDirectory=path, GenesisLedger=True)
        validator = TestValidator(ledger)
        root = RootPage(validator)

        # TransactionBlock to the ledger
        txns = []
        i = 0
        while i < 10:
            txn = Transaction()
            txn.sign_from_node(LocalNode)
            txns += [txn.Identifier]
            ledger.TransactionStore[txn.Identifier] = txn
            i += 1
        transBlock = self._create_tblock(LocalNode, 0, common.NullIdentifier,
                                         txns)
        ledger.BlockStore[transBlock.Identifier] = transBlock
        ledger.handle_advance(transBlock)
        request = self._create_get_request("/transaction", {})
        # GET /transaction
        request = self._create_get_request("/transaction", {})
        r = root.do_get(request)
        r = r[1:-1].replace('"', "")
        r = r.replace(" ", "").split(",")
        self.assertEquals(r, txns)
        # GET /transaction?blockcount=1
        request = self._create_get_request("/transaction", {"blockcount": [1]})
        r = root.do_get(request)
        r = r[1:-1].replace('"', "")
        r = r.replace(" ", "").split(",")
        self.assertEquals(r, txns)
        # Returns None if testing
        # GET /transaction/{TransactionID}
        request = self._create_get_request("/transaction/" + txns[1], {})
        txn = ledger.TransactionStore[txns[1]]
        tinfo = txn.dump()
        tinfo['Identifier'] = txn.Identifier
        tinfo['Status'] = txn.Status
        if txn.Status == tStatus.committed:
            tinfo['InBlock'] = txn.InBlock
        self.assertEquals(yaml.load(root.do_get(request)), tinfo)
        # GET /transaction/{TransactionID{}/InBlock
        request = self._create_get_request("/transaction/" + txns[1] +
                                           "/InBlock", {})
        self.assertEquals(root.do_get(request).replace('"', ""),
                          txn.InBlock)
Ejemplo n.º 17
0
    def test_web_api_transaction(self):
        validator = self._create_validator()
        gossip = validator.gossip
        journal = validator.journal
        transaction_page = TransactionPage(validator)

        # TransactionBlock to the journal
        txns = []
        i = 0
        while i < 10:
            txn = Transaction()
            txn.sign_from_node(gossip.LocalNode)
            txns += [txn.Identifier]
            journal.transaction_store[txn.Identifier] = txn
            i += 1
        trans_block = self._create_tblock(gossip.LocalNode,
                                          0,
                                          common.NullIdentifier,
                                          txns)
        journal.block_store[trans_block.Identifier] = trans_block
        journal.handle_advance(trans_block)
        # GET /transaction
        request = self._create_get_request("/transaction/", {})
        r = transaction_page.do_get(request)
        print request.path, r
        r = r[1:-1].replace('"', "")
        r = r.replace(" ", "").split(",")
        self.assertEquals(r, txns)
        # GET /transaction?blockcount=1
        request = self._create_get_request("/transaction", {"blockcount": [1]})
        r = transaction_page.do_get(request)
        r = r[1:-1].replace('"', "")
        r = r.replace(" ", "").split(",")
        self.assertEquals(r, txns)
        # Returns None if testing
        # GET /transaction/{TransactionID}
        request = self._create_get_request("/transaction/" + txns[1], {})
        txn = journal.transaction_store[txns[1]]
        tinfo = txn.dump()
        tinfo['Identifier'] = txn.Identifier
        tinfo['Status'] = txn.Status
        if txn.Status == tStatus.committed:
            tinfo['InBlock'] = txn.InBlock
        self.assertEquals(yaml.load(transaction_page.do_get(request)), tinfo)
        # GET /transaction/{TransactionID{}/InBlock
        request = self._create_get_request("/transaction/" + txns[1] +
                                           "/InBlock", {})
        self.assertEquals(transaction_page.do_get(request).replace('"', ""),
                          txn.InBlock)
Ejemplo n.º 18
0
    def test_web_api_transaction(self):
        validator = self._create_validator()
        gossip = validator.gossip
        journal = validator.journal
        transaction_page = TransactionPage(validator)

        # TransactionBlock to the journal
        txns = []
        i = 0
        while i < 10:
            txn = Transaction()
            txn.sign_from_node(gossip.LocalNode)
            txns += [txn.Identifier]
            journal.transaction_store[txn.Identifier] = txn
            i += 1
        trans_block = self._create_tblock(gossip.LocalNode, 0,
                                          common.NullIdentifier, txns)
        journal.block_store[trans_block.Identifier] = trans_block
        journal.handle_advance(trans_block)
        # GET /transaction
        request = self._create_get_request("/transaction/", {})
        r = transaction_page.do_get(request)
        print request.path, r
        r = r[1:-1].replace('"', "")
        r = r.replace(" ", "").split(",")
        self.assertEquals(r, txns)
        # GET /transaction?blockcount=1
        request = self._create_get_request("/transaction", {"blockcount": [1]})
        r = transaction_page.do_get(request)
        r = r[1:-1].replace('"', "")
        r = r.replace(" ", "").split(",")
        self.assertEquals(r, txns)
        # Returns None if testing
        # GET /transaction/{TransactionID}
        request = self._create_get_request("/transaction/" + txns[1], {})
        txn = journal.transaction_store[txns[1]]
        tinfo = txn.dump()
        tinfo['Identifier'] = txn.Identifier
        tinfo['Status'] = txn.Status
        if txn.Status == tStatus.committed:
            tinfo['InBlock'] = txn.InBlock
        self.assertEquals(yaml.load(transaction_page.do_get(request)), tinfo)
        # GET /transaction/{TransactionID{}/InBlock
        request = self._create_get_request(
            "/transaction/" + txns[1] + "/InBlock", {})
        self.assertEquals(
            transaction_page.do_get(request).replace('"', ""), txn.InBlock)
 def test_journal_transaction_init(self):
     # Test normal init of a transaction
     minfo = {'__SIGNATURE__': 'Test', '__NONCE__': time.time(),
              'Dependencies': []}
     transaction = Transaction(minfo)
     self.assertEquals(transaction.Status, tStatus.unknown)
     self.assertFalse(transaction.InBlock)
     self.assertEquals(transaction.Dependencies, [])
Ejemplo n.º 20
0
 def test_journal_transaction_str(self):
     # Test str function for transaction
     minfo = {
         '__SIGNATURE__': 'Test',
         '__NONCE__': time.time(),
         'Dependencies': []
     }
     transaction = Transaction(minfo)
     self.assertEqual(str(transaction), '/Transaction')
    def test_is_valid_pub_key(self):
        pubkey = pybitcointools.privkey_to_pubkey("5KQ4iQQGgbQX9MmfiPUwwHBL1R"
                                                  "GPa86NwFbqrWoodjuzruqFVDd")
        pub = pybitcointools.encode_pubkey(pubkey, "hex")
        minfo = {'Nonce': 100, 'public_key': pub,
                 'TransactionType': '/Transaction', 'Dependencies': []}
        sig = pybitcointools.ecdsa_sign(
            signed_object.dict2cbor(minfo),
            "5KQ4iQQGgbQX9MmfiPUwwHBL1RGPa86NwFbqrWoodjuzruqFVDd"
        )
        # Create valid transaction
        minfo["Signature"] = sig
        temp = Transaction(minfo)
        self.assertTrue(temp.is_valid("unused"))

        # Change transaction after it was signed
        minfo["Nonce"] = time.time()
        temp = Transaction(minfo)
        self.assertFalse(temp.is_valid("unused"))
    def test_journal_transaction_block_update_block_weight(self):
        # Test block update weight
        minfo = {'__SIGNATURE__': 'Test', "BlockNum": 0}
        transBlock = TransactionBlock(minfo)
        transBlock.Status = tbStatus.valid
        signingkey = SigObj.generate_signing_key()
        ident = SigObj.generate_identifier(signingkey)
        node = Node(identifier=ident,
                    signingkey=signingkey,
                    address=("localhost", 10003))
        # Takes a journal, create a temporary directory to use with the journal
        path = tempfile.mkdtemp()
        journal = Journal(node, DataDirectory=path)
        transBlock.sign_from_node(node)
        transBlock.update_block_weight(journal)
        # No transactions
        self.assertEquals(transBlock.TransactionDepth, 0)

        minfo = {
            '__SIGNATURE__': 'Test',
            '__NONCE__': time.time(),
            'Dependencies': []
        }
        transaction = Transaction(minfo)
        transaction.sign_from_node(node)
        transBlock.TransactionIDs += [transaction.Identifier]
        transBlock.update_block_weight(journal)
        # One transaction
        self.assertEquals(transBlock.TransactionDepth, 1)

        minfo = {
            '__SIGNATURE__': 'Test',
            "BlockNum": 1,
            'PreviousBlockID': transBlock.Identifier
        }
        newTransBlock = TransactionBlock(minfo)
        newTransBlock.Status = tbStatus.valid
        journal.BlockStore[transBlock.Identifier] = transBlock
        newTransBlock.update_block_weight(journal)
        # Get depth from previous block
        self.assertEquals(newTransBlock.TransactionDepth, 1)
Ejemplo n.º 23
0
    def test_is_valid_pub_key(self):
        pubkey = signing.generate_pubkey("5KQ4iQQGgbQX9MmfiPUwwHBL1R"
                                         "GPa86NwFbqrWoodjuzruqFVDd")
        pub = signing.encode_pubkey(pubkey, "hex")
        minfo = {
            'Nonce': 100,
            'PublicKey': pub,
            'TransactionType': '/Transaction',
            'Dependencies': []
        }
        sig = signing.sign(
            signed_object.dict2cbor(minfo),
            "5KQ4iQQGgbQX9MmfiPUwwHBL1RGPa86NwFbqrWoodjuzruqFVDd")
        # Create valid transaction
        minfo["Signature"] = sig
        temp = Transaction(minfo)
        self.assertTrue(temp.is_valid("unused"))

        # Change transaction after it was signed
        minfo["Nonce"] = time.time()
        temp = Transaction(minfo)
        self.assertFalse(temp.is_valid("unused"))
 def test_journal_transaction_add_to_pending(self):
     # Test transaction add_to_pending, should always return true
     minfo = {'__SIGNATURE__': 'Test', '__NONCE__': time.time(),
              'Dependencies': []}
     transaction = Transaction(minfo)
     self.assertTrue(transaction.add_to_pending())
 def test_journal_transaction_apply(self):
     # Test Transaction apply, Does nothing at this point
     minfo = {'__SIGNATURE__': 'Test', '__NONCE__': time.time(),
              'Dependencies': []}
     transaction = Transaction(minfo)
     transaction.apply("store")