fix some tests

This commit is contained in:
Guillaume Ballet 2026-04-23 08:04:32 +02:00
parent 1faa499093
commit 690c16fb5c
No known key found for this signature in database
2 changed files with 36 additions and 11 deletions

View file

@ -23,8 +23,8 @@ import (
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
) )
// TestSerializeDeserializeInternalNode tests flat 65-byte serialization and // TestSerializeDeserializeInternalNode tests grouped serialization and
// deserialization of InternalNode through nodeStore. // deserialization of InternalNode through nodeStore at groupDepth=1.
func TestSerializeDeserializeInternalNode(t *testing.T) { func TestSerializeDeserializeInternalNode(t *testing.T) {
leftHash := common.HexToHash("0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef") leftHash := common.HexToHash("0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef")
rightHash := common.HexToHash("0xfedcba0987654321fedcba0987654321fedcba0987654321fedcba0987654321") rightHash := common.HexToHash("0xfedcba0987654321fedcba0987654321fedcba0987654321fedcba0987654321")
@ -39,24 +39,32 @@ func TestSerializeDeserializeInternalNode(t *testing.T) {
rootNode.right = rightRef rootNode.right = rightRef
s.root = rootRef s.root = rootRef
// Serialize the node — flat 65-byte format // Serialize the node — grouped format at groupDepth=1:
serialized := s.serializeNode(rootRef, 8) // [type(1)][groupDepth(1)][bitmap(1)][leftHash(32)][rightHash(32)] = 67 bytes
serialized := s.serializeNode(rootRef, 1)
// Check the serialized format: [type(1)][leftHash(32)][rightHash(32)]
if serialized[0] != nodeTypeInternal { if serialized[0] != nodeTypeInternal {
t.Errorf("Expected type byte to be %d, got %d", nodeTypeInternal, serialized[0]) t.Errorf("Expected type byte to be %d, got %d", nodeTypeInternal, serialized[0])
} }
if serialized[1] != 1 {
t.Errorf("Expected groupDepth byte to be 1, got %d", serialized[1])
}
expectedLen := NodeTypeBytes + 2*HashSize // 1 + 64 = 65 expectedLen := NodeTypeBytes + 1 + 1 + 2*HashSize // type + groupDepth + bitmap + 2 hashes = 67
if len(serialized) != expectedLen { if len(serialized) != expectedLen {
t.Errorf("Expected serialized length to be %d, got %d", expectedLen, len(serialized)) t.Errorf("Expected serialized length to be %d, got %d", expectedLen, len(serialized))
} }
// Check that left and right hashes are embedded directly // Both children present at a 1-level group → bitmap byte = 0b11000000.
if !bytes.Equal(serialized[NodeTypeBytes:NodeTypeBytes+HashSize], leftHash[:]) { if serialized[2] != 0xc0 {
t.Errorf("Expected bitmap byte 0xc0, got 0x%02x", serialized[2])
}
hashesStart := NodeTypeBytes + 1 + 1
if !bytes.Equal(serialized[hashesStart:hashesStart+HashSize], leftHash[:]) {
t.Error("Left hash not found at expected position") t.Error("Left hash not found at expected position")
} }
if !bytes.Equal(serialized[NodeTypeBytes+HashSize:], rightHash[:]) { if !bytes.Equal(serialized[hashesStart+HashSize:], rightHash[:]) {
t.Error("Right hash not found at expected position") t.Error("Right hash not found at expected position")
} }
@ -195,8 +203,9 @@ func TestDeserializeInvalidType(t *testing.T) {
// TestDeserializeInvalidLength tests deserialization with invalid data length. // TestDeserializeInvalidLength tests deserialization with invalid data length.
func TestDeserializeInvalidLength(t *testing.T) { func TestDeserializeInvalidLength(t *testing.T) {
s := newNodeStore() s := newNodeStore()
// InternalNode with valid type byte but wrong length (needs exactly 65 bytes) // InternalNode group header with groupDepth=1 (valid) and a 1-byte bitmap
invalidData := []byte{nodeTypeInternal, 0, 0, 0} // announcing two present hashes, but the hash payload is missing.
invalidData := []byte{nodeTypeInternal, 1, 0xc0}
_, err := s.deserializeNode(invalidData, 0) _, err := s.deserializeNode(invalidData, 0)
if err == nil { if err == nil {
@ -208,6 +217,21 @@ func TestDeserializeInvalidLength(t *testing.T) {
} }
} }
// TestDeserializeInvalidGroupDepth tests deserialization when the group depth
// byte is out of the supported 1..MaxGroupDepth range.
func TestDeserializeInvalidGroupDepth(t *testing.T) {
s := newNodeStore()
invalidData := []byte{nodeTypeInternal, 0, 0, 0}
_, err := s.deserializeNode(invalidData, 0)
if err == nil {
t.Fatal("Expected error for invalid group depth, got nil")
}
if err.Error() != "invalid group depth" {
t.Errorf("Expected 'invalid group depth' error, got: %v", err)
}
}
// TestKeyToPath tests the keyToPath function. // TestKeyToPath tests the keyToPath function.
func TestKeyToPath(t *testing.T) { func TestKeyToPath(t *testing.T) {
tests := []struct { tests := []struct {

View file

@ -364,6 +364,7 @@ func (s *nodeStore) collectNodes(ref nodeRef, path []byte, flushfn nodeFlushFn,
return err return err
} }
flushfn(path, s.computeHash(ref), s.serializeNode(ref, groupDepth)) flushfn(path, s.computeHash(ref), s.serializeNode(ref, groupDepth))
node.dirty = false
return nil return nil
} }
// Not at a group boundary - this shouldn't happen if we're called correctly from root // Not at a group boundary - this shouldn't happen if we're called correctly from root