arnaucube
arnaucube/slowlorisdbPublic Self-hosted repository
slowlorisdb/core/blockchain_test.go
core/blockchain_test.goRaw
 1package core
 2
 3import (
 4	"io/ioutil"
 5	"slothdb/db"
 6	"testing"
 7
 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}