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
a67a1552
Commit
a67a1552
authored
Jun 10, 2015
by
Taylor Gerring
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Split tests from helper code
parent
7b9fbb08
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
170 additions
and
555 deletions
+170
-555
block_test.go
tests/block_test.go
+0
-69
block_test_util.go
tests/block_test_util.go
+66
-0
state_test.go
tests/state_test.go
+96
-0
vm_test.go
tests/vm_test.go
+1
-310
vm_test_util.go
tests/vm_test_util.go
+7
-176
No files found.
tests/block_test.go
View file @
a67a1552
package
tests
import
(
"path/filepath"
"testing"
"github.com/ethereum/go-ethereum/accounts"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/eth"
"github.com/ethereum/go-ethereum/ethdb"
)
// TODO: refactor test setup & execution to better align with vm and tx tests
...
...
@@ -50,65 +43,3 @@ func TestBcTotalDifficulty(t *testing.T) {
func
TestBcWallet
(
t
*
testing
.
T
)
{
runBlockTestsInFile
(
"files/BlockTests/bcWalletTest.json"
,
[]
string
{},
t
)
}
func
runBlockTestsInFile
(
filepath
string
,
snafus
[]
string
,
t
*
testing
.
T
)
{
bt
,
err
:=
LoadBlockTests
(
filepath
)
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
notWorking
:=
make
(
map
[
string
]
bool
,
100
)
for
_
,
name
:=
range
snafus
{
notWorking
[
name
]
=
true
}
for
name
,
test
:=
range
bt
{
if
!
notWorking
[
name
]
{
runBlockTest
(
name
,
test
,
t
)
}
}
}
func
runBlockTest
(
name
string
,
test
*
BlockTest
,
t
*
testing
.
T
)
{
cfg
:=
testEthConfig
()
ethereum
,
err
:=
eth
.
New
(
cfg
)
if
err
!=
nil
{
t
.
Fatalf
(
"%v"
,
err
)
}
err
=
ethereum
.
Start
()
if
err
!=
nil
{
t
.
Fatalf
(
"%v"
,
err
)
}
// import the genesis block
ethereum
.
ResetWithGenesisBlock
(
test
.
Genesis
)
// import pre accounts
statedb
,
err
:=
test
.
InsertPreState
(
ethereum
)
if
err
!=
nil
{
t
.
Fatalf
(
"InsertPreState: %v"
,
err
)
}
err
=
test
.
TryBlocksInsert
(
ethereum
.
ChainManager
())
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
if
err
=
test
.
ValidatePostState
(
statedb
);
err
!=
nil
{
t
.
Fatal
(
"post state validation failed: %v"
,
err
)
}
t
.
Log
(
"Test passed: "
,
name
)
}
func
testEthConfig
()
*
eth
.
Config
{
ks
:=
crypto
.
NewKeyStorePassphrase
(
filepath
.
Join
(
common
.
DefaultDataDir
(),
"keystore"
))
return
&
eth
.
Config
{
DataDir
:
common
.
DefaultDataDir
(),
Verbosity
:
5
,
Etherbase
:
"primary"
,
AccountManager
:
accounts
.
NewManager
(
ks
),
NewDB
:
func
(
path
string
)
(
common
.
Database
,
error
)
{
return
ethdb
.
NewMemDatabase
()
},
}
}
tests/block_test_util.go
View file @
a67a1552
...
...
@@ -7,17 +7,21 @@ import (
"fmt"
"io/ioutil"
"math/big"
"path/filepath"
"runtime"
"strconv"
"strings"
"testing"
"time"
"github.com/ethereum/go-ethereum/accounts"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core"
"github.com/ethereum/go-ethereum/core/state"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/eth"
"github.com/ethereum/go-ethereum/ethdb"
"github.com/ethereum/go-ethereum/rlp"
)
...
...
@@ -83,6 +87,68 @@ type btTransaction struct {
Value
string
}
func
runBlockTestsInFile
(
filepath
string
,
snafus
[]
string
,
t
*
testing
.
T
)
{
bt
,
err
:=
LoadBlockTests
(
filepath
)
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
notWorking
:=
make
(
map
[
string
]
bool
,
100
)
for
_
,
name
:=
range
snafus
{
notWorking
[
name
]
=
true
}
for
name
,
test
:=
range
bt
{
if
!
notWorking
[
name
]
{
runBlockTest
(
name
,
test
,
t
)
}
}
}
func
runBlockTest
(
name
string
,
test
*
BlockTest
,
t
*
testing
.
T
)
{
cfg
:=
testEthConfig
()
ethereum
,
err
:=
eth
.
New
(
cfg
)
if
err
!=
nil
{
t
.
Fatalf
(
"%v"
,
err
)
}
err
=
ethereum
.
Start
()
if
err
!=
nil
{
t
.
Fatalf
(
"%v"
,
err
)
}
// import the genesis block
ethereum
.
ResetWithGenesisBlock
(
test
.
Genesis
)
// import pre accounts
statedb
,
err
:=
test
.
InsertPreState
(
ethereum
)
if
err
!=
nil
{
t
.
Fatalf
(
"InsertPreState: %v"
,
err
)
}
err
=
test
.
TryBlocksInsert
(
ethereum
.
ChainManager
())
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
if
err
=
test
.
ValidatePostState
(
statedb
);
err
!=
nil
{
t
.
Fatal
(
"post state validation failed: %v"
,
err
)
}
t
.
Log
(
"Test passed: "
,
name
)
}
func
testEthConfig
()
*
eth
.
Config
{
ks
:=
crypto
.
NewKeyStorePassphrase
(
filepath
.
Join
(
common
.
DefaultDataDir
(),
"keystore"
))
return
&
eth
.
Config
{
DataDir
:
common
.
DefaultDataDir
(),
Verbosity
:
5
,
Etherbase
:
"primary"
,
AccountManager
:
accounts
.
NewManager
(
ks
),
NewDB
:
func
(
path
string
)
(
common
.
Database
,
error
)
{
return
ethdb
.
NewMemDatabase
()
},
}
}
// LoadBlockTests loads a block test JSON file.
func
LoadBlockTests
(
file
string
)
(
map
[
string
]
*
BlockTest
,
error
)
{
bt
:=
make
(
map
[
string
]
*
btJSON
)
...
...
tests/state_test.go
0 → 100644
View file @
a67a1552
package
tests
import
"testing"
func
TestStateSystemOperations
(
t
*
testing
.
T
)
{
const
fn
=
"../files/StateTests/stSystemOperationsTest.json"
RunVmTest
(
fn
,
t
)
}
func
TestStateExample
(
t
*
testing
.
T
)
{
const
fn
=
"../files/StateTests/stExample.json"
RunVmTest
(
fn
,
t
)
}
func
TestStatePreCompiledContracts
(
t
*
testing
.
T
)
{
const
fn
=
"../files/StateTests/stPreCompiledContracts.json"
RunVmTest
(
fn
,
t
)
}
func
TestStateRecursiveCreate
(
t
*
testing
.
T
)
{
const
fn
=
"../files/StateTests/stRecursiveCreate.json"
RunVmTest
(
fn
,
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
)
}
func
TestStateBlockHash
(
t
*
testing
.
T
)
{
const
fn
=
"../files/StateTests/stBlockHashTest.json"
RunVmTest
(
fn
,
t
)
}
func
TestStateInitCode
(
t
*
testing
.
T
)
{
const
fn
=
"../files/StateTests/stInitCodeTest.json"
RunVmTest
(
fn
,
t
)
}
func
TestStateLog
(
t
*
testing
.
T
)
{
const
fn
=
"../files/StateTests/stLogTests.json"
RunVmTest
(
fn
,
t
)
}
func
TestStateTransaction
(
t
*
testing
.
T
)
{
const
fn
=
"../files/StateTests/stTransactionTest.json"
RunVmTest
(
fn
,
t
)
}
func
TestCallCreateCallCode
(
t
*
testing
.
T
)
{
const
fn
=
"../files/StateTests/stCallCreateCallCodeTest.json"
RunVmTest
(
fn
,
t
)
}
func
TestMemory
(
t
*
testing
.
T
)
{
const
fn
=
"../files/StateTests/stMemoryTest.json"
RunVmTest
(
fn
,
t
)
}
func
TestMemoryStress
(
t
*
testing
.
T
)
{
if
os
.
Getenv
(
"TEST_VM_COMPLEX"
)
==
""
{
t
.
Skip
()
}
const
fn
=
"../files/StateTests/stMemoryStressTest.json"
RunVmTest
(
fn
,
t
)
}
func
TestQuadraticComplexity
(
t
*
testing
.
T
)
{
if
os
.
Getenv
(
"TEST_VM_COMPLEX"
)
==
""
{
t
.
Skip
()
}
const
fn
=
"../files/StateTests/stQuadraticComplexityTest.json"
RunVmTest
(
fn
,
t
)
}
func
TestSolidity
(
t
*
testing
.
T
)
{
const
fn
=
"../files/StateTests/stSolidityTest.json"
RunVmTest
(
fn
,
t
)
}
func
TestWallet
(
t
*
testing
.
T
)
{
const
fn
=
"../files/StateTests/stWalletTest.json"
RunVmTest
(
fn
,
t
)
}
func
TestStateTestsRandom
(
t
*
testing
.
T
)
{
fns
,
_
:=
filepath
.
Glob
(
"../files/StateTests/RandomTests/*"
)
for
_
,
fn
:=
range
fns
{
RunVmTest
(
fn
,
t
)
}
}
tests/vm_test.go
View file @
a67a1552
package
vm
package
tests
import
(
"bytes"
"math/big"
"os"
"path/filepath"
"strconv"
"testing"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/state"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/ethdb"
"github.com/ethereum/go-ethereum/logger"
"github.com/ethereum/go-ethereum/tests/helper"
)
type
Account
struct
{
Balance
string
Code
string
Nonce
string
Storage
map
[
string
]
string
}
type
Log
struct
{
AddressF
string
`json:"address"`
DataF
string
`json:"data"`
TopicsF
[]
string
`json:"topics"`
BloomF
string
`json:"bloom"`
}
func
(
self
Log
)
Address
()
[]
byte
{
return
common
.
Hex2Bytes
(
self
.
AddressF
)
}
func
(
self
Log
)
Data
()
[]
byte
{
return
common
.
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
]
=
common
.
Hex2Bytes
(
topic
)
}
return
t
}
func
StateObjectFromAccount
(
db
common
.
Database
,
addr
string
,
account
Account
)
*
state
.
StateObject
{
obj
:=
state
.
NewStateObject
(
common
.
HexToAddress
(
addr
),
db
)
obj
.
SetBalance
(
common
.
Big
(
account
.
Balance
))
if
common
.
IsHex
(
account
.
Code
)
{
account
.
Code
=
account
.
Code
[
2
:
]
}
obj
.
SetCode
(
common
.
Hex2Bytes
(
account
.
Code
))
obj
.
SetNonce
(
common
.
Big
(
account
.
Nonce
)
.
Uint64
())
return
obj
}
type
Env
struct
{
CurrentCoinbase
string
CurrentDifficulty
string
CurrentGasLimit
string
CurrentNumber
string
CurrentTimestamp
interface
{}
PreviousHash
string
}
type
VmTest
struct
{
Callcreates
interface
{}
//Env map[string]string
Env
Env
Exec
map
[
string
]
string
Transaction
map
[
string
]
string
Logs
[]
Log
Gas
string
Out
string
Post
map
[
string
]
Account
Pre
map
[
string
]
Account
PostStateRoot
string
}
func
RunVmTest
(
p
string
,
t
*
testing
.
T
)
{
tests
:=
make
(
map
[
string
]
VmTest
)
helper
.
CreateFileTests
(
t
,
p
,
&
tests
)
for
name
,
test
:=
range
tests
{
/*
vm.Debug = true
glog.SetV(4)
glog.SetToStderr(true)
if name != "Call50000_sha256" {
continue
}
*/
db
,
_
:=
ethdb
.
NewMemDatabase
()
statedb
:=
state
.
New
(
common
.
Hash
{},
db
)
for
addr
,
account
:=
range
test
.
Pre
{
obj
:=
StateObjectFromAccount
(
db
,
addr
,
account
)
statedb
.
SetStateObject
(
obj
)
for
a
,
v
:=
range
account
.
Storage
{
obj
.
SetState
(
common
.
HexToHash
(
a
),
common
.
NewValue
(
helper
.
FromHex
(
v
)))
}
}
// XXX Yeah, yeah...
env
:=
make
(
map
[
string
]
string
)
env
[
"currentCoinbase"
]
=
test
.
Env
.
CurrentCoinbase
env
[
"currentDifficulty"
]
=
test
.
Env
.
CurrentDifficulty
env
[
"currentGasLimit"
]
=
test
.
Env
.
CurrentGasLimit
env
[
"currentNumber"
]
=
test
.
Env
.
CurrentNumber
env
[
"previousHash"
]
=
test
.
Env
.
PreviousHash
if
n
,
ok
:=
test
.
Env
.
CurrentTimestamp
.
(
float64
);
ok
{
env
[
"currentTimestamp"
]
=
strconv
.
Itoa
(
int
(
n
))
}
else
{
env
[
"currentTimestamp"
]
=
test
.
Env
.
CurrentTimestamp
.
(
string
)
}
var
(
ret
[]
byte
gas
*
big
.
Int
err
error
logs
state
.
Logs
)
isVmTest
:=
len
(
test
.
Exec
)
>
0
if
isVmTest
{
ret
,
logs
,
gas
,
err
=
helper
.
RunVm
(
statedb
,
env
,
test
.
Exec
)
}
else
{
ret
,
logs
,
gas
,
err
=
helper
.
RunState
(
statedb
,
env
,
test
.
Transaction
)
}
switch
name
{
// the memory required for these tests (4294967297 bytes) would take too much time.
// on 19 May 2015 decided to skip these tests their output.
case
"mload32bitBound_return"
,
"mload32bitBound_return2"
:
default
:
rexp
:=
helper
.
FromHex
(
test
.
Out
)
if
bytes
.
Compare
(
rexp
,
ret
)
!=
0
{
t
.
Errorf
(
"%s's return failed. Expected %x, got %x
\n
"
,
name
,
rexp
,
ret
)
}
}
if
isVmTest
{
if
len
(
test
.
Gas
)
==
0
&&
err
==
nil
{
t
.
Errorf
(
"%s's gas unspecified, indicating an error. VM returned (incorrectly) successfull"
,
name
)
}
else
{
gexp
:=
common
.
Big
(
test
.
Gas
)
if
gexp
.
Cmp
(
gas
)
!=
0
{
t
.
Errorf
(
"%s's gas failed. Expected %v, got %v
\n
"
,
name
,
gexp
,
gas
)
}
}
}
for
addr
,
account
:=
range
test
.
Post
{
obj
:=
statedb
.
GetStateObject
(
common
.
HexToAddress
(
addr
))
if
obj
==
nil
{
continue
}
if
len
(
test
.
Exec
)
==
0
{
if
obj
.
Balance
()
.
Cmp
(
common
.
Big
(
account
.
Balance
))
!=
0
{
t
.
Errorf
(
"%s's : (%x) balance failed. Expected %v, got %v => %v
\n
"
,
name
,
obj
.
Address
()
.
Bytes
()[
:
4
],
account
.
Balance
,
obj
.
Balance
(),
new
(
big
.
Int
)
.
Sub
(
common
.
Big
(
account
.
Balance
),
obj
.
Balance
()))
}
if
obj
.
Nonce
()
!=
common
.
String2Big
(
account
.
Nonce
)
.
Uint64
()
{
t
.
Errorf
(
"%s's : (%x) nonce failed. Expected %v, got %v
\n
"
,
name
,
obj
.
Address
()
.
Bytes
()[
:
4
],
account
.
Nonce
,
obj
.
Nonce
())
}
}
for
addr
,
value
:=
range
account
.
Storage
{
v
:=
obj
.
GetState
(
common
.
HexToHash
(
addr
))
.
Bytes
()
vexp
:=
helper
.
FromHex
(
value
)
if
bytes
.
Compare
(
v
,
vexp
)
!=
0
{
t
.
Errorf
(
"%s's : (%x: %s) storage failed. Expected %x, got %x (%v %v)
\n
"
,
name
,
obj
.
Address
()
.
Bytes
()[
0
:
4
],
addr
,
vexp
,
v
,
common
.
BigD
(
vexp
),
common
.
BigD
(
v
))
}
}
}
if
!
isVmTest
{
statedb
.
Sync
()
//if !bytes.Equal(common.Hex2Bytes(test.PostStateRoot), statedb.Root()) {
if
common
.
HexToHash
(
test
.
PostStateRoot
)
!=
statedb
.
Root
()
{
t
.
Errorf
(
"%s's : Post state root error. Expected %s, got %x"
,
name
,
test
.
PostStateRoot
,
statedb
.
Root
())
}
}
if
len
(
test
.
Logs
)
>
0
{
if
len
(
test
.
Logs
)
!=
len
(
logs
)
{
t
.
Errorf
(
"log length mismatch. Expected %d, got %d"
,
len
(
test
.
Logs
),
len
(
logs
))
}
else
{
for
i
,
log
:=
range
test
.
Logs
{
if
common
.
HexToAddress
(
log
.
AddressF
)
!=
logs
[
i
]
.
Address
{
t
.
Errorf
(
"'%s' log address expected %v got %x"
,
name
,
log
.
AddressF
,
logs
[
i
]
.
Address
)
}
if
!
bytes
.
Equal
(
logs
[
i
]
.
Data
,
helper
.
FromHex
(
log
.
DataF
))
{
t
.
Errorf
(
"'%s' log data expected %v got %x"
,
name
,
log
.
DataF
,
logs
[
i
]
.
Data
)
}
if
len
(
log
.
TopicsF
)
!=
len
(
logs
[
i
]
.
Topics
)
{
t
.
Errorf
(
"'%s' log topics length expected %d got %d"
,
name
,
len
(
log
.
TopicsF
),
logs
[
i
]
.
Topics
)
}
else
{
for
j
,
topic
:=
range
log
.
TopicsF
{
if
common
.
HexToHash
(
topic
)
!=
logs
[
i
]
.
Topics
[
j
]
{
t
.
Errorf
(
"'%s' log topic[%d] expected %v got %x"
,
name
,
j
,
topic
,
logs
[
i
]
.
Topics
[
j
])
}
}
}
genBloom
:=
common
.
LeftPadBytes
(
types
.
LogsBloom
(
state
.
Logs
{
logs
[
i
]})
.
Bytes
(),
256
)
if
!
bytes
.
Equal
(
genBloom
,
common
.
Hex2Bytes
(
log
.
BloomF
))
{
t
.
Errorf
(
"'%s' bloom mismatch"
,
name
)
}
}
}
}
//fmt.Println(string(statedb.Dump()))
}
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.
func
TestVMArithmetic
(
t
*
testing
.
T
)
{
const
fn
=
"../files/VMTests/vmArithmeticTest.json"
...
...
@@ -286,99 +70,6 @@ func TestInputLimitsLight(t *testing.T) {
RunVmTest
(
fn
,
t
)
}
func
TestStateSystemOperations
(
t
*
testing
.
T
)
{
const
fn
=
"../files/StateTests/stSystemOperationsTest.json"
RunVmTest
(
fn
,
t
)
}
func
TestStateExample
(
t
*
testing
.
T
)
{
const
fn
=
"../files/StateTests/stExample.json"
RunVmTest
(
fn
,
t
)
}
func
TestStatePreCompiledContracts
(
t
*
testing
.
T
)
{
const
fn
=
"../files/StateTests/stPreCompiledContracts.json"
RunVmTest
(
fn
,
t
)
}
func
TestStateRecursiveCreate
(
t
*
testing
.
T
)
{
const
fn
=
"../files/StateTests/stRecursiveCreate.json"
RunVmTest
(
fn
,
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
)
}
func
TestStateBlockHash
(
t
*
testing
.
T
)
{
const
fn
=
"../files/StateTests/stBlockHashTest.json"
RunVmTest
(
fn
,
t
)
}
func
TestStateInitCode
(
t
*
testing
.
T
)
{
const
fn
=
"../files/StateTests/stInitCodeTest.json"
RunVmTest
(
fn
,
t
)
}
func
TestStateLog
(
t
*
testing
.
T
)
{
const
fn
=
"../files/StateTests/stLogTests.json"
RunVmTest
(
fn
,
t
)
}
func
TestStateTransaction
(
t
*
testing
.
T
)
{
const
fn
=
"../files/StateTests/stTransactionTest.json"
RunVmTest
(
fn
,
t
)
}
func
TestCallCreateCallCode
(
t
*
testing
.
T
)
{
const
fn
=
"../files/StateTests/stCallCreateCallCodeTest.json"
RunVmTest
(
fn
,
t
)
}
func
TestMemory
(
t
*
testing
.
T
)
{
const
fn
=
"../files/StateTests/stMemoryTest.json"
RunVmTest
(
fn
,
t
)
}
func
TestMemoryStress
(
t
*
testing
.
T
)
{
if
os
.
Getenv
(
"TEST_VM_COMPLEX"
)
==
""
{
t
.
Skip
()
}
const
fn
=
"../files/StateTests/stMemoryStressTest.json"
RunVmTest
(
fn
,
t
)
}
func
TestQuadraticComplexity
(
t
*
testing
.
T
)
{
if
os
.
Getenv
(
"TEST_VM_COMPLEX"
)
==
""
{
t
.
Skip
()
}
const
fn
=
"../files/StateTests/stQuadraticComplexityTest.json"
RunVmTest
(
fn
,
t
)
}
func
TestSolidity
(
t
*
testing
.
T
)
{
const
fn
=
"../files/StateTests/stSolidityTest.json"
RunVmTest
(
fn
,
t
)
}
func
TestWallet
(
t
*
testing
.
T
)
{
const
fn
=
"../files/StateTests/stWalletTest.json"
RunVmTest
(
fn
,
t
)
}
func
TestStateTestsRandom
(
t
*
testing
.
T
)
{
fns
,
_
:=
filepath
.
Glob
(
"../files/StateTests/RandomTests/*"
)
for
_
,
fn
:=
range
fns
{
RunVmTest
(
fn
,
t
)
}
}
func
TestVMRandom
(
t
*
testing
.
T
)
{
fns
,
_
:=
filepath
.
Glob
(
"../files/VMTests/RandomTests/*"
)
for
_
,
fn
:=
range
fns
{
...
...
tests/vm.go
→
tests/vm
_test_util
.go
View file @
a67a1552
package
vm
package
tests
import
(
"bytes"
"math/big"
"os"
"path/filepath"
"strconv"
"testing"
...
...
@@ -84,12 +82,12 @@ func RunVmTest(p string, t *testing.T) {
for
name
,
test
:=
range
tests
{
/*
vm.Debug = true
glog.SetV(4)
glog.SetToStderr(true)
if name != "Call50000_sha256" {
continue
}
vm.Debug = true
glog.SetV(4)
glog.SetToStderr(true)
if name != "Call50000_sha256" {
continue
}
*/
db
,
_
:=
ethdb
.
NewMemDatabase
()
statedb
:=
state
.
New
(
common
.
Hash
{},
db
)
...
...
@@ -219,170 +217,3 @@ func RunVmTest(p string, t *testing.T) {
}
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.
func
TestVMArithmetic
(
t
*
testing
.
T
)
{
const
fn
=
"../files/VMTests/vmArithmeticTest.json"
RunVmTest
(
fn
,
t
)
}
func
TestBitwiseLogicOperation
(
t
*
testing
.
T
)
{
const
fn
=
"../files/VMTests/vmBitwiseLogicOperationTest.json"
RunVmTest
(
fn
,
t
)
}
func
TestBlockInfo
(
t
*
testing
.
T
)
{
const
fn
=
"../files/VMTests/vmBlockInfoTest.json"
RunVmTest
(
fn
,
t
)
}
func
TestEnvironmentalInfo
(
t
*
testing
.
T
)
{
const
fn
=
"../files/VMTests/vmEnvironmentalInfoTest.json"
RunVmTest
(
fn
,
t
)
}
func
TestFlowOperation
(
t
*
testing
.
T
)
{
const
fn
=
"../files/VMTests/vmIOandFlowOperationsTest.json"
RunVmTest
(
fn
,
t
)
}
func
TestLogTest
(
t
*
testing
.
T
)
{
const
fn
=
"../files/VMTests/vmLogTest.json"
RunVmTest
(
fn
,
t
)
}
func
TestPerformance
(
t
*
testing
.
T
)
{
const
fn
=
"../files/VMTests/vmPerformanceTest.json"
RunVmTest
(
fn
,
t
)
}
func
TestPushDupSwap
(
t
*
testing
.
T
)
{
const
fn
=
"../files/VMTests/vmPushDupSwapTest.json"
RunVmTest
(
fn
,
t
)
}
func
TestVMSha3
(
t
*
testing
.
T
)
{
const
fn
=
"../files/VMTests/vmSha3Test.json"
RunVmTest
(
fn
,
t
)
}
func
TestVm
(
t
*
testing
.
T
)
{
const
fn
=
"../files/VMTests/vmtests.json"
RunVmTest
(
fn
,
t
)
}
func
TestVmLog
(
t
*
testing
.
T
)
{
const
fn
=
"../files/VMTests/vmLogTest.json"
RunVmTest
(
fn
,
t
)
}
func
TestInputLimits
(
t
*
testing
.
T
)
{
const
fn
=
"../files/VMTests/vmInputLimits.json"
RunVmTest
(
fn
,
t
)
}
func
TestInputLimitsLight
(
t
*
testing
.
T
)
{
const
fn
=
"../files/VMTests/vmInputLimitsLight.json"
RunVmTest
(
fn
,
t
)
}
func
TestStateSystemOperations
(
t
*
testing
.
T
)
{
const
fn
=
"../files/StateTests/stSystemOperationsTest.json"
RunVmTest
(
fn
,
t
)
}
func
TestStateExample
(
t
*
testing
.
T
)
{
const
fn
=
"../files/StateTests/stExample.json"
RunVmTest
(
fn
,
t
)
}
func
TestStatePreCompiledContracts
(
t
*
testing
.
T
)
{
const
fn
=
"../files/StateTests/stPreCompiledContracts.json"
RunVmTest
(
fn
,
t
)
}
func
TestStateRecursiveCreate
(
t
*
testing
.
T
)
{
const
fn
=
"../files/StateTests/stRecursiveCreate.json"
RunVmTest
(
fn
,
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
)
}
func
TestStateBlockHash
(
t
*
testing
.
T
)
{
const
fn
=
"../files/StateTests/stBlockHashTest.json"
RunVmTest
(
fn
,
t
)
}
func
TestStateInitCode
(
t
*
testing
.
T
)
{
const
fn
=
"../files/StateTests/stInitCodeTest.json"
RunVmTest
(
fn
,
t
)
}
func
TestStateLog
(
t
*
testing
.
T
)
{
const
fn
=
"../files/StateTests/stLogTests.json"
RunVmTest
(
fn
,
t
)
}
func
TestStateTransaction
(
t
*
testing
.
T
)
{
const
fn
=
"../files/StateTests/stTransactionTest.json"
RunVmTest
(
fn
,
t
)
}
func
TestCallCreateCallCode
(
t
*
testing
.
T
)
{
const
fn
=
"../files/StateTests/stCallCreateCallCodeTest.json"
RunVmTest
(
fn
,
t
)
}
func
TestMemory
(
t
*
testing
.
T
)
{
const
fn
=
"../files/StateTests/stMemoryTest.json"
RunVmTest
(
fn
,
t
)
}
func
TestMemoryStress
(
t
*
testing
.
T
)
{
if
os
.
Getenv
(
"TEST_VM_COMPLEX"
)
==
""
{
t
.
Skip
()
}
const
fn
=
"../files/StateTests/stMemoryStressTest.json"
RunVmTest
(
fn
,
t
)
}
func
TestQuadraticComplexity
(
t
*
testing
.
T
)
{
if
os
.
Getenv
(
"TEST_VM_COMPLEX"
)
==
""
{
t
.
Skip
()
}
const
fn
=
"../files/StateTests/stQuadraticComplexityTest.json"
RunVmTest
(
fn
,
t
)
}
func
TestSolidity
(
t
*
testing
.
T
)
{
const
fn
=
"../files/StateTests/stSolidityTest.json"
RunVmTest
(
fn
,
t
)
}
func
TestWallet
(
t
*
testing
.
T
)
{
const
fn
=
"../files/StateTests/stWalletTest.json"
RunVmTest
(
fn
,
t
)
}
func
TestStateTestsRandom
(
t
*
testing
.
T
)
{
fns
,
_
:=
filepath
.
Glob
(
"../files/StateTests/RandomTests/*"
)
for
_
,
fn
:=
range
fns
{
RunVmTest
(
fn
,
t
)
}
}
func
TestVMRandom
(
t
*
testing
.
T
)
{
t
.
Skip
()
// fucked as of 2015-06-09. unskip once unfucked /Gustav
fns
,
_
:=
filepath
.
Glob
(
"../files/VMTests/RandomTests/*"
)
for
_
,
fn
:=
range
fns
{
RunVmTest
(
fn
,
t
)
}
}
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