mirror of
https://gitlab.com/pulsechaincom/prysm-pulse.git
synced 2024-12-25 12:57:18 +00:00
e477fdfd6d
* Update rules_go and fix proto conflicts * gaz * Update generated code * First pass inclusion of using baked states * more emptypb fixes * remove testnet genesis files, only embed mainnet * Refactoring for SaveGenesisData, fix tests that use mainnet config but do not support mainnet genesis values * a bit more refactoring, load genesis from a file. Needs tests still * Add method to ensure an embedded genesis file also has the appropriate genesis block * gofmt * more clear error * Check genesis fork version to ensure testnet config matches genesis file * viz * test for SaveGenesisData * More genesis db method tests * Merge * Minor tweaks, lint, fmt, etc * Add more test to genesis db methods * Revert beacon-chain/state/stateV0/BUILD.bazel * Update beacon-chain/db/iface/errors.go Co-authored-by: Raul Jordan <raul@prysmaticlabs.com> * PR feedback * Update beacon-chain/db/kv/genesis.go Co-authored-by: terence tsao <terence@prysmaticlabs.com> * fmt.Errorf works better for nil errors Co-authored-by: Raul Jordan <raul@prysmaticlabs.com> Co-authored-by: terence tsao <terence@prysmaticlabs.com>
118 lines
2.7 KiB
Go
118 lines
2.7 KiB
Go
package kv
|
|
|
|
import (
|
|
"context"
|
|
"os"
|
|
"testing"
|
|
|
|
"github.com/bazelbuild/rules_go/go/tools/bazel"
|
|
"github.com/prysmaticlabs/prysm/beacon-chain/db/iface"
|
|
"github.com/prysmaticlabs/prysm/shared/params"
|
|
"github.com/prysmaticlabs/prysm/shared/testutil"
|
|
"github.com/prysmaticlabs/prysm/shared/testutil/assert"
|
|
)
|
|
|
|
func TestStore_SaveGenesisData(t *testing.T) {
|
|
ctx := context.Background()
|
|
db := setupDB(t)
|
|
|
|
gs, err := testutil.NewBeaconState()
|
|
assert.NoError(t, err)
|
|
|
|
assert.NoError(t, db.SaveGenesisData(ctx, gs))
|
|
|
|
testGenesisDataSaved(t, db)
|
|
}
|
|
|
|
func testGenesisDataSaved(t *testing.T, db iface.Database) {
|
|
ctx := context.Background()
|
|
|
|
gb, err := db.GenesisBlock(ctx)
|
|
assert.NoError(t, err)
|
|
assert.NotNil(t, gb)
|
|
|
|
gbHTR, err := gb.Block.HashTreeRoot()
|
|
assert.NoError(t, err)
|
|
|
|
gss, err := db.StateSummary(ctx, gbHTR)
|
|
assert.NoError(t, err)
|
|
assert.NotNil(t, gss)
|
|
|
|
head, err := db.HeadBlock(ctx)
|
|
assert.NoError(t, err)
|
|
assert.NotNil(t, head)
|
|
|
|
headHTR, err := head.Block.HashTreeRoot()
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, gbHTR, headHTR, "head block does not match genesis block")
|
|
}
|
|
|
|
func TestLoadGenesisFromFile(t *testing.T) {
|
|
fp := "testdata/mainnet.genesis.ssz"
|
|
rfp, err := bazel.Runfile(fp)
|
|
if err == nil {
|
|
fp = rfp
|
|
}
|
|
|
|
r, err := os.Open(fp)
|
|
assert.NoError(t, err)
|
|
defer func() {
|
|
assert.NoError(t, r.Close())
|
|
}()
|
|
|
|
db := setupDB(t)
|
|
assert.NoError(t, db.LoadGenesis(context.Background(), r))
|
|
testGenesisDataSaved(t, db)
|
|
|
|
// Loading the same genesis again should not throw an error
|
|
_, err = r.Seek(0, 0)
|
|
assert.NoError(t, err)
|
|
assert.NoError(t, db.LoadGenesis(context.Background(), r))
|
|
}
|
|
|
|
func TestLoadGenesisFromFile_mismatchedForkVersion(t *testing.T) {
|
|
fp := "testdata/altona.genesis.ssz"
|
|
rfp, err := bazel.Runfile(fp)
|
|
if err == nil {
|
|
fp = rfp
|
|
}
|
|
r, err := os.Open(fp)
|
|
assert.NoError(t, err)
|
|
defer func() {
|
|
assert.NoError(t, r.Close())
|
|
}()
|
|
|
|
// Loading a genesis with the wrong fork version as beacon config should throw an error.
|
|
db := setupDB(t)
|
|
assert.ErrorContains(t, "does not match config genesis fork version", db.LoadGenesis(context.Background(), r))
|
|
}
|
|
|
|
func TestEnsureEmbeddedGenesis(t *testing.T) {
|
|
// Embedded Genesis works with Mainnet config
|
|
params.SetupTestConfigCleanup(t)
|
|
cfg := params.BeaconConfig()
|
|
cfg.ConfigName = params.ConfigNames[params.Mainnet]
|
|
params.OverrideBeaconConfig(cfg)
|
|
|
|
ctx := context.Background()
|
|
db := setupDB(t)
|
|
|
|
gb, err := db.GenesisBlock(ctx)
|
|
assert.NoError(t, err)
|
|
if gb != nil {
|
|
t.Fatal("Genesis block exists already")
|
|
}
|
|
|
|
gs, err := db.GenesisState(ctx)
|
|
assert.NoError(t, err)
|
|
assert.NotNil(t, gs, "an embedded genesis state does not exist")
|
|
|
|
assert.NoError(t, db.EnsureEmbeddedGenesis(ctx))
|
|
|
|
gb, err = db.GenesisBlock(ctx)
|
|
assert.NoError(t, err)
|
|
assert.NotNil(t, gb)
|
|
|
|
testGenesisDataSaved(t, db)
|
|
}
|