Skip to content

Commit 61f4eab

Browse files
committed
refactor(block-header): Added a spearate block_test.go for validating whether the correct corresponding function is executed in NewBlockHeaderFromCbor.
Signed-off-by: Akhil Repala <[email protected]>
1 parent a245bbc commit 61f4eab

File tree

3 files changed

+142
-138
lines changed

3 files changed

+142
-138
lines changed

ledger/block.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@ func NewBlockHeaderFromCbor(blockType uint, data []byte) (BlockHeader, error) {
5353
return NewByronEpochBoundaryBlockHeaderFromCbor(data)
5454
case BlockTypeByronMain:
5555
return NewByronMainBlockHeaderFromCbor(data)
56-
// TODO: break into separate cases and parse as specific block header types (#844)
5756
case BlockTypeShelley:
5857
return NewShelleyBlockHeaderFromCbor(data)
5958
case BlockTypeAllegra:

ledger/block_test.go

Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
package ledger
2+
3+
import (
4+
"fmt"
5+
"testing"
6+
7+
"github.com/blinklabs-io/gouroboros/ledger/allegra"
8+
"github.com/blinklabs-io/gouroboros/ledger/babbage"
9+
"github.com/blinklabs-io/gouroboros/ledger/common"
10+
"github.com/blinklabs-io/gouroboros/ledger/mary"
11+
"github.com/blinklabs-io/gouroboros/ledger/shelley"
12+
"github.com/fxamacker/cbor/v2"
13+
)
14+
15+
func mockShelleyCBOR() []byte {
16+
shelleyHeader := shelley.ShelleyBlockHeader{
17+
Body: shelley.ShelleyBlockHeaderBody{
18+
BlockNumber: 12345,
19+
Slot: 67890,
20+
PrevHash: common.Blake2b256{},
21+
IssuerVkey: common.IssuerVkey{},
22+
VrfKey: []byte{0x01, 0x02},
23+
NonceVrf: common.VrfResult{},
24+
LeaderVrf: common.VrfResult{},
25+
BlockBodySize: 512,
26+
BlockBodyHash: common.Blake2b256{},
27+
OpCertHotVkey: []byte{0x03, 0x04},
28+
OpCertSequenceNumber: 10,
29+
OpCertKesPeriod: 20,
30+
OpCertSignature: []byte{0x05, 0x06},
31+
ProtoMajorVersion: 1,
32+
ProtoMinorVersion: 0,
33+
},
34+
Signature: []byte{0x07, 0x08},
35+
}
36+
37+
// Convert to CBOR
38+
data, err := cbor.Marshal(shelleyHeader)
39+
if err != nil {
40+
fmt.Printf("CBOR Encoding Error: %v\n", err)
41+
}
42+
return data
43+
}
44+
45+
func mockAllegraCBOR() []byte {
46+
allegraHeader := allegra.AllegraBlockHeader{ShelleyBlockHeader: ShelleyBlockHeader{}}
47+
data, _ := cbor.Marshal(allegraHeader)
48+
return data
49+
}
50+
51+
func mockMaryCBOR() []byte {
52+
maryHeader := mary.MaryBlockHeader{ShelleyBlockHeader: ShelleyBlockHeader{}}
53+
data, _ := cbor.Marshal(maryHeader)
54+
return data
55+
}
56+
57+
func mockAlonzoCBOR() []byte {
58+
alonzoHeader := AlonzoBlockHeader{ShelleyBlockHeader: ShelleyBlockHeader{}}
59+
data, _ := cbor.Marshal(alonzoHeader)
60+
return data
61+
}
62+
63+
func mockBabbageCBOR() []byte {
64+
babbageHeader := babbage.BabbageBlockHeader{
65+
Body: babbage.BabbageBlockHeaderBody{
66+
BlockNumber: 54321,
67+
Slot: 98765,
68+
PrevHash: common.Blake2b256{},
69+
IssuerVkey: common.IssuerVkey{},
70+
VrfKey: []byte{0x09, 0x10},
71+
VrfResult: common.VrfResult{},
72+
BlockBodySize: 1024,
73+
BlockBodyHash: common.Blake2b256{},
74+
OpCert: babbage.BabbageOpCert{
75+
HotVkey: []byte{0x11, 0x12},
76+
SequenceNumber: 30,
77+
KesPeriod: 40,
78+
Signature: []byte{0x13, 0x14},
79+
},
80+
ProtoVersion: babbage.BabbageProtoVersion{
81+
Major: 2,
82+
Minor: 0,
83+
},
84+
},
85+
Signature: []byte{0x15, 0x16},
86+
}
87+
88+
// Convert to CBOR
89+
data, err := cbor.Marshal(babbageHeader)
90+
if err != nil {
91+
fmt.Printf("CBOR Encoding Error for Babbage: %v\n", err)
92+
}
93+
return data
94+
}
95+
96+
func mockConwayCBOR() []byte {
97+
conwayHeader := ConwayBlockHeader{BabbageBlockHeader: BabbageBlockHeader{}}
98+
data, _ := cbor.Marshal(conwayHeader)
99+
return data
100+
}
101+
102+
func TestNewBlockHeaderFromCbor(t *testing.T) {
103+
tests := []struct {
104+
name string
105+
blockType uint
106+
data []byte
107+
expectErr bool
108+
expectedFn string
109+
}{
110+
{"Shelley Block", BlockTypeShelley, mockShelleyCBOR(), false, "NewShelleyBlockHeaderFromCbor"},
111+
{"Allegra Block", BlockTypeAllegra, mockAllegraCBOR(), false, "NewAllegraBlockHeaderFromCbor"},
112+
{"Mary Block", BlockTypeMary, mockMaryCBOR(), false, "NewMaryBlockHeaderFromCbor"},
113+
{"Alonzo Block", BlockTypeAlonzo, mockAlonzoCBOR(), false, "NewAlonzoBlockHeaderFromCbor"},
114+
{"Babbage Block", BlockTypeBabbage, mockBabbageCBOR(), false, "NewBabbageBlockHeaderFromCbor"},
115+
{"Conway Block", BlockTypeConway, mockConwayCBOR(), false, "NewConwayBlockHeaderFromCbor"},
116+
{"Invalid Block Type", 9999, []byte{0xFF, 0x00, 0x00}, true, "UnknownFunction"},
117+
}
118+
119+
for _, test := range tests {
120+
t.Run(test.name, func(t *testing.T) {
121+
fmt.Printf("\n Running Test: %s\n", test.name)
122+
123+
header, err := NewBlockHeaderFromCbor(test.blockType, test.data)
124+
125+
if test.expectErr {
126+
if err == nil {
127+
t.Errorf("Expected error for %s, but got none!", test.name)
128+
} else {
129+
fmt.Printf("Expected failure for %s: %v\n", test.name, err)
130+
}
131+
} else {
132+
if err != nil {
133+
t.Errorf("Unexpected error for %s: %v", test.name, err)
134+
} else if header == nil {
135+
t.Errorf("Expected non-nil block header for %s, but got nil", test.name)
136+
} else {
137+
fmt.Printf("Test Passed: %s → %s executed successfully!\n", test.name, test.expectedFn)
138+
}
139+
}
140+
})
141+
}
142+
}

ledger/verify_block_test.go

Lines changed: 0 additions & 137 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,7 @@
11
package ledger
22

33
import (
4-
"fmt"
54
"testing"
6-
7-
"github.com/blinklabs-io/gouroboros/ledger/allegra"
8-
"github.com/blinklabs-io/gouroboros/ledger/babbage"
9-
"github.com/blinklabs-io/gouroboros/ledger/common"
10-
"github.com/blinklabs-io/gouroboros/ledger/mary"
11-
"github.com/blinklabs-io/gouroboros/ledger/shelley"
12-
"github.com/fxamacker/cbor/v2"
135
)
146

157
func TestVerifyBlockBody(t *testing.T) {
@@ -65,132 +57,3 @@ func TestVerifyBlockBody(t *testing.T) {
6557
})
6658
}
6759
}
68-
69-
func mockShelleyCBOR() []byte {
70-
shelleyHeader := shelley.ShelleyBlockHeader{
71-
Body: shelley.ShelleyBlockHeaderBody{
72-
BlockNumber: 12345,
73-
Slot: 67890,
74-
PrevHash: common.Blake2b256{},
75-
IssuerVkey: common.IssuerVkey{},
76-
VrfKey: []byte{0x01, 0x02},
77-
NonceVrf: common.VrfResult{},
78-
LeaderVrf: common.VrfResult{},
79-
BlockBodySize: 512,
80-
BlockBodyHash: common.Blake2b256{},
81-
OpCertHotVkey: []byte{0x03, 0x04},
82-
OpCertSequenceNumber: 10,
83-
OpCertKesPeriod: 20,
84-
OpCertSignature: []byte{0x05, 0x06},
85-
ProtoMajorVersion: 1,
86-
ProtoMinorVersion: 0,
87-
},
88-
Signature: []byte{0x07, 0x08},
89-
}
90-
91-
// Convert to CBOR
92-
data, err := cbor.Marshal(shelleyHeader)
93-
if err != nil {
94-
fmt.Printf("CBOR Encoding Error: %v\n", err)
95-
}
96-
return data
97-
}
98-
99-
func mockAllegraCBOR() []byte {
100-
allegraHeader := allegra.AllegraBlockHeader{ShelleyBlockHeader: ShelleyBlockHeader{}}
101-
data, _ := cbor.Marshal(allegraHeader)
102-
return data
103-
}
104-
105-
func mockMaryCBOR() []byte {
106-
maryHeader := mary.MaryBlockHeader{ShelleyBlockHeader: ShelleyBlockHeader{}}
107-
data, _ := cbor.Marshal(maryHeader)
108-
return data
109-
}
110-
111-
func mockAlonzoCBOR() []byte {
112-
alonzoHeader := AlonzoBlockHeader{ShelleyBlockHeader: ShelleyBlockHeader{}}
113-
data, _ := cbor.Marshal(alonzoHeader)
114-
return data
115-
}
116-
117-
func mockBabbageCBOR() []byte {
118-
babbageHeader := babbage.BabbageBlockHeader{
119-
Body: babbage.BabbageBlockHeaderBody{
120-
BlockNumber: 54321,
121-
Slot: 98765,
122-
PrevHash: common.Blake2b256{},
123-
IssuerVkey: common.IssuerVkey{},
124-
VrfKey: []byte{0x09, 0x10},
125-
VrfResult: common.VrfResult{},
126-
BlockBodySize: 1024,
127-
BlockBodyHash: common.Blake2b256{},
128-
OpCert: babbage.BabbageOpCert{
129-
HotVkey: []byte{0x11, 0x12},
130-
SequenceNumber: 30,
131-
KesPeriod: 40,
132-
Signature: []byte{0x13, 0x14},
133-
},
134-
ProtoVersion: babbage.BabbageProtoVersion{
135-
Major: 2,
136-
Minor: 0,
137-
},
138-
},
139-
Signature: []byte{0x15, 0x16},
140-
}
141-
142-
// Convert to CBOR
143-
data, err := cbor.Marshal(babbageHeader)
144-
if err != nil {
145-
fmt.Printf("CBOR Encoding Error for Babbage: %v\n", err)
146-
}
147-
return data
148-
}
149-
150-
func mockConwayCBOR() []byte {
151-
conwayHeader := ConwayBlockHeader{BabbageBlockHeader: BabbageBlockHeader{}}
152-
data, _ := cbor.Marshal(conwayHeader)
153-
return data
154-
}
155-
156-
func TestNewBlockHeaderFromCbor(t *testing.T) {
157-
tests := []struct {
158-
name string
159-
blockType uint
160-
data []byte
161-
expectErr bool
162-
expectedFn string
163-
}{
164-
{"Shelley Block", BlockTypeShelley, mockShelleyCBOR(), false, "NewShelleyBlockHeaderFromCbor"},
165-
{"Allegra Block", BlockTypeAllegra, mockAllegraCBOR(), false, "NewAllegraBlockHeaderFromCbor"},
166-
{"Mary Block", BlockTypeMary, mockMaryCBOR(), false, "NewMaryBlockHeaderFromCbor"},
167-
{"Alonzo Block", BlockTypeAlonzo, mockAlonzoCBOR(), false, "NewAlonzoBlockHeaderFromCbor"},
168-
{"Babbage Block", BlockTypeBabbage, mockBabbageCBOR(), false, "NewBabbageBlockHeaderFromCbor"},
169-
{"Conway Block", BlockTypeConway, mockConwayCBOR(), false, "NewConwayBlockHeaderFromCbor"},
170-
{"Invalid Block Type", 9999, []byte{0xFF, 0x00, 0x00}, true, "UnknownFunction"},
171-
}
172-
173-
for _, test := range tests {
174-
t.Run(test.name, func(t *testing.T) {
175-
fmt.Printf("\n Running Test: %s\n", test.name)
176-
177-
header, err := NewBlockHeaderFromCbor(test.blockType, test.data)
178-
179-
if test.expectErr {
180-
if err == nil {
181-
t.Errorf("Expected error for %s, but got none!", test.name)
182-
} else {
183-
fmt.Printf("Expected failure for %s: %v\n", test.name, err)
184-
}
185-
} else {
186-
if err != nil {
187-
t.Errorf("Unexpected error for %s: %v", test.name, err)
188-
} else if header == nil {
189-
t.Errorf("Expected non-nil block header for %s, but got nil", test.name)
190-
} else {
191-
fmt.Printf("Test Passed: %s → %s executed successfully!\n", test.name, test.expectedFn)
192-
}
193-
}
194-
})
195-
}
196-
}

0 commit comments

Comments
 (0)