Skip to content

Commit d6f6f06

Browse files
committed
test: migrate 20 tests to BaseMethodTest for per-method isolation
Migrate tests that modify global state (CommonParameter, database) to use BaseMethodTest instead of manually managing Spring context lifecycle.
1 parent 7e2c9c8 commit d6f6f06

19 files changed

Lines changed: 263 additions & 643 deletions

framework/src/test/java/org/tron/common/runtime/vm/FreezeTest.java

Lines changed: 50 additions & 63 deletions
Large diffs are not rendered by default.

framework/src/test/java/org/tron/common/runtime/vm/FreezeV2Test.java

Lines changed: 67 additions & 80 deletions
Large diffs are not rendered by default.

framework/src/test/java/org/tron/common/runtime/vm/InternalTransactionCallTest.java

Lines changed: 9 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,13 @@
11
package org.tron.common.runtime.vm;
22

3-
import java.io.IOException;
43
import lombok.extern.slf4j.Slf4j;
54
import org.bouncycastle.util.encoders.Hex;
6-
import org.junit.After;
75
import org.junit.Assert;
8-
import org.junit.Before;
9-
import org.junit.Rule;
106
import org.junit.Test;
11-
import org.junit.rules.TemporaryFolder;
12-
import org.tron.common.TestConstants;
13-
import org.tron.common.application.Application;
14-
import org.tron.common.application.ApplicationFactory;
15-
import org.tron.common.application.TronApplicationContext;
7+
import org.tron.common.BaseMethodTest;
168
import org.tron.common.runtime.Runtime;
179
import org.tron.common.runtime.TvmTestUtils;
1810
import org.tron.core.Wallet;
19-
import org.tron.core.config.DefaultConfig;
20-
import org.tron.core.config.args.Args;
21-
import org.tron.core.db.Manager;
2211
import org.tron.core.exception.ContractExeException;
2312
import org.tron.core.exception.ContractValidateException;
2413
import org.tron.core.exception.ReceiptCheckErrException;
@@ -28,31 +17,20 @@
2817
import org.tron.protos.Protocol.AccountType;
2918

