arnaucube
arnaucube/slowlorisdbPublic Self-hosted repository
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}