2020-04-28 13:21:56 +00:00
|
|
|
package vm
|
|
|
|
|
|
|
|
import (
|
|
|
|
"io"
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
cbor "github.com/ipfs/go-ipld-cbor"
|
|
|
|
cbg "github.com/whyrusleeping/cbor-gen"
|
|
|
|
"golang.org/x/xerrors"
|
|
|
|
|
|
|
|
"github.com/filecoin-project/specs-actors/actors/runtime/exitcode"
|
|
|
|
|
|
|
|
"github.com/filecoin-project/lotus/chain/actors/aerrors"
|
|
|
|
)
|
|
|
|
|
2020-04-29 18:06:05 +00:00
|
|
|
type NotAVeryGoodMarshaler struct{}
|
2020-04-28 13:21:56 +00:00
|
|
|
|
|
|
|
func (*NotAVeryGoodMarshaler) MarshalCBOR(writer io.Writer) error {
|
|
|
|
return xerrors.Errorf("no")
|
|
|
|
}
|
|
|
|
|
|
|
|
var _ cbg.CBORMarshaler = &NotAVeryGoodMarshaler{}
|
|
|
|
|
|
|
|
func TestRuntimePutErrors(t *testing.T) {
|
|
|
|
defer func() {
|
|
|
|
err := recover()
|
|
|
|
if err == nil {
|
|
|
|
t.Fatal("expected non-nil recovery")
|
|
|
|
}
|
|
|
|
|
|
|
|
aerr := err.(aerrors.ActorError)
|
|
|
|
if aerr.IsFatal() {
|
|
|
|
t.Fatal("expected non-fatal actor error")
|
|
|
|
}
|
|
|
|
|
|
|
|
if aerr.RetCode() != exitcode.ErrSerialization {
|
|
|
|
t.Fatal("expected serialization error")
|
|
|
|
}
|
|
|
|
}()
|
|
|
|
|
|
|
|
rt := Runtime{
|
|
|
|
cst: cbor.NewCborStore(nil),
|
|
|
|
}
|
|
|
|
|
|
|
|
rt.Put(&NotAVeryGoodMarshaler{})
|
|
|
|
t.Error("expected panic")
|
|
|
|
}
|