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}