diff --git a/vms/platformvm/service_test.go b/vms/platformvm/service_test.go index 2c6b72255c3f..d1a156e1acb8 100644 --- a/vms/platformvm/service_test.go +++ b/vms/platformvm/service_test.go @@ -133,11 +133,6 @@ func TestExportKey(t *testing.T) { service, _ := defaultService(t) defaultAddress(t, service) - defer func() { - service.vm.ctx.Lock.Lock() - require.NoError(service.vm.Shutdown(context.Background())) - service.vm.ctx.Lock.Unlock() - }() reply := ExportKeyReply{} require.NoError(service.ExportKey(nil, &args, &reply)) @@ -152,11 +147,6 @@ func TestImportKey(t *testing.T) { require.NoError(stdjson.Unmarshal([]byte(jsonString), &args)) service, _ := defaultService(t) - defer func() { - service.vm.ctx.Lock.Lock() - require.NoError(service.vm.Shutdown(context.Background())) - service.vm.ctx.Lock.Unlock() - }() reply := api.JSONAddress{} require.NoError(service.ImportKey(nil, &args, &reply)) @@ -169,11 +159,6 @@ func TestGetTxStatus(t *testing.T) { service, mutableSharedMemory := defaultService(t) defaultAddress(t, service) service.vm.ctx.Lock.Lock() - defer func() { - service.vm.ctx.Lock.Lock() - require.NoError(service.vm.Shutdown(context.Background())) - service.vm.ctx.Lock.Unlock() - }() recipientKey, err := secp256k1.NewPrivateKey() require.NoError(err) @@ -374,10 +359,6 @@ func TestGetTx(t *testing.T) { require.NoError(err) require.Equal(expectedTxJSON, []byte(response.Tx)) } - - service.vm.ctx.Lock.Lock() - require.NoError(service.vm.Shutdown(context.Background())) - service.vm.ctx.Lock.Unlock() }) } } @@ -387,11 +368,6 @@ func TestGetBalance(t *testing.T) { require := require.New(t) service, _ := defaultService(t) defaultAddress(t, service) - defer func() { - service.vm.ctx.Lock.Lock() - require.NoError(service.vm.Shutdown(context.Background())) - service.vm.ctx.Lock.Unlock() - }() // Ensure GetStake is correct for each of the genesis validators genesis, _ := defaultGenesis(t, service.vm.ctx.AVAXAssetID) @@ -421,11 +397,6 @@ func TestGetStake(t *testing.T) { require := require.New(t) service, _ := defaultService(t) defaultAddress(t, service) - defer func() { - service.vm.ctx.Lock.Lock() - require.NoError(service.vm.Shutdown(context.Background())) - service.vm.ctx.Lock.Unlock() - }() // Ensure GetStake is correct for each of the genesis validators genesis, _ := defaultGenesis(t, service.vm.ctx.AVAXAssetID) @@ -597,11 +568,6 @@ func TestGetCurrentValidators(t *testing.T) { require := require.New(t) service, _ := defaultService(t) defaultAddress(t, service) - defer func() { - service.vm.ctx.Lock.Lock() - require.NoError(service.vm.Shutdown(context.Background())) - service.vm.ctx.Lock.Unlock() - }() genesis, _ := defaultGenesis(t, service.vm.ctx.AVAXAssetID) @@ -727,11 +693,6 @@ func TestGetCurrentValidators(t *testing.T) { func TestGetTimestamp(t *testing.T) { require := require.New(t) service, _ := defaultService(t) - defer func() { - service.vm.ctx.Lock.Lock() - require.NoError(service.vm.Shutdown(context.Background())) - service.vm.ctx.Lock.Unlock() - }() reply := GetTimestampReply{} require.NoError(service.GetTimestamp(nil, nil, &reply)) @@ -769,11 +730,6 @@ func TestGetBlock(t *testing.T) { require := require.New(t) service, _ := defaultService(t) service.vm.ctx.Lock.Lock() - defer func() { - service.vm.ctx.Lock.Lock() - require.NoError(service.vm.Shutdown(context.Background())) - service.vm.ctx.Lock.Unlock() - }() service.vm.Config.CreateAssetTxFee = 100 * defaultTxFee diff --git a/vms/platformvm/vm_regression_test.go b/vms/platformvm/vm_regression_test.go index 36186ec32ae0..52993d219632 100644 --- a/vms/platformvm/vm_regression_test.go +++ b/vms/platformvm/vm_regression_test.go @@ -49,11 +49,7 @@ func TestAddDelegatorTxOverDelegatedRegression(t *testing.T) { require := require.New(t) vm, _, _ := defaultVM(t, cortinaFork) vm.ctx.Lock.Lock() - defer func() { - vm.ctx.Lock.Lock() - require.NoError(vm.Shutdown(context.Background())) - vm.ctx.Lock.Unlock() - }() + defer vm.ctx.Lock.Unlock() validatorStartTime := vm.clock.Time().Add(executor.SyncBound).Add(1 * time.Second) validatorEndTime := validatorStartTime.Add(360 * 24 * time.Hour) @@ -174,6 +170,7 @@ func TestAddDelegatorTxOverDelegatedRegression(t *testing.T) { vm.ctx.Lock.Unlock() err = vm.issueTx(context.Background(), addThirdDelegatorTx) require.ErrorIs(err, executor.ErrOverDelegated) + vm.ctx.Lock.Lock() } func TestAddDelegatorTxHeapCorruption(t *testing.T) { @@ -219,10 +216,7 @@ func TestAddDelegatorTxHeapCorruption(t *testing.T) { vm.ApricotPhase3Time = test.ap3Time vm.ctx.Lock.Lock() - defer func() { - require.NoError(vm.Shutdown(context.Background())) - vm.ctx.Lock.Unlock() - }() + defer vm.ctx.Lock.Unlock() key, err := secp256k1.NewPrivateKey() require.NoError(err) @@ -487,10 +481,7 @@ func TestRejectedStateRegressionInvalidValidatorTimestamp(t *testing.T) { vm, baseDB, mutableSharedMemory := defaultVM(t, cortinaFork) vm.ctx.Lock.Lock() - defer func() { - require.NoError(vm.Shutdown(context.Background())) - vm.ctx.Lock.Unlock() - }() + defer vm.ctx.Lock.Unlock() nodeID := ids.GenerateTestNodeID() newValidatorStartTime := vm.clock.Time().Add(executor.SyncBound).Add(1 * time.Second) @@ -695,10 +686,7 @@ func TestRejectedStateRegressionInvalidValidatorReward(t *testing.T) { vm, baseDB, mutableSharedMemory := defaultVM(t, cortinaFork) vm.ctx.Lock.Lock() - defer func() { - require.NoError(vm.Shutdown(context.Background())) - vm.ctx.Lock.Unlock() - }() + defer vm.ctx.Lock.Unlock() vm.state.SetCurrentSupply(constants.PrimaryNetworkID, defaultRewardConfig.SupplyCap/2) @@ -1010,10 +998,7 @@ func TestValidatorSetAtCacheOverwriteRegression(t *testing.T) { vm, _, _ := defaultVM(t, cortinaFork) vm.ctx.Lock.Lock() - defer func() { - require.NoError(vm.Shutdown(context.Background())) - vm.ctx.Lock.Unlock() - }() + defer vm.ctx.Lock.Unlock() currentHeight, err := vm.GetCurrentHeight(context.Background()) require.NoError(err) @@ -1148,14 +1133,8 @@ func TestAddDelegatorTxAddBeforeRemove(t *testing.T) { delegator2Stake := defaultMaxValidatorStake - validatorStake vm, _, _ := defaultVM(t, cortinaFork) - vm.ctx.Lock.Lock() - defer func() { - vm.ctx.Lock.Lock() - require.NoError(vm.Shutdown(context.Background())) - - vm.ctx.Lock.Unlock() - }() + defer vm.ctx.Lock.Unlock() key, err := secp256k1.NewPrivateKey() require.NoError(err) @@ -1230,6 +1209,7 @@ func TestAddDelegatorTxAddBeforeRemove(t *testing.T) { vm.ctx.Lock.Unlock() err = vm.issueTx(context.Background(), addSecondDelegatorTx) require.ErrorIs(err, executor.ErrOverDelegated) + vm.ctx.Lock.Lock() } func TestRemovePermissionedValidatorDuringPendingToCurrentTransitionNotTracked(t *testing.T) { @@ -1239,12 +1219,8 @@ func TestRemovePermissionedValidatorDuringPendingToCurrentTransitionNotTracked(t validatorEndTime := validatorStartTime.Add(360 * 24 * time.Hour) vm, _, _ := defaultVM(t, cortinaFork) - vm.ctx.Lock.Lock() - defer func() { - require.NoError(vm.Shutdown(context.Background())) - vm.ctx.Lock.Unlock() - }() + defer vm.ctx.Lock.Unlock() key, err := secp256k1.NewPrivateKey() require.NoError(err) @@ -1364,13 +1340,8 @@ func TestRemovePermissionedValidatorDuringPendingToCurrentTransitionTracked(t *t validatorEndTime := validatorStartTime.Add(360 * 24 * time.Hour) vm, _, _ := defaultVM(t, cortinaFork) - vm.ctx.Lock.Lock() - defer func() { - require.NoError(vm.Shutdown(context.Background())) - - vm.ctx.Lock.Unlock() - }() + defer vm.ctx.Lock.Unlock() key, err := secp256k1.NewPrivateKey() require.NoError(err) @@ -1474,10 +1445,7 @@ func TestSubnetValidatorBLSKeyDiffAfterExpiry(t *testing.T) { require := require.New(t) vm, _, _ := defaultVM(t, cortinaFork) vm.ctx.Lock.Lock() - defer func() { - require.NoError(vm.Shutdown(context.Background())) - vm.ctx.Lock.Unlock() - }() + defer vm.ctx.Lock.Unlock() subnetID := testSubnet1.TxID @@ -1762,10 +1730,7 @@ func TestPrimaryNetworkValidatorPopulatedToEmptyBLSKeyDiff(t *testing.T) { require := require.New(t) vm, _, _ := defaultVM(t, cortinaFork) vm.ctx.Lock.Lock() - defer func() { - require.NoError(vm.Shutdown(context.Background())) - vm.ctx.Lock.Unlock() - }() + defer vm.ctx.Lock.Unlock() // setup time currentTime := defaultGenesisTime @@ -1925,10 +1890,7 @@ func TestSubnetValidatorPopulatedToEmptyBLSKeyDiff(t *testing.T) { require := require.New(t) vm, _, _ := defaultVM(t, cortinaFork) vm.ctx.Lock.Lock() - defer func() { - require.NoError(vm.Shutdown(context.Background())) - vm.ctx.Lock.Unlock() - }() + defer vm.ctx.Lock.Unlock() subnetID := testSubnet1.TxID @@ -2142,10 +2104,7 @@ func TestSubnetValidatorSetAfterPrimaryNetworkValidatorRemoval(t *testing.T) { require := require.New(t) vm, _, _ := defaultVM(t, cortinaFork) vm.ctx.Lock.Lock() - defer func() { - require.NoError(vm.Shutdown(context.Background())) - vm.ctx.Lock.Unlock() - }() + defer vm.ctx.Lock.Unlock() subnetID := testSubnet1.TxID diff --git a/vms/platformvm/vm_test.go b/vms/platformvm/vm_test.go index 4e2962587b40..1775e5db2c20 100644 --- a/vms/platformvm/vm_test.go +++ b/vms/platformvm/vm_test.go @@ -315,6 +315,13 @@ func defaultVM(t *testing.T, fork activeFork) (*VM, database.Database, *mutableS require.NoError(blk.Accept(context.Background())) require.NoError(vm.SetPreference(context.Background(), vm.manager.LastAccepted())) + t.Cleanup(func() { + vm.ctx.Lock.Lock() + defer vm.ctx.Lock.Unlock() + + require.NoError(vm.Shutdown(context.Background())) + }) + return vm, db, msm } @@ -323,10 +330,7 @@ func TestGenesis(t *testing.T) { require := require.New(t) vm, _, _ := defaultVM(t, latestFork) vm.ctx.Lock.Lock() - defer func() { - require.NoError(vm.Shutdown(context.Background())) - vm.ctx.Lock.Unlock() - }() + defer vm.ctx.Lock.Unlock() // Ensure the genesis block has been accepted and stored genesisBlockID, err := vm.LastAccepted(context.Background()) // lastAccepted should be ID of genesis block @@ -379,10 +383,7 @@ func TestAddValidatorCommit(t *testing.T) { require := require.New(t) vm, _, _ := defaultVM(t, latestFork) vm.ctx.Lock.Lock() - defer func() { - require.NoError(vm.Shutdown(context.Background())) - vm.ctx.Lock.Unlock() - }() + defer vm.ctx.Lock.Unlock() var ( startTime = vm.clock.Time().Add(txexecutor.SyncBound).Add(1 * time.Second) @@ -429,10 +430,7 @@ func TestInvalidAddValidatorCommit(t *testing.T) { require := require.New(t) vm, _, _ := defaultVM(t, cortinaFork) vm.ctx.Lock.Lock() - defer func() { - require.NoError(vm.Shutdown(context.Background())) - vm.ctx.Lock.Unlock() - }() + defer vm.ctx.Lock.Unlock() nodeID := ids.GenerateTestNodeID() startTime := defaultGenesisTime.Add(-txexecutor.SyncBound).Add(-1 * time.Second) @@ -482,10 +480,7 @@ func TestAddValidatorReject(t *testing.T) { require := require.New(t) vm, _, _ := defaultVM(t, cortinaFork) vm.ctx.Lock.Lock() - defer func() { - require.NoError(vm.Shutdown(context.Background())) - vm.ctx.Lock.Unlock() - }() + defer vm.ctx.Lock.Unlock() var ( startTime = vm.clock.Time().Add(txexecutor.SyncBound).Add(1 * time.Second) @@ -530,11 +525,7 @@ func TestAddValidatorInvalidNotReissued(t *testing.T) { require := require.New(t) vm, _, _ := defaultVM(t, latestFork) vm.ctx.Lock.Lock() - defer func() { - vm.ctx.Lock.Lock() - require.NoError(vm.Shutdown(context.Background())) - vm.ctx.Lock.Unlock() - }() + defer vm.ctx.Lock.Unlock() // Use nodeID that is already in the genesis repeatNodeID := genesisNodeIDs[0] @@ -559,6 +550,7 @@ func TestAddValidatorInvalidNotReissued(t *testing.T) { vm.ctx.Lock.Unlock() err = vm.issueTx(context.Background(), tx) require.ErrorIs(err, txexecutor.ErrAlreadyValidator) + vm.ctx.Lock.Lock() } // Accept proposal to add validator to subnet @@ -566,10 +558,7 @@ func TestAddSubnetValidatorAccept(t *testing.T) { require := require.New(t) vm, _, _ := defaultVM(t, latestFork) vm.ctx.Lock.Lock() - defer func() { - require.NoError(vm.Shutdown(context.Background())) - vm.ctx.Lock.Unlock() - }() + defer vm.ctx.Lock.Unlock() var ( startTime = vm.clock.Time().Add(txexecutor.SyncBound).Add(1 * time.Second) @@ -616,10 +605,7 @@ func TestAddSubnetValidatorReject(t *testing.T) { require := require.New(t) vm, _, _ := defaultVM(t, latestFork) vm.ctx.Lock.Lock() - defer func() { - require.NoError(vm.Shutdown(context.Background())) - vm.ctx.Lock.Unlock() - }() + defer vm.ctx.Lock.Unlock() var ( startTime = vm.clock.Time().Add(txexecutor.SyncBound).Add(1 * time.Second) @@ -665,10 +651,7 @@ func TestRewardValidatorAccept(t *testing.T) { require := require.New(t) vm, _, _ := defaultVM(t, latestFork) vm.ctx.Lock.Lock() - defer func() { - require.NoError(vm.Shutdown(context.Background())) - vm.ctx.Lock.Unlock() - }() + defer vm.ctx.Lock.Unlock() // Fast forward clock to time for genesis validators to leave vm.clock.Set(defaultValidateEndTime) @@ -736,10 +719,7 @@ func TestRewardValidatorReject(t *testing.T) { require := require.New(t) vm, _, _ := defaultVM(t, latestFork) vm.ctx.Lock.Lock() - defer func() { - require.NoError(vm.Shutdown(context.Background())) - vm.ctx.Lock.Unlock() - }() + defer vm.ctx.Lock.Unlock() // Fast forward clock to time for genesis validators to leave vm.clock.Set(defaultValidateEndTime) @@ -809,10 +789,8 @@ func TestUnneededBuildBlock(t *testing.T) { require := require.New(t) vm, _, _ := defaultVM(t, latestFork) vm.ctx.Lock.Lock() - defer func() { - require.NoError(vm.Shutdown(context.Background())) - vm.ctx.Lock.Unlock() - }() + defer vm.ctx.Lock.Unlock() + _, err := vm.Builder.BuildBlock(context.Background()) require.ErrorIs(err, blockbuilder.ErrNoPendingBlocks) } @@ -822,10 +800,7 @@ func TestCreateChain(t *testing.T) { require := require.New(t) vm, _, _ := defaultVM(t, latestFork) vm.ctx.Lock.Lock() - defer func() { - require.NoError(vm.Shutdown(context.Background())) - vm.ctx.Lock.Unlock() - }() + defer vm.ctx.Lock.Unlock() tx, err := vm.txBuilder.NewCreateChainTx( testSubnet1.ID(), @@ -874,10 +849,7 @@ func TestCreateSubnet(t *testing.T) { require := require.New(t) vm, _, _ := defaultVM(t, latestFork) vm.ctx.Lock.Lock() - defer func() { - require.NoError(vm.Shutdown(context.Background())) - vm.ctx.Lock.Unlock() - }() + defer vm.ctx.Lock.Unlock() nodeID := genesisNodeIDs[0] createSubnetTx, err := vm.txBuilder.NewCreateSubnetTx( @@ -975,10 +947,7 @@ func TestAtomicImport(t *testing.T) { require := require.New(t) vm, baseDB, mutableSharedMemory := defaultVM(t, latestFork) vm.ctx.Lock.Lock() - defer func() { - require.NoError(vm.Shutdown(context.Background())) - vm.ctx.Lock.Unlock() - }() + defer vm.ctx.Lock.Unlock() utxoID := avax.UTXOID{ TxID: ids.Empty.Prefix(1), @@ -1064,10 +1033,7 @@ func TestOptimisticAtomicImport(t *testing.T) { require := require.New(t) vm, _, _ := defaultVM(t, apricotPhase3) vm.ctx.Lock.Lock() - defer func() { - require.NoError(vm.Shutdown(context.Background())) - vm.ctx.Lock.Unlock() - }() + defer vm.ctx.Lock.Unlock() tx := &txs.Tx{Unsigned: &txs.ImportTx{ BaseTx: txs.BaseTx{BaseTx: avax.BaseTx{ @@ -1713,10 +1679,7 @@ func TestUnverifiedParent(t *testing.T) { func TestMaxStakeAmount(t *testing.T) { vm, _, _ := defaultVM(t, latestFork) vm.ctx.Lock.Lock() - defer func() { - require.NoError(t, vm.Shutdown(context.Background())) - vm.ctx.Lock.Unlock() - }() + defer vm.ctx.Lock.Unlock() nodeID := genesisNodeIDs[0] @@ -2019,13 +1982,8 @@ func TestRemovePermissionedValidatorDuringAddPending(t *testing.T) { validatorEndTime := validatorStartTime.Add(360 * 24 * time.Hour) vm, _, _ := defaultVM(t, latestFork) - vm.ctx.Lock.Lock() - defer func() { - require.NoError(vm.Shutdown(context.Background())) - - vm.ctx.Lock.Unlock() - }() + defer vm.ctx.Lock.Unlock() key, err := secp256k1.NewPrivateKey() require.NoError(err) @@ -2120,10 +2078,7 @@ func TestTransferSubnetOwnershipTx(t *testing.T) { require := require.New(t) vm, _, _ := defaultVM(t, latestFork) vm.ctx.Lock.Lock() - defer func() { - require.NoError(vm.Shutdown(context.Background())) - vm.ctx.Lock.Unlock() - }() + defer vm.ctx.Lock.Unlock() // Create a subnet createSubnetTx, err := vm.txBuilder.NewCreateSubnetTx( @@ -2199,10 +2154,7 @@ func TestBaseTx(t *testing.T) { require := require.New(t) vm, _, _ := defaultVM(t, latestFork) vm.ctx.Lock.Lock() - defer func() { - require.NoError(vm.Shutdown(context.Background())) - vm.ctx.Lock.Unlock() - }() + defer vm.ctx.Lock.Unlock() sendAmt := uint64(100000) changeAddr := ids.ShortEmpty @@ -2276,10 +2228,7 @@ func TestPruneMempool(t *testing.T) { require := require.New(t) vm, _, _ := defaultVM(t, latestFork) vm.ctx.Lock.Lock() - defer func() { - require.NoError(vm.Shutdown(context.Background())) - vm.ctx.Lock.Unlock() - }() + defer vm.ctx.Lock.Unlock() // Create a tx that will be valid regardless of timestamp. sendAmt := uint64(100000)