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" ) type NotAVeryGoodMarshaler struct {} 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") }