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	node, err := NewNode(db, uint64(1))
19	assert.Nil(t, err)
20
21	assert.Equal(t, node.Addr, core.AddressFromPrivK(node.PrivK))
22}
23
24func TestNodeSignature(t *testing.T) {
25	dir, err := ioutil.TempDir("", "db")
26	assert.Nil(t, err)
27	db, err := db.New(dir)
28	assert.Nil(t, err)
29
30	node, err := NewNode(db, uint64(1))
31	assert.Nil(t, err)
32
33	m := []byte("test")
34	sig, err := node.Sign(m)
35	assert.Nil(t, err)
36	pubK := node.PrivK.PublicKey
37	assert.True(t, core.VerifySignature(&pubK, m, *sig))
38}
39
40func TestBlockFromPendingTxs(t *testing.T) {
41	dir, err := ioutil.TempDir("", "db")
42	assert.Nil(t, err)
43	db, err := db.New(dir)
44	assert.Nil(t, err)
45
46	node, err := NewNode(db, uint64(1))
47	assert.Nil(t, err)
48
49	addr0 := core.Address(core.HashBytes([]byte("addr0")))
50	addr1 := core.Address(core.HashBytes([]byte("addr1")))
51	tx := core.NewTx(addr0, addr1, []core.Input{}, []core.Output{})
52	node.AddToPendingTxs(*tx)
53	block, err := node.BlockFromPendingTxs()
54	assert.Nil(t, err)
55	assert.True(t, core.CheckBlockPoW(block, node.Bc.Difficulty))
56	assert.True(t, core.VerifyBlockSignature(&node.PrivK.PublicKey, block))
57}
58
59func TestBlockFromPendingTxsIteration(t *testing.T) {
60	dir, err := ioutil.TempDir("", "db")
61	assert.Nil(t, err)
62	db, err := db.New(dir)
63	assert.Nil(t, err)
64
65	node, err := NewNode(db, uint64(1))
66	assert.Nil(t, err)
67
68	addr0 := core.Address(core.HashBytes([]byte("addr0")))
69	addr1 := core.Address(core.HashBytes([]byte("addr1")))
70	for i := 0; i < 10; i++ {
71		tx := core.NewTx(addr0, addr1, []core.Input{}, []core.Output{})
72		node.AddToPendingTxs(*tx)
73	}
74	block, err := node.BlockFromPendingTxs()
75	assert.Nil(t, err)
76	assert.True(t, core.CheckBlockPoW(block, node.Bc.Difficulty))
77	assert.True(t, core.VerifyBlockSignature(&node.PrivK.PublicKey, block))
78}