From ec0607900da136a481f64f72aabd4c2f5d17beee Mon Sep 17 00:00:00 2001 From: Nikola Divic Date: Fri, 11 Feb 2022 17:45:19 +0100 Subject: [PATCH] test: sync state cli command --- cli/sync.go | 22 ++++++++++--------- cli/sync_test.go | 56 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+), 10 deletions(-) create mode 100644 cli/sync_test.go diff --git a/cli/sync.go b/cli/sync.go index c7b010111..a486046bb 100644 --- a/cli/sync.go +++ b/cli/sync.go @@ -33,6 +33,8 @@ var SyncStatusCmd = &cli.Command{ Name: "status", Usage: "check sync status", Action: func(cctx *cli.Context) error { + afmt := NewAppFmt(cctx.App) + apic, closer, err := GetFullNodeAPI(cctx) if err != nil { return err @@ -45,9 +47,9 @@ var SyncStatusCmd = &cli.Command{ return err } - fmt.Println("sync status:") + afmt.Println("sync status:") for _, ss := range state.ActiveSyncs { - fmt.Printf("worker %d:\n", ss.WorkerID) + afmt.Printf("worker %d:\n", ss.WorkerID) var base, target []cid.Cid var heightDiff int64 var theight abi.ChainEpoch @@ -62,20 +64,20 @@ var SyncStatusCmd = &cli.Command{ } else { heightDiff = 0 } - fmt.Printf("\tBase:\t%s\n", base) - fmt.Printf("\tTarget:\t%s (%d)\n", target, theight) - fmt.Printf("\tHeight diff:\t%d\n", heightDiff) - fmt.Printf("\tStage: %s\n", ss.Stage) - fmt.Printf("\tHeight: %d\n", ss.Height) + afmt.Printf("\tBase:\t%s\n", base) + afmt.Printf("\tTarget:\t%s (%d)\n", target, theight) + afmt.Printf("\tHeight diff:\t%d\n", heightDiff) + afmt.Printf("\tStage: %s\n", ss.Stage) + afmt.Printf("\tHeight: %d\n", ss.Height) if ss.End.IsZero() { if !ss.Start.IsZero() { - fmt.Printf("\tElapsed: %s\n", time.Since(ss.Start)) + afmt.Printf("\tElapsed: %s\n", time.Since(ss.Start)) } } else { - fmt.Printf("\tElapsed: %s\n", ss.End.Sub(ss.Start)) + afmt.Printf("\tElapsed: %s\n", ss.End.Sub(ss.Start)) } if ss.Stage == api.StageSyncErrored { - fmt.Printf("\tError: %s\n", ss.Message) + afmt.Printf("\tError: %s\n", ss.Message) } } return nil diff --git a/cli/sync_test.go b/cli/sync_test.go new file mode 100644 index 000000000..5c5961782 --- /dev/null +++ b/cli/sync_test.go @@ -0,0 +1,56 @@ +package cli + +import ( + "context" + "fmt" + "testing" + "time" + + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/lotus/api" + "github.com/filecoin-project/lotus/chain/types/mock" + "github.com/stretchr/testify/assert" +) + +func TestSyncStatus(t *testing.T) { + app, mockApi, buf, done := NewMockAppWithFullAPI(t, WithCategory("sync", SyncStatusCmd)) + defer done() + + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + ts1 := mock.TipSet(mock.MkBlock(nil, 0, 0)) + ts2 := mock.TipSet(mock.MkBlock(ts1, 0, 0)) + + start := time.Now() + end := start.Add(time.Minute) + + state := &api.SyncState{ + ActiveSyncs: []api.ActiveSync{{ + WorkerID: 1, + Base: ts1, + Target: ts2, + Stage: api.StageMessages, + Height: abi.ChainEpoch(0), + Start: start, + End: end, + Message: "whatever", + }}, + VMApplied: 0, + } + + mockApi.EXPECT().SyncState(ctx).Return(state, nil) + + err := app.Run([]string{"sync", "status"}) + assert.NoError(t, err) + + out := buf.String() + + // output is plaintext, had to do string matching + assert.Contains(t, out, fmt.Sprintf("Base:\t[%s]", ts1.Blocks()[0].Cid().String())) + assert.Contains(t, out, fmt.Sprintf("Target:\t[%s]", ts2.Blocks()[0].Cid().String())) + assert.Contains(t, out, "Height diff:\t1") + assert.Contains(t, out, "Stage: message sync") + assert.Contains(t, out, "Height: 0") + assert.Contains(t, out, "Elapsed: 1m0s") +}