示例#1
0
def MakeBlockchainWithBlocks(port):

    datadir = _lib.CreateTestFolder()

    r = blocksbasic.PrepareBlockchain(datadir, port)
    address = r[0]

    # create another 3 addresses
    address2 = transactions.CreateWallet(datadir)
    address3 = transactions.CreateWallet(datadir)

    _lib.StartTestGroup("Do _transfers")

    transactions.GetUnapprovedTransactionsEmpty(datadir)

    amount1 = '1'
    amount2 = '2'
    amount3 = '3'

    txid1 = _transfers.Send(datadir, address, address2, amount1)
    txlist = transactions.GetUnapprovedTransactions(datadir)
    _lib.FatalAssert(len(txlist) == 1, "Should be 1 unapproved transaction")

    txid2 = _transfers.Send(datadir, address, address3, amount2)

    txlist = transactions.GetUnapprovedTransactions(datadir)
    _lib.FatalAssert(len(txlist) == 2, "Should be 2 unapproved transaction")
    txid3 = _transfers.Send(datadir, address, address3, amount3)

    # node needs some time to make a block, so transaction still will be in list of unapproved
    txlist = transactions.GetUnapprovedTransactions(datadir)

    _lib.FatalAssert(len(txlist) == 3, "Should be 3 unapproved transaction")

    txid4 = _transfers.Send(datadir, address3, address2, amount1)

    # node needs some time to make a block, so transaction still will be in list of unapproved
    txlist = transactions.GetUnapprovedTransactions(datadir)

    _lib.FatalAssert(len(txlist) == 4, "Should be 4 unapproved transaction")

    if txid1 not in txlist.keys():
        _lib.Fatal("Transaction 1 is not in the list of transactions")

    if txid2 not in txlist.keys():
        _lib.Fatal("Transaction 2 is not in the list of transactions")

    if txid3 not in txlist.keys():
        _lib.Fatal("Transaction 3 is not in the list of transactions")

    if txid4 not in txlist.keys():
        _lib.Fatal("Transaction 4 is not in the list of transactions")

    _lib.FatalAssertFloat(amount1, txlist[txid1][2],
                          "Amount of transaction 1 is wrong")

    _lib.FatalAssertFloat(amount2, txlist[txid2][2],
                          "Amount of transaction 2 is wrong")

    _lib.FatalAssertFloat(amount3, txlist[txid3][2],
                          "Amount of transaction 3 is wrong")

    _lib.FatalAssertFloat(amount1, txlist[txid4][2],
                          "Amount of transaction 4 is wrong")

    blockchash = blocksbasic.MintBlock(datadir, address)

    transactions.GetUnapprovedTransactionsEmpty(datadir)

    blockshashes = _blocks.GetBlocks(datadir)

    _lib.FatalAssert(
        len(blockshashes) == 2, "Should be 2 blocks in blockchain")

    _lib.StartTestGroup("Send 3 transactions")

    microamount = 0.01

    txid1 = _transfers.Send(datadir, address, address2, microamount)
    txid2 = _transfers.Send(datadir, address2, address3, microamount)
    txid3 = _transfers.Send(datadir, address3, address, microamount)

    txlist = transactions.GetUnapprovedTransactions(datadir)

    _lib.FatalAssert(len(txlist) == 3, "Should be 3 unapproved transaction")

    if txid1 not in txlist.keys():
        _lib.Fatal(
            "Transaction 1 is not in the list of transactions after iteration "
            + str(i))

    if txid2 not in txlist.keys():
        _lib.Fatal(
            "Transaction 2 is not in the list of transactions after iteration "
            + str(i))

    if txid3 not in txlist.keys():
        _lib.Fatal(
            "Transaction 3 is not in the list of transactions after iteration "
            + str(i))

    blockchash = blocksbasic.MintBlock(datadir, address)
    transactions.GetUnapprovedTransactionsEmpty(datadir)

    blockshashes = _blocks.GetBlocks(datadir)

    _lib.FatalAssert(
        len(blockshashes) == 3, "Should be 3 blocks in blockchain")

    _lib.StartTestGroup("Send 3 transactions. Random value")

    microamountmax = 0.01
    microamountmin = 0.0095

    a1 = round(random.uniform(microamountmin, microamountmax), 8)
    a2 = round(random.uniform(microamountmin, microamountmax), 8)
    a3 = round(random.uniform(microamountmin, microamountmax), 8)
    txid1 = _transfers.Send(datadir, address, address2, a1)
    txid2 = _transfers.Send(datadir, address2, address3, a2)
    txid3 = _transfers.Send(datadir, address3, address, a3)

    txlist = transactions.GetUnapprovedTransactions(datadir)

    _lib.FatalAssert(len(txlist) == 3, "Should be 3 unapproved transaction")

    if txid1 not in txlist.keys():
        _lib.Fatal(
            "Transaction 1 is not in the list of transactions after iteration "
            + str(i))

    if txid2 not in txlist.keys():
        _lib.Fatal(
            "Transaction 2 is not in the list of transactions after iteration "
            + str(i))

    if txid3 not in txlist.keys():
        _lib.Fatal(
            "Transaction 3 is not in the list of transactions after iteration "
            + str(i))

    blockchash = blocksbasic.MintBlock(datadir, address)
    transactions.GetUnapprovedTransactionsEmpty(datadir)

    blockshashes = _blocks.GetBlocks(datadir)

    _lib.FatalAssert(
        len(blockshashes) == 4, "Should be 4 blocks in blockchain")

    return [datadir, address, address2, address3]
