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 privK0, err := core.NewKey()
66 assert.Nil(t, err)
67 pubK0 := privK0.PublicKey
68 privK1, err := core.NewKey()
69 assert.Nil(t, err)
70 pubK1 := privK1.PublicKey
71 tx := core.NewTx(&pubK0, &pubK1, []core.Input{}, []core.Output{})
72 node.AddToPendingTxs(*tx)
73 block, err := node.BlockFromPendingTxs()
74 assert.Nil(t, err)
75 fmt.Println("h", block.Hash)
76 assert.True(t, core.CheckBlockPoW(block, node.Bc.Difficulty))
77 assert.True(t, node.Bc.VerifyBlock(block))
78}
79
80func TestBlockFromPendingTxsIteration(t *testing.T) {
81 dir, err := ioutil.TempDir("", "db")
82 assert.Nil(t, err)
83 db, err := db.New(dir)
84 assert.Nil(t, err)
85
86 privK, err := core.NewKey()
87 assert.Nil(t, err)
88
89 dif := uint64(1)
90 bc := core.NewBlockchain(db, dif)
91 node, err := NewNode(privK, bc, true)
92 assert.Nil(t, err)
93
94 privK0, err := core.NewKey()
95 assert.Nil(t, err)
96 pubK0 := privK0.PublicKey
97 privK1, err := core.NewKey()
98 assert.Nil(t, err)
99 pubK1 := privK1.PublicKey
100
101 for i := 0; i < 10; i++ {
102 tx := core.NewTx(&pubK0, &pubK1, []core.Input{}, []core.Output{})
103 node.AddToPendingTxs(*tx)
104 }
105 block, err := node.BlockFromPendingTxs()
106 assert.Nil(t, err)
107 assert.True(t, core.CheckBlockPoW(block, node.Bc.Difficulty))
108 assert.True(t, node.Bc.VerifyBlock(block))
109}
110
111func TestFromGenesisToTenBlocks(t *testing.T) {
112 dir, err := ioutil.TempDir("", "db")
113 assert.Nil(t, err)
114 db, err := db.New(dir)
115 assert.Nil(t, err)
116
117 privK, err := core.NewKey()
118 assert.Nil(t, err)
119
120 dif := uint64(1)
121 bc := core.NewBlockchain(db, dif)
122 node, err := NewNode(privK, bc, true)
123 assert.Nil(t, err)
124
125 // create the genesis block
126 genesisBlock, err := node.CreateGenesis()
127 assert.Nil(t, err)
128 assert.NotEqual(t, genesisBlock.Signature, core.Signature{})
129 assert.NotEqual(t, genesisBlock.Hash, core.Hash{})
130
131 // add the genesis block into the blockchain
132 err = node.Bc.AddBlock(genesisBlock)
133 assert.Nil(t, err)
134 assert.NotEqual(t, genesisBlock.Hash, core.Hash{})
135 assert.Equal(t, genesisBlock.Hash, node.Bc.LastBlock.Hash)
136
137 // TODO add another block
138 block := node.NewBlock([]core.Tx{})
139 err = node.Bc.AddBlock(block)
140 assert.Nil(t, err)
141}