3019
@Slf4j
31-
public class InternalTransactionCallTest {
20+
public class InternalTransactionCallTest extends BaseMethodTest {
3221

3322
private Runtime runtime;
34-
private Manager dbManager;
35-
private TronApplicationContext context;
3623
private RepositoryImpl repository;
37-
@Rule
38-
public TemporaryFolder temporaryFolder = new TemporaryFolder();
3924
private String OWNER_ADDRESS;
40-
private Application AppT;
4125

42-
/**
43-
* Init data.
44-
*/
45-
@Before
46-
public void init() throws IOException {
47-
Args.clearParam();
48-
Args.setParam(new String[]{"--output-directory",
49-
temporaryFolder.newFolder().toString(), "--support-constant", "--debug"},
50-
TestConstants.TEST_CONF);
51-
52-
context = new TronApplicationContext(DefaultConfig.class);
53-
AppT = ApplicationFactory.create(context);
26+
@Override
27+
protected String[] extraArgs() {
28+
return new String[]{"--support-constant", "--debug"};
29+
}
30+
31+
@Override
32+
protected void afterInit() {
5433
OWNER_ADDRESS = Wallet.getAddressPreFixString() + "abd4b9367799eaa3197fecb144eb71de1e049abc";
55-
dbManager = context.getBean(Manager.class);
5634
repository = RepositoryImpl.createRoot(StoreFactory.getInstance());
5735
repository.createAccount(Hex.decode(OWNER_ADDRESS), AccountType.Normal);
5836
repository.addBalance(Hex.decode(OWNER_ADDRESS), 100000000);
@@ -352,12 +330,4 @@ public byte[] deployBContractAndGetItsAddress()
352330
}
353331

354332

355-
/**
356-
* Release resources.
357-
*/
358-
@After
359-
public void destroy() {
360-
context.destroy();
361-
Args.clearParam();
362-
}
363333
}

framework/src/test/java/org/tron/common/runtime/vm/VoteTest.java

Lines changed: 37 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,10 @@
1515

1616
import lombok.extern.slf4j.Slf4j;
1717
import org.bouncycastle.util.encoders.Hex;
18-
import org.junit.After;
1918
import org.junit.Assert;
20-
import org.junit.Before;
2119
import org.junit.Ignore;
22-
import org.junit.Rule;
2320
import org.junit.Test;
24-
import org.junit.rules.TemporaryFolder;
25-
import org.tron.common.TestConstants;
26-
import org.tron.common.application.TronApplicationContext;
21+
import org.tron.common.BaseMethodTest;
2722
import org.tron.common.parameter.CommonParameter;
2823
import org.tron.common.runtime.Runtime;
2924
import org.tron.common.runtime.RuntimeImpl;
@@ -38,10 +33,7 @@
3833
import org.tron.core.Wallet;
3934
import org.tron.core.capsule.AccountCapsule;
4035
import org.tron.core.capsule.TransactionCapsule;
41-
import org.tron.core.config.DefaultConfig;
42-
import org.tron.core.config.args.Args;
4336
import org.tron.core.consensus.ConsensusService;
44-
import org.tron.core.db.Manager;
4537
import org.tron.core.db.TransactionTrace;
4638
import org.tron.core.service.MortgageService;
4739
import org.tron.core.store.StoreFactory;
@@ -52,7 +44,7 @@
5244
import org.tron.protos.Protocol;
5345

5446
@Slf4j
55-
public class VoteTest {
47+
public class VoteTest extends BaseMethodTest {
5648

5749
/**
5850
* contract TestVote {
@@ -265,23 +257,20 @@ private static Consumer<byte[]> getSmallerConsumer(long expected) {
265257
return getConsumer("<", expected);
266258
}
267259

268-
@Rule
269-
public TemporaryFolder temporaryFolder = new TemporaryFolder();
270-
private static TronApplicationContext context;
271-
private static Manager manager;
272260
private static MaintenanceManager maintenanceManager;
273261
private static ConsensusService consensusService;
274262
private static MortgageService mortgageService;
275263
private static byte[] owner;
276264
private static Repository rootRepository;
277265

278-
@Before
279-
public void init() throws Exception {
280-
Args.setParam(new String[]{"--output-directory",
281-
temporaryFolder.newFolder().toString(), "--debug"}, TestConstants.TEST_CONF);
266+
@Override
267+
protected String[] extraArgs() {
268+
return new String[]{"--debug"};
269+
}
270+
271+
@Override
272+
protected void afterInit() {
282273
CommonParameter.getInstance().setCheckFrozenTime(0);
283-
context = new TronApplicationContext(DefaultConfig.class);
284-
manager = context.getBean(Manager.class);
285274
maintenanceManager = context.getBean(MaintenanceManager.class);
286275
consensusService = context.getBean(ConsensusService.class);
287276
consensusService.start();
@@ -301,17 +290,15 @@ public void init() throws Exception {
301290
VMConfig.initAllowTvmIstanbul(1);
302291
VMConfig.initAllowTvmFreeze(1);
303292
VMConfig.initAllowTvmVote(1);
304-
manager.getDynamicPropertiesStore().saveChangeDelegation(1);
305-
manager.getDynamicPropertiesStore().saveAllowTvmVote(1);
306-
manager.getDynamicPropertiesStore().saveNewRewardAlgorithmEffectiveCycle();
293+
dbManager.getDynamicPropertiesStore().saveChangeDelegation(1);
294+
dbManager.getDynamicPropertiesStore().saveAllowTvmVote(1);
295+
dbManager.getDynamicPropertiesStore().saveNewRewardAlgorithmEffectiveCycle();
307296
}
308297

309-
@After
310-
public void destroy() {
298+
@Override
299+
protected void beforeDestroy() {
311300
ConfigLoader.disable = false;
312301
VMConfig.initVmHardFork(false);
313-
Args.clearParam();
314-
context.destroy();
315302
}
316303

317304
private byte[] deployContract(String contractName, String abi, String code) throws Exception {
@@ -331,7 +318,7 @@ private byte[] deployContract(String contractName, String abi, String code) thro
331318
trace.finalization();
332319
Runtime runtime = trace.getRuntime();
333320
Assert.assertEquals(SUCCESS, runtime.getResult().getResultCode());
334-
Assert.assertEquals(value, manager.getAccountStore().get(contractAddr).getBalance());
321+
Assert.assertEquals(value, dbManager.getAccountStore().get(contractAddr).getBalance());
335322

336323
return contractAddr;
337324
}
@@ -394,7 +381,7 @@ public void testVote() throws Exception {
394381
isWitnessMethod, userAStr);
395382

396383
// query witness received vote
397-
oldReceivedVoteCount = manager.getWitnessStore().get(witnessA).getVoteCount();
384+
oldReceivedVoteCount = dbManager.getWitnessStore().get(witnessA).getVoteCount();
398385
triggerContract(voteContract, SUCCESS, getEqualConsumer(oldReceivedVoteCount),
399386
queryReceivedVoteCountMethod, witnessAStr);
400387

@@ -444,14 +431,14 @@ public void testVote() throws Exception {
444431
triggerContract(voteContract, SUCCESS, null, unfreezeMethod,
445432
StringUtil.encode58Check(voteContract), 0);
446433

447-
AccountCapsule contractCapsule = manager.getAccountStore().get(voteContract);
434+
AccountCapsule contractCapsule = dbManager.getAccountStore().get(voteContract);
448435
Assert.assertEquals(2, contractCapsule.getVotesList().size());
449436

450437
// unfreeze energy, clear vote
451438
triggerContract(voteContract, SUCCESS, null, unfreezeMethod,
452439
StringUtil.encode58Check(voteContract), 1);
453440

454-
contractCapsule = manager.getAccountStore().get(voteContract);
441+
contractCapsule = dbManager.getAccountStore().get(voteContract);
455442
Assert.assertEquals(0, contractCapsule.getVotesList().size());
456443

457444
checkRewardAndWithdraw(voteContract, false);
@@ -723,10 +710,10 @@ public void testRewardAlgorithmNo3() throws Exception {
723710
checkRewardAndWithdraw(voteContractB, false);
724711

725712
// beginCycle == currentCycle + 1 (special case if has no vote while withdrawing)
726-
Assert.assertEquals(manager.getDynamicPropertiesStore().getCurrentCycleNumber() + 1,
727-
manager.getDelegationStore().getBeginCycle(voteContractA));
728-
Assert.assertEquals(manager.getDynamicPropertiesStore().getCurrentCycleNumber() + 1,
729-
manager.getDelegationStore().getBeginCycle(voteContractB));
713+
Assert.assertEquals(dbManager.getDynamicPropertiesStore().getCurrentCycleNumber() + 1,
714+
dbManager.getDelegationStore().getBeginCycle(voteContractA));
715+
Assert.assertEquals(dbManager.getDynamicPropertiesStore().getCurrentCycleNumber() + 1,
716+
dbManager.getDelegationStore().getBeginCycle(voteContractB));
730717

731718
payRewardAndDoMaintenance(1);
732719
}
@@ -763,10 +750,10 @@ public void testRewardAlgorithmNo3() throws Exception {
763750
checkRewardAndWithdraw(voteContractB, false);
764751

765752
// beginCycle == currentCycle + 1 (special case if has no vote while withdrawing)
766-
Assert.assertEquals(manager.getDynamicPropertiesStore().getCurrentCycleNumber() + 1,
767-
manager.getDelegationStore().getBeginCycle(voteContractA));
768-
Assert.assertEquals(manager.getDynamicPropertiesStore().getCurrentCycleNumber() + 1,
769-
manager.getDelegationStore().getBeginCycle(voteContractB));
753+
Assert.assertEquals(dbManager.getDynamicPropertiesStore().getCurrentCycleNumber() + 1,
754+
dbManager.getDelegationStore().getBeginCycle(voteContractA));
755+
Assert.assertEquals(dbManager.getDynamicPropertiesStore().getCurrentCycleNumber() + 1,
756+
dbManager.getDelegationStore().getBeginCycle(voteContractB));
770757

771758
payRewardAndDoMaintenance(1);
772759
}
@@ -860,33 +847,33 @@ private void checkVote(byte[] contract,
860847

861848
private void checkRewardAndWithdraw(byte[] contract, boolean isZero) throws Exception {
862849
long rewardBySystem = mortgageService.queryReward(contract);
863-
long beginCycle = manager.getDelegationStore().getBeginCycle(contract);
864-
long currentCycle = manager.getDynamicPropertiesStore().getCurrentCycleNumber();
850+
long beginCycle = dbManager.getDelegationStore().getBeginCycle(contract);
851+
long currentCycle = dbManager.getDynamicPropertiesStore().getCurrentCycleNumber();
865852
long passedCycle = max(0, currentCycle - beginCycle,
866-
manager.getDynamicPropertiesStore().disableJavaLangMath());
853+
dbManager.getDynamicPropertiesStore().disableJavaLangMath());
867854
Assert.assertTrue(isZero ? rewardBySystem == 0 : rewardBySystem > 0);
868855
triggerContract(contract, SUCCESS,
869856
getConsumer(">=", rewardBySystem)
870857
.andThen(getConsumer("<=", rewardBySystem + passedCycle)),
871858
queryRewardBalanceMethod);
872859

873-
long oldBalance = manager.getAccountStore().get(contract).getBalance();
860+
long oldBalance = dbManager.getAccountStore().get(contract).getBalance();
874861
long rewardByContract = new DataWord(triggerContract(contract, SUCCESS,
875862
getConsumer(">=", rewardBySystem)
876863
.andThen(getConsumer("<=", rewardBySystem + passedCycle)),
877864
withdrawRewardMethod).getRuntime().getResult().getHReturn()).longValue();
878-
long newBalance = manager.getAccountStore().get(contract).getBalance();
865+
long newBalance = dbManager.getAccountStore().get(contract).getBalance();
879866
Assert.assertEquals(oldBalance + rewardByContract, newBalance);
880867
}
881868

882869
private void payRewardAndDoMaintenance(int cycle) {
883870
while (cycle-- > 0) {
884-
manager.getDelegationStore().addReward(
885-
manager.getDynamicPropertiesStore().getCurrentCycleNumber(), witnessA, 1000_000_000);
886-
manager.getDelegationStore().addReward(
887-
manager.getDynamicPropertiesStore().getCurrentCycleNumber(), witnessB, 1000_000_000);
888-
manager.getDelegationStore().addReward(
889-
manager.getDynamicPropertiesStore().getCurrentCycleNumber(), witnessC, 1000_000_000);
871+
dbManager.getDelegationStore().addReward(
872+
dbManager.getDynamicPropertiesStore().getCurrentCycleNumber(), witnessA, 1000_000_000);
873+
dbManager.getDelegationStore().addReward(
874+
dbManager.getDynamicPropertiesStore().getCurrentCycleNumber(), witnessB, 1000_000_000);
875+
dbManager.getDelegationStore().addReward(
876+
dbManager.getDynamicPropertiesStore().getCurrentCycleNumber(), witnessC, 1000_000_000);
890877

891878
maintenanceManager.doMaintenance();
892879
}

framework/src/test/java/org/tron/core/ForkControllerTest.java

Lines changed: 4 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,25 @@
11
package org.tron.core;
22

33
import com.google.protobuf.ByteString;
4-
import java.io.IOException;
54
import java.util.ArrayList;
65
import java.util.List;
7-
import org.junit.After;
86
import org.junit.Assert;
9-
import org.junit.Before;
10-
import org.junit.Rule;
117
import org.junit.Test;
12-
import org.junit.rules.TemporaryFolder;
13-
import org.tron.common.TestConstants;
14-
import org.tron.common.application.TronApplicationContext;
8+
import org.tron.common.BaseMethodTest;
159
import org.tron.common.utils.ForkController;
1610
import org.tron.core.capsule.BlockCapsule;
17-
import org.tron.core.config.DefaultConfig;
1811
import org.tron.core.config.Parameter;
19-
import org.tron.core.config.args.Args;
2012
import org.tron.core.store.DynamicPropertiesStore;
2113
import org.tron.protos.Protocol;
2214

23-
public class ForkControllerTest {
24-
private static ChainBaseManager chainBaseManager;
15+
public class ForkControllerTest extends BaseMethodTest {
2516
private static DynamicPropertiesStore dynamicPropertiesStore;
2617
private static final ForkController forkController = ForkController.instance();
27-
private static TronApplicationContext context;
28-
@Rule
29-
public final TemporaryFolder temporaryFolder = new TemporaryFolder();
3018
private static long ENERGY_LIMIT_BLOCK_NUM = 4727890L;
3119

32-
@Before
33-
public void init() throws IOException {
34-
Args.setParam(new String[]{"-d",
35-
temporaryFolder.newFolder().toString()}, TestConstants.TEST_CONF);
36-
context = new TronApplicationContext(DefaultConfig.class);
20+
@Override
21+
protected void afterInit() {
3722
dynamicPropertiesStore = context.getBean(DynamicPropertiesStore.class);
38-
chainBaseManager = context.getBean(ChainBaseManager.class);
3923
forkController.init(chainBaseManager);
4024
}
4125

@@ -254,10 +238,4 @@ private byte[] getBytes(int i) {
254238
return bytes;
255239
}
256240

257-
@After
258-
public void removeDb() {
259-
Args.clearParam();
260-
context.destroy();
261-
}
262-
263241
}

framework/src/test/java/org/tron/core/config/args/DynamicArgsTest.java

Lines changed: 4 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,21 @@
11
package org.tron.core.config.args;
22

33
import java.io.File;
4-
import java.io.IOException;
5-
import org.junit.After;
64
import org.junit.Assert;
7-
import org.junit.Before;
8-
import org.junit.ClassRule;
95
import org.junit.Test;
10-
import org.junit.rules.TemporaryFolder;
6+
import org.tron.common.BaseMethodTest;
117
import org.tron.common.TestConstants;
12-
import org.tron.common.application.TronApplicationContext;
138
import org.tron.common.parameter.CommonParameter;
149
import org.tron.common.utils.ReflectUtils;
15-
import org.tron.core.config.DefaultConfig;
1610
import org.tron.core.net.TronNetService;
1711
import org.tron.p2p.P2pConfig;
1812

19-
public class DynamicArgsTest {
20-
protected TronApplicationContext context;
13+
public class DynamicArgsTest extends BaseMethodTest {
2114
private DynamicArgs dynamicArgs;
22-
@ClassRule
23-
public static final TemporaryFolder temporaryFolder = new TemporaryFolder();
2415

25-
@Before
26-
public void init() throws IOException {
27-
Args.setParam(new String[]{"--output-directory", temporaryFolder.newFolder().toString()},
28-
TestConstants.TEST_CONF);
29-
context = new TronApplicationContext(DefaultConfig.class);
16+
@Override
17+
protected void afterInit() {
3018
dynamicArgs = context.getBean(DynamicArgs.class);
31-
32-
}
33-
34-
@After
35-
public void destroy() {
36-
Args.clearParam();
37-
context.destroy();
3819
}
3920

4021
@Test

0 commit comments

Comments
 (0)