slowlorisdb/core/blockchain_test.go
core/blockchain_test.goRaw
1package core
2
3import (
4 "io/ioutil"
5 "testing"
6
7 "github.com/arnaucube/slowlorisdb/db"
8 "github.com/stretchr/testify/assert"
9)
10
11func TestBlockchainDataStructure(t *testing.T) {
12 dir, err := ioutil.TempDir("", "db")
13 assert.Nil(t, err)
14 db, err := db.New(dir)
15 assert.Nil(t, err)
16
17 bc := NewBlockchain(db)
18 block := bc.NewBlock([]Tx{})
19
20 block2, err := BlockFromBytes(block.Bytes())
21 assert.Nil(t, err)
22 assert.Equal(t, block2.Bytes(), block.Bytes())
23}
24
25func TestGetBlock(t *testing.T) {
26 dir, err := ioutil.TempDir("", "db")
27 assert.Nil(t, err)
28 db, err := db.New(dir)
29 assert.Nil(t, err)
30
31 bc := NewBlockchain(db)
32
33 block := bc.NewBlock([]Tx{})
34 assert.Equal(t, block.Height, uint64(1))
35
36 err = bc.AddBlock(block)
37 assert.Nil(t, err)
38
39 block2, err := bc.GetBlock(block.Hash)
40 assert.Nil(t, err)
41 assert.Equal(t, block.Bytes(), block2.Bytes())
42}
43
44func TestGetPrevBlock(t *testing.T) {
45 dir, err := ioutil.TempDir("", "db")
46 assert.Nil(t, err)
47 db, err := db.New(dir)
48 assert.Nil(t, err)
49
50 difficulty := 1
51 bc := NewBlockchain(db)
52
53 for i := 0; i < 10; i++ {
54 block := bc.NewBlock([]Tx{})
55 block.CalculatePoW(difficulty)
56 assert.Equal(t, block.Height, uint64(i+1))
57
58 err = bc.AddBlock(block)
59 assert.Nil(t, err)
60 assert.Equal(t, bc.LastBlock.Height, block.Height)
61 }
62 block9, err := bc.GetPrevBlock(bc.LastBlock.Hash)
63 assert.Nil(t, err)
64 assert.Equal(t, block9.Height, uint64(9))
65
66 block8, err := bc.GetPrevBlock(block9.Hash)
67 assert.Nil(t, err)
68 assert.Equal(t, block8.Height, uint64(8))
69
70 currentBlock := bc.LastBlock
71 for err == nil {
72 currentBlock, err = bc.GetPrevBlock(currentBlock.Hash)
73 }
74 assert.Equal(t, err.Error(), "This was the oldest block")
75}
76
77func TestAddBlockWithTx(t *testing.T) {
78 addr0 := Address(HashBytes([]byte("addr0")))
79 addr1 := Address(HashBytes([]byte("addr1")))
80
81 dir, err := ioutil.TempDir("", "db")
82 assert.Nil(t, err)
83 db, err := db.New(dir)
84 assert.Nil(t, err)
85
86 bc := NewBlockchain(db)
87
88 var txs []Tx
89 tx := NewTx(addr0, addr1, []Input{}, []Output{})
90 txs = append(txs, *tx)
91 block := bc.NewBlock(txs)
92
93 block2, err := BlockFromBytes(block.Bytes())
94 assert.Nil(t, err)
95 assert.Equal(t, block2.Bytes(), block.Bytes())
96}