More blockchain testing
This commit is contained in:
parent
6253d10938
commit
5f49a659c3
@ -126,6 +126,7 @@ func (bc *BlockChain) FindCanonicalChain(blocks []*Block, commonBlockHash []byte
|
||||
log.Println("[CHAIN] We have found the common parent block, breaking")
|
||||
break
|
||||
}
|
||||
log.Println("Checking incoming blocks:")
|
||||
chainDifficulty.Add(chainDifficulty, bc.CalculateBlockTD(block))
|
||||
}
|
||||
|
||||
@ -139,13 +140,20 @@ func (bc *BlockChain) FindCanonicalChain(blocks []*Block, commonBlockHash []byte
|
||||
log.Println("[CHAIN] We have found the common parent block, breaking")
|
||||
break
|
||||
}
|
||||
log.Println("CHECKING BLOGK:", i)
|
||||
anOtherBlock := bc.GetBlock(block.PrevHash)
|
||||
if anOtherBlock == nil {
|
||||
// We do not want to count the genesis block for difficulty since that's not being sent
|
||||
log.Println("[CHAIN] At genesis block, breaking")
|
||||
break
|
||||
}
|
||||
log.Printf("CHECKING OUR OWN BLOCKS: %x", block.Hash())
|
||||
log.Printf("%x", bc.GenesisBlock().Hash())
|
||||
curChainDifficulty.Add(curChainDifficulty, bc.CalculateBlockTD(block))
|
||||
}
|
||||
|
||||
log.Println("[CHAIN] Current chain difficulty:", curChainDifficulty)
|
||||
if chainDifficulty.Cmp(curChainDifficulty) == 1 {
|
||||
log.Println("[CHAIN] The incoming Chain beat our asses, resetting")
|
||||
log.Printf("[CHAIN] The incoming Chain beat our asses, resetting to block: %x", commonBlockHash)
|
||||
bc.ResetTillBlockHash(commonBlockHash)
|
||||
return false
|
||||
} else {
|
||||
@ -165,6 +173,7 @@ func (bc *BlockChain) ResetTillBlockHash(hash []byte) error {
|
||||
// END TODO
|
||||
|
||||
bc.Ethereum.StateManager().PrepareDefault(returnTo)
|
||||
|
||||
err := ethutil.Config.Db.Delete(lastBlock.Hash())
|
||||
if err != nil {
|
||||
return err
|
||||
|
@ -78,15 +78,38 @@ func (tm *TestManager) CreateChain2() error {
|
||||
return err
|
||||
}
|
||||
|
||||
func TestBlockChainReorg(t *testing.T) {
|
||||
testManager := NewTestManager()
|
||||
testManager.CreateChain1()
|
||||
func TestNegativeBlockChainReorg(t *testing.T) {
|
||||
// We are resetting the database between creation so we need to cache our information
|
||||
testManager2 := NewTestManager()
|
||||
testManager2.CreateChain2()
|
||||
tm2Blocks := testManager2.Blocks
|
||||
|
||||
// This fails because we keep resetting the DB
|
||||
block := testManager.BlockChain().GetBlock(testManager.BlockChain().CurrentBlock.PrevHash)
|
||||
fmt.Println(block)
|
||||
//testManager.BlockChain().FindCanonicalChain(testManager2.Blocks, testManager.BlockChain().GenesisBlock().Hash())
|
||||
testManager := NewTestManager()
|
||||
testManager.CreateChain1()
|
||||
oldState := testManager.BlockChain().CurrentBlock.State()
|
||||
|
||||
if testManager.BlockChain().FindCanonicalChain(tm2Blocks, testManager.BlockChain().GenesisBlock().Hash()) != true {
|
||||
t.Error("I expected TestManager to have the longest chain, but it was TestManager2 instead.")
|
||||
}
|
||||
if testManager.BlockChain().CurrentBlock.State() != oldState {
|
||||
t.Error("I expected the top state to be the same as it was as before the reorg")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func TestPositiveBlockChainReorg(t *testing.T) {
|
||||
testManager := NewTestManager()
|
||||
testManager.CreateChain1()
|
||||
tm1Blocks := testManager.Blocks
|
||||
|
||||
testManager2 := NewTestManager()
|
||||
testManager2.CreateChain2()
|
||||
oldState := testManager2.BlockChain().CurrentBlock.State()
|
||||
|
||||
if testManager2.BlockChain().FindCanonicalChain(tm1Blocks, testManager.BlockChain().GenesisBlock().Hash()) == true {
|
||||
t.Error("I expected TestManager to have the longest chain, but it was TestManager2 instead.")
|
||||
}
|
||||
if testManager2.BlockChain().CurrentBlock.State() == oldState {
|
||||
t.Error("I expected the top state to have been modified but it was not")
|
||||
}
|
||||
}
|
||||
|
@ -2,6 +2,7 @@ package ethutil
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"math/big"
|
||||
"reflect"
|
||||
"testing"
|
||||
@ -55,6 +56,15 @@ func TestValue(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestEncodeDecodeMaran(t *testing.T) {
|
||||
b := NewValue([]interface{}{"dog", 15, []interface{}{"cat", "cat", []interface{}{}}, 1024, "tachikoma"})
|
||||
a := b.Encode()
|
||||
fmt.Println("voor maran", a)
|
||||
f, i := Decode(a, 0)
|
||||
fmt.Println("voor maran 2", f)
|
||||
fmt.Println(i)
|
||||
}
|
||||
|
||||
func TestEncode(t *testing.T) {
|
||||
strRes := "\x83dog"
|
||||
bytes := Encode("dog")
|
||||
|
@ -1,7 +1,7 @@
|
||||
package ethutil
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
_ "fmt"
|
||||
"reflect"
|
||||
"testing"
|
||||
)
|
||||
|
Loading…
Reference in New Issue
Block a user