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