test: cli chain getblock command
Unit test for the cli `chain getblock` command. Tests if output is JSON in the expected format.
This commit is contained in:
parent
35918cbd7e
commit
78649d45b9
@ -99,6 +99,8 @@ var ChainGetBlock = &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
|
||||||
@ -126,7 +128,7 @@ var ChainGetBlock = &cli.Command{
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Println(string(out))
|
afmt.Println(string(out))
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -165,9 +167,8 @@ var ChainGetBlock = &cli.Command{
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Println(string(out))
|
afmt.Println(string(out))
|
||||||
return nil
|
return nil
|
||||||
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,13 +3,16 @@ package cli
|
|||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
|
"encoding/json"
|
||||||
"regexp"
|
"regexp"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/filecoin-project/lotus/api"
|
"github.com/filecoin-project/lotus/api"
|
||||||
"github.com/filecoin-project/lotus/api/mocks"
|
"github.com/filecoin-project/lotus/api/mocks"
|
||||||
|
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/golang/mock/gomock"
|
"github.com/golang/mock/gomock"
|
||||||
|
cid "github.com/ipfs/go-cid"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
ucli "github.com/urfave/cli/v2"
|
ucli "github.com/urfave/cli/v2"
|
||||||
)
|
)
|
||||||
@ -52,3 +55,38 @@ 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 "lotus chain getblock" returns the block information in the expected format
|
||||||
|
func TestGetBlock(t *testing.T) {
|
||||||
|
app, mockApi, buf, done := newMockAppWithFullAPI(t, WithCategory("chain", ChainGetBlock))
|
||||||
|
defer done()
|
||||||
|
|
||||||
|
ctx, cancel := context.WithCancel(context.Background())
|
||||||
|
defer cancel()
|
||||||
|
|
||||||
|
block := mock.MkBlock(nil, 0, 0)
|
||||||
|
blockMsgs := api.BlockMessages{}
|
||||||
|
|
||||||
|
gomock.InOrder(
|
||||||
|
mockApi.EXPECT().ChainGetBlock(ctx, block.Cid()).Return(block, nil),
|
||||||
|
mockApi.EXPECT().ChainGetBlockMessages(ctx, block.Cid()).Return(&blockMsgs, nil),
|
||||||
|
mockApi.EXPECT().ChainGetParentMessages(ctx, block.Cid()).Return([]api.Message{}, nil),
|
||||||
|
mockApi.EXPECT().ChainGetParentReceipts(ctx, block.Cid()).Return([]*types.MessageReceipt{}, nil),
|
||||||
|
)
|
||||||
|
|
||||||
|
err := app.Run([]string{"chain", "getblock", block.Cid().String()})
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
out := struct {
|
||||||
|
types.BlockHeader
|
||||||
|
BlsMessages []*types.Message
|
||||||
|
SecpkMessages []*types.SignedMessage
|
||||||
|
ParentReceipts []*types.MessageReceipt
|
||||||
|
ParentMessages []cid.Cid
|
||||||
|
}{}
|
||||||
|
|
||||||
|
err = json.Unmarshal(buf.Bytes(), &out)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
assert.True(t, block.Cid().Equals(out.Cid()))
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user