feat: lite-mode - CLI tests for lotus client commands
This commit is contained in:
+39
-35
@@ -343,6 +343,7 @@ var clientDealCmd = &cli.Command{
|
||||
}
|
||||
defer closer()
|
||||
ctx := ReqContext(cctx)
|
||||
afmt := NewAppFmt(cctx.App)
|
||||
|
||||
if cctx.NArg() != 4 {
|
||||
return xerrors.New("expected 4 args: dataCid, miner, price, duration")
|
||||
@@ -462,7 +463,7 @@ var clientDealCmd = &cli.Command{
|
||||
return err
|
||||
}
|
||||
|
||||
fmt.Println(encoder.Encode(*proposal))
|
||||
afmt.Println(encoder.Encode(*proposal))
|
||||
|
||||
return nil
|
||||
},
|
||||
@@ -477,6 +478,7 @@ func interactiveDeal(cctx *cli.Context) error {
|
||||
ctx := ReqContext(cctx)
|
||||
ctx, cancel := context.WithCancel(ctx)
|
||||
defer cancel()
|
||||
afmt := NewAppFmt(cctx.App)
|
||||
|
||||
state := "import"
|
||||
gib := types.NewInt(1 << 30)
|
||||
@@ -517,10 +519,10 @@ func interactiveDeal(cctx *cli.Context) error {
|
||||
}
|
||||
|
||||
printErr := func(err error) {
|
||||
fmt.Printf("%s %s\n", color.RedString("Error:"), err.Error())
|
||||
afmt.Printf("%s %s\n", color.RedString("Error:"), err.Error())
|
||||
}
|
||||
|
||||
cs := readline.NewCancelableStdin(os.Stdin)
|
||||
cs := readline.NewCancelableStdin(afmt.Stdin)
|
||||
go func() {
|
||||
<-ctx.Done()
|
||||
cs.Close() // nolint:errcheck
|
||||
@@ -537,7 +539,7 @@ uiLoop:
|
||||
|
||||
switch state {
|
||||
case "import":
|
||||
fmt.Print("Data CID (from " + color.YellowString("lotus client import") + "): ")
|
||||
afmt.Print("Data CID (from " + color.YellowString("lotus client import") + "): ")
|
||||
|
||||
_cidStr, _, err := rl.ReadLine()
|
||||
cidStr := string(_cidStr)
|
||||
@@ -560,7 +562,7 @@ uiLoop:
|
||||
|
||||
state = "duration"
|
||||
case "duration":
|
||||
fmt.Print("Deal duration (days): ")
|
||||
afmt.Print("Deal duration (days): ")
|
||||
|
||||
_daystr, _, err := rl.ReadLine()
|
||||
daystr := string(_daystr)
|
||||
@@ -605,7 +607,7 @@ uiLoop:
|
||||
continue
|
||||
}
|
||||
|
||||
fmt.Print("\nMake this a verified deal? (yes/no): ")
|
||||
afmt.Print("\nMake this a verified deal? (yes/no): ")
|
||||
|
||||
_yn, _, err := rl.ReadLine()
|
||||
yn := string(_yn)
|
||||
@@ -619,13 +621,13 @@ uiLoop:
|
||||
case "no":
|
||||
verified = false
|
||||
default:
|
||||
fmt.Println("Type in full 'yes' or 'no'")
|
||||
afmt.Println("Type in full 'yes' or 'no'")
|
||||
continue
|
||||
}
|
||||
|
||||
state = "miner"
|
||||
case "miner":
|
||||
fmt.Print("Miner Addresses (f0.. f0..), none to find: ")
|
||||
afmt.Print("Miner Addresses (f0.. f0..), none to find: ")
|
||||
|
||||
_maddrsStr, _, err := rl.ReadLine()
|
||||
maddrsStr := string(_maddrsStr)
|
||||
@@ -664,11 +666,11 @@ uiLoop:
|
||||
candidateAsks = append(candidateAsks, ask)
|
||||
}
|
||||
|
||||
fmt.Printf("Found %d candidate asks\n", len(candidateAsks))
|
||||
afmt.Printf("Found %d candidate asks\n", len(candidateAsks))
|
||||
state = "find-budget"
|
||||
case "find-budget":
|
||||
fmt.Printf("Proposing from %s, Current Balance: %s\n", a, types.FIL(fromBal))
|
||||
fmt.Print("Maximum budget (FIL): ") // TODO: Propose some default somehow?
|
||||
afmt.Printf("Proposing from %s, Current Balance: %s\n", a, types.FIL(fromBal))
|
||||
afmt.Print("Maximum budget (FIL): ") // TODO: Propose some default somehow?
|
||||
|
||||
_budgetStr, _, err := rl.ReadLine()
|
||||
budgetStr := string(_budgetStr)
|
||||
@@ -698,10 +700,10 @@ uiLoop:
|
||||
}
|
||||
}
|
||||
candidateAsks = goodAsks
|
||||
fmt.Printf("%d asks within budget\n", len(candidateAsks))
|
||||
afmt.Printf("%d asks within budget\n", len(candidateAsks))
|
||||
state = "find-count"
|
||||
case "find-count":
|
||||
fmt.Print("Deals to make (1): ")
|
||||
afmt.Print("Deals to make (1): ")
|
||||
dealcStr, _, err := rl.ReadLine()
|
||||
if err != nil {
|
||||
printErr(xerrors.Errorf("reading deal count: %w", err))
|
||||
@@ -780,12 +782,12 @@ uiLoop:
|
||||
case "confirm":
|
||||
// TODO: do some more or epochs math (round to miner PP, deal start buffer)
|
||||
|
||||
fmt.Printf("-----\n")
|
||||
fmt.Printf("Proposing from %s\n", a)
|
||||
fmt.Printf("\tBalance: %s\n", types.FIL(fromBal))
|
||||
fmt.Printf("\n")
|
||||
fmt.Printf("Piece size: %s (Payload size: %s)\n", units.BytesSize(float64(ds.PieceSize)), units.BytesSize(float64(ds.PayloadSize)))
|
||||
fmt.Printf("Duration: %s\n", dur)
|
||||
afmt.Printf("-----\n")
|
||||
afmt.Printf("Proposing from %s\n", a)
|
||||
afmt.Printf("\tBalance: %s\n", types.FIL(fromBal))
|
||||
afmt.Printf("\n")
|
||||
afmt.Printf("Piece size: %s (Payload size: %s)\n", units.BytesSize(float64(ds.PieceSize)), units.BytesSize(float64(ds.PayloadSize)))
|
||||
afmt.Printf("Duration: %s\n", dur)
|
||||
|
||||
pricePerGib := big.Zero()
|
||||
for _, a := range ask {
|
||||
@@ -804,7 +806,7 @@ uiLoop:
|
||||
|
||||
if len(ask) > 1 {
|
||||
totalPrice := types.BigMul(epochPrice, types.NewInt(uint64(epochs)))
|
||||
fmt.Printf("Miner %s (Power:%s) price: ~%s (%s per epoch)\n", color.YellowString(a.Miner.String()), color.GreenString(types.SizeStr(mpow.MinerPower.QualityAdjPower)), color.BlueString(types.FIL(totalPrice).String()), types.FIL(epochPrice))
|
||||
afmt.Printf("Miner %s (Power:%s) price: ~%s (%s per epoch)\n", color.YellowString(a.Miner.String()), color.GreenString(types.SizeStr(mpow.MinerPower.QualityAdjPower)), color.BlueString(types.FIL(totalPrice).String()), types.FIL(epochPrice))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -812,12 +814,12 @@ uiLoop:
|
||||
epochPrice := types.BigDiv(types.BigMul(pricePerGib, types.NewInt(uint64(ds.PieceSize))), gib)
|
||||
totalPrice := types.BigMul(epochPrice, types.NewInt(uint64(epochs)))
|
||||
|
||||
fmt.Printf("Total price: ~%s (%s per epoch)\n", color.CyanString(types.FIL(totalPrice).String()), types.FIL(epochPrice))
|
||||
fmt.Printf("Verified: %v\n", verified)
|
||||
afmt.Printf("Total price: ~%s (%s per epoch)\n", color.CyanString(types.FIL(totalPrice).String()), types.FIL(epochPrice))
|
||||
afmt.Printf("Verified: %v\n", verified)
|
||||
|
||||
state = "accept"
|
||||
case "accept":
|
||||
fmt.Print("\nAccept (yes/no): ")
|
||||
afmt.Print("\nAccept (yes/no): ")
|
||||
|
||||
_yn, _, err := rl.ReadLine()
|
||||
yn := string(_yn)
|
||||
@@ -830,7 +832,7 @@ uiLoop:
|
||||
}
|
||||
|
||||
if yn != "yes" {
|
||||
fmt.Println("Type in full 'yes' or 'no'")
|
||||
afmt.Println("Type in full 'yes' or 'no'")
|
||||
continue
|
||||
}
|
||||
|
||||
@@ -861,7 +863,7 @@ uiLoop:
|
||||
return err
|
||||
}
|
||||
|
||||
fmt.Printf("Deal (%s) CID: %s\n", maddr, color.GreenString(encoder.Encode(*proposal)))
|
||||
afmt.Printf("Deal (%s) CID: %s\n", maddr, color.GreenString(encoder.Encode(*proposal)))
|
||||
}
|
||||
|
||||
return nil
|
||||
@@ -975,6 +977,7 @@ var clientRetrieveCmd = &cli.Command{
|
||||
}
|
||||
defer closer()
|
||||
ctx := ReqContext(cctx)
|
||||
afmt := NewAppFmt(cctx.App)
|
||||
|
||||
var payer address.Address
|
||||
if cctx.String("from") != "" {
|
||||
@@ -1083,14 +1086,14 @@ var clientRetrieveCmd = &cli.Command{
|
||||
select {
|
||||
case evt, ok := <-updates:
|
||||
if ok {
|
||||
fmt.Printf("> Recv: %s, Paid %s, %s (%s)\n",
|
||||
afmt.Printf("> Recv: %s, Paid %s, %s (%s)\n",
|
||||
types.SizeStr(types.NewInt(evt.BytesReceived)),
|
||||
types.FIL(evt.FundsSpent),
|
||||
retrievalmarket.ClientEvents[evt.Event],
|
||||
retrievalmarket.DealStatuses[evt.Status],
|
||||
)
|
||||
} else {
|
||||
fmt.Println("Success")
|
||||
afmt.Println("Success")
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -1269,8 +1272,9 @@ var clientQueryAskCmd = &cli.Command{
|
||||
},
|
||||
},
|
||||
Action: func(cctx *cli.Context) error {
|
||||
afmt := NewAppFmt(cctx.App)
|
||||
if cctx.NArg() != 1 {
|
||||
fmt.Println("Usage: query-ask [minerAddress]")
|
||||
afmt.Println("Usage: query-ask [minerAddress]")
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -1311,23 +1315,23 @@ var clientQueryAskCmd = &cli.Command{
|
||||
return err
|
||||
}
|
||||
|
||||
fmt.Printf("Ask: %s\n", maddr)
|
||||
fmt.Printf("Price per GiB: %s\n", types.FIL(ask.Price))
|
||||
fmt.Printf("Verified Price per GiB: %s\n", types.FIL(ask.VerifiedPrice))
|
||||
fmt.Printf("Max Piece size: %s\n", types.SizeStr(types.NewInt(uint64(ask.MaxPieceSize))))
|
||||
afmt.Printf("Ask: %s\n", maddr)
|
||||
afmt.Printf("Price per GiB: %s\n", types.FIL(ask.Price))
|
||||
afmt.Printf("Verified Price per GiB: %s\n", types.FIL(ask.VerifiedPrice))
|
||||
afmt.Printf("Max Piece size: %s\n", types.SizeStr(types.NewInt(uint64(ask.MaxPieceSize))))
|
||||
|
||||
size := cctx.Int64("size")
|
||||
if size == 0 {
|
||||
return nil
|
||||
}
|
||||
perEpoch := types.BigDiv(types.BigMul(ask.Price, types.NewInt(uint64(size))), types.NewInt(1<<30))
|
||||
fmt.Printf("Price per Block: %s\n", types.FIL(perEpoch))
|
||||
afmt.Printf("Price per Block: %s\n", types.FIL(perEpoch))
|
||||
|
||||
duration := cctx.Int64("duration")
|
||||
if duration == 0 {
|
||||
return nil
|
||||
}
|
||||
fmt.Printf("Total Price: %s\n", types.FIL(types.BigMul(perEpoch, types.NewInt(uint64(duration)))))
|
||||
afmt.Printf("Total Price: %s\n", types.FIL(types.BigMul(perEpoch, types.NewInt(uint64(duration)))))
|
||||
|
||||
return nil
|
||||
},
|
||||
@@ -1410,7 +1414,7 @@ var clientListDeals = &cli.Command{
|
||||
}
|
||||
}
|
||||
|
||||
return outputStorageDeals(ctx, os.Stdout, api, localDeals, cctx.Bool("verbose"), cctx.Bool("color"), showFailed)
|
||||
return outputStorageDeals(ctx, cctx.App.Writer, api, localDeals, cctx.Bool("verbose"), cctx.Bool("color"), showFailed)
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user