|
|
package core
import ( "io/ioutil" "testing" "time"
"github.com/arnaucube/slowlorisdb/db" "github.com/stretchr/testify/assert" )
func TestBlockchainDataStructure(t *testing.T) { // dir, err := ioutil.TempDir("", "db")
// assert.Nil(t, err)
// db, err := db.New(dir)
// assert.Nil(t, err)
//
// bc := NewBlockchain(db, uint64(1))
block := &Block{ PrevHash: Hash{}, Txs: []Tx{}, Miner: Address{}, Timestamp: time.Now(), Nonce: 0, Hash: HashBytes([]byte("blockhash")), }
block2, err := BlockFromBytes(block.Bytes()) assert.Nil(t, err) assert.Equal(t, block2.Bytes(), block.Bytes()) }
func TestGetBlock(t *testing.T) { dir, err := ioutil.TempDir("", "db") assert.Nil(t, err) db, err := db.New(dir) assert.Nil(t, err)
bc := NewBlockchain(db, uint64(1))
block := &Block{ Height: uint64(1), PrevHash: Hash{}, Txs: []Tx{}, Miner: Address{}, Timestamp: time.Now(), Nonce: 0, Hash: HashBytes([]byte("blockhash")), } assert.Equal(t, block.Height, uint64(1))
err = bc.AddBlock(block) assert.Nil(t, err)
block2, err := bc.GetBlock(block.Hash) assert.Nil(t, err) assert.Equal(t, block.Bytes(), block2.Bytes()) }
func TestGetPrevBlock(t *testing.T) { dir, err := ioutil.TempDir("", "db") assert.Nil(t, err) db, err := db.New(dir) assert.Nil(t, err)
bc := NewBlockchain(db, uint64(1))
var prevHash Hash for i := 0; i < 10; i++ { block := &Block{ Height: uint64(i + 1), PrevHash: prevHash, Txs: []Tx{}, Miner: Address{}, Timestamp: time.Now(), Nonce: 0, Hash: Hash{}, } block.CalculatePoW(bc.Difficulty) assert.Equal(t, block.Height, uint64(i+1)) prevHash = block.Hash
err = bc.AddBlock(block) assert.Nil(t, err) assert.Equal(t, bc.LastBlock.Height, block.Height) } block9, err := bc.GetPrevBlock(bc.LastBlock.Hash) assert.Nil(t, err) assert.Equal(t, block9.Height, uint64(9))
block8, err := bc.GetPrevBlock(block9.Hash) assert.Nil(t, err) assert.Equal(t, block8.Height, uint64(8))
currentBlock := bc.LastBlock for err == nil { currentBlock, err = bc.GetPrevBlock(currentBlock.Hash) } assert.Equal(t, err.Error(), "This was the oldest block") }
/* func TestAddBlockWithTx(t *testing.T) { addr0 := Address(HashBytes([]byte("addr0"))) addr1 := Address(HashBytes([]byte("addr1")))
dir, err := ioutil.TempDir("", "db") assert.Nil(t, err) db, err := db.New(dir) assert.Nil(t, err)
bc := NewBlockchain(db, uint64(1))
var txs []Tx tx := NewTx(addr0, addr1, []Input{}, []Output{}) txs = append(txs, *tx) block := &Block{ PrevHash: Hash{}, NextHash: Hash{}, Txs: txs, Miner: Address{}, Timestamp: time.Now(), Nonce: 0, Hash: HashBytes([]byte("blockhash")), }
block2, err := BlockFromBytes(block.Bytes()) assert.Nil(t, err) assert.Equal(t, block2.Bytes(), block.Bytes()) }
func TestPoABlockchainDataStructure(t *testing.T) { dir, err := ioutil.TempDir("", "db") assert.Nil(t, err) db, err := db.New(dir) assert.Nil(t, err)
var authNodesPubK []*ecdsa.PublicKey for i := 0; i < 3; i++ { privK, err := NewKey() assert.Nil(t, err) authNodesPubK = append(authNodesPubK, &privK.PublicKey) }
bc := NewPoABlockchain(db, authNodesPubK) block := &Block{ PrevHash: Hash{}, NextHash: Hash{}, Txs: []Tx{}, Miner: Address{}, Timestamp: time.Now(), Nonce: 0, Hash: HashBytes([]byte("blockhash")), }
block2, err := BlockFromBytes(block.Bytes()) assert.Nil(t, err) assert.Equal(t, block2.Bytes(), block.Bytes()) } */
|