prysm-pulse/beacon-chain/sync/service_test.go
terence tsao 324a186786 Use justified state as start state for running fork choice (#2093)
* use justified state as start state

* improts
2019-03-27 14:53:43 -05:00

103 lines
2.7 KiB
Go

package sync
import (
"context"
"crypto/rand"
"testing"
"time"
"github.com/prysmaticlabs/prysm/beacon-chain/core/helpers"
"github.com/prysmaticlabs/prysm/beacon-chain/db"
"github.com/prysmaticlabs/prysm/beacon-chain/internal"
pb "github.com/prysmaticlabs/prysm/proto/beacon/p2p/v1"
"github.com/prysmaticlabs/prysm/shared/bls"
"github.com/prysmaticlabs/prysm/shared/params"
)
func NotSyncQuerierConfig() *QuerierConfig {
return &QuerierConfig{
ResponseBufferSize: 100,
CurrentHeadSlot: 10,
}
}
func initializeTestSyncService(ctx context.Context, cfg *Config, synced bool) *Service {
var sqCfg *QuerierConfig
if synced {
sqCfg = DefaultQuerierConfig()
} else {
sqCfg = NotSyncQuerierConfig()
}
services := NewSyncService(ctx, cfg)
sqCfg.BeaconDB = cfg.BeaconDB
sqCfg.P2P = cfg.P2P
sq := NewQuerierService(ctx, sqCfg)
services.Querier = sq
return services
}
func setupInitialDeposits(t *testing.T, numDeposits int) ([]*pb.Deposit, []*bls.SecretKey) {
privKeys := make([]*bls.SecretKey, numDeposits)
deposits := make([]*pb.Deposit, numDeposits)
for i := 0; i < len(deposits); i++ {
priv, err := bls.RandKey(rand.Reader)
if err != nil {
t.Fatal(err)
}
depositInput := &pb.DepositInput{
Pubkey: priv.PublicKey().Marshal(),
}
balance := params.BeaconConfig().MaxDepositAmount
depositData, err := helpers.EncodeDepositData(depositInput, balance, time.Now().Unix())
if err != nil {
t.Fatalf("Cannot encode data: %v", err)
}
deposits[i] = &pb.Deposit{DepositData: depositData}
privKeys[i] = priv
}
return deposits, privKeys
}
func setupTestSyncService(t *testing.T, synced bool) (*Service, *db.BeaconDB) {
db := internal.SetupDB(t)
unixTime := uint64(time.Now().Unix())
deposits, _ := setupInitialDeposits(t, 10)
if err := db.InitializeState(unixTime, deposits, &pb.Eth1Data{}); err != nil {
t.Fatalf("Failed to initialize state: %v", err)
}
cfg := &Config{
ChainService: &mockChainService{
db: db,
},
P2P: &mockP2P{},
BeaconDB: db,
OperationService: &mockOperationService{},
}
service := initializeTestSyncService(context.Background(), cfg, synced)
return service, db
}
func TestStatus_Synced(t *testing.T) {
serviceSynced, db := setupTestSyncService(t, true)
defer internal.TeardownDB(t, db)
if serviceSynced.Status() != nil {
t.Errorf("Wanted nil, but got %v", serviceSynced.Status())
}
}
func TestStatus_NotSynced(t *testing.T) {
serviceNotSynced, db := setupTestSyncService(t, false)
defer internal.TeardownDB(t, db)
_, querierErr := serviceNotSynced.Querier.IsSynced()
if serviceNotSynced.Status() != querierErr {
t.Errorf("Wanted %v, but got %v", querierErr, serviceNotSynced.Status())
}
}