arnaucube
arnaucube/slowlorisdbPublic Self-hosted repository
slowlorisdb/node/node_test.go
node/node_test.goRaw
 1package node
 2
 3import (
 4	"io/ioutil"
 5	"testing"
 6
 7	"github.com/arnaucube/slowlorisdb/core"
 8	"github.com/arnaucube/slowlorisdb/db"
 9	"github.com/stretchr/testify/assert"
10)
11
12func TestNode(t *testing.T) {
13	dir, err := ioutil.TempDir("", "db")
14	assert.Nil(t, err)
15	db, err := db.New(dir)
16	assert.Nil(t, err)
17
18	privK, err := core.NewKey()
19	assert.Nil(t, err)
20
21	dif := uint64(1)
22	bc := core.NewBlockchain(db, dif)
23	node, err := NewNode(privK, bc, true)
24	assert.Nil(t, err)
25
26	assert.Equal(t, node.Addr, core.AddressFromPrivK(node.PrivK))
27}
28
29func TestNodeSignature(t *testing.T) {
30	dir, err := ioutil.TempDir("", "db")
31	assert.Nil(t, err)
32	db, err := db.New(dir)
33	assert.Nil(t, err)
34
35	privK, err := core.NewKey()
36	assert.Nil(t, err)
37
38	dif := uint64(1)
39	bc := core.NewBlockchain(db, dif)
40	node, err := NewNode(privK, bc, true)
41	assert.Nil(t, err)
42
43	m := []byte("test")
44	sig, err := node.Sign(m)
45	assert.Nil(t, err)
46	pubK := node.PrivK.PublicKey
47	assert.True(t, core.VerifySignature(&pubK, m, *sig))
48}
49
50func TestBlockFromPendingTxs(t *testing.T) {
51	dir, err := ioutil.TempDir("", "db")
52	assert.Nil(t, err)
53	db, err := db.New(dir)
54	assert.Nil(t, err)
55
56	privK, err := core.NewKey()
57	assert.Nil(t, err)
58
59	dif := uint64(1)
60	bc := core.NewBlockchain(db, dif)
61	node, err := NewNode(privK, bc, true)
62	assert.Nil(t, err)
63
64	addr0 := core.Address(core.HashBytes([]byte("addr0")))
65	addr1 := core.Address(core.HashBytes([]byte("addr1")))
66	tx := core.NewTx(addr0, addr1, []core.Input{}, []core.Output{})
67	node.AddToPendingTxs(*tx)
68	block, err := node.BlockFromPendingTxs()
69	assert.Nil(t, err)
70	assert.True(t, core.CheckBlockPoW(block, node.Bc.Difficulty))
71	assert.True(t, node.Bc.VerifyBlockSignature(block))
72}
73
74func TestBlockFromPendingTxsIteration(t *testing.T) {
75	dir, err := ioutil.TempDir("", "db")
76	assert.Nil(t, err)
77	db, err := db.New(dir)
78	assert.Nil(t, err)
79
80	privK, err := core.NewKey()
81	assert.Nil(t, err)
82
83	dif := uint64(1)
84	bc := core.NewBlockchain(db, dif)
85	node, err := NewNode(privK, bc, true)
86	assert.Nil(t, err)
87
88	addr0 := core.Address(core.HashBytes([]byte("addr0")))
89	addr1 := core.Address(core.HashBytes([]byte("addr1")))
90	for i := 0; i < 10; i++ {
91		tx := core.NewTx(addr0, addr1, []core.Input{}, []core.Output{})
92		node.AddToPendingTxs(*tx)
93	}
94	block, err := node.BlockFromPendingTxs()
95	assert.Nil(t, err)
96	assert.True(t, core.CheckBlockPoW(block, node.Bc.Difficulty))
97	assert.True(t, node.Bc.VerifyBlockSignature(block))
98}