Skip to content

Commit 1169eb9

Browse files
committed
eth/tracers: simplify test framework
1 parent fb75f11 commit 1169eb9

File tree

7 files changed

+42
-81
lines changed

7 files changed

+42
-81
lines changed

eth/tracers/internal/tracetest/calltrace_test.go

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -144,17 +144,21 @@ func testCallTracer(tracerName string, dirPath string, t *testing.T) {
144144
if err != nil {
145145
t.Fatalf("failed to retrieve trace result: %v", err)
146146
}
147-
ret := new(callTrace)
148-
if err := json.Unmarshal(res, ret); err != nil {
149-
t.Fatalf("failed to unmarshal trace result: %v", err)
147+
// The legacy javascript calltracer marshals json in js, which
148+
// is not deterministic (as opposed to the golang json encoder).
149+
{
150+
// This is a tweak to make it deterministic. Can be removed when
151+
// we remove the legacy tracer.
152+
var x callTrace
153+
json.Unmarshal(res, &x)
154+
res, _ = json.Marshal(x)
150155
}
151-
152-
if !jsonEqual(ret, test.Result, new(callTrace), new(callTrace)) {
153-
// uncomment this for easier debugging
154-
//have, _ := json.MarshalIndent(ret, "", " ")
155-
//want, _ := json.MarshalIndent(test.Result, "", " ")
156-
//t.Fatalf("trace mismatch: \nhave %+v\nwant %+v", string(have), string(want))
157-
t.Fatalf("trace mismatch: \nhave %+v\nwant %+v", ret, test.Result)
156+
want, err := json.Marshal(test.Result)
157+
if err != nil {
158+
t.Fatalf("failed to marshal test: %v", err)
159+
}
160+
if string(want) != string(res) {
161+
t.Fatalf("trace mismatch\n have: %v\n want: %v\n", string(res), string(want))
158162
}
159163
})
160164
}
@@ -298,14 +302,9 @@ func TestZeroValueToNotExitCall(t *testing.T) {
298302
if err != nil {
299303
t.Fatalf("failed to retrieve trace result: %v", err)
300304
}
301-
have := new(callTrace)
302-
if err := json.Unmarshal(res, have); err != nil {
303-
t.Fatalf("failed to unmarshal trace result: %v", err)
304-
}
305-
wantStr := `{"type":"CALL","from":"0x682a80a6f560eec50d54e63cbeda1c324c5f8d1b","to":"0x00000000000000000000000000000000deadbeef","value":"0x0","gas":"0x7148","gasUsed":"0x2d0","input":"0x","output":"0x","calls":[{"type":"CALL","from":"0x00000000000000000000000000000000deadbeef","to":"0x00000000000000000000000000000000000000ff","value":"0x0","gas":"0x6cbf","gasUsed":"0x0","input":"0x","output":"0x"}]}`
306-
want := new(callTrace)
307-
json.Unmarshal([]byte(wantStr), want)
308-
if !jsonEqual(have, want, new(callTrace), new(callTrace)) {
309-
t.Error("have != want")
305+
wantStr := `{"from":"0x682a80a6f560eec50d54e63cbeda1c324c5f8d1b","gas":"0x7148","gasUsed":"0x2d0","to":"0x00000000000000000000000000000000deadbeef","input":"0x","calls":[{"from":"0x00000000000000000000000000000000deadbeef","gas":"0x6cbf","gasUsed":"0x0","to":"0x00000000000000000000000000000000000000ff","input":"0x","value":"0x0","type":"CALL"}],"value":"0x0","type":"CALL"}`
306+
//want := new(callTrace)
307+
if string(res) != wantStr {
308+
t.Fatalf("trace mismatch\n have: %v\n want: %v\n", string(res), wantStr)
310309
}
311310
}

eth/tracers/internal/tracetest/prestate_test.go

Lines changed: 11 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -33,21 +33,8 @@ import (
3333
"github.com/ethereum/go-ethereum/tests"
3434
)
3535

36-
// prestateTrace is the result of a prestateTrace run.
37-
type prestateTrace = map[common.Address]*account
38-
type account struct {
39-
Balance string `json:"balance,omitempty"`
40-
Nonce uint64 `json:"nonce,omitempty"`
41-
Code string `json:"code,omitempty"`
42-
Storage map[common.Hash]common.Hash `json:"storage,omitempty"`
43-
}
44-
type prePostStateTrace struct {
45-
Pre prestateTrace `json:"pre"`
46-
Post prestateTrace `json:"post"`
47-
}
48-
49-
// prestateTraceTest defines a single test to check the stateDiff tracer against.
50-
type prestateTraceTest struct {
36+
// testcase defines a single test to check the stateDiff tracer against.
37+
type testcase struct {
5138
Genesis *core.Genesis `json:"genesis"`
5239
Context *callContext `json:"context"`
5340
Input string `json:"input"`
@@ -56,14 +43,14 @@ type prestateTraceTest struct {
5643
}
5744

5845
func TestPrestateTracer(t *testing.T) {
59-
testPrestateDiffTracer("prestateTracer", "prestate_tracer", t, func() interface{} { return new(prestateTrace) })
46+
testPrestateDiffTracer("prestateTracer", "prestate_tracer", t)
6047
}
6148

6249
func TestPrestateWithDiffModeTracer(t *testing.T) {
63-
testPrestateDiffTracer("prestateTracer", "prestate_tracer_with_diff_mode", t, func() interface{} { return new(prePostStateTrace) })
50+
testPrestateDiffTracer("prestateTracer", "prestate_tracer_with_diff_mode", t)
6451
}
6552

66-
func testPrestateDiffTracer(tracerName string, dirPath string, t *testing.T, typeBuilder func() interface{}) {
53+
func testPrestateDiffTracer(tracerName string, dirPath string, t *testing.T) {
6754
files, err := os.ReadDir(filepath.Join("testdata", dirPath))
6855
if err != nil {
6956
t.Fatalf("failed to retrieve tracer test suite: %v", err)
@@ -77,7 +64,7 @@ func testPrestateDiffTracer(tracerName string, dirPath string, t *testing.T, typ
7764
t.Parallel()
7865

7966
var (
80-
test = new(prestateTraceTest)
67+
test = new(testcase)
8168
tx = new(types.Transaction)
8269
)
8370
// Call tracer test found, read if from disk
@@ -127,17 +114,12 @@ func testPrestateDiffTracer(tracerName string, dirPath string, t *testing.T, typ
127114
if err != nil {
128115
t.Fatalf("failed to retrieve trace result: %v", err)
129116
}
130-
ret := typeBuilder()
131-
if err := json.Unmarshal(res, ret); err != nil {
132-
t.Fatalf("failed to unmarshal trace result: %v", err)
117+
want, err := json.Marshal(test.Result)
118+
if err != nil {
119+
t.Fatalf("failed to marshal test: %v", err)
133120
}
134-
135-
if !jsonEqual(ret, test.Result, typeBuilder(), typeBuilder()) {
136-
// uncomment this for easier debugging
137-
// have, _ := json.MarshalIndent(ret, "", " ")
138-
// want, _ := json.MarshalIndent(test.Result, "", " ")
139-
// t.Fatalf("trace mismatch: \nhave %+v\nwant %+v", string(have), string(want))
140-
t.Fatalf("trace mismatch: \nhave %+v\nwant %+v", ret, test.Result)
121+
if string(want) != string(res) {
122+
t.Fatalf("trace mismatch\n have: %v\n want: %v\n", string(res), string(want))
141123
}
142124
})
143125
}

eth/tracers/internal/tracetest/testdata/prestate_tracer/simple.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,7 @@
7777
"nonce": 29072
7878
},
7979
"0x1585936b53834b021f68cc13eeefdec2efc8e724": {
80-
"balance": "0x0",
81-
"nonce": 0
80+
"balance": "0x0"
8281
}
8382
}
8483
}

eth/tracers/internal/tracetest/util.go

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package tracetest
22

33
import (
4-
"encoding/json"
5-
"reflect"
64
"strings"
75
"unicode"
86

@@ -64,22 +62,6 @@ var makeTest = function(tx, rewind) {
6462
}
6563
*/
6664

67-
// jsonEqual is similar to reflect.DeepEqual, but does a 'bounce' via json prior to
68-
// comparison
69-
func jsonEqual(xi, yi, xt, yt interface{}) bool {
70-
if xj, err := json.Marshal(xi); err == nil {
71-
json.Unmarshal(xj, xt)
72-
} else {
73-
return false
74-
}
75-
if yj, err := json.Marshal(yi); err == nil {
76-
json.Unmarshal(yj, yt)
77-
} else {
78-
return false
79-
}
80-
return reflect.DeepEqual(xt, yt)
81-
}
82-
8365
// camel converts a snake cased input string into a camel cased output.
8466
func camel(str string) string {
8567
pieces := strings.Split(str, "_")

eth/tracers/js/internal/tracers/call_tracer_legacy.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,6 @@
204204
gasUsed: '0x' + bigInt(ctx.gasUsed).toString(16),
205205
input: toHex(ctx.input),
206206
output: toHex(ctx.output),
207-
time: ctx.time,
208207
};
209208
if (this.callstack[0].calls !== undefined) {
210209
result.calls = this.callstack[0].calls;

eth/tracers/native/gen_account_json.go

Lines changed: 9 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

eth/tracers/native/prestate.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@ type state = map[common.Address]*account
4040

4141
type account struct {
4242
Balance *big.Int `json:"balance,omitempty"`
43-
Nonce uint64 `json:"nonce,omitempty"`
4443
Code []byte `json:"code,omitempty"`
44+
Nonce uint64 `json:"nonce,omitempty"`
4545
Storage map[common.Hash]common.Hash `json:"storage,omitempty"`
4646
}
4747

@@ -244,9 +244,9 @@ func (t *prestateTracer) GetResult() (json.RawMessage, error) {
244244
var err error
245245
if t.config.DiffMode {
246246
res, err = json.Marshal(struct {
247-
Pre state `json:"pre"`
248247
Post state `json:"post"`
249-
}{t.pre, t.post})
248+
Pre state `json:"pre"`
249+
}{t.post, t.pre})
250250
} else {
251251
res, err = json.Marshal(t.pre)
252252
}

0 commit comments

Comments
 (0)