示例#2
0
def test(testfilter):
    global datadir1
    global datadir2
    global datadir3

    _lib.StartTestGroup("Manage nodes list")

    _lib.CleanTestFolders()
    datadir1 = _lib.CreateTestFolder('_1_')
    datadir2 = _lib.CreateTestFolder('_2_')

    _lib.StartTestGroup("Create blockchain and run node 1")
    r = blocksbasic.PrepareBlockchain(datadir1, '30000')
    address = r[0]

    startnode.StartNode(datadir1, address, '30000', "Server 1")

    address2 = initblockchain.ImportBockchain(datadir2, "localhost", '30000')

    #RemoveAllNodes(datadir1)
    nodes = GetNodes(datadir1)
    _lib.FatalAssert(len(nodes) == 0, "Should be 0 nodes in output")

    AddNode(datadir1, "localhost", '30001')

    nodes = GetNodes(datadir1)
    _lib.FatalAssert(len(nodes) == 1, "Should be 1 nodes in output")

    RemoveNode(datadir1, "localhost", '30001')

    nodes = GetNodes(datadir1)
    _lib.FatalAssert(len(nodes) == 0, "Should be 0 nodes in output")

    startnode.StartNode(datadir2, address2, '30001', "Server 2")

    #RemoveAllNodes(datadir2)

    #AddNode(datadir1, "localhost",'30001')

    nodes = GetNodes(datadir1)
    _lib.FatalAssert(len(nodes) == 1, "Should be 1 nodes in output")

    startnode.StopNode(datadir2, "Server 2")

    startnode.StartNode(datadir2, address2, '30001', "Server 2")

    nodes = GetNodes(datadir1)

    _lib.FatalAssert(len(nodes) == 1, "Should be 1 nodes in output")
    _lib.FatalAssert(
        nodes.keys()[0] == "localhost:30001"
        or nodes.keys()[0] == "127.0.0.1:30001", "Wrong node in the list")

    # check transactions work fine between nodes
    _transfers.Send(datadir1, address, address2, '3')

    txlist = transactions.GetUnapprovedTransactions(datadir1)

    _lib.FatalAssert(len(txlist) == 1, "Should be 1 unapproved transaction")

    blocks = _blocks.WaitBlocks(datadir1, 2)

    # send another 2 TX to make a block
    tx = _transfers.Send(datadir1, address, address2, '0.01')

    tx = _transfers.Send(datadir1, address, address2, '0.01')

    blocks = _blocks.WaitBlocks(datadir1, 3)
    time.sleep(2)

    tx = txid1 = _transfers.Send(datadir1, address, address2, '1')
    time.sleep(1)

    txlist = transactions.GetUnapprovedTransactions(datadir1)

    _lib.FatalAssert(
        len(txlist) == 1,
        "Should be 1 unapproved transaction. Got " + str(len(txlist)))

    time.sleep(3)
    # and now get transactions from second node
    txlist = _transfers.WaitUnapprovedTransactions(datadir2, 1)

    _lib.FatalAssert(
        len(txlist) == 1,
        "Should be 1 unapproved transaction on second node. Got " +
        str(len(txlist)) + " " + str(txlist))
    #print txid1
    #print txlist
    if txid1 not in txlist.keys():
        _lib.Fatal(
            "Transaction 1 is not in the list of transactions on second node")

    # start one more node
    datadir3 = _lib.CreateTestFolder('_3_')
    address3 = initblockchain.ImportBockchain(datadir3, "localhost", '30000')

    startnode.StartNode(datadir3, address3, '30002', "Server 3")

    #RemoveAllNodes(datadir3)

    #AddNode(datadir3, "localhost",'30001')

    time.sleep(2)  # wait while nodes exchange addresses

    nodes = GetNodes(datadir1)
    _lib.FatalAssert(len(nodes) == 2, "Should be 2 nodes in output of 1")

    nodes = GetNodes(datadir2)

    _lib.FatalAssert(len(nodes) == 2, "Should be 2 nodes in output of 2")

    nodes = GetNodes(datadir3)
    _lib.FatalAssert(len(nodes) == 2, "Should be 2 nodes in output of 3")

    txid1 = _transfers.Send(datadir1, address, address3, '4')

    # unapproved TX is pulled from node 1 on start
    txlist3 = transactions.GetUnapprovedTransactions(datadir3)

    _lib.FatalAssert(
        len(txlist3) == 1, "Should be 1 unapproved transactions on 3")

    time.sleep(3)  # we need to give a chance to sync all

    txlist1 = transactions.GetUnapprovedTransactions(datadir1)
    txlist2 = transactions.GetUnapprovedTransactions(datadir2)

    _lib.FatalAssert(
        len(txlist1) == 2, "Should be 2 unapproved transactions on 1")
    _lib.FatalAssert(
        len(txlist2) == 2, "Should be 2 unapproved transactions on 2")

    if txid1 not in txlist1.keys():
        _lib.Fatal(
            "Transaction 2 is not in the list of transactions on node 1")

    if txid1 not in txlist2.keys():
        _lib.Fatal(
            "Transaction 2 is not in the list of transactions on node 2")

    # send one more TX. Block must be created
    txid3 = _transfers.Send(datadir1, address, address2, '1')

    blocks = _blocks.WaitBlocks(datadir3, 4)
    blocks = _blocks.WaitBlocks(datadir2, 4)
    blocks = _blocks.WaitBlocks(datadir1, 4)
    time.sleep(1)

    transactions.GetUnapprovedTransactionsEmpty(datadir1)
    transactions.GetUnapprovedTransactionsEmpty(datadir2)
    transactions.GetUnapprovedTransactionsEmpty(datadir3)

    # check if a block is present on all nodes. it must be 2 block on every node
    blockshashes = _blocks.GetBlocks(datadir1)

    _lib.FatalAssert(
        len(blockshashes) == 4, "Should be 4 blocks in blockchain on 1")

    blockshashes = _blocks.GetBlocks(datadir2)
    _lib.FatalAssert(
        len(blockshashes) == 4, "Should be 4 blocks in blockchain on 2")

    blockshashes = _blocks.GetBlocks(datadir3)
    _lib.FatalAssert(
        len(blockshashes) == 4, "Should be 4 blocks in blockchain on 3")

    startnode.StopNode(datadir1, "Server 1")
    startnode.StopNode(datadir2, "Server 2")
    startnode.StopNode(datadir3, "Server 3")

    #_lib.RemoveTestFolder(datadir1)
    #_lib.RemoveTestFolder(datadir2)

    datadir1 = ""
    datadir2 = ""
    datadir3 = ""

    _lib.EndTestGroupSuccess()
