Files

49 lines
1.9 KiB
Go

// Copyright (C) 2025, Lux Industries Inc. All rights reserved.
// See the file LICENSE for licensing terms.
package atomic
import (
"context"
"encoding/base64"
"testing"
"github.com/luxfi/ids"
"github.com/luxfi/node/v2/quasar/engine/chain/block"
"github.com/luxfi/evm/plugin/evm/message"
"github.com/luxfi/geth/common"
"github.com/stretchr/testify/require"
)
func TestMarshalSummary(t *testing.T) {
atomicSummary, err := NewSummary(common.Hash{1}, 2, common.Hash{3}, common.Hash{4})
require.NoError(t, err, "failed to create summary")
require.Equal(t, common.Hash{1}, atomicSummary.GetBlockHash())
require.Equal(t, uint64(2), atomicSummary.Height())
require.Equal(t, common.Hash{3}, atomicSummary.GetBlockRoot())
expectedBase64Bytes := "AAAAAAAAAAAAAgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="
require.Equal(t, expectedBase64Bytes, base64.StdEncoding.EncodeToString(atomicSummary.Bytes()))
expectedID := ids.FromStringOrPanic("256pj4a3SBG5kervhxKfeKpNRcVR1xk5BzTpkTkybkM8uMPu6Q")
require.Equal(t, expectedID, atomicSummary.ID())
parser := NewSummaryParser()
called := false
acceptImplTest := func(message.Syncable) (block.StateSyncMode, error) {
called = true
return block.StateSyncSkipped, nil
}
s, err := parser.Parse(atomicSummary.Bytes(), acceptImplTest)
require.NoError(t, err, "failed to parse summary")
require.Equal(t, atomicSummary.GetBlockHash(), s.GetBlockHash())
require.Equal(t, atomicSummary.Height(), s.Height())
require.Equal(t, atomicSummary.GetBlockRoot(), s.GetBlockRoot())
require.Equal(t, atomicSummary.AtomicRoot, s.(*Summary).AtomicRoot)
require.Equal(t, atomicSummary.Bytes(), s.Bytes())
mode, err := s.Accept(context.TODO())
require.NoError(t, err, "failed to accept summary")
require.Equal(t, block.StateSyncSkipped, mode)
require.True(t, called)
}