test: chain inspect-usage cli command
This commit is contained in:
parent
ae49729afb
commit
4e37131602
19
cli/chain.go
19
cli/chain.go
@ -416,6 +416,7 @@ var ChainInspectUsage = &cli.Command{
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
Action: func(cctx *cli.Context) error {
|
Action: func(cctx *cli.Context) error {
|
||||||
|
afmt := NewAppFmt(cctx.App)
|
||||||
api, closer, err := GetFullNodeAPI(cctx)
|
api, closer, err := GetFullNodeAPI(cctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -517,23 +518,23 @@ var ChainInspectUsage = &cli.Command{
|
|||||||
|
|
||||||
numRes := cctx.Int("num-results")
|
numRes := cctx.Int("num-results")
|
||||||
|
|
||||||
fmt.Printf("Total Gas Limit: %d\n", sum)
|
afmt.Printf("Total Gas Limit: %d\n", sum)
|
||||||
fmt.Printf("By Sender:\n")
|
afmt.Printf("By Sender:\n")
|
||||||
for i := 0; i < numRes && i < len(senderVals); i++ {
|
for i := 0; i < numRes && i < len(senderVals); i++ {
|
||||||
sv := senderVals[i]
|
sv := senderVals[i]
|
||||||
fmt.Printf("%s\t%0.2f%%\t(total: %d, count: %d)\n", sv.Key, (100*float64(sv.Gas))/float64(sum), sv.Gas, bySenderC[sv.Key])
|
afmt.Printf("%s\t%0.2f%%\t(total: %d, count: %d)\n", sv.Key, (100*float64(sv.Gas))/float64(sum), sv.Gas, bySenderC[sv.Key])
|
||||||
}
|
}
|
||||||
fmt.Println()
|
afmt.Println()
|
||||||
fmt.Printf("By Receiver:\n")
|
afmt.Printf("By Receiver:\n")
|
||||||
for i := 0; i < numRes && i < len(destVals); i++ {
|
for i := 0; i < numRes && i < len(destVals); i++ {
|
||||||
sv := destVals[i]
|
sv := destVals[i]
|
||||||
fmt.Printf("%s\t%0.2f%%\t(total: %d, count: %d)\n", sv.Key, (100*float64(sv.Gas))/float64(sum), sv.Gas, byDestC[sv.Key])
|
afmt.Printf("%s\t%0.2f%%\t(total: %d, count: %d)\n", sv.Key, (100*float64(sv.Gas))/float64(sum), sv.Gas, byDestC[sv.Key])
|
||||||
}
|
}
|
||||||
fmt.Println()
|
afmt.Println()
|
||||||
fmt.Printf("By Method:\n")
|
afmt.Printf("By Method:\n")
|
||||||
for i := 0; i < numRes && i < len(methodVals); i++ {
|
for i := 0; i < numRes && i < len(methodVals); i++ {
|
||||||
sv := methodVals[i]
|
sv := methodVals[i]
|
||||||
fmt.Printf("%s\t%0.2f%%\t(total: %d, count: %d)\n", sv.Key, (100*float64(sv.Gas))/float64(sum), sv.Gas, byMethodC[sv.Key])
|
afmt.Printf("%s\t%0.2f%%\t(total: %d, count: %d)\n", sv.Key, (100*float64(sv.Gas))/float64(sum), sv.Gas, byMethodC[sv.Key])
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
@ -10,9 +10,11 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/filecoin-project/go-state-types/abi"
|
"github.com/filecoin-project/go-state-types/abi"
|
||||||
|
"github.com/filecoin-project/go-state-types/big"
|
||||||
"github.com/filecoin-project/lotus/api"
|
"github.com/filecoin-project/lotus/api"
|
||||||
types "github.com/filecoin-project/lotus/chain/types"
|
types "github.com/filecoin-project/lotus/chain/types"
|
||||||
"github.com/filecoin-project/lotus/chain/types/mock"
|
"github.com/filecoin-project/lotus/chain/types/mock"
|
||||||
|
"github.com/filecoin-project/specs-actors/v7/actors/builtin"
|
||||||
"github.com/golang/mock/gomock"
|
"github.com/golang/mock/gomock"
|
||||||
cid "github.com/ipfs/go-cid"
|
cid "github.com/ipfs/go-cid"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
@ -36,7 +38,6 @@ func TestChainHead(t *testing.T) {
|
|||||||
assert.Regexp(t, regexp.MustCompile(ts.Cids()[0].String()), buf.String())
|
assert.Regexp(t, regexp.MustCompile(ts.Cids()[0].String()), buf.String())
|
||||||
}
|
}
|
||||||
|
|
||||||
// TestGetBlock checks if "chain getblock" returns the block information in the expected format
|
|
||||||
func TestGetBlock(t *testing.T) {
|
func TestGetBlock(t *testing.T) {
|
||||||
app, mockApi, buf, done := NewMockAppWithFullAPI(t, WithCategory("chain", ChainGetBlock))
|
app, mockApi, buf, done := NewMockAppWithFullAPI(t, WithCategory("chain", ChainGetBlock))
|
||||||
defer done()
|
defer done()
|
||||||
@ -72,7 +73,6 @@ func TestGetBlock(t *testing.T) {
|
|||||||
assert.True(t, block.Cid().Equals(out.Cid()))
|
assert.True(t, block.Cid().Equals(out.Cid()))
|
||||||
}
|
}
|
||||||
|
|
||||||
// TestChainReadObj checks if "chain read-obj" prints the referenced IPLD node as hex, if exists
|
|
||||||
func TestReadOjb(t *testing.T) {
|
func TestReadOjb(t *testing.T) {
|
||||||
app, mockApi, buf, done := NewMockAppWithFullAPI(t, WithCategory("chain", ChainReadObjCmd))
|
app, mockApi, buf, done := NewMockAppWithFullAPI(t, WithCategory("chain", ChainReadObjCmd))
|
||||||
defer done()
|
defer done()
|
||||||
@ -95,7 +95,6 @@ func TestReadOjb(t *testing.T) {
|
|||||||
assert.Equal(t, buf.String(), fmt.Sprintf("%x\n", obj.Bytes()))
|
assert.Equal(t, buf.String(), fmt.Sprintf("%x\n", obj.Bytes()))
|
||||||
}
|
}
|
||||||
|
|
||||||
// TestChainDeleteObj checks if "chain delete-obj" deletes an object from the chain blockstore, respecting the --really-do-it flag
|
|
||||||
func TestChainDeleteObj(t *testing.T) {
|
func TestChainDeleteObj(t *testing.T) {
|
||||||
cmd := WithCategory("chain", ChainDeleteObjCmd)
|
cmd := WithCategory("chain", ChainDeleteObjCmd)
|
||||||
block := mock.MkBlock(nil, 0, 0)
|
block := mock.MkBlock(nil, 0, 0)
|
||||||
@ -128,7 +127,6 @@ func TestChainDeleteObj(t *testing.T) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// TestChainStatObj checks if "chain delete-obj" prints size and IPLD link counts for object, respecting the --base flag
|
|
||||||
func TestChainStatObj(t *testing.T) {
|
func TestChainStatObj(t *testing.T) {
|
||||||
cmd := WithCategory("chain", ChainStatObjCmd)
|
cmd := WithCategory("chain", ChainStatObjCmd)
|
||||||
block := mock.MkBlock(nil, 0, 0)
|
block := mock.MkBlock(nil, 0, 0)
|
||||||
@ -179,7 +177,6 @@ func TestChainStatObj(t *testing.T) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// TestChainGetMsg checks if "chain getmessage" properly decodes and serializes as JSON a Message fetched from the IPLD store
|
|
||||||
func TestChainGetMsg(t *testing.T) {
|
func TestChainGetMsg(t *testing.T) {
|
||||||
app, mockApi, buf, done := NewMockAppWithFullAPI(t, WithCategory("chain", ChainGetMsgCmd))
|
app, mockApi, buf, done := NewMockAppWithFullAPI(t, WithCategory("chain", ChainGetMsgCmd))
|
||||||
defer done()
|
defer done()
|
||||||
@ -272,3 +269,53 @@ func TestSetHead(t *testing.T) {
|
|||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestInspectUsage(t *testing.T) {
|
||||||
|
cmd := WithCategory("chain", ChainInspectUsage)
|
||||||
|
ts := mock.TipSet(mock.MkBlock(nil, 0, 0))
|
||||||
|
|
||||||
|
from, err := mock.RandomActorAddress()
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
to, err := mock.RandomActorAddress()
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
msg := mock.UnsignedMessage(*from, *to, 0)
|
||||||
|
msgs := []api.Message{{Cid: msg.Cid(), Message: msg}}
|
||||||
|
|
||||||
|
actor := &types.Actor{
|
||||||
|
Code: builtin.StorageMarketActorCodeID,
|
||||||
|
Nonce: 0,
|
||||||
|
Balance: big.NewInt(1000000000),
|
||||||
|
}
|
||||||
|
|
||||||
|
t.Run("default", func(t *testing.T) {
|
||||||
|
app, mockApi, buf, done := NewMockAppWithFullAPI(t, cmd)
|
||||||
|
defer done()
|
||||||
|
|
||||||
|
ctx, cancel := context.WithCancel(context.Background())
|
||||||
|
defer cancel()
|
||||||
|
|
||||||
|
gomock.InOrder(
|
||||||
|
mockApi.EXPECT().ChainHead(ctx).Return(ts, nil),
|
||||||
|
mockApi.EXPECT().ChainGetParentMessages(ctx, ts.Blocks()[0].Cid()).Return(msgs, nil),
|
||||||
|
mockApi.EXPECT().ChainGetTipSet(ctx, ts.Parents()).Return(nil, nil),
|
||||||
|
mockApi.EXPECT().StateGetActor(ctx, *to, ts.Key()).Return(actor, nil),
|
||||||
|
)
|
||||||
|
|
||||||
|
err := app.Run([]string{"chain", "inspect-usage"})
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
out := buf.String()
|
||||||
|
|
||||||
|
fmt.Println("🔥: ", out)
|
||||||
|
|
||||||
|
// output is plaintext, had to do string matching
|
||||||
|
assert.Contains(t, out, "By Sender")
|
||||||
|
assert.Contains(t, out, from.String())
|
||||||
|
assert.Contains(t, out, "By Receiver")
|
||||||
|
assert.Contains(t, out, to.String())
|
||||||
|
assert.Contains(t, out, "By Method")
|
||||||
|
assert.Contains(t, out, "Send")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user