示例#3
0
def test(testfilter):
    global datadir

    nodeport = '30000'

    _lib.CleanTestFolders()
    _lib.StartTestGroup("Init Blockchain")

    datadir_tmp = _lib.CreateTestFolder()

    r = blocksbasic.PrepareBlockchain(datadir_tmp, nodeport)
    mainaddress = r[0]

    startnode.StartNode(datadir_tmp, mainaddress, nodeport)
    datadir = datadir_tmp

    walletdatadir = _lib.CreateTestFolder("wallet")

    #create 100 wallets
    for i in range(1, 101):
        _wallet.CreateWallet(walletdatadir)

    addresses = _wallet.GetWallets(walletdatadir)

    #send first TX
    balances = _transfers.GetGroupBalance(datadir)

    _transfers.Send(datadir, mainaddress, addresses[0],
                    balances[mainaddress][0])

    _blocks.WaitBlocks(datadir, 2)

    blocks = _blocks.GetBlocksExt(datadir)

    _lib.FatalAssert(len(blocks) == 2, "2 blocks are expected")

    initialbalance = _wallet.GetBalanceWallet(walletdatadir, addresses[0],
                                              "localhost", nodeport)

    _lib.FatalAssert(
        initialbalance[0] == balances[mainaddress][0],
        "Balance of the first wallet should be same as posted to it")

    _lib.StartTestGroup("Do transactions")

    for i in range(1, 100):
        _lib.StartTestGroup("Iteration " + str(i))

        addresses = _wallet.GetGroupBalanceWallet(walletdatadir, "localhost",
                                                  nodeport)

        for address in addresses.keys():
            bal = addresses[address][0]

            if bal <= 0:
                continue

            to = random.choice(addresses.keys())

            amount = "%.8f" % round(bal / 2, 8)

            tx = _wallet.Send(walletdatadir, address, to, amount, "localhost",
                              nodeport)

        blocks = _blocks.GetBlocksExt(datadir)
        print "\t\tNumer of blocks %d" % (len(blocks))

    startnode.StopNode(datadir)
    datadir = ""

    #_lib.RemoveTestFolder(datadir)
    _lib.EndTestGroupSuccess()