wormhole/node/pkg/common/readiness_test.go

119 lines
4.9 KiB
Go

package common
import (
"testing"
"github.com/certusone/wormhole/node/pkg/readiness"
"github.com/wormhole-foundation/wormhole/sdk/vaa"
"github.com/stretchr/testify/assert"
)
const (
// Ethereum is defined in readiness.go.
ReadinessSolanaSyncing readiness.Component = "solanaSyncing"
ReadinessTerraSyncing readiness.Component = "terraSyncing"
ReadinessAlgorandSyncing readiness.Component = "algorandSyncing"
ReadinessNearSyncing readiness.Component = "nearSyncing"
ReadinessAptosSyncing readiness.Component = "aptosSyncing"
ReadinessSuiSyncing readiness.Component = "suiSyncing"
ReadinessBSCSyncing readiness.Component = "bscSyncing"
ReadinessPolygonSyncing readiness.Component = "polygonSyncing"
ReadinessAvalancheSyncing readiness.Component = "avalancheSyncing"
ReadinessOasisSyncing readiness.Component = "oasisSyncing"
ReadinessAuroraSyncing readiness.Component = "auroraSyncing"
ReadinessFantomSyncing readiness.Component = "fantomSyncing"
ReadinessKaruraSyncing readiness.Component = "karuraSyncing"
ReadinessAcalaSyncing readiness.Component = "acalaSyncing"
ReadinessKlaytnSyncing readiness.Component = "klaytnSyncing"
ReadinessCeloSyncing readiness.Component = "celoSyncing"
ReadinessMoonbeamSyncing readiness.Component = "moonbeamSyncing"
ReadinessNeonSyncing readiness.Component = "neonSyncing"
ReadinessTerra2Syncing readiness.Component = "terra2Syncing"
ReadinessInjectiveSyncing readiness.Component = "injectiveSyncing"
ReadinessXplaSyncing readiness.Component = "xplaSyncing"
ReadinessPythNetSyncing readiness.Component = "pythnetSyncing"
ReadinessArbitrumSyncing readiness.Component = "arbitrumSyncing"
ReadinessOptimismSyncing readiness.Component = "optimismSyncing"
ReadinessBaseSyncing readiness.Component = "baseSyncing"
ReadinessWormchainSyncing readiness.Component = "wormchainSyncing"
)
// This test is just to make sure that nothing got broken when we switched from manually specifying the readiness syncing labels.
// Once this functionality is merged, this test can probably be deleted (so that we don't need to keep adding new chains going forward).
func TestConvertChainIdToReadinessSyncing(t *testing.T) {
type test struct {
input vaa.ChainID
output readiness.Component
}
// Positive Test Cases
p_tests := []test{
{input: vaa.ChainIDSolana, output: ReadinessSolanaSyncing},
{input: vaa.ChainIDEthereum, output: ReadinessEthSyncing},
{input: vaa.ChainIDTerra, output: ReadinessTerraSyncing},
{input: vaa.ChainIDBSC, output: ReadinessBSCSyncing},
{input: vaa.ChainIDPolygon, output: ReadinessPolygonSyncing},
{input: vaa.ChainIDAvalanche, output: ReadinessAvalancheSyncing},
{input: vaa.ChainIDOasis, output: ReadinessOasisSyncing},
{input: vaa.ChainIDAlgorand, output: ReadinessAlgorandSyncing},
{input: vaa.ChainIDAptos, output: ReadinessAptosSyncing},
{input: vaa.ChainIDSui, output: ReadinessSuiSyncing},
{input: vaa.ChainIDNear, output: ReadinessNearSyncing},
{input: vaa.ChainIDAurora, output: ReadinessAuroraSyncing},
{input: vaa.ChainIDFantom, output: ReadinessFantomSyncing},
{input: vaa.ChainIDKarura, output: ReadinessKaruraSyncing},
{input: vaa.ChainIDAcala, output: ReadinessAcalaSyncing},
{input: vaa.ChainIDKlaytn, output: ReadinessKlaytnSyncing},
{input: vaa.ChainIDCelo, output: ReadinessCeloSyncing},
{input: vaa.ChainIDMoonbeam, output: ReadinessMoonbeamSyncing},
{input: vaa.ChainIDNeon, output: ReadinessNeonSyncing},
{input: vaa.ChainIDTerra2, output: ReadinessTerra2Syncing},
{input: vaa.ChainIDInjective, output: ReadinessInjectiveSyncing},
{input: vaa.ChainIDArbitrum, output: ReadinessArbitrumSyncing},
{input: vaa.ChainIDPythNet, output: ReadinessPythNetSyncing},
{input: vaa.ChainIDOptimism, output: ReadinessOptimismSyncing},
{input: vaa.ChainIDXpla, output: ReadinessXplaSyncing},
// BTC readiness not defined yet {input: vaa.ChainIDBtc, output: ReadinessBtcSyncing},
{input: vaa.ChainIDBase, output: ReadinessBaseSyncing},
}
// Negative Test Cases
n_tests := []test{
{input: vaa.ChainIDUnset, output: ""},
}
for _, tc := range p_tests {
t.Run(tc.input.String(), func(t *testing.T) {
chainId, err := ConvertChainIdToReadinessSyncing(tc.input)
assert.Equal(t, tc.output, chainId)
assert.NoError(t, err)
})
}
for _, tc := range n_tests {
t.Run(tc.input.String(), func(t *testing.T) {
chainId, err := ConvertChainIdToReadinessSyncing(tc.input)
assert.Equal(t, tc.output, chainId)
assert.Error(t, err)
})
}
}
func TestMustRegisterReadinessSyncing(t *testing.T) {
// The first time should work.
assert.NotPanics(t, func() {
MustRegisterReadinessSyncing(vaa.ChainIDEthereum)
})
// A second time should panic.
assert.Panics(t, func() {
MustRegisterReadinessSyncing(vaa.ChainIDEthereum)
})
// An invalid chainID should panic.
assert.Panics(t, func() {
MustRegisterReadinessSyncing(vaa.ChainIDUnset)
})
}