-
Notifications
You must be signed in to change notification settings - Fork 260
Expand file tree
/
Copy pathutils_test.go
More file actions
148 lines (129 loc) · 4.06 KB
/
utils_test.go
File metadata and controls
148 lines (129 loc) · 4.06 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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
package types_test
import (
// Import bytes package
"crypto/sha256"
"testing"
"time" // Used for time.Time comparison
"github.com/libp2p/go-libp2p/core/crypto"
"github.com/stretchr/testify/assert"
"github.com/evstack/ev-node/pkg/signer" // Used for signer.Signer interface
"github.com/evstack/ev-node/pkg/signer/noop"
"github.com/evstack/ev-node/types" // Import the types package
)
var _ time.Time // Dummy usage to prevent time import from being removed
var _ signer.Signer // Dummy usage to prevent signer import from being removed
func TestGetRandomTx(t *testing.T) {
// Generate 100 random transactions and check that they are all unique
txSet := make(map[string]bool)
for range 100 {
tx := types.GetRandomTx()
key := string(tx[:])
if _, ok := txSet[key]; ok {
t.Errorf("Duplicate transaction generated: %v", tx)
}
txSet[key] = true
}
}
func TestGetRandomBytes(t *testing.T) {
// Generate 100 random byte slices of length 32 and check that they are all unique
byteSet := make(map[string]bool)
for range 100 {
bytes := types.GetRandomBytes(32)
key := string(bytes[:])
if _, ok := byteSet[key]; ok {
t.Errorf("Duplicate byte slice generated: %v", bytes)
}
byteSet[key] = true
}
}
func TestGetRandomHeader(t *testing.T) {
// Generate 100 random headers and check that they are all unique
headerSet := make(map[string]bool)
for range 100 {
appHashBytes := types.GetRandomBytes(32)
header := types.GetRandomHeader("TestGetRandomHeader", appHashBytes)
headerHash := header.Hash().String()
if _, ok := headerSet[headerHash]; ok {
t.Errorf("Duplicate header generated: %v", header)
}
headerSet[headerHash] = true
}
}
func TestGetRandomNextHeader_InvalidatesCachedHash(t *testing.T) {
header := types.GetRandomHeader("TestGetRandomNextHeader", types.GetRandomBytes(32))
header.MemoizeHash()
nextHeader := types.GetRandomNextHeader(header, "TestGetRandomNextHeader")
gotHash := nextHeader.Hash()
headerBytes, err := nextHeader.MarshalBinary()
assert.NoError(t, err)
expected := sha256.Sum256(headerBytes)
assert.Equal(t, types.Hash(expected[:]), gotHash)
}
func TestGetFirstSignedHeader(t *testing.T) {
testCases := []struct {
name string
chainID string
}{
{
name: "basic first signed header",
chainID: "test-chain-1",
},
{
name: "another chain ID",
chainID: "another-chain",
},
}
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
privKey, _, err := crypto.GenerateEd25519Key(nil)
assert.NoError(t, err)
noopSigner, err := noop.NewNoopSigner(privKey)
assert.NoError(t, err)
firstSignedHeader, err := types.GetFirstSignedHeader(t.Context(), noopSigner, tc.chainID)
assert.NoError(t, err)
assert.NotNil(t, firstSignedHeader)
assert.Equal(t, uint64(1), firstSignedHeader.Height())
assert.Equal(t, tc.chainID, firstSignedHeader.ChainID())
pubKey, err := noopSigner.GetPublic()
assert.NoError(t, err)
expectedAddress := types.KeyAddress(pubKey)
assert.Equal(t, expectedAddress, firstSignedHeader.ProposerAddress)
assert.NotNil(t, firstSignedHeader.Signature)
// Verify signature
b, err := firstSignedHeader.Header.MarshalBinary()
assert.NoError(t, err)
verified, err := privKey.GetPublic().Verify(b, firstSignedHeader.Signature)
assert.NoError(t, err)
assert.True(t, verified)
})
}
}
func TestGetGenesisWithPrivkey(t *testing.T) {
testCases := []struct {
name string
chainID string
}{
{
name: "basic genesis with privkey",
chainID: "test-chain-1",
},
{
name: "another chain ID",
chainID: "another-chain",
},
}
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
gen, privKey, pubKey := types.GetGenesisWithPrivkey(tc.chainID)
assert.NotNil(t, gen)
assert.NotNil(t, privKey)
assert.NotNil(t, pubKey)
assert.Equal(t, tc.chainID, gen.ChainID)
assert.Equal(t, uint64(1), gen.InitialHeight)
assert.NotZero(t, gen.StartTime)
// Verify the proposer address in genesis
expectedAddress := types.KeyAddress(pubKey)
assert.Equal(t, expectedAddress, gen.ProposerAddress)
})
}
}