arnaucube
arnaucube/slowlorisdbPublic Self-hosted repository
slowlorisdb/core/blockchain_test.go
core/blockchain_test.goRaw
  1package core
  2
  3import (
  4	"io/ioutil"
  5	"testing"
  6	"time"
  7
  8	"github.com/arnaucube/slowlorisdb/db"
  9	"github.com/stretchr/testify/assert"
 10)
 11
 12func TestBlockchainDataStructure(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	// bc := NewBlockchain(db, uint64(1))
 19	block := &Block{
 20		PrevHash:  Hash{},
 21		Txs:       []Tx{},
 22		Miner:     Address{},
 23		Timestamp: time.Now(),
 24		Nonce:     0,
 25		Hash:      HashBytes([]byte("blockhash")),
 26	}
 27
 28	block2, err := BlockFromBytes(block.Bytes())
 29	assert.Nil(t, err)
 30	assert.Equal(t, block2.Bytes(), block.Bytes())
 31}
 32
 33func TestGetBlock(t *testing.T) {
 34	dir, err := ioutil.TempDir("", "db")
 35	assert.Nil(t, err)
 36	db, err := db.New(dir)
 37	assert.Nil(t, err)
 38
 39	bc := NewBlockchain(db, uint64(1))
 40
 41	block := &Block{
 42		Height:    uint64(1),
 43		PrevHash:  Hash{},
 44		Txs:       []Tx{},
 45		Miner:     Address{},
 46		Timestamp: time.Now(),
 47		Nonce:     0,
 48		Hash:      HashBytes([]byte("blockhash")),
 49	}
 50	assert.Equal(t, block.Height, uint64(1))
 51
 52	err = bc.AddBlock(block)
 53	assert.Nil(t, err)
 54
 55	block2, err := bc.GetBlock(block.Hash)
 56	assert.Nil(t, err)
 57	assert.Equal(t, block.Bytes(), block2.Bytes())
 58}
 59
 60func TestGetPrevBlock(t *testing.T) {
 61	dir, err := ioutil.TempDir("", "db")
 62	assert.Nil(t, err)
 63	db, err := db.New(dir)
 64	assert.Nil(t, err)
 65
 66	bc := NewBlockchain(db, uint64(1))
 67
 68	var prevHash Hash
 69	for i := 0; i < 10; i++ {
 70		block := &Block{
 71			Height:    uint64(i + 1),
 72			PrevHash:  prevHash,
 73			Txs:       []Tx{},
 74			Miner:     Address{},
 75			Timestamp: time.Now(),
 76			Nonce:     0,
 77			Hash:      Hash{},
 78		}
 79		block.CalculatePoW(bc.Difficulty)
 80		assert.Equal(t, block.Height, uint64(i+1))
 81		prevHash = block.Hash
 82
 83		err = bc.AddBlock(block)
 84		assert.Nil(t, err)
 85		assert.Equal(t, bc.LastBlock.Height, block.Height)
 86	}
 87	block9, err := bc.GetPrevBlock(bc.LastBlock.Hash)
 88	assert.Nil(t, err)
 89	assert.Equal(t, block9.Height, uint64(9))
 90
 91	block8, err := bc.GetPrevBlock(block9.Hash)
 92	assert.Nil(t, err)
 93	assert.Equal(t, block8.Height, uint64(8))
 94
 95	currentBlock := bc.LastBlock
 96	for err == nil {
 97		currentBlock, err = bc.GetPrevBlock(currentBlock.Hash)
 98	}
 99	assert.Equal(t, err.Error(), "This was the oldest block")
100}
101
102/*
103func TestAddBlockWithTx(t *testing.T) {
104	addr0 := Address(HashBytes([]byte("addr0")))
105	addr1 := Address(HashBytes([]byte("addr1")))
106
107	dir, err := ioutil.TempDir("", "db")
108	assert.Nil(t, err)
109	db, err := db.New(dir)
110	assert.Nil(t, err)
111
112	bc := NewBlockchain(db, uint64(1))
113
114	var txs []Tx
115	tx := NewTx(addr0, addr1, []Input{}, []Output{})
116	txs = append(txs, *tx)
117	block := &Block{
118		PrevHash:  Hash{},
119		NextHash:  Hash{},
120		Txs:       txs,
121		Miner:     Address{},
122		Timestamp: time.Now(),
123		Nonce:     0,
124		Hash:      HashBytes([]byte("blockhash")),
125	}
126
127	block2, err := BlockFromBytes(block.Bytes())
128	assert.Nil(t, err)
129	assert.Equal(t, block2.Bytes(), block.Bytes())
130}
131
132func TestPoABlockchainDataStructure(t *testing.T) {
133	dir, err := ioutil.TempDir("", "db")
134	assert.Nil(t, err)
135	db, err := db.New(dir)
136	assert.Nil(t, err)
137
138	var authNodesPubK []*ecdsa.PublicKey
139	for i := 0; i < 3; i++ {
140		privK, err := NewKey()
141		assert.Nil(t, err)
142		authNodesPubK = append(authNodesPubK, &privK.PublicKey)
143	}
144
145	bc := NewPoABlockchain(db, authNodesPubK)
146	block := &Block{
147		PrevHash:  Hash{},
148		NextHash:  Hash{},
149		Txs:       []Tx{},
150		Miner:     Address{},
151		Timestamp: time.Now(),
152		Nonce:     0,
153		Hash:      HashBytes([]byte("blockhash")),
154	}
155
156	block2, err := BlockFromBytes(block.Bytes())
157	assert.Nil(t, err)
158	assert.Equal(t, block2.Bytes(), block.Bytes())
159}
160*/