SturdyConfig Fixed: ITestID

This commit is contained in:
Andrew Jackson (Ajax) 2023-07-12 11:02:23 -05:00
parent 3212a23741
commit c89e9ca44f
6 changed files with 43 additions and 43 deletions

View File

@ -10,35 +10,21 @@ import (
"github.com/filecoin-project/lotus/itests/kit"
"github.com/filecoin-project/lotus/lib/sturdy/clusterdb"
"github.com/filecoin-project/lotus/node"
"github.com/filecoin-project/lotus/node/config"
"github.com/filecoin-project/lotus/node/impl"
)
func staticConfig() config.ClusterDB {
return config.ClusterDB{
Hosts: []string{"127.0.0.1"},
Username: "yugabyte",
Password: "yugabyte",
Database: "yugabyte",
Port: "5433",
ITest: clusterdb.ITestNewID(),
}
}
func withSetup(t *testing.T, f func(*kit.TestMiner)) {
_, miner, _ := kit.EnsembleMinimal(t,
kit.LatestActorsAt(-1),
kit.MockProofs(),
kit.ConstructorOpts(
node.Override(new(*clusterdb.DB), clusterdb.NewFromConfig), //Why does this not work?
node.Override(new(clusterdb.ITestID), func() clusterdb.ITestID {
return clusterdb.ITestNewID()
}),
),
)
var err error
miner.ClusterDB, err = clusterdb.NewFromConfig(staticConfig())
if err != nil {
t.Fatal("Yugabyte connection error:", err)
}
defer miner.ClusterDB.ITestDeleteAll()
defer miner.BaseAPI.(*impl.StorageMinerAPI).ClusterDB.ITestDeleteAll()
f(miner)
}
@ -47,7 +33,8 @@ func TestCrud(t *testing.T) {
defer cancel()
withSetup(t, func(miner *kit.TestMiner) {
err := miner.ClusterDB.Exec(ctx, `
cdb := miner.BaseAPI.(*impl.StorageMinerAPI).ClusterDB
err := cdb.Exec(ctx, `
INSERT INTO
itest_scratch (some_int, content)
VALUES
@ -62,7 +49,7 @@ func TestCrud(t *testing.T) {
Animal string `db:"content"`
Unpopulated int
}
err = miner.ClusterDB.Select(ctx, &ints, "SELECT content, some_int FROM itest_scratch")
err = cdb.Select(ctx, &ints, "SELECT content, some_int FROM itest_scratch")
if err != nil {
t.Fatal("Could not select: ", err)
}
@ -84,17 +71,18 @@ func TestTransaction(t *testing.T) {
defer cancel()
withSetup(t, func(miner *kit.TestMiner) {
if err := miner.ClusterDB.Exec(ctx, "INSERT INTO itest_scratch (some_int) VALUES (4), (5), (6)"); err != nil {
cdb := miner.BaseAPI.(*impl.StorageMinerAPI).ClusterDB
if err := cdb.Exec(ctx, "INSERT INTO itest_scratch (some_int) VALUES (4), (5), (6)"); err != nil {
t.Fatal("E0", err)
}
miner.ClusterDB.BeginTransaction(ctx, func(tx *clusterdb.Transaction) (commit bool) {
cdb.BeginTransaction(ctx, func(tx *clusterdb.Transaction) (commit bool) {
if err := tx.Exec(ctx, "INSERT INTO itest_scratch (some_int) VALUES (7), (8), (9)"); err != nil {
t.Fatal("E1", err)
}
// sum1 is read from OUTSIDE the transaction so it's the old value
var sum1 int
if err := miner.ClusterDB.QueryRow(ctx, "SELECT SUM(some_int) FROM itest_scratch").Scan(&sum1); err != nil {
if err := cdb.QueryRow(ctx, "SELECT SUM(some_int) FROM itest_scratch").Scan(&sum1); err != nil {
t.Fatal("E2", err)
}
if sum1 != 4+5+6 {
@ -114,7 +102,7 @@ func TestTransaction(t *testing.T) {
var sum2 int
// Query() example (yes, QueryRow would be preferred here)
q, err := miner.ClusterDB.Query(ctx, "SELECT SUM(some_int) FROM itest_scratch")
q, err := cdb.Query(ctx, "SELECT SUM(some_int) FROM itest_scratch")
if err != nil {
t.Fatal("E4", err)
}
@ -138,7 +126,8 @@ func TestPartialWalk(t *testing.T) {
defer cancel()
withSetup(t, func(miner *kit.TestMiner) {
if err := miner.ClusterDB.Exec(ctx, `
cdb := miner.BaseAPI.(*impl.StorageMinerAPI).ClusterDB
if err := cdb.Exec(ctx, `
INSERT INTO
itest_scratch (content, some_int)
VALUES
@ -153,7 +142,7 @@ func TestPartialWalk(t *testing.T) {
// TASK: FIND THE ID of the string with a specific SHA256
needle := "b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9"
q, err := miner.ClusterDB.Query(ctx, `SELECT id, content FROM itest_scratch`)
q, err := cdb.Query(ctx, `SELECT id, content FROM itest_scratch`)
if err != nil {
t.Fatal("e2", err)
}
@ -168,7 +157,7 @@ func TestPartialWalk(t *testing.T) {
for q.Next() {
if err := q.StructScan(&tmp); err != nil {
t.Fatal("")
t.Fatal("structscan err " + err.Error())
}
bSha := sha256.Sum256([]byte(tmp.Src))

View File

@ -49,7 +49,6 @@ import (
"github.com/filecoin-project/lotus/cmd/lotus-worker/sealworker"
"github.com/filecoin-project/lotus/gateway"
"github.com/filecoin-project/lotus/genesis"
"github.com/filecoin-project/lotus/lib/sturdy/clusterdb"
"github.com/filecoin-project/lotus/markets/idxprov"
"github.com/filecoin-project/lotus/markets/idxprov/idxprov_test"
lotusminer "github.com/filecoin-project/lotus/miner"
@ -764,10 +763,6 @@ func (n *Ensemble) Start() *Ensemble {
)
}
opts = append(opts, node.Override(new(*clusterdb.DB), func(cfg config.ClusterDB) (*clusterdb.DB, error) {
return clusterdb.NewFromConfig(cfg)
}))
// start node
stop, err := node.New(ctx, opts...)
require.NoError(n.t, err)

View File

@ -24,7 +24,6 @@ import (
"github.com/filecoin-project/lotus/api"
"github.com/filecoin-project/lotus/build"
"github.com/filecoin-project/lotus/chain/wallet/key"
"github.com/filecoin-project/lotus/lib/sturdy/clusterdb"
"github.com/filecoin-project/lotus/miner"
sealing "github.com/filecoin-project/lotus/storage/pipeline"
"github.com/filecoin-project/lotus/storage/sealer/storiface"
@ -88,8 +87,6 @@ type TestMiner struct {
RemoteListener net.Listener
options nodeOpts
ClusterDB *clusterdb.DB
}
func (tm *TestMiner) PledgeSectors(ctx context.Context, n, existing int, blockNotif <-chan struct{}) {

View File

@ -1,7 +1,5 @@
package clusterdb
// TODO 2 - build integration tests
import (
"context"
"embed"
@ -22,9 +20,11 @@ import (
"github.com/filecoin-project/lotus/node/config"
)
type ITestID string
// ItestNewID see ITestWithID doc
func ITestNewID() string {
return strconv.Itoa(rand.Intn(99999))
func ITestNewID() ITestID {
return ITestID(strconv.Itoa(rand.Intn(99999)))
}
type DB struct {
@ -48,15 +48,30 @@ func NewFromConfig(cfg config.ClusterDB) (*DB, error) {
cfg.Password,
cfg.Database,
cfg.Port,
cfg.ITest,
"",
func(s string) { logger.Error(s) },
)
}
func NewFromConfigWithITestID(cfg config.ClusterDB) func(id ITestID) (*DB, error) {
return func(id ITestID) (*DB, error) {
return New(
cfg.Hosts,
cfg.Username,
cfg.Password,
cfg.Database,
cfg.Port,
id,
func(s string) { logger.Error(s) },
)
}
}
// New is to be called once per binary to establish the pool.
// log() is for errors. It returns an upgraded database's connection.
// This entry point serves both production and integration tests, so it's more DI.
func New(hosts []string, username, password, database, port, itest string, log func(string)) (*DB, error) {
func New(hosts []string, username, password, database, port string, itestID ITestID, log func(string)) (*DB, error) {
itest := string(itestID)
connString := ""
if len(hosts) > 0 {
connString = "host=" + hosts[0] + " "

View File

@ -232,7 +232,8 @@ func ConfigStorageMiner(c interface{}) Option {
Override(new(config.SealerConfig), cfg.Storage),
Override(new(config.ProvingConfig), cfg.Proving),
Override(new(*ctladdr.AddressSelector), modules.AddressSelector(&cfg.Addresses)),
Override(new(*clusterdb.DB), clusterdb.NewFromConfig),
Override(new(*clusterdb.DB), clusterdb.NewFromConfigWithITestID(cfg.ClusterDB)),
Override(new(clusterdb.ITestID), ""),
)
}

View File

@ -45,6 +45,7 @@ import (
"github.com/filecoin-project/lotus/chain/actors/builtin"
"github.com/filecoin-project/lotus/chain/gen"
"github.com/filecoin-project/lotus/chain/types"
"github.com/filecoin-project/lotus/lib/sturdy/clusterdb"
mktsdagstore "github.com/filecoin-project/lotus/markets/dagstore"
"github.com/filecoin-project/lotus/markets/storageadapter"
"github.com/filecoin-project/lotus/miner"
@ -122,6 +123,8 @@ type StorageMinerAPI struct {
GetSealingConfigFunc dtypes.GetSealingConfigFunc `optional:"true"`
GetExpectedSealDurationFunc dtypes.GetExpectedSealDurationFunc `optional:"true"`
SetExpectedSealDurationFunc dtypes.SetExpectedSealDurationFunc `optional:"true"`
ClusterDB *clusterdb.DB
}
var _ api.StorageMiner = &StorageMinerAPI{}