aboutsummaryrefslogtreecommitdiffstats
path: root/tests/vm/gh_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'tests/vm/gh_test.go')
-rw-r--r--tests/vm/gh_test.go48
1 files changed, 40 insertions, 8 deletions
diff --git a/tests/vm/gh_test.go b/tests/vm/gh_test.go
index 3da37cd3a..1efda7fe0 100644
--- a/tests/vm/gh_test.go
+++ b/tests/vm/gh_test.go
@@ -8,6 +8,7 @@ import (
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/ethutil"
+ "github.com/ethereum/go-ethereum/logger"
"github.com/ethereum/go-ethereum/state"
"github.com/ethereum/go-ethereum/tests/helper"
)
@@ -20,9 +21,21 @@ type Account struct {
}
type Log struct {
- Address string
- Data string
- Topics []string
+ AddressF string `json:"address"`
+ DataF string `json:"data"`
+ TopicsF []string `json:"topics"`
+ BloomF string `json:"bloom"`
+}
+
+func (self Log) Address() []byte { return ethutil.Hex2Bytes(self.AddressF) }
+func (self Log) Data() []byte { return ethutil.Hex2Bytes(self.DataF) }
+func (self Log) RlpData() interface{} { return nil }
+func (self Log) Topics() [][]byte {
+ t := make([][]byte, len(self.TopicsF))
+ for i, topic := range self.TopicsF {
+ t[i] = ethutil.Hex2Bytes(topic)
+ }
+ return t
}
func StateObjectFromAccount(addr string, account Account) *state.StateObject {
@@ -53,7 +66,7 @@ type VmTest struct {
Env Env
Exec map[string]string
Transaction map[string]string
- Logs map[string]Log
+ Logs []Log
Gas string
Out string
Post map[string]Account
@@ -69,6 +82,9 @@ func RunVmTest(p string, t *testing.T) {
for addr, account := range test.Pre {
obj := StateObjectFromAccount(addr, account)
statedb.SetStateObject(obj)
+ for a, v := range account.Storage {
+ obj.SetState(helper.FromHex(a), ethutil.NewValue(helper.FromHex(v)))
+ }
}
// XXX Yeah, yeah...
@@ -117,6 +133,16 @@ func RunVmTest(p string, t *testing.T) {
for addr, account := range test.Post {
obj := statedb.GetStateObject(helper.FromHex(addr))
+ if obj == nil {
+ continue
+ }
+
+ if len(test.Exec) == 0 {
+ if obj.Balance().Cmp(ethutil.Big(account.Balance)) != 0 {
+ t.Errorf("%s's : (%x) balance failed. Expected %v, got %v => %v\n", name, obj.Address()[:4], account.Balance, obj.Balance(), new(big.Int).Sub(ethutil.Big(account.Balance), obj.Balance()))
+ }
+ }
+
for addr, value := range account.Storage {
v := obj.GetState(helper.FromHex(addr)).Bytes()
vexp := helper.FromHex(value)
@@ -128,15 +154,16 @@ func RunVmTest(p string, t *testing.T) {
}
if len(test.Logs) > 0 {
- genBloom := ethutil.LeftPadBytes(types.LogsBloom(logs).Bytes(), 64)
// Logs within the test itself aren't correct, missing empty fields (32 0s)
- for bloom /*logs*/, _ := range test.Logs {
- if !bytes.Equal(genBloom, ethutil.Hex2Bytes(bloom)) {
+ for i, log := range test.Logs {
+ genBloom := ethutil.LeftPadBytes(types.LogsBloom(state.Logs{logs[i]}).Bytes(), 64)
+ if !bytes.Equal(genBloom, ethutil.Hex2Bytes(log.BloomF)) {
t.Errorf("bloom mismatch")
}
}
}
}
+ logger.Flush()
}
// I've created a new function for each tests so it's easier to identify where the problem lies if any of them fail.
@@ -200,7 +227,12 @@ func TestStateRecursiveCreate(t *testing.T) {
RunVmTest(fn, t)
}
-func TestStateSpecialTest(t *testing.T) {
+func TestStateSpecial(t *testing.T) {
const fn = "../files/StateTests/stSpecialTest.json"
RunVmTest(fn, t)
}
+
+func TestStateRefund(t *testing.T) {
+ const fn = "../files/StateTests/stRefundTest.json"
+ RunVmTest(fn, t)
+}