Skip to content

Commit

Permalink
Update all AVM tests for post-linearization (ava-labs#1631)
Browse files Browse the repository at this point in the history
  • Loading branch information
StephenButtolph committed Jun 21, 2023
1 parent 0073875 commit cc73cd5
Show file tree
Hide file tree
Showing 10 changed files with 1,510 additions and 2,412 deletions.
569 changes: 569 additions & 0 deletions vms/avm/environment_test.go

Large diffs are not rendered by default.

411 changes: 90 additions & 321 deletions vms/avm/index_test.go

Large diffs are not rendered by default.

1,166 changes: 419 additions & 747 deletions vms/avm/service_test.go

Large diffs are not rendered by default.

75 changes: 30 additions & 45 deletions vms/avm/state_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,8 @@ import (
func TestSetsAndGets(t *testing.T) {
require := require.New(t)

_, _, vm, _ := GenesisVMWithArgs(
t,
[]*common.Fx{{
env := setup(t, &envConfig{
additionalFxs: []*common.Fx{{
ID: ids.GenerateTestID(),
Fx: &FxTest{
InitializeF: func(vmIntf interface{}) error {
Expand All @@ -35,16 +34,12 @@ func TestSetsAndGets(t *testing.T) {
},
},
}},
nil,
)
ctx := vm.ctx
})
defer func() {
require.NoError(vm.Shutdown(context.Background()))
ctx.Lock.Unlock()
require.NoError(env.vm.Shutdown(context.Background()))
env.vm.ctx.Lock.Unlock()
}()

state := vm.state

utxo := &avax.UTXO{
UTXOID: avax.UTXOID{
TxID: ids.Empty,
Expand Down Expand Up @@ -74,19 +69,19 @@ func TestSetsAndGets(t *testing.T) {
},
}},
}}}
require.NoError(tx.SignSECP256K1Fx(vm.parser.Codec(), [][]*secp256k1.PrivateKey{{keys[0]}}))
require.NoError(tx.SignSECP256K1Fx(env.vm.parser.Codec(), [][]*secp256k1.PrivateKey{{keys[0]}}))

txID := tx.ID()

state.AddUTXO(utxo)
state.AddTx(tx)
state.AddStatus(txID, choices.Accepted)
env.vm.state.AddUTXO(utxo)
env.vm.state.AddTx(tx)
env.vm.state.AddStatus(txID, choices.Accepted)

resultUTXO, err := state.GetUTXO(utxoID)
resultUTXO, err := env.vm.state.GetUTXO(utxoID)
require.NoError(err)
resultTx, err := state.GetTx(txID)
resultTx, err := env.vm.state.GetTx(txID)
require.NoError(err)
resultStatus, err := state.GetStatus(txID)
resultStatus, err := env.vm.state.GetStatus(txID)
require.NoError(err)

require.Equal(uint32(1), resultUTXO.OutputIndex)
Expand All @@ -95,9 +90,8 @@ func TestSetsAndGets(t *testing.T) {
}

func TestFundingNoAddresses(t *testing.T) {
_, _, vm, _ := GenesisVMWithArgs(
t,
[]*common.Fx{{
env := setup(t, &envConfig{
additionalFxs: []*common.Fx{{
ID: ids.GenerateTestID(),
Fx: &FxTest{
InitializeF: func(vmIntf interface{}) error {
Expand All @@ -106,16 +100,12 @@ func TestFundingNoAddresses(t *testing.T) {
},
},
}},
nil,
)
ctx := vm.ctx
})
defer func() {
require.NoError(t, vm.Shutdown(context.Background()))
ctx.Lock.Unlock()
require.NoError(t, env.vm.Shutdown(context.Background()))
env.vm.ctx.Lock.Unlock()
}()

state := vm.state

utxo := &avax.UTXO{
UTXOID: avax.UTXOID{
TxID: ids.Empty,
Expand All @@ -125,16 +115,15 @@ func TestFundingNoAddresses(t *testing.T) {
Out: &avax.TestState{},
}

state.AddUTXO(utxo)
state.DeleteUTXO(utxo.InputID())
env.vm.state.AddUTXO(utxo)
env.vm.state.DeleteUTXO(utxo.InputID())
}

func TestFundingAddresses(t *testing.T) {
require := require.New(t)

_, _, vm, _ := GenesisVMWithArgs(
t,
[]*common.Fx{{
env := setup(t, &envConfig{
additionalFxs: []*common.Fx{{
ID: ids.GenerateTestID(),
Fx: &FxTest{
InitializeF: func(vmIntf interface{}) error {
Expand All @@ -143,16 +132,12 @@ func TestFundingAddresses(t *testing.T) {
},
},
}},
nil,
)
ctx := vm.ctx
})
defer func() {
require.NoError(vm.Shutdown(context.Background()))
ctx.Lock.Unlock()
require.NoError(env.vm.Shutdown(context.Background()))
env.vm.ctx.Lock.Unlock()
}()

state := vm.state

utxo := &avax.UTXO{
UTXOID: avax.UTXOID{
TxID: ids.Empty,
Expand All @@ -164,18 +149,18 @@ func TestFundingAddresses(t *testing.T) {
},
}

state.AddUTXO(utxo)
require.NoError(state.Commit())
env.vm.state.AddUTXO(utxo)
require.NoError(env.vm.state.Commit())

utxos, err := state.UTXOIDs([]byte{0}, ids.Empty, math.MaxInt32)
utxos, err := env.vm.state.UTXOIDs([]byte{0}, ids.Empty, math.MaxInt32)
require.NoError(err)
require.Len(utxos, 1)
require.Equal(utxo.InputID(), utxos[0])

state.DeleteUTXO(utxo.InputID())
require.NoError(state.Commit())
env.vm.state.DeleteUTXO(utxo.InputID())
require.NoError(env.vm.state.Commit())

utxos, err = state.UTXOIDs([]byte{0}, ids.Empty, math.MaxInt32)
utxos, err = env.vm.state.UTXOIDs([]byte{0}, ids.Empty, math.MaxInt32)
require.NoError(err)
require.Empty(utxos)
}
4 changes: 1 addition & 3 deletions vms/avm/static_service_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,6 @@ var addrStrArray = []string{
"Jz9ayEDt7dx9hDx45aXALujWmL9ZUuqe7",
}

var testHRP = constants.NetworkIDToHRP[constants.UnitTestID]

func TestBuildGenesis(t *testing.T) {
require := require.New(t)

Expand All @@ -32,7 +30,7 @@ func TestBuildGenesis(t *testing.T) {
for _, addrStr := range addrStrArray {
addr, err := ids.ShortFromString(addrStr)
require.NoError(err)
addrMap[addrStr], err = address.FormatBech32(testHRP, addr[:])
addrMap[addrStr], err = address.FormatBech32(constants.UnitTestHRP, addr[:])
require.NoError(err)
}
args := BuildGenesisArgs{
Expand Down
47 changes: 29 additions & 18 deletions vms/avm/vm_benchmark_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,15 +22,18 @@ func BenchmarkLoadUser(b *testing.B) {
runLoadUserBenchmark := func(b *testing.B, numKeys int) {
require := require.New(b)

// This will segfault instead of failing gracefully if there's an error
_, _, vm, _ := GenesisVM(nil)
ctx := vm.ctx
env := setup(b, &envConfig{
keystoreUsers: []*user{{
username: username,
password: password,
}},
})
defer func() {
require.NoError(vm.Shutdown(context.Background()))
ctx.Lock.Unlock()
require.NoError(env.vm.Shutdown(context.Background()))
env.vm.ctx.Lock.Unlock()
}()

user, err := keystore.NewUserFromKeystore(vm.ctx.Keystore, username, password)
user, err := keystore.NewUserFromKeystore(env.vm.ctx.Keystore, username, password)
require.NoError(err)

keys, err := keystore.NewKeys(user, numKeys)
Expand All @@ -43,7 +46,7 @@ func BenchmarkLoadUser(b *testing.B) {
addrIndex := n % numKeys
fromAddrs.Clear()
fromAddrs.Add(keys[addrIndex].PublicKey().Address())
_, _, err := vm.LoadUser(username, password, fromAddrs)
_, _, err := env.vm.LoadUser(username, password, fromAddrs)
require.NoError(err)
}

Expand All @@ -52,7 +55,7 @@ func BenchmarkLoadUser(b *testing.B) {
require.NoError(user.Close())
}

benchmarkSize := []int{10, 100, 1000, 10000}
benchmarkSize := []int{10, 100, 1000, 5000}
for _, numKeys := range benchmarkSize {
b.Run(fmt.Sprintf("NumKeys=%d", numKeys), func(b *testing.B) {
runLoadUserBenchmark(b, numKeys)
Expand All @@ -64,11 +67,10 @@ func BenchmarkLoadUser(b *testing.B) {
func GetAllUTXOsBenchmark(b *testing.B, utxoCount int) {
require := require.New(b)

_, _, vm, _ := GenesisVM(b)
ctx := vm.ctx
env := setup(b, &envConfig{})
defer func() {
require.NoError(vm.Shutdown(context.Background()))
ctx.Lock.Unlock()
require.NoError(env.vm.Shutdown(context.Background()))
env.vm.ctx.Lock.Unlock()
}()

addr := ids.GenerateTestShortID()
Expand All @@ -91,9 +93,9 @@ func GetAllUTXOsBenchmark(b *testing.B, utxoCount int) {
},
}

vm.state.AddUTXO(utxo)
env.vm.state.AddUTXO(utxo)
}
require.NoError(vm.state.Commit())
require.NoError(env.vm.state.Commit())

addrsSet := set.Set[ids.ShortID]{}
addrsSet.Add(addr)
Expand All @@ -102,7 +104,7 @@ func GetAllUTXOsBenchmark(b *testing.B, utxoCount int) {

for i := 0; i < b.N; i++ {
// Fetch all UTXOs older version
notPaginatedUTXOs, err := avax.GetAllUTXOs(vm.state, addrsSet)
notPaginatedUTXOs, err := avax.GetAllUTXOs(env.vm.state, addrsSet)
require.NoError(err)
require.Len(notPaginatedUTXOs, utxoCount)
}
Expand All @@ -113,9 +115,18 @@ func BenchmarkGetUTXOs(b *testing.B) {
name string
utxoCount int
}{
{"100", 100},
{"10k", 10000},
{"100k", 100000},
{
name: "100",
utxoCount: 100,
},
{
name: "10k",
utxoCount: 10_000,
},
{
name: "100k",
utxoCount: 100_000,
},
}

for _, count := range tests {
Expand Down
61 changes: 13 additions & 48 deletions vms/avm/vm_regression_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,10 @@ import (

"github.com/stretchr/testify/require"

"github.com/ava-labs/avalanchego/chains/atomic"
"github.com/ava-labs/avalanchego/database/manager"
"github.com/ava-labs/avalanchego/database/prefixdb"
"github.com/ava-labs/avalanchego/ids"
"github.com/ava-labs/avalanchego/snow"
"github.com/ava-labs/avalanchego/snow/engine/common"
"github.com/ava-labs/avalanchego/utils/constants"
"github.com/ava-labs/avalanchego/utils/crypto/secp256k1"
"github.com/ava-labs/avalanchego/version"
"github.com/ava-labs/avalanchego/vms/avm/config"
"github.com/ava-labs/avalanchego/vms/avm/txs"
"github.com/ava-labs/avalanchego/vms/components/avax"
"github.com/ava-labs/avalanchego/vms/components/verify"
Expand All @@ -27,45 +22,15 @@ import (

func TestVerifyFxUsage(t *testing.T) {
require := require.New(t)
vm := &VM{}
ctx := NewContext(t)
ctx.Lock.Lock()

env := setup(t, &envConfig{
vmStaticConfig: &config.Config{},
})
defer func() {
require.NoError(vm.Shutdown(context.Background()))
ctx.Lock.Unlock()
require.NoError(env.vm.Shutdown(context.Background()))
env.vm.ctx.Lock.Unlock()
}()

baseDBManager := manager.NewMemDB(version.Semantic1_0_0)
m := atomic.NewMemory(prefixdb.New([]byte{0}, baseDBManager.Current().Database))
ctx.SharedMemory = m.NewSharedMemory(ctx.ChainID)

genesisBytes := BuildGenesisTest(t)
issuer := make(chan common.Message, 1)
require.NoError(vm.Initialize(
context.Background(),
ctx,
baseDBManager,
genesisBytes,
nil,
nil,
issuer,
[]*common.Fx{
{
ID: ids.Empty.Prefix(0),
Fx: &secp256k1fx.Fx{},
},
{
ID: ids.Empty.Prefix(1),
Fx: &nftfx.Fx{},
},
},
nil,
))
vm.batchTimeout = 0

require.NoError(vm.SetState(context.Background(), snow.Bootstrapping))
require.NoError(vm.SetState(context.Background(), snow.NormalOp))

createAssetTx := &txs.Tx{Unsigned: &txs.CreateAssetTx{
BaseTx: txs.BaseTx{BaseTx: avax.BaseTx{
NetworkID: constants.UnitTestID,
Expand Down Expand Up @@ -101,8 +66,8 @@ func TestVerifyFxUsage(t *testing.T) {
},
},
}}
require.NoError(vm.parser.InitializeTx(createAssetTx))
issueAndAccept(require, vm, issuer, createAssetTx)
require.NoError(env.vm.parser.InitializeTx(createAssetTx))
issueAndAccept(require, env.vm, env.issuer, createAssetTx)

mintNFTTx := &txs.Tx{Unsigned: &txs.OperationTx{
BaseTx: txs.BaseTx{BaseTx: avax.BaseTx{
Expand All @@ -125,8 +90,8 @@ func TestVerifyFxUsage(t *testing.T) {
},
}},
}}
require.NoError(mintNFTTx.SignNFTFx(vm.parser.Codec(), [][]*secp256k1.PrivateKey{{keys[0]}}))
issueAndAccept(require, vm, issuer, mintNFTTx)
require.NoError(mintNFTTx.SignNFTFx(env.vm.parser.Codec(), [][]*secp256k1.PrivateKey{{keys[0]}}))
issueAndAccept(require, env.vm, env.issuer, mintNFTTx)

spendTx := &txs.Tx{Unsigned: &txs.BaseTx{BaseTx: avax.BaseTx{
NetworkID: constants.UnitTestID,
Expand All @@ -145,6 +110,6 @@ func TestVerifyFxUsage(t *testing.T) {
},
}},
}}}
require.NoError(spendTx.SignSECP256K1Fx(vm.parser.Codec(), [][]*secp256k1.PrivateKey{{keys[0]}}))
issueAndAccept(require, vm, issuer, spendTx)
require.NoError(spendTx.SignSECP256K1Fx(env.vm.parser.Codec(), [][]*secp256k1.PrivateKey{{keys[0]}}))
issueAndAccept(require, env.vm, env.issuer, spendTx)
}

0 comments on commit cc73cd5

Please sign in to comment.