aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFelix Lange <fjl@twurst.com>2014-10-30 01:40:18 +0800
committerFelix Lange <fjl@twurst.com>2014-10-30 01:50:17 +0800
commit4cf69d7cd34394fa7408bb5a6e152610a9daa81c (patch)
tree27be8e2b1e0348d5a9047090df1bcdfa55482e73
parent38034c306693cd0acbc4edb0d0afde1f2e525bf6 (diff)
downloadgo-tangerine-4cf69d7cd34394fa7408bb5a6e152610a9daa81c.tar
go-tangerine-4cf69d7cd34394fa7408bb5a6e152610a9daa81c.tar.gz
go-tangerine-4cf69d7cd34394fa7408bb5a6e152610a9daa81c.tar.bz2
go-tangerine-4cf69d7cd34394fa7408bb5a6e152610a9daa81c.tar.lz
go-tangerine-4cf69d7cd34394fa7408bb5a6e152610a9daa81c.tar.xz
go-tangerine-4cf69d7cd34394fa7408bb5a6e152610a9daa81c.tar.zst
go-tangerine-4cf69d7cd34394fa7408bb5a6e152610a9daa81c.zip
vm: fix basic VM tests
The tests now compile and won't panic for unexpected return values. We need a recent-enough version of the mutan compiler because of the new JUMPDEST requirements. Skip some tests if the installed mutan version is too old. The debug VM test still fails, probably because of an implementation bug.
-rw-r--r--vm/vm_test.go54
1 files changed, 35 insertions, 19 deletions
diff --git a/vm/vm_test.go b/vm/vm_test.go
index 84cca3a9d..8818cc8ec 100644
--- a/vm/vm_test.go
+++ b/vm/vm_test.go
@@ -14,22 +14,30 @@ import (
"github.com/ethereum/go-ethereum/ethstate"
"github.com/ethereum/go-ethereum/ethtrie"
"github.com/ethereum/go-ethereum/ethutil"
+ "github.com/obscuren/mutan"
)
-type TestEnv struct {
+type TestEnv struct{}
+
+func (TestEnv) Origin() []byte { return nil }
+func (TestEnv) BlockNumber() *big.Int { return nil }
+func (TestEnv) BlockHash() []byte { return nil }
+func (TestEnv) PrevHash() []byte { return nil }
+func (TestEnv) Coinbase() []byte { return nil }
+func (TestEnv) Time() int64 { return 0 }
+func (TestEnv) GasLimit() *big.Int { return nil }
+func (TestEnv) Difficulty() *big.Int { return nil }
+func (TestEnv) Value() *big.Int { return nil }
+func (TestEnv) AddLog(Log) {}
+
+func (TestEnv) Transfer(from, to Account, amount *big.Int) error {
+ return nil
}
-func (self TestEnv) Origin() []byte { return nil }
-func (self TestEnv) BlockNumber() *big.Int { return nil }
-func (self TestEnv) BlockHash() []byte { return nil }
-func (self TestEnv) PrevHash() []byte { return nil }
-func (self TestEnv) Coinbase() []byte { return nil }
-func (self TestEnv) Time() int64 { return 0 }
-func (self TestEnv) Difficulty() *big.Int { return nil }
-func (self TestEnv) Value() *big.Int { return nil }
-
// This is likely to fail if anything ever gets looked up in the state trie :-)
-func (self TestEnv) State() *ethstate.State { return ethstate.New(ethtrie.New(nil, "")) }
+func (TestEnv) State() *ethstate.State {
+ return ethstate.New(ethtrie.New(nil, ""))
+}
const mutcode = `
var x = 0;
@@ -56,27 +64,35 @@ func setup(level ethlog.LogLevel, typ Type) (*Closure, VirtualMachine) {
return callerClosure, New(TestEnv{}, typ)
}
+var big9 = ethutil.Hex2Bytes("0000000000000000000000000000000000000000000000000000000000000009")
+
func TestDebugVm(t *testing.T) {
+ if mutan.Version < "0.6" {
+ t.Skip("skipping for mutan version", mutan.Version, " < 0.6")
+ }
+
closure, vm := setup(ethlog.DebugLevel, DebugVmTy)
ret, _, e := closure.Call(vm, nil)
if e != nil {
- fmt.Println("error", e)
+ t.Fatalf("Call returned error: %v", e)
}
-
- if ret[len(ret)-1] != 9 {
- t.Errorf("Expected VM to return 9, got", ret, "instead.")
+ if !bytes.Equal(ret, big9) {
+ t.Errorf("Wrong return value '%x', want '%x'", ret, big9)
}
}
func TestVm(t *testing.T) {
+ if mutan.Version < "0.6" {
+ t.Skip("skipping for mutan version", mutan.Version, " < 0.6")
+ }
+
closure, vm := setup(ethlog.DebugLevel, StandardVmTy)
ret, _, e := closure.Call(vm, nil)
if e != nil {
- fmt.Println("error", e)
+ t.Fatalf("Call returned error: %v", e)
}
-
- if ret[len(ret)-1] != 9 {
- t.Errorf("Expected VM to return 9, got", ret, "instead.")
+ if !bytes.Equal(ret, big9) {
+ t.Errorf("Wrong return value '%x', want '%x'", ret, big9)
}
}