arnaucube
arnaucube/slowlorisdbPublic Self-hosted repository
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}