lotus/api/test/util.go

68 lines
1.3 KiB
Go
Raw Normal View History

2020-08-13 20:37:09 +00:00
package test
import (
"context"
"testing"
"github.com/filecoin-project/specs-actors/actors/abi"
"github.com/filecoin-project/go-address"
"github.com/filecoin-project/lotus/chain/types"
2020-08-25 22:07:10 +00:00
"github.com/filecoin-project/lotus/miner"
2020-08-13 20:37:09 +00:00
)
func SendFunds(ctx context.Context, t *testing.T, sender TestNode, addr address.Address, amount abi.TokenAmount) {
senderAddr, err := sender.WalletDefaultAddress(ctx)
if err != nil {
t.Fatal(err)
}
msg := &types.Message{
From: senderAddr,
To: addr,
Value: amount,
}
sm, err := sender.MpoolPushMessage(ctx, msg, nil)
if err != nil {
t.Fatal(err)
}
res, err := sender.StateWaitMsg(ctx, sm.Cid(), 1)
if err != nil {
t.Fatal(err)
}
if res.Receipt.ExitCode != 0 {
t.Fatal("did not successfully send money")
}
}
2020-08-25 22:07:10 +00:00
func MineUntilBlock(ctx context.Context, t *testing.T, sn TestStorageNode, cb func()) {
for i := 0; i < 1000; i++ {
var success bool
var err error
wait := make(chan struct{})
2020-08-26 17:05:03 +00:00
mineErr := sn.MineOne(ctx, miner.MineReq{
2020-08-25 22:07:10 +00:00
Done: func(win bool, e error) {
success = win
err = e
wait <- struct{}{}
},
})
2020-08-26 17:05:03 +00:00
if mineErr != nil {
t.Fatal(mineErr)
}
2020-08-25 22:07:10 +00:00
<-wait
if err != nil {
t.Fatal(err)
}
if success {
if cb != nil {
cb()
}
return
}
t.Log("did not mine block, trying again", i)
}
t.Fatal("failed to mine 1000 times in a row...")
}