package blockchain import ( "testing" ) func TestCreateBlockchain(t *testing.T) { if CreateBlockchain("minh") == nil { t.Errorf("failed to create a blockchain") } } func TestFindSpendableOutputs(t *testing.T) { requestAmount := 3 bc := CreateBlockchain("minh") accumulated, unspentOutputs := bc.FindSpendableOutputs("minh", requestAmount) if accumulated < DefaultCoinbaseValue { t.Error("Failed to find enough unspent ouptuts") } if len(unspentOutputs) <= 0 { t.Error("Failed to find enough unspent ouptuts") } } func TestFindUTXO(t *testing.T) { bc := CreateBlockchain("minh") utxo := bc.FindUTXO("minh") total := 0 for _, value := range utxo { total += value.Value if value.Address != "minh" { t.Error("FindUTXO failed.") } } if total != DefaultCoinbaseValue { t.Error("FindUTXO failed.") } } func TestAddNewTransferAmount(t *testing.T) { bc := CreateBlockchain("minh") bc = bc.AddNewTransferAmount("minh", "alok", 3) if bc == nil { t.Error("Failed to add new transfer to alok") } bc = bc.AddNewTransferAmount("minh", "rj", 100) if bc == nil { t.Error("Failed to add new transfer to rj") } bc = bc.AddNewTransferAmount("minh", "stephen", DefaultCoinbaseValue-102) if bc != nil { t.Error("minh should not have enough fun to make the transfer") } } func TestVerifyNewBlock(t *testing.T) { bc := CreateBlockchain("minh") bc = bc.AddNewTransferAmount("minh", "alok", 3) bc = bc.AddNewTransferAmount("minh", "rj", 100) tx := bc.NewUTXOTransaction("minh", "mark", 10) if tx == nil { t.Error("failed to create a new transaction.") } newBlock := NewBlock([]*Transaction{tx}, bc.blocks[len(bc.blocks)-1].Hash) if !bc.VerifyNewBlock(nil, newBlock) { t.Error("failed to add a new valid block.") } }