-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathblockchain_test.go
More file actions
107 lines (89 loc) · 2.6 KB
/
blockchain_test.go
File metadata and controls
107 lines (89 loc) · 2.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
package main
import (
"crypto/sha256"
"math/rand"
"strconv"
"sync"
"testing"
)
var chain Blockchain
func (blk Block) print(t *testing.T) {
t.Logf("#########################\n")
t.Logf("Index: %v\n", blk.Index)
t.Logf("Timestamp: %s\n", blk.Timestamp)
t.Logf("Data: %s\n", blk.Data)
t.Logf("Hash: %x\n", blk.Hash[:])
t.Logf("PrevHash: %x\n", blk.PrevHash[:])
t.Logf("Nonce: %x\n", blk.Nonce)
t.Logf("#########################\n\n")
}
const MiningRange = 200000
const MaxWorkers = 5
const ChainSize = 8
func TestCreateBlockchain(t *testing.T) {
var wg sync.WaitGroup
chain = Blockchain{make([]*Block, 0)}
mp := MiningPool{chain: &chain, currIndex: 0, count: MiningRange, currPos: 0}
var temp [sha256.Size]byte
newBlock := generateBlock(mp.currIndex, temp[:], "Genesis")
index := mp.currIndex
for i := 0; i < MaxWorkers; i++ {
wg.Add(1)
go func() {
defer wg.Done()
mp.startWorker(&newBlock, index, i)
}()
}
wg.Wait()
chain.blocks[chain.getSize()-1].print(t)
nameArr := []string{"John", "Alice", "Bob", "Charlie", "Marzia", "Peter", "Shiv"}
var message string
for i := 0; i < ChainSize-1; i++ {
i1 := rand.Intn(len(nameArr))
i2 := rand.Intn(len(nameArr))
for i2 == i1 {
i2 = rand.Intn(len(nameArr))
}
message = nameArr[i1] + " sends " + nameArr[i2] + " " + strconv.Itoa(rand.Intn(100)+1) + " LD"
newBlock := generateBlock(mp.currIndex, mp.chain.blocks[mp.chain.getSize()-1].Hash, message)
index = mp.currIndex
for i := 0; i < MaxWorkers-1; i++ {
wg.Add(1)
go func() {
defer wg.Done()
mp.startWorker(&newBlock, index, i)
}()
}
wg.Wait()
newBlock.print(t)
}
}
/*func TestCreateBlockchain(t *testing.T) {
chain, err = createBlockchain("Alice sends Bob 10 LD")
if err != nil {
t.Fatal(err)
}
newBlock, _ := generateBlock(chain.blocks[len(chain.blocks)-1], "John sends Alice 20 LD")
if err := verify(newBlock, *chain.blocks[len(chain.blocks)-1]); err != nil {
t.Fatal(err.Error())
} else {
chain.blocks = append(chain.blocks, &newBlock)
}
newBlock1, _ := generateBlock(chain.blocks[len(chain.blocks)-1], "Alice sends John 5 LD")
if errVer := verify(newBlock1, *chain.blocks[len(chain.blocks)-1]); errVer != nil {
t.Fatal(errVer.Error())
} else {
chain.blocks = append(chain.blocks, &newBlock1)
}
for _, blk := range chain.blocks {
blk.print(t)
}
}
func TestRejectInvalidBlock(t *testing.T) {
newBlock, _ := generateBlock(chain.blocks[len(chain.blocks)-2], "Bob sends John 30 LD")
if err := verify(newBlock, *chain.blocks[len(chain.blocks)-1]); err != nil {
t.Logf(err.Error())
} else {
t.Fatal("Invalid block was accepted!")
}
}*/