diff --git a/cli/cmd.go b/cli/cmd.go index c6617dcfdae..92a366eb5e1 100644 --- a/cli/cmd.go +++ b/cli/cmd.go @@ -216,6 +216,13 @@ func GetAPI(ctx *cli.Context) (api.Common, jsonrpc.ClientCloser, error) { log.Errorf("repoType type does not match the type of repo.RepoType") } + if tn, ok := ctx.App.Metadata["testnode-storage"]; ok { + return tn.(api.StorageMiner), func() {}, nil + } + if tn, ok := ctx.App.Metadata["testnode-full"]; ok { + return tn.(api.FullNode), func() {}, nil + } + addr, headers, err := GetRawAPI(ctx, t) if err != nil { return nil, nil, err @@ -225,6 +232,10 @@ func GetAPI(ctx *cli.Context) (api.Common, jsonrpc.ClientCloser, error) { } func GetFullNodeAPI(ctx *cli.Context) (api.FullNode, jsonrpc.ClientCloser, error) { + if tn, ok := ctx.App.Metadata["testnode-full"]; ok { + return tn.(api.FullNode), func() {}, nil + } + addr, headers, err := GetRawAPI(ctx, repo.FullNode) if err != nil { return nil, nil, err @@ -234,6 +245,10 @@ func GetFullNodeAPI(ctx *cli.Context) (api.FullNode, jsonrpc.ClientCloser, error } func GetStorageMinerAPI(ctx *cli.Context, opts ...jsonrpc.Option) (api.StorageMiner, jsonrpc.ClientCloser, error) { + if tn, ok := ctx.App.Metadata["testnode-storage"]; ok { + return tn.(api.StorageMiner), func() {}, nil + } + addr, headers, err := GetRawAPI(ctx, repo.StorageMiner) if err != nil { return nil, nil, err diff --git a/cmd/lotus-storage-miner/allinfo_test.go b/cmd/lotus-storage-miner/allinfo_test.go new file mode 100644 index 00000000000..562714fa077 --- /dev/null +++ b/cmd/lotus-storage-miner/allinfo_test.go @@ -0,0 +1,76 @@ +package main + +import ( + "flag" + "testing" + "time" + + logging "github.com/ipfs/go-log/v2" + "github.com/stretchr/testify/require" + "github.com/urfave/cli/v2" + + "github.com/filecoin-project/go-state-types/abi" + + "github.com/filecoin-project/lotus/api/test" + "github.com/filecoin-project/lotus/build" + "github.com/filecoin-project/lotus/chain/actors/policy" + "github.com/filecoin-project/lotus/lib/lotuslog" + "github.com/filecoin-project/lotus/node/repo" + builder "github.com/filecoin-project/lotus/node/test" +) + +func TestMinerAllInfo(t *testing.T) { + if testing.Short() { + t.Skip("skipping test in short mode") + } + + _ = logging.SetLogLevel("*", "INFO") + + policy.SetConsensusMinerMinPower(abi.NewStoragePower(2048)) + policy.SetSupportedProofTypes(abi.RegisteredSealProof_StackedDrg2KiBV1) + policy.SetMinVerifiedDealSize(abi.NewStoragePower(256)) + + _test = true + + lotuslog.SetupLogLevels() + logging.SetLogLevel("miner", "ERROR") + logging.SetLogLevel("chainstore", "ERROR") + logging.SetLogLevel("chain", "ERROR") + logging.SetLogLevel("sub", "ERROR") + logging.SetLogLevel("storageminer", "ERROR") + + oldDelay := policy.GetPreCommitChallengeDelay() + policy.SetPreCommitChallengeDelay(5) + t.Cleanup(func() { + policy.SetPreCommitChallengeDelay(oldDelay) + }) + + var n []test.TestNode + var sn []test.TestStorageNode + + run := func(t *testing.T) { + app := cli.NewApp() + app.Metadata = map[string]interface{}{ + "repoType": repo.StorageMiner, + "testnode-full": n[0], + "testnode-storage": sn[0], + } + build.RunningNodeType = build.NodeMiner + + cctx := cli.NewContext(app, flag.NewFlagSet("", flag.ContinueOnError), nil) + + require.NoError(t, infoAllCmd.Action(cctx)) + } + + bp := func(t *testing.T, nFull int, storage []test.StorageMiner) ([]test.TestNode, []test.TestStorageNode) { + n, sn = builder.Builder(t, nFull, storage) + + t.Run("pre-info-all", run) + + return n, sn + } + + test.TestDealFlow(t, bp, time.Second, false, false) + + t.Run("post-info-all", run) +} diff --git a/cmd/lotus-storage-miner/info_all.go b/cmd/lotus-storage-miner/info_all.go index 265ba78a4d8..51755302895 100644 --- a/cmd/lotus-storage-miner/info_all.go +++ b/cmd/lotus-storage-miner/info_all.go @@ -10,6 +10,8 @@ import ( lcli "github.com/filecoin-project/lotus/cli" ) +var _test = false + var infoAllCmd = &cli.Command{ Name: "all", Usage: "dump all related miner info", @@ -150,9 +152,11 @@ var infoAllCmd = &cli.Command{ } } - fmt.Println("\n#: Goroutines") - if err := lcli.PprofGoroutines.Action(cctx); err != nil { - return err + if !_test { + fmt.Println("\n#: Goroutines") + if err := lcli.PprofGoroutines.Action(cctx); err != nil { + return err + } } return nil diff --git a/node/impl/common/common.go b/node/impl/common/common.go index b07c1830520..da7cfff25aa 100644 --- a/node/impl/common/common.go +++ b/node/impl/common/common.go @@ -121,6 +121,12 @@ func (a *CommonAPI) NetFindPeer(ctx context.Context, p peer.ID) (peer.AddrInfo, func (a *CommonAPI) NetAutoNatStatus(ctx context.Context) (i api.NatInfo, err error) { autonat := a.RawHost.(*basichost.BasicHost).AutoNat + if autonat == nil { + return api.NatInfo{ + Reachability: network.ReachabilityUnknown, + }, nil + } + var maddr string if autonat.Status() == network.ReachabilityPublic { pa, err := autonat.PublicAddr()