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]
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()
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()