69 lines
1.4 KiB
Go
69 lines
1.4 KiB
Go
// stm: #unit
|
|
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/go-state-types/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) {
|
|
//stm: @CHAIN_VM_STORE_PUT_002
|
|
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.StorePut(&NotAVeryGoodMarshaler{})
|
|
t.Error("expected panic")
|
|
}
|
|
|
|
func BenchmarkRuntime_CreateRuntimeChargeGas_TracingDisabled(b *testing.B) {
|
|
var (
|
|
cst = cbor.NewCborStore(nil)
|
|
gch = newGasCharge("foo", 1000, 1000)
|
|
)
|
|
|
|
b.ResetTimer()
|
|
|
|
EnableDetailedTracing = false
|
|
noop := func() bool { return EnableDetailedTracing }
|
|
for n := 0; n < b.N; n++ {
|
|
// flip the value and access it to make sure
|
|
// the compiler doesn't optimize away
|
|
EnableDetailedTracing = true
|
|
_ = noop()
|
|
EnableDetailedTracing = false
|
|
_ = (&Runtime{cst: cst}).chargeGasInternal(gch, 0)
|
|
}
|
|
}
|