Files
prysm/runtime/version/fork_test.go
terence 2f067c4164 Add supported / unsupported version for fork enum (#16030)
* gate unreleased forks

* Preston + Bastin's feedback

* Rename back to all versions

* Clean up, mark PR ready for review

* Changelog
2025-11-20 14:58:41 +00:00

132 lines
2.9 KiB
Go

package version_test
import (
"slices"
"sort"
"testing"
"github.com/OffchainLabs/prysm/v7/config/params"
"github.com/OffchainLabs/prysm/v7/consensus-types/primitives"
"github.com/OffchainLabs/prysm/v7/runtime/version"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestVersionString(t *testing.T) {
tests := []struct {
name string
version int
want string
}{
{
name: "phase0",
version: version.Phase0,
want: "phase0",
},
{
name: "altair",
version: version.Altair,
want: "altair",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := version.String(tt.version); got != tt.want {
t.Errorf("String() = %v, want %v", got, tt.want)
}
})
}
}
func TestVersionSorting(t *testing.T) {
versions := version.All()
expected := slices.Clone(versions)
sort.Ints(expected)
tests := []struct {
name string
expected []int
}{
{
name: "allVersions sorted in ascending order",
expected: expected,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
assert.Equal(t, tt.expected, versions, "allVersions should match expected order")
})
}
}
func TestUnsupportedVersionsExcludedFromAll(t *testing.T) {
for _, v := range unsupportedVersions() {
assert.NotContains(t, version.All(), v, "unsupported version %s should not be returned by version.All()", version.String(v))
}
}
func TestUnsupportedVersionsAreNotScheduledOnTestnets(t *testing.T) {
unsupported := unsupportedVersions()
if len(unsupported) == 0 {
t.Skip("no unsupported versions defined")
}
testnetConfigs := []*params.BeaconChainConfig{
params.HoleskyConfig(),
params.SepoliaConfig(),
params.HoodiConfig(),
}
for _, v := range unsupported {
for _, cfg := range testnetConfigs {
epoch := forkEpochForVersion(cfg, v)
require.Equalf(
t,
cfg.FarFutureEpoch,
epoch,
"unsupported version %s should not be scheduled on %s (epoch=%d)",
version.String(v),
cfg.ConfigName,
epoch,
)
}
}
}
func forkEpochForVersion(cfg *params.BeaconChainConfig, v int) primitives.Epoch {
switch v {
case version.Phase0:
return cfg.GenesisEpoch
case version.Altair:
return cfg.AltairForkEpoch
case version.Bellatrix:
return cfg.BellatrixForkEpoch
case version.Capella:
return cfg.CapellaForkEpoch
case version.Deneb:
return cfg.DenebForkEpoch
case version.Electra:
return cfg.ElectraForkEpoch
case version.Fulu:
return cfg.FuluForkEpoch
default:
if version.IsUnsupported(v) {
return cfg.FarFutureEpoch
}
panic("forkEpochForVersion missing version " + version.String(v))
}
}
func unsupportedVersions() []int {
var unsupportedVersions []int
for v := 0; ; v++ {
if version.String(v) == "unknown version" {
break
}
if version.IsUnsupported(v) {
unsupportedVersions = append(unsupportedVersions, v)
}
}
return unsupportedVersions
}