Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
Geth-Modification
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
张蕾
Geth-Modification
Commits
3b709852
Commit
3b709852
authored
Oct 16, 2014
by
obscuren
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
added eth tester
parent
93fcabd2
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
104 additions
and
0 deletions
+104
-0
.ethtest
tests/ethtest/.ethtest
+0
-0
main.go
tests/ethtest/main.go
+104
-0
No files found.
tests/ethtest/.ethtest
0 → 100644
View file @
3b709852
tests/ethtest/main.go
0 → 100644
View file @
3b709852
package
main
import
(
"bytes"
"encoding/json"
"io/ioutil"
"log"
"os"
"strings"
"github.com/ethereum/eth-go/ethstate"
"github.com/ethereum/eth-go/ethutil"
"github.com/ethereum/eth-go/tests/helper"
)
type
Account
struct
{
Balance
string
Code
string
Nonce
string
Storage
map
[
string
]
string
}
func
StateObjectFromAccount
(
addr
string
,
account
Account
)
*
ethstate
.
StateObject
{
obj
:=
ethstate
.
NewStateObject
(
ethutil
.
Hex2Bytes
(
addr
))
obj
.
Balance
=
ethutil
.
Big
(
account
.
Balance
)
if
ethutil
.
IsHex
(
account
.
Code
)
{
account
.
Code
=
account
.
Code
[
2
:
]
}
obj
.
Code
=
ethutil
.
Hex2Bytes
(
account
.
Code
)
obj
.
Nonce
=
ethutil
.
Big
(
account
.
Nonce
)
.
Uint64
()
return
obj
}
type
VmTest
struct
{
Callcreates
interface
{}
Env
map
[
string
]
string
Exec
map
[
string
]
string
Gas
string
Out
string
Post
map
[
string
]
Account
Pre
map
[
string
]
Account
}
func
RunVmTest
(
js
string
)
(
failed
int
)
{
tests
:=
make
(
map
[
string
]
VmTest
)
data
,
_
:=
ioutil
.
ReadAll
(
strings
.
NewReader
(
js
))
err
:=
json
.
Unmarshal
(
data
,
&
tests
)
if
err
!=
nil
{
log
.
Fatalln
(
err
)
}
for
name
,
test
:=
range
tests
{
state
:=
ethstate
.
New
(
helper
.
NewTrie
())
for
addr
,
account
:=
range
test
.
Pre
{
obj
:=
StateObjectFromAccount
(
addr
,
account
)
state
.
SetStateObject
(
obj
)
}
ret
,
gas
,
err
:=
helper
.
RunVm
(
state
,
test
.
Env
,
test
.
Exec
)
// When an error is returned it doesn't always mean the tests fails.
// Have to come up with some conditional failing mechanism.
if
err
!=
nil
{
helper
.
Log
.
Infoln
(
err
)
}
rexp
:=
helper
.
FromHex
(
test
.
Out
)
if
bytes
.
Compare
(
rexp
,
ret
)
!=
0
{
log
.
Printf
(
"%s's return failed. Expected %x, got %x
\n
"
,
name
,
rexp
,
ret
)
failed
=
1
}
gexp
:=
ethutil
.
Big
(
test
.
Gas
)
if
gexp
.
Cmp
(
gas
)
!=
0
{
log
.
Printf
(
"%s's gas failed. Expected %v, got %v
\n
"
,
name
,
gexp
,
gas
)
failed
=
1
}
for
addr
,
account
:=
range
test
.
Post
{
obj
:=
state
.
GetStateObject
(
helper
.
FromHex
(
addr
))
for
addr
,
value
:=
range
account
.
Storage
{
v
:=
obj
.
GetState
(
helper
.
FromHex
(
addr
))
.
Bytes
()
vexp
:=
helper
.
FromHex
(
value
)
if
bytes
.
Compare
(
v
,
vexp
)
!=
0
{
log
.
Printf
(
"%s's : (%x: %s) storage failed. Expected %x, got %x (%v %v)
\n
"
,
name
,
obj
.
Address
()[
0
:
4
],
addr
,
vexp
,
v
,
ethutil
.
BigD
(
vexp
),
ethutil
.
BigD
(
v
))
failed
=
1
}
}
}
}
return
}
func
main
()
{
if
len
(
os
.
Args
)
==
1
{
log
.
Fatalln
(
"no json supplied"
)
}
os
.
Exit
(
RunVmTest
(
os
.
Args
[
1
]))
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment