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, uint64(1))
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, uint64(1))
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 bc := NewBlockchain(db, uint64(1))
51
52 for i := 0; i < 10; i++ {
53 block := bc.NewBlock([]Tx{})
54 block.CalculatePoW(bc.Difficulty)
55 assert.Equal(t, block.Height, uint64(i+1))
56
57 err = bc.AddBlock(block)
58 assert.Nil(t, err)
59 assert.Equal(t, bc.LastBlock.Height, block.Height)
60 }
61 block9, err := bc.GetPrevBlock(bc.LastBlock.Hash)
62 assert.Nil(t, err)
63 assert.Equal(t, block9.Height, uint64(9))
64
65 block8, err := bc.GetPrevBlock(block9.Hash)
66 assert.Nil(t, err)
67 assert.Equal(t, block8.Height, uint64(8))
68
69 currentBlock := bc.LastBlock
70 for err == nil {
71 currentBlock, err = bc.GetPrevBlock(currentBlock.Hash)
72 }
73 assert.Equal(t, err.Error(), "This was the oldest block")
74}
75
76func TestAddBlockWithTx(t *testing.T) {
77 addr0 := Address(HashBytes([]byte("addr0")))
78 addr1 := Address(HashBytes([]byte("addr1")))
79
80 dir, err := ioutil.TempDir("", "db")
81 assert.Nil(t, err)
82 db, err := db.New(dir)
83 assert.Nil(t, err)
84
85 bc := NewBlockchain(db, uint64(1))
86
87 var txs []Tx
88 tx := NewTx(addr0, addr1, []Input{}, []Output{})
89 txs = append(txs, *tx)
90 block := bc.NewBlock(txs)
91
92 block2, err := BlockFromBytes(block.Bytes())
93 assert.Nil(t, err)
94 assert.Equal(t, block2.Bytes(), block.Bytes())
95}