2022-08-29 14:25:30 +00:00
// stm: #unit
2019-07-25 22:15:03 +00:00
package state
2019-07-20 21:57:31 +00:00
import (
2020-01-22 19:53:06 +00:00
"context"
2020-03-19 00:23:59 +00:00
"fmt"
2019-07-20 21:57:31 +00:00
"testing"
2020-09-17 15:30:15 +00:00
"github.com/ipfs/go-cid"
cbor "github.com/ipfs/go-ipld-cbor"
2020-03-05 01:19:15 +00:00
2022-06-15 10:06:22 +00:00
"github.com/filecoin-project/go-address"
2022-06-14 15:00:51 +00:00
"github.com/filecoin-project/go-state-types/network"
2020-10-08 01:09:33 +00:00
builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin"
2020-09-17 15:30:15 +00:00
"github.com/filecoin-project/lotus/build"
2019-10-18 04:47:41 +00:00
"github.com/filecoin-project/lotus/chain/types"
2019-07-20 21:57:31 +00:00
)
func BenchmarkStateTreeSet ( b * testing . B ) {
feat: Add additional test annotations (#8272)
* Annotate api,proxy_util,blockstore_badger, policy tests
* Annotate splitstore: bsbadger / markset
* Annotate splitstore feature
* Annotate union/timed blockstore tests
* Annotate openrpc, diff_adt tests
* Annotate error,drand,events tests
* Annotate predicates_test
* Fix annotations
* Annotate tscache, gen tests
* Annotate fundmanager test
* Annotate repub and selection tests
* Annotate statetree_test
* Annotate forks_test
* Annotate searchwait_test.go
* Fix duplicated @@ symbols
* Annotate chain stmgr/store tests
* Annotate more (types) tests
* More tests annotated
* Annotate conformance chaos actor tests
* Annotate more integration tests
* Annotate journal system tests
* Annotate more tests.
* Annotate gas,head buffer behaviors
* Fix markset annotations
* doc: test annotations for the markets dagstore wrapper
* Annotate miner_api test in dagstore
* Annotate more test files
* Remove bad annotations from fsrepo
* Annotate wdpost system
* Remove bad annotations
* Renamce "conformance" to "chaos_actor" tests
* doc: stm annotations for blockheader & election proof tests
* Annotate remaining "A" tests
* annotate: stm for error_test
* memrepo_test.go
* Annotate "b" file tests
* message_test.go
* doc: stm annotate for fsrepo_test
* Annotate "c" file tests
* Annotate "D" test files
* message_test.go
* doc: stm annotate for chain, node/config & client
* docs: stm annotate node_test
* Annotate u,v,wl tests
* doc: stm annotations for various test files
* Annotate "T" test files
* doc: stm annotate for proxy_util_test & policy_test
* doc: stm annotate for various tests
* doc: final few stm annotations
* Add mempool unit tests
* Add two more memPool Add tests
* Update submodules
* Add check function tests
* Add stm annotations, refactor test helper
* Annotate api,proxy_util,blockstore_badger, policy tests
* Annotate splitstore: bsbadger / markset
solving merge conflicts
* Annotate splitstore feature
* Annotate union/timed blockstore tests
* Annotate openrpc, diff_adt tests
* Annotate error,drand,events tests
* Annotate predicates_test
* Fix annotations
* Annotate tscache, gen tests
* Annotate fundmanager test
* Annotate statetree_test
* Annotate forks_test
* Annotate searchwait_test.go
* Fix duplicated @@ symbols
* Annotate chain stmgr/store tests
* Annotate more (types) tests
* More tests annotated
* Annotate conformance chaos actor tests
* Annotate more integration tests
* Annotate journal system tests
* Annotate more tests.
* Annotate gas,head buffer behaviors
solve merge conflict
* Fix markset annotations
* Annotate miner_api test in dagstore
* Annotate more test files
* doc: test annotations for the markets dagstore wrapper
* Annotate wdpost system
* Renamce "conformance" to "chaos_actor" tests
* Annotate remaining "A" tests
* doc: stm annotations for blockheader & election proof tests
* annotate: stm for error_test
* Annotate "b" file tests
* memrepo_test.go
* Annotate "c" file tests
* message_test.go
* Annotate "D" test files
* doc: stm annotate for fsrepo_test
* Annotate u,v,wl tests
* message_test.go
* doc: stm annotate for chain, node/config & client
* docs: stm annotate node_test
* Annotate "T" test files
* doc: stm annotations for various test files
* Add mempool unit tests
solve merge conflict
* doc: stm annotate for proxy_util_test & policy_test
* doc: stm annotate for various tests
* doc: final few stm annotations
* Add two more memPool Add tests
* Update submodules
* Add check function tests
solve conflict
* Add stm annotations, refactor test helper
solve merge conflict
* Change CLI test kinds to "unit"
* Fix double merged test
* Fix ccupgrade_test merge
* Fix lint issues
* Add stm annotation to types_Test
* Test vectors submodule
* Add file annotation to burn_test
Co-authored-by: Nikola Divic <divicnikola@gmail.com>
Co-authored-by: TheMenko <themenkoprojects@gmail.com>
2022-03-16 17:37:34 +00:00
//stm: @CHAIN_STATETREE_SET_ACTOR_001
2020-02-04 22:19:05 +00:00
cst := cbor . NewMemCborStore ( )
2020-10-08 01:09:33 +00:00
st , err := NewStateTree ( cst , types . StateTreeVersion1 )
2019-07-20 21:57:31 +00:00
if err != nil {
b . Fatal ( err )
}
b . ResetTimer ( )
b . ReportAllocs ( )
for i := 0 ; i < b . N ; i ++ {
a , err := address . NewIDAddress ( uint64 ( i ) )
if err != nil {
b . Fatal ( err )
}
err = st . SetActor ( a , & types . Actor {
Balance : types . NewInt ( 1258812523 ) ,
2020-10-08 01:09:33 +00:00
Code : builtin2 . StorageMinerActorCodeID ,
Head : builtin2 . AccountActorCodeID ,
2019-07-20 21:57:31 +00:00
Nonce : uint64 ( i ) ,
} )
if err != nil {
b . Fatal ( err )
}
}
}
func BenchmarkStateTreeSetFlush ( b * testing . B ) {
feat: Add additional test annotations (#8272)
* Annotate api,proxy_util,blockstore_badger, policy tests
* Annotate splitstore: bsbadger / markset
* Annotate splitstore feature
* Annotate union/timed blockstore tests
* Annotate openrpc, diff_adt tests
* Annotate error,drand,events tests
* Annotate predicates_test
* Fix annotations
* Annotate tscache, gen tests
* Annotate fundmanager test
* Annotate repub and selection tests
* Annotate statetree_test
* Annotate forks_test
* Annotate searchwait_test.go
* Fix duplicated @@ symbols
* Annotate chain stmgr/store tests
* Annotate more (types) tests
* More tests annotated
* Annotate conformance chaos actor tests
* Annotate more integration tests
* Annotate journal system tests
* Annotate more tests.
* Annotate gas,head buffer behaviors
* Fix markset annotations
* doc: test annotations for the markets dagstore wrapper
* Annotate miner_api test in dagstore
* Annotate more test files
* Remove bad annotations from fsrepo
* Annotate wdpost system
* Remove bad annotations
* Renamce "conformance" to "chaos_actor" tests
* doc: stm annotations for blockheader & election proof tests
* Annotate remaining "A" tests
* annotate: stm for error_test
* memrepo_test.go
* Annotate "b" file tests
* message_test.go
* doc: stm annotate for fsrepo_test
* Annotate "c" file tests
* Annotate "D" test files
* message_test.go
* doc: stm annotate for chain, node/config & client
* docs: stm annotate node_test
* Annotate u,v,wl tests
* doc: stm annotations for various test files
* Annotate "T" test files
* doc: stm annotate for proxy_util_test & policy_test
* doc: stm annotate for various tests
* doc: final few stm annotations
* Add mempool unit tests
* Add two more memPool Add tests
* Update submodules
* Add check function tests
* Add stm annotations, refactor test helper
* Annotate api,proxy_util,blockstore_badger, policy tests
* Annotate splitstore: bsbadger / markset
solving merge conflicts
* Annotate splitstore feature
* Annotate union/timed blockstore tests
* Annotate openrpc, diff_adt tests
* Annotate error,drand,events tests
* Annotate predicates_test
* Fix annotations
* Annotate tscache, gen tests
* Annotate fundmanager test
* Annotate statetree_test
* Annotate forks_test
* Annotate searchwait_test.go
* Fix duplicated @@ symbols
* Annotate chain stmgr/store tests
* Annotate more (types) tests
* More tests annotated
* Annotate conformance chaos actor tests
* Annotate more integration tests
* Annotate journal system tests
* Annotate more tests.
* Annotate gas,head buffer behaviors
solve merge conflict
* Fix markset annotations
* Annotate miner_api test in dagstore
* Annotate more test files
* doc: test annotations for the markets dagstore wrapper
* Annotate wdpost system
* Renamce "conformance" to "chaos_actor" tests
* Annotate remaining "A" tests
* doc: stm annotations for blockheader & election proof tests
* annotate: stm for error_test
* Annotate "b" file tests
* memrepo_test.go
* Annotate "c" file tests
* message_test.go
* Annotate "D" test files
* doc: stm annotate for fsrepo_test
* Annotate u,v,wl tests
* message_test.go
* doc: stm annotate for chain, node/config & client
* docs: stm annotate node_test
* Annotate "T" test files
* doc: stm annotations for various test files
* Add mempool unit tests
solve merge conflict
* doc: stm annotate for proxy_util_test & policy_test
* doc: stm annotate for various tests
* doc: final few stm annotations
* Add two more memPool Add tests
* Update submodules
* Add check function tests
solve conflict
* Add stm annotations, refactor test helper
solve merge conflict
* Change CLI test kinds to "unit"
* Fix double merged test
* Fix ccupgrade_test merge
* Fix lint issues
* Add stm annotation to types_Test
* Test vectors submodule
* Add file annotation to burn_test
Co-authored-by: Nikola Divic <divicnikola@gmail.com>
Co-authored-by: TheMenko <themenkoprojects@gmail.com>
2022-03-16 17:37:34 +00:00
//stm: @CHAIN_STATETREE_SET_ACTOR_001
2020-02-04 22:19:05 +00:00
cst := cbor . NewMemCborStore ( )
2022-11-16 01:57:23 +00:00
sv , err := VersionForNetwork ( build . TestNetworkVersion )
2021-05-15 01:11:23 +00:00
if err != nil {
b . Fatal ( err )
}
st , err := NewStateTree ( cst , sv )
2019-07-20 21:57:31 +00:00
if err != nil {
b . Fatal ( err )
}
b . ResetTimer ( )
b . ReportAllocs ( )
for i := 0 ; i < b . N ; i ++ {
a , err := address . NewIDAddress ( uint64 ( i ) )
if err != nil {
b . Fatal ( err )
}
err = st . SetActor ( a , & types . Actor {
Balance : types . NewInt ( 1258812523 ) ,
2020-10-08 01:09:33 +00:00
Code : builtin2 . StorageMinerActorCodeID ,
Head : builtin2 . AccountActorCodeID ,
2019-07-20 21:57:31 +00:00
Nonce : uint64 ( i ) ,
} )
if err != nil {
b . Fatal ( err )
}
2020-01-22 19:53:06 +00:00
if _ , err := st . Flush ( context . TODO ( ) ) ; err != nil {
2019-07-20 21:57:31 +00:00
b . Fatal ( err )
}
}
}
2020-10-19 23:25:41 +00:00
func TestResolveCache ( t * testing . T ) {
feat: Add additional test annotations (#8272)
* Annotate api,proxy_util,blockstore_badger, policy tests
* Annotate splitstore: bsbadger / markset
* Annotate splitstore feature
* Annotate union/timed blockstore tests
* Annotate openrpc, diff_adt tests
* Annotate error,drand,events tests
* Annotate predicates_test
* Fix annotations
* Annotate tscache, gen tests
* Annotate fundmanager test
* Annotate repub and selection tests
* Annotate statetree_test
* Annotate forks_test
* Annotate searchwait_test.go
* Fix duplicated @@ symbols
* Annotate chain stmgr/store tests
* Annotate more (types) tests
* More tests annotated
* Annotate conformance chaos actor tests
* Annotate more integration tests
* Annotate journal system tests
* Annotate more tests.
* Annotate gas,head buffer behaviors
* Fix markset annotations
* doc: test annotations for the markets dagstore wrapper
* Annotate miner_api test in dagstore
* Annotate more test files
* Remove bad annotations from fsrepo
* Annotate wdpost system
* Remove bad annotations
* Renamce "conformance" to "chaos_actor" tests
* doc: stm annotations for blockheader & election proof tests
* Annotate remaining "A" tests
* annotate: stm for error_test
* memrepo_test.go
* Annotate "b" file tests
* message_test.go
* doc: stm annotate for fsrepo_test
* Annotate "c" file tests
* Annotate "D" test files
* message_test.go
* doc: stm annotate for chain, node/config & client
* docs: stm annotate node_test
* Annotate u,v,wl tests
* doc: stm annotations for various test files
* Annotate "T" test files
* doc: stm annotate for proxy_util_test & policy_test
* doc: stm annotate for various tests
* doc: final few stm annotations
* Add mempool unit tests
* Add two more memPool Add tests
* Update submodules
* Add check function tests
* Add stm annotations, refactor test helper
* Annotate api,proxy_util,blockstore_badger, policy tests
* Annotate splitstore: bsbadger / markset
solving merge conflicts
* Annotate splitstore feature
* Annotate union/timed blockstore tests
* Annotate openrpc, diff_adt tests
* Annotate error,drand,events tests
* Annotate predicates_test
* Fix annotations
* Annotate tscache, gen tests
* Annotate fundmanager test
* Annotate statetree_test
* Annotate forks_test
* Annotate searchwait_test.go
* Fix duplicated @@ symbols
* Annotate chain stmgr/store tests
* Annotate more (types) tests
* More tests annotated
* Annotate conformance chaos actor tests
* Annotate more integration tests
* Annotate journal system tests
* Annotate more tests.
* Annotate gas,head buffer behaviors
solve merge conflict
* Fix markset annotations
* Annotate miner_api test in dagstore
* Annotate more test files
* doc: test annotations for the markets dagstore wrapper
* Annotate wdpost system
* Renamce "conformance" to "chaos_actor" tests
* Annotate remaining "A" tests
* doc: stm annotations for blockheader & election proof tests
* annotate: stm for error_test
* Annotate "b" file tests
* memrepo_test.go
* Annotate "c" file tests
* message_test.go
* Annotate "D" test files
* doc: stm annotate for fsrepo_test
* Annotate u,v,wl tests
* message_test.go
* doc: stm annotate for chain, node/config & client
* docs: stm annotate node_test
* Annotate "T" test files
* doc: stm annotations for various test files
* Add mempool unit tests
solve merge conflict
* doc: stm annotate for proxy_util_test & policy_test
* doc: stm annotate for various tests
* doc: final few stm annotations
* Add two more memPool Add tests
* Update submodules
* Add check function tests
solve conflict
* Add stm annotations, refactor test helper
solve merge conflict
* Change CLI test kinds to "unit"
* Fix double merged test
* Fix ccupgrade_test merge
* Fix lint issues
* Add stm annotation to types_Test
* Test vectors submodule
* Add file annotation to burn_test
Co-authored-by: Nikola Divic <divicnikola@gmail.com>
Co-authored-by: TheMenko <themenkoprojects@gmail.com>
2022-03-16 17:37:34 +00:00
//stm: @CHAIN_STATETREE_SET_ACTOR_001, @CHAIN_STATETREE_GET_ACTOR_001, @CHAIN_STATETREE_VERSION_FOR_NETWORK_001
//stm: @CHAIN_STATETREE_SNAPSHOT_001, @CHAIN_STATETREE_SNAPSHOT_CLEAR_001
2020-10-19 23:25:41 +00:00
cst := cbor . NewMemCborStore ( )
2022-11-16 01:57:23 +00:00
sv , err := VersionForNetwork ( build . TestNetworkVersion )
2021-05-15 01:11:23 +00:00
if err != nil {
t . Fatal ( err )
}
st , err := NewStateTree ( cst , sv )
2020-10-19 23:25:41 +00:00
if err != nil {
t . Fatal ( err )
}
nonId := address . NewForTestGetter ( ) ( )
id , _ := address . NewIDAddress ( 1000 )
st . lookupIDFun = func ( a address . Address ) ( address . Address , error ) {
if a == nonId {
return id , nil
}
2020-10-19 23:32:51 +00:00
return address . Undef , types . ErrActorNotFound
2020-10-19 23:25:41 +00:00
}
err = st . SetActor ( nonId , & types . Actor { Nonce : 1 } )
if err != nil {
t . Fatal ( err )
}
{
err = st . Snapshot ( context . TODO ( ) )
if err != nil {
t . Fatal ( err )
}
act , err := st . GetActor ( nonId )
if err != nil {
t . Fatal ( err )
}
if act . Nonce != 1 {
t . Fatalf ( "expected nonce 1, got %d" , act . Nonce )
}
err = st . SetActor ( nonId , & types . Actor { Nonce : 2 } )
if err != nil {
t . Fatal ( err )
}
act , err = st . GetActor ( nonId )
if err != nil {
t . Fatal ( err )
}
if act . Nonce != 2 {
t . Fatalf ( "expected nonce 2, got %d" , act . Nonce )
}
if err := st . Revert ( ) ; err != nil {
t . Fatal ( err )
}
st . ClearSnapshot ( )
}
act , err := st . GetActor ( nonId )
if err != nil {
t . Fatal ( err )
}
if act . Nonce != 1 {
t . Fatalf ( "expected nonce 1, got %d" , act . Nonce )
}
{
err = st . Snapshot ( context . TODO ( ) )
if err != nil {
t . Fatal ( err )
}
act , err := st . GetActor ( nonId )
if err != nil {
t . Fatal ( err )
}
if act . Nonce != 1 {
t . Fatalf ( "expected nonce 1, got %d" , act . Nonce )
}
err = st . SetActor ( nonId , & types . Actor { Nonce : 2 } )
if err != nil {
t . Fatal ( err )
}
act , err = st . GetActor ( nonId )
if err != nil {
t . Fatal ( err )
}
if act . Nonce != 2 {
t . Fatalf ( "expected nonce 2, got %d" , act . Nonce )
}
st . ClearSnapshot ( )
}
act , err = st . GetActor ( nonId )
if err != nil {
t . Fatal ( err )
}
if act . Nonce != 2 {
t . Fatalf ( "expected nonce 2, got %d" , act . Nonce )
}
}
2019-07-20 21:57:31 +00:00
func BenchmarkStateTree10kGetActor ( b * testing . B ) {
feat: Add additional test annotations (#8272)
* Annotate api,proxy_util,blockstore_badger, policy tests
* Annotate splitstore: bsbadger / markset
* Annotate splitstore feature
* Annotate union/timed blockstore tests
* Annotate openrpc, diff_adt tests
* Annotate error,drand,events tests
* Annotate predicates_test
* Fix annotations
* Annotate tscache, gen tests
* Annotate fundmanager test
* Annotate repub and selection tests
* Annotate statetree_test
* Annotate forks_test
* Annotate searchwait_test.go
* Fix duplicated @@ symbols
* Annotate chain stmgr/store tests
* Annotate more (types) tests
* More tests annotated
* Annotate conformance chaos actor tests
* Annotate more integration tests
* Annotate journal system tests
* Annotate more tests.
* Annotate gas,head buffer behaviors
* Fix markset annotations
* doc: test annotations for the markets dagstore wrapper
* Annotate miner_api test in dagstore
* Annotate more test files
* Remove bad annotations from fsrepo
* Annotate wdpost system
* Remove bad annotations
* Renamce "conformance" to "chaos_actor" tests
* doc: stm annotations for blockheader & election proof tests
* Annotate remaining "A" tests
* annotate: stm for error_test
* memrepo_test.go
* Annotate "b" file tests
* message_test.go
* doc: stm annotate for fsrepo_test
* Annotate "c" file tests
* Annotate "D" test files
* message_test.go
* doc: stm annotate for chain, node/config & client
* docs: stm annotate node_test
* Annotate u,v,wl tests
* doc: stm annotations for various test files
* Annotate "T" test files
* doc: stm annotate for proxy_util_test & policy_test
* doc: stm annotate for various tests
* doc: final few stm annotations
* Add mempool unit tests
* Add two more memPool Add tests
* Update submodules
* Add check function tests
* Add stm annotations, refactor test helper
* Annotate api,proxy_util,blockstore_badger, policy tests
* Annotate splitstore: bsbadger / markset
solving merge conflicts
* Annotate splitstore feature
* Annotate union/timed blockstore tests
* Annotate openrpc, diff_adt tests
* Annotate error,drand,events tests
* Annotate predicates_test
* Fix annotations
* Annotate tscache, gen tests
* Annotate fundmanager test
* Annotate statetree_test
* Annotate forks_test
* Annotate searchwait_test.go
* Fix duplicated @@ symbols
* Annotate chain stmgr/store tests
* Annotate more (types) tests
* More tests annotated
* Annotate conformance chaos actor tests
* Annotate more integration tests
* Annotate journal system tests
* Annotate more tests.
* Annotate gas,head buffer behaviors
solve merge conflict
* Fix markset annotations
* Annotate miner_api test in dagstore
* Annotate more test files
* doc: test annotations for the markets dagstore wrapper
* Annotate wdpost system
* Renamce "conformance" to "chaos_actor" tests
* Annotate remaining "A" tests
* doc: stm annotations for blockheader & election proof tests
* annotate: stm for error_test
* Annotate "b" file tests
* memrepo_test.go
* Annotate "c" file tests
* message_test.go
* Annotate "D" test files
* doc: stm annotate for fsrepo_test
* Annotate u,v,wl tests
* message_test.go
* doc: stm annotate for chain, node/config & client
* docs: stm annotate node_test
* Annotate "T" test files
* doc: stm annotations for various test files
* Add mempool unit tests
solve merge conflict
* doc: stm annotate for proxy_util_test & policy_test
* doc: stm annotate for various tests
* doc: final few stm annotations
* Add two more memPool Add tests
* Update submodules
* Add check function tests
solve conflict
* Add stm annotations, refactor test helper
solve merge conflict
* Change CLI test kinds to "unit"
* Fix double merged test
* Fix ccupgrade_test merge
* Fix lint issues
* Add stm annotation to types_Test
* Test vectors submodule
* Add file annotation to burn_test
Co-authored-by: Nikola Divic <divicnikola@gmail.com>
Co-authored-by: TheMenko <themenkoprojects@gmail.com>
2022-03-16 17:37:34 +00:00
//stm: @CHAIN_STATETREE_SET_ACTOR_001, @CHAIN_STATETREE_GET_ACTOR_001, @CHAIN_STATETREE_VERSION_FOR_NETWORK_001
//stm: @CHAIN_STATETREE_FLUSH_001
2020-02-04 22:19:05 +00:00
cst := cbor . NewMemCborStore ( )
2022-11-16 01:57:23 +00:00
sv , err := VersionForNetwork ( build . TestNetworkVersion )
2021-05-15 01:11:23 +00:00
if err != nil {
b . Fatal ( err )
}
st , err := NewStateTree ( cst , sv )
2019-07-20 21:57:31 +00:00
if err != nil {
b . Fatal ( err )
}
for i := 0 ; i < 10000 ; i ++ {
a , err := address . NewIDAddress ( uint64 ( i ) )
if err != nil {
b . Fatal ( err )
}
err = st . SetActor ( a , & types . Actor {
Balance : types . NewInt ( 1258812523 + uint64 ( i ) ) ,
2020-10-08 01:09:33 +00:00
Code : builtin2 . StorageMinerActorCodeID ,
Head : builtin2 . AccountActorCodeID ,
2019-07-20 21:57:31 +00:00
Nonce : uint64 ( i ) ,
} )
if err != nil {
b . Fatal ( err )
}
}
2020-01-22 19:53:06 +00:00
if _ , err := st . Flush ( context . TODO ( ) ) ; err != nil {
2019-07-20 21:57:31 +00:00
b . Fatal ( err )
}
b . ResetTimer ( )
b . ReportAllocs ( )
for i := 0 ; i < b . N ; i ++ {
a , err := address . NewIDAddress ( uint64 ( i % 10000 ) )
if err != nil {
b . Fatal ( err )
}
_ , err = st . GetActor ( a )
if err != nil {
b . Fatal ( err )
}
}
}
2019-09-23 09:52:53 +00:00
func TestSetCache ( t * testing . T ) {
feat: Add additional test annotations (#8272)
* Annotate api,proxy_util,blockstore_badger, policy tests
* Annotate splitstore: bsbadger / markset
* Annotate splitstore feature
* Annotate union/timed blockstore tests
* Annotate openrpc, diff_adt tests
* Annotate error,drand,events tests
* Annotate predicates_test
* Fix annotations
* Annotate tscache, gen tests
* Annotate fundmanager test
* Annotate repub and selection tests
* Annotate statetree_test
* Annotate forks_test
* Annotate searchwait_test.go
* Fix duplicated @@ symbols
* Annotate chain stmgr/store tests
* Annotate more (types) tests
* More tests annotated
* Annotate conformance chaos actor tests
* Annotate more integration tests
* Annotate journal system tests
* Annotate more tests.
* Annotate gas,head buffer behaviors
* Fix markset annotations
* doc: test annotations for the markets dagstore wrapper
* Annotate miner_api test in dagstore
* Annotate more test files
* Remove bad annotations from fsrepo
* Annotate wdpost system
* Remove bad annotations
* Renamce "conformance" to "chaos_actor" tests
* doc: stm annotations for blockheader & election proof tests
* Annotate remaining "A" tests
* annotate: stm for error_test
* memrepo_test.go
* Annotate "b" file tests
* message_test.go
* doc: stm annotate for fsrepo_test
* Annotate "c" file tests
* Annotate "D" test files
* message_test.go
* doc: stm annotate for chain, node/config & client
* docs: stm annotate node_test
* Annotate u,v,wl tests
* doc: stm annotations for various test files
* Annotate "T" test files
* doc: stm annotate for proxy_util_test & policy_test
* doc: stm annotate for various tests
* doc: final few stm annotations
* Add mempool unit tests
* Add two more memPool Add tests
* Update submodules
* Add check function tests
* Add stm annotations, refactor test helper
* Annotate api,proxy_util,blockstore_badger, policy tests
* Annotate splitstore: bsbadger / markset
solving merge conflicts
* Annotate splitstore feature
* Annotate union/timed blockstore tests
* Annotate openrpc, diff_adt tests
* Annotate error,drand,events tests
* Annotate predicates_test
* Fix annotations
* Annotate tscache, gen tests
* Annotate fundmanager test
* Annotate statetree_test
* Annotate forks_test
* Annotate searchwait_test.go
* Fix duplicated @@ symbols
* Annotate chain stmgr/store tests
* Annotate more (types) tests
* More tests annotated
* Annotate conformance chaos actor tests
* Annotate more integration tests
* Annotate journal system tests
* Annotate more tests.
* Annotate gas,head buffer behaviors
solve merge conflict
* Fix markset annotations
* Annotate miner_api test in dagstore
* Annotate more test files
* doc: test annotations for the markets dagstore wrapper
* Annotate wdpost system
* Renamce "conformance" to "chaos_actor" tests
* Annotate remaining "A" tests
* doc: stm annotations for blockheader & election proof tests
* annotate: stm for error_test
* Annotate "b" file tests
* memrepo_test.go
* Annotate "c" file tests
* message_test.go
* Annotate "D" test files
* doc: stm annotate for fsrepo_test
* Annotate u,v,wl tests
* message_test.go
* doc: stm annotate for chain, node/config & client
* docs: stm annotate node_test
* Annotate "T" test files
* doc: stm annotations for various test files
* Add mempool unit tests
solve merge conflict
* doc: stm annotate for proxy_util_test & policy_test
* doc: stm annotate for various tests
* doc: final few stm annotations
* Add two more memPool Add tests
* Update submodules
* Add check function tests
solve conflict
* Add stm annotations, refactor test helper
solve merge conflict
* Change CLI test kinds to "unit"
* Fix double merged test
* Fix ccupgrade_test merge
* Fix lint issues
* Add stm annotation to types_Test
* Test vectors submodule
* Add file annotation to burn_test
Co-authored-by: Nikola Divic <divicnikola@gmail.com>
Co-authored-by: TheMenko <themenkoprojects@gmail.com>
2022-03-16 17:37:34 +00:00
//stm: @CHAIN_STATETREE_SET_ACTOR_001, @CHAIN_STATETREE_GET_ACTOR_001, @CHAIN_STATETREE_VERSION_FOR_NETWORK_001
2020-02-04 22:19:05 +00:00
cst := cbor . NewMemCborStore ( )
2022-11-16 01:57:23 +00:00
sv , err := VersionForNetwork ( build . TestNetworkVersion )
2021-05-15 01:11:23 +00:00
if err != nil {
t . Fatal ( err )
}
st , err := NewStateTree ( cst , sv )
2019-09-23 09:52:53 +00:00
if err != nil {
t . Fatal ( err )
}
a , err := address . NewIDAddress ( uint64 ( 222 ) )
if err != nil {
t . Fatal ( err )
}
act := & types . Actor {
Balance : types . NewInt ( 0 ) ,
2020-10-08 01:09:33 +00:00
Code : builtin2 . StorageMinerActorCodeID ,
Head : builtin2 . AccountActorCodeID ,
2019-09-23 09:52:53 +00:00
Nonce : 0 ,
}
err = st . SetActor ( a , act )
if err != nil {
t . Fatal ( err )
}
act . Nonce = 1
outact , err := st . GetActor ( a )
if err != nil {
t . Fatal ( err )
}
2020-04-03 00:09:41 +00:00
if outact . Nonce == 1 {
t . Error ( "nonce should not have updated" )
2019-09-23 09:52:53 +00:00
}
}
2020-03-05 01:19:15 +00:00
func TestSnapshots ( t * testing . T ) {
feat: Add additional test annotations (#8272)
* Annotate api,proxy_util,blockstore_badger, policy tests
* Annotate splitstore: bsbadger / markset
* Annotate splitstore feature
* Annotate union/timed blockstore tests
* Annotate openrpc, diff_adt tests
* Annotate error,drand,events tests
* Annotate predicates_test
* Fix annotations
* Annotate tscache, gen tests
* Annotate fundmanager test
* Annotate repub and selection tests
* Annotate statetree_test
* Annotate forks_test
* Annotate searchwait_test.go
* Fix duplicated @@ symbols
* Annotate chain stmgr/store tests
* Annotate more (types) tests
* More tests annotated
* Annotate conformance chaos actor tests
* Annotate more integration tests
* Annotate journal system tests
* Annotate more tests.
* Annotate gas,head buffer behaviors
* Fix markset annotations
* doc: test annotations for the markets dagstore wrapper
* Annotate miner_api test in dagstore
* Annotate more test files
* Remove bad annotations from fsrepo
* Annotate wdpost system
* Remove bad annotations
* Renamce "conformance" to "chaos_actor" tests
* doc: stm annotations for blockheader & election proof tests
* Annotate remaining "A" tests
* annotate: stm for error_test
* memrepo_test.go
* Annotate "b" file tests
* message_test.go
* doc: stm annotate for fsrepo_test
* Annotate "c" file tests
* Annotate "D" test files
* message_test.go
* doc: stm annotate for chain, node/config & client
* docs: stm annotate node_test
* Annotate u,v,wl tests
* doc: stm annotations for various test files
* Annotate "T" test files
* doc: stm annotate for proxy_util_test & policy_test
* doc: stm annotate for various tests
* doc: final few stm annotations
* Add mempool unit tests
* Add two more memPool Add tests
* Update submodules
* Add check function tests
* Add stm annotations, refactor test helper
* Annotate api,proxy_util,blockstore_badger, policy tests
* Annotate splitstore: bsbadger / markset
solving merge conflicts
* Annotate splitstore feature
* Annotate union/timed blockstore tests
* Annotate openrpc, diff_adt tests
* Annotate error,drand,events tests
* Annotate predicates_test
* Fix annotations
* Annotate tscache, gen tests
* Annotate fundmanager test
* Annotate statetree_test
* Annotate forks_test
* Annotate searchwait_test.go
* Fix duplicated @@ symbols
* Annotate chain stmgr/store tests
* Annotate more (types) tests
* More tests annotated
* Annotate conformance chaos actor tests
* Annotate more integration tests
* Annotate journal system tests
* Annotate more tests.
* Annotate gas,head buffer behaviors
solve merge conflict
* Fix markset annotations
* Annotate miner_api test in dagstore
* Annotate more test files
* doc: test annotations for the markets dagstore wrapper
* Annotate wdpost system
* Renamce "conformance" to "chaos_actor" tests
* Annotate remaining "A" tests
* doc: stm annotations for blockheader & election proof tests
* annotate: stm for error_test
* Annotate "b" file tests
* memrepo_test.go
* Annotate "c" file tests
* message_test.go
* Annotate "D" test files
* doc: stm annotate for fsrepo_test
* Annotate u,v,wl tests
* message_test.go
* doc: stm annotate for chain, node/config & client
* docs: stm annotate node_test
* Annotate "T" test files
* doc: stm annotations for various test files
* Add mempool unit tests
solve merge conflict
* doc: stm annotate for proxy_util_test & policy_test
* doc: stm annotate for various tests
* doc: final few stm annotations
* Add two more memPool Add tests
* Update submodules
* Add check function tests
solve conflict
* Add stm annotations, refactor test helper
solve merge conflict
* Change CLI test kinds to "unit"
* Fix double merged test
* Fix ccupgrade_test merge
* Fix lint issues
* Add stm annotation to types_Test
* Test vectors submodule
* Add file annotation to burn_test
Co-authored-by: Nikola Divic <divicnikola@gmail.com>
Co-authored-by: TheMenko <themenkoprojects@gmail.com>
2022-03-16 17:37:34 +00:00
//stm: @CHAIN_STATETREE_SET_ACTOR_001, @CHAIN_STATETREE_GET_ACTOR_001, @CHAIN_STATETREE_VERSION_FOR_NETWORK_001
//stm: @CHAIN_STATETREE_FLUSH_001, @CHAIN_STATETREE_SNAPSHOT_REVERT_001, CHAIN_STATETREE_SNAPSHOT_CLEAR_001
2020-03-05 01:19:15 +00:00
ctx := context . Background ( )
cst := cbor . NewMemCborStore ( )
2021-05-15 01:11:23 +00:00
2022-11-16 01:57:23 +00:00
sv , err := VersionForNetwork ( build . TestNetworkVersion )
2021-05-15 01:11:23 +00:00
if err != nil {
t . Fatal ( err )
}
st , err := NewStateTree ( cst , sv )
2020-03-05 01:19:15 +00:00
if err != nil {
t . Fatal ( err )
}
var addrs [ ] address . Address
//for _, a := range []string{"t15ocrptbu4i5qucjvvwecihd7fqqgzb27pz5l5zy", "t1dpyvgavvl3f4ujlk6odedss54z6rt5gyuknsuva", "t1feiejbkcvozy7iltt2pxzuoq4d2kpbsusugan7a", "t3rgjfqybjx7bahuhfv7nwfg3tlm4i4zyvldfirjvzm5z5xwjoqbj3rfi2mpmlxpqwxxxafgpkjilqzpg7cefa"} {
for _ , a := range [ ] string { "t0100" , "t0101" , "t0102" , "t0103" } {
addr , err := address . NewFromString ( a )
if err != nil {
t . Fatal ( err )
}
addrs = append ( addrs , addr )
}
if err := st . Snapshot ( ctx ) ; err != nil {
t . Fatal ( err )
}
2020-10-08 01:09:33 +00:00
if err := st . SetActor ( addrs [ 0 ] , & types . Actor { Code : builtin2 . AccountActorCodeID , Head : builtin2 . AccountActorCodeID , Balance : types . NewInt ( 55 ) } ) ; err != nil {
2020-03-05 01:19:15 +00:00
t . Fatal ( err )
}
{ // sub call that will fail
if err := st . Snapshot ( ctx ) ; err != nil {
t . Fatal ( err )
}
2020-10-08 01:09:33 +00:00
if err := st . SetActor ( addrs [ 1 ] , & types . Actor { Code : builtin2 . AccountActorCodeID , Head : builtin2 . AccountActorCodeID , Balance : types . NewInt ( 77 ) } ) ; err != nil {
2020-03-05 01:19:15 +00:00
t . Fatal ( err )
}
if err := st . Revert ( ) ; err != nil {
t . Fatal ( err )
}
st . ClearSnapshot ( )
}
// more operations in top level call...
2020-10-08 01:09:33 +00:00
if err := st . SetActor ( addrs [ 2 ] , & types . Actor { Code : builtin2 . AccountActorCodeID , Head : builtin2 . AccountActorCodeID , Balance : types . NewInt ( 123 ) } ) ; err != nil {
2020-03-05 01:19:15 +00:00
t . Fatal ( err )
}
{ // sub call that succeeds
if err := st . Snapshot ( ctx ) ; err != nil {
t . Fatal ( err )
}
2020-10-08 01:09:33 +00:00
if err := st . SetActor ( addrs [ 3 ] , & types . Actor { Code : builtin2 . AccountActorCodeID , Head : builtin2 . AccountActorCodeID , Balance : types . NewInt ( 5 ) } ) ; err != nil {
2020-03-05 01:19:15 +00:00
t . Fatal ( err )
}
st . ClearSnapshot ( )
}
2020-04-03 00:09:41 +00:00
st . ClearSnapshot ( )
2020-03-05 01:19:15 +00:00
if _ , err := st . Flush ( ctx ) ; err != nil {
t . Fatal ( err )
}
assertHas ( t , st , addrs [ 0 ] )
assertNotHas ( t , st , addrs [ 1 ] )
assertHas ( t , st , addrs [ 2 ] )
assertHas ( t , st , addrs [ 3 ] )
}
func assertHas ( t * testing . T , st * StateTree , addr address . Address ) {
_ , err := st . GetActor ( addr )
if err != nil {
t . Fatal ( err )
}
}
func assertNotHas ( t * testing . T , st * StateTree , addr address . Address ) {
_ , err := st . GetActor ( addr )
if err == nil {
t . Fatal ( "shouldnt have found actor" , addr )
}
}
2020-03-19 00:23:59 +00:00
func TestStateTreeConsistency ( t * testing . T ) {
feat: Add additional test annotations (#8272)
* Annotate api,proxy_util,blockstore_badger, policy tests
* Annotate splitstore: bsbadger / markset
* Annotate splitstore feature
* Annotate union/timed blockstore tests
* Annotate openrpc, diff_adt tests
* Annotate error,drand,events tests
* Annotate predicates_test
* Fix annotations
* Annotate tscache, gen tests
* Annotate fundmanager test
* Annotate repub and selection tests
* Annotate statetree_test
* Annotate forks_test
* Annotate searchwait_test.go
* Fix duplicated @@ symbols
* Annotate chain stmgr/store tests
* Annotate more (types) tests
* More tests annotated
* Annotate conformance chaos actor tests
* Annotate more integration tests
* Annotate journal system tests
* Annotate more tests.
* Annotate gas,head buffer behaviors
* Fix markset annotations
* doc: test annotations for the markets dagstore wrapper
* Annotate miner_api test in dagstore
* Annotate more test files
* Remove bad annotations from fsrepo
* Annotate wdpost system
* Remove bad annotations
* Renamce "conformance" to "chaos_actor" tests
* doc: stm annotations for blockheader & election proof tests
* Annotate remaining "A" tests
* annotate: stm for error_test
* memrepo_test.go
* Annotate "b" file tests
* message_test.go
* doc: stm annotate for fsrepo_test
* Annotate "c" file tests
* Annotate "D" test files
* message_test.go
* doc: stm annotate for chain, node/config & client
* docs: stm annotate node_test
* Annotate u,v,wl tests
* doc: stm annotations for various test files
* Annotate "T" test files
* doc: stm annotate for proxy_util_test & policy_test
* doc: stm annotate for various tests
* doc: final few stm annotations
* Add mempool unit tests
* Add two more memPool Add tests
* Update submodules
* Add check function tests
* Add stm annotations, refactor test helper
* Annotate api,proxy_util,blockstore_badger, policy tests
* Annotate splitstore: bsbadger / markset
solving merge conflicts
* Annotate splitstore feature
* Annotate union/timed blockstore tests
* Annotate openrpc, diff_adt tests
* Annotate error,drand,events tests
* Annotate predicates_test
* Fix annotations
* Annotate tscache, gen tests
* Annotate fundmanager test
* Annotate statetree_test
* Annotate forks_test
* Annotate searchwait_test.go
* Fix duplicated @@ symbols
* Annotate chain stmgr/store tests
* Annotate more (types) tests
* More tests annotated
* Annotate conformance chaos actor tests
* Annotate more integration tests
* Annotate journal system tests
* Annotate more tests.
* Annotate gas,head buffer behaviors
solve merge conflict
* Fix markset annotations
* Annotate miner_api test in dagstore
* Annotate more test files
* doc: test annotations for the markets dagstore wrapper
* Annotate wdpost system
* Renamce "conformance" to "chaos_actor" tests
* Annotate remaining "A" tests
* doc: stm annotations for blockheader & election proof tests
* annotate: stm for error_test
* Annotate "b" file tests
* memrepo_test.go
* Annotate "c" file tests
* message_test.go
* Annotate "D" test files
* doc: stm annotate for fsrepo_test
* Annotate u,v,wl tests
* message_test.go
* doc: stm annotate for chain, node/config & client
* docs: stm annotate node_test
* Annotate "T" test files
* doc: stm annotations for various test files
* Add mempool unit tests
solve merge conflict
* doc: stm annotate for proxy_util_test & policy_test
* doc: stm annotate for various tests
* doc: final few stm annotations
* Add two more memPool Add tests
* Update submodules
* Add check function tests
solve conflict
* Add stm annotations, refactor test helper
solve merge conflict
* Change CLI test kinds to "unit"
* Fix double merged test
* Fix ccupgrade_test merge
* Fix lint issues
* Add stm annotation to types_Test
* Test vectors submodule
* Add file annotation to burn_test
Co-authored-by: Nikola Divic <divicnikola@gmail.com>
Co-authored-by: TheMenko <themenkoprojects@gmail.com>
2022-03-16 17:37:34 +00:00
//stm: @CHAIN_STATETREE_SET_ACTOR_001, @CHAIN_STATETREE_VERSION_FOR_NETWORK_001, @CHAIN_STATETREE_FLUSH_001
2020-03-19 00:23:59 +00:00
cst := cbor . NewMemCborStore ( )
2021-05-15 01:11:23 +00:00
2020-09-28 23:23:46 +00:00
// TODO: ActorUpgrade: this test tests pre actors v2
2021-05-15 01:11:23 +00:00
sv , err := VersionForNetwork ( network . Version3 )
if err != nil {
t . Fatal ( err )
}
st , err := NewStateTree ( cst , sv )
2020-03-19 00:23:59 +00:00
if err != nil {
t . Fatal ( err )
}
var addrs [ ] address . Address
for i := 100 ; i < 150 ; i ++ {
a , err := address . NewIDAddress ( uint64 ( i ) )
if err != nil {
t . Fatal ( err )
}
addrs = append ( addrs , a )
}
randomCid , err := cid . Decode ( "bafy2bzacecu7n7wbtogznrtuuvf73dsz7wasgyneqasksdblxupnyovmtwxxu" )
if err != nil {
t . Fatal ( err )
}
for i , a := range addrs {
2020-05-27 20:53:20 +00:00
err := st . SetActor ( a , & types . Actor {
2020-03-19 00:23:59 +00:00
Code : randomCid ,
Head : randomCid ,
Balance : types . NewInt ( uint64 ( 10000 + i ) ) ,
Nonce : uint64 ( 1000 - i ) ,
} )
2020-05-27 20:53:20 +00:00
if err != nil {
t . Fatalf ( "while setting actor: %+v" , err )
}
2020-03-19 00:23:59 +00:00
}
root , err := st . Flush ( context . TODO ( ) )
if err != nil {
t . Fatal ( err )
}
fmt . Println ( "root is: " , root )
2020-07-23 21:03:25 +00:00
if root . String ( ) != "bafy2bzaceb2bhqw75pqp44efoxvlnm73lnctq6djair56bfn5x3gw56epcxbi" {
2020-03-19 00:23:59 +00:00
t . Fatal ( "MISMATCH!" )
}
}