Skip to content

Commit db4ae6f

Browse files
Merge pull request #631 from tronprotocol/feature/improve_TransactionStoreTest
improve unit test TransactionStoreTest
2 parents de13e0a + a202d02 commit db4ae6f

File tree

2 files changed

+188
-57
lines changed

2 files changed

+188
-57
lines changed

src/main/java/org/tron/core/db/TronStoreWithRevoking.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ protected TronStoreWithRevoking(String dbName, RevokingDatabase revokingDatabase
2323

2424
@Override
2525
public void put(byte[] key, T item) {
26+
if (Objects.isNull(key) || Objects.isNull(item)) {
27+
return;
28+
}
2629
//logger.info("Address is {}, " + item.getClass().getSimpleName() + " is {}", key, item);
2730
byte[] value = dbSource.getData(key);
2831
if (ArrayUtils.isNotEmpty(value)) {

src/test/java/org/tron/core/db/TransactionStoreTest.java

Lines changed: 185 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1,94 +1,222 @@
11
package org.tron.core.db;
22

3+
import com.google.protobuf.ByteString;
34
import java.io.File;
45
import java.util.Random;
56
import org.junit.AfterClass;
7+
import org.junit.Assert;
68
import org.junit.BeforeClass;
7-
import org.junit.Ignore;
89
import org.junit.Test;
910
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
11+
import org.tron.common.utils.ByteArray;
1012
import org.tron.common.utils.FileUtil;
1113
import org.tron.core.Constant;
14+
import org.tron.core.Wallet;
15+
import org.tron.core.capsule.AccountCapsule;
1216
import org.tron.core.capsule.TransactionCapsule;
1317
import org.tron.core.config.DefaultConfig;
1418
import org.tron.core.config.args.Args;
19+
import org.tron.protos.Contract.AccountCreateContract;
20+
import org.tron.protos.Contract.TransferContract;
21+
import org.tron.protos.Contract.VoteWitnessContract;
22+
import org.tron.protos.Contract.VoteWitnessContract.Vote;
23+
import org.tron.protos.Contract.WitnessCreateContract;
24+
import org.tron.protos.Protocol.AccountType;
1525

1626
public class TransactionStoreTest {
1727

1828
private static String dbPath = "output_TransactionStore_test";
1929
private static TransactionStore transactionStore;
2030
private static AnnotationConfigApplicationContext context;
21-
private static final byte[] data = TransactionStoreTest.randomBytes(21);
22-
private static final byte[] key = TransactionStoreTest.randomBytes(21);
23-
private static final long value = 111L;
31+
private static final byte[] key1 = TransactionStoreTest.randomBytes(21);
32+
private static Manager dbManager;
33+
private static final byte[] key2 = TransactionStoreTest.randomBytes(21);
34+
35+
36+
private static final String URL = "https://tron.network";
37+
38+
private static final String ACCOUNT_NAME = "ownerF";
39+
private static final String OWNER_ADDRESS =
40+
Wallet.getAddressPreFixString() + "abd4b9367799eaa3197fecb144eb71de1e049abc";
41+
private static final String TO_ADDRESS =
42+
Wallet.getAddressPreFixString() + "abd4b9367799eaa3197fecb144eb71de1e049abc";
43+
private static final long AMOUNT = 100;
44+
private static final String WITNESS_ADDRESS =
45+
Wallet.getAddressPreFixString() + "548794500882809695a8a687866e76d4271a1abc";
2446

2547
static {
2648
Args.setParam(new String[]{"-d", dbPath, "-w"}, Constant.TEST_CONF);
2749
context = new AnnotationConfigApplicationContext(DefaultConfig.class);
2850
}
2951

30-
@AfterClass
31-
public static void destroy() {
32-
Args.clearParam();
33-
FileUtil.deleteDir(new File(dbPath));
34-
context.destroy();
35-
}
36-
52+
/**
53+
* Init data.
54+
*/
3755
@BeforeClass
3856
public static void init() {
39-
transactionStore = context.getBean(TransactionStore.class);
40-
/* TransactionCapsule transactionCapsule = new TransactionCapsule(key, value);*/
41-
TransactionCapsule transactionCapsule = null;
42-
transactionStore.put(data, transactionCapsule);
57+
dbManager = context.getBean(Manager.class);
58+
transactionStore = dbManager.getTransactionStore();
59+
60+
}
61+
62+
/**
63+
* get AccountCreateContract.
64+
*/
65+
private AccountCreateContract getContract(String name, String address) {
66+
return AccountCreateContract.newBuilder()
67+
.setAccountName(ByteString.copyFromUtf8(name))
68+
.setOwnerAddress(ByteString.copyFrom(ByteArray.fromHexString(address)))
69+
.build();
70+
}
71+
72+
/**
73+
* get TransferContract.
74+
*/
75+
private TransferContract getContract(long count, String owneraddress, String toaddress) {
76+
return TransferContract.newBuilder()
77+
.setOwnerAddress(ByteString.copyFrom(ByteArray.fromHexString(owneraddress)))
78+
.setToAddress(ByteString.copyFrom(ByteArray.fromHexString(toaddress)))
79+
.setAmount(count)
80+
.build();
81+
}
82+
83+
/**
84+
* get WitnessCreateContract.
85+
*/
86+
private WitnessCreateContract getWitnessContract(String address, String url) {
87+
return WitnessCreateContract.newBuilder()
88+
.setOwnerAddress(ByteString.copyFrom(ByteArray.fromHexString(address)))
89+
.setUrl(ByteString.copyFrom(ByteArray.fromString(url)))
90+
.build();
91+
}
92+
93+
/**
94+
* get VoteWitnessContract.
95+
*/
96+
private VoteWitnessContract getVoteWitnessContract(String address, String voteaddress,
97+
Long value) {
98+
return
99+
VoteWitnessContract.newBuilder()
100+
.setOwnerAddress(ByteString.copyFrom(ByteArray.fromHexString(address)))
101+
.addVotes(Vote.newBuilder()
102+
.setVoteAddress(ByteString.copyFrom(ByteArray.fromHexString(voteaddress)))
103+
.setVoteCount(value).build())
104+
.build();
105+
}
106+
107+
108+
/**
109+
* put and get CreateAccountTransaction.
110+
*/
111+
@Test
112+
public void CreateAccountTransactionStoreTest() {
113+
AccountCreateContract accountCreateContract = getContract(ACCOUNT_NAME,
114+
OWNER_ADDRESS);
115+
TransactionCapsule ret = new TransactionCapsule(accountCreateContract,
116+
dbManager.getAccountStore());
117+
transactionStore.put(key1, ret);
118+
Assert.assertEquals("Store CreateAccountTransaction is error",
119+
transactionStore.get(key1).getInstance(),
120+
ret.getInstance());
121+
Assert.assertTrue(transactionStore.has(key1));
122+
}
123+
124+
/**
125+
* put and get CreateWitnessTransaction.
126+
*/
127+
@Test
128+
public void CreateWitnessTransactionStoreTest() {
129+
WitnessCreateContract witnessContract = getWitnessContract(OWNER_ADDRESS, URL);
130+
TransactionCapsule transactionCapsule = new TransactionCapsule(witnessContract);
131+
transactionStore.put(key1, transactionCapsule);
132+
Assert.assertEquals("Store CreateWitnessTransaction is error",
133+
transactionStore.get(key1).getInstance(),
134+
transactionCapsule.getInstance());
43135
}
44136

45-
@Ignore
137+
/**
138+
* put and get TransferTransaction.
139+
*/
46140
@Test
47-
public void testGet() {
48-
// test get and has method
49-
/* try {
50-
Assert.assertTrue(transactionStore.has(data));
51-
Assert.assertArrayEquals(
52-
key,
53-
transactionStore
54-
.get(data)
55-
.getInstance()
56-
.getRawData()
57-
.getContractList()
58-
.get(0)
59-
.getParameter()
60-
.unpack(TransferContract.class)
61-
.getToAddress()
62-
.toByteArray());
63-
Assert.assertEquals(
64-
value,
65-
transactionStore
66-
.get(data)
67-
.getInstance()
68-
.getRawData()
69-
.getContractList()
70-
.get(0)
71-
.getParameter()
72-
.unpack(TransferContract.class)
73-
.getAmount());
74-
} catch (InvalidProtocolBufferException e) {
75-
e.printStackTrace();
76-
} */
141+
public void TransferTransactionStorenTest() {
142+
AccountCapsule ownerCapsule =
143+
new AccountCapsule(
144+
ByteString.copyFromUtf8(ACCOUNT_NAME),
145+
ByteString.copyFrom(ByteArray.fromHexString(OWNER_ADDRESS)),
146+
AccountType.AssetIssue,
147+
1000000L
148+
);
149+
dbManager.getAccountStore().put(ownerCapsule.getAddress().toByteArray(), ownerCapsule);
150+
TransferContract transferContract = getContract(AMOUNT, OWNER_ADDRESS, TO_ADDRESS);
151+
TransactionCapsule transactionCapsule = new TransactionCapsule(transferContract,
152+
dbManager.getAccountStore());
153+
transactionStore.put(key1, transactionCapsule);
154+
Assert.assertEquals("Store TransferTransaction is error",
155+
transactionStore.get(key1).getInstance(),
156+
transactionCapsule.getInstance());
77157
}
78158

79-
/*@Test
80-
public void findTransactionByHash() {
81-
//test findTransactionByHash method
82-
TransactionCapsule transactionCapsuleByHash = new TransactionCapsule(
83-
transactionStore.findTransactionByHash(data));
159+
/**
160+
* put and get VoteWitnessTransaction.
161+
*/
162+
163+
@Test
164+
public void voteWitnessTransactionTest() {
165+
166+
AccountCapsule ownerAccountFirstCapsule =
167+
new AccountCapsule(
168+
ByteString.copyFromUtf8(ACCOUNT_NAME),
169+
ByteString.copyFrom(ByteArray.fromHexString(OWNER_ADDRESS)),
170+
AccountType.Normal,
171+
1_000_000_000_000L);
172+
long frozenBalance = 1_000_000_000_000L;
173+
long duration = 3;
174+
ownerAccountFirstCapsule.setFrozen(frozenBalance, duration);
175+
dbManager.getAccountStore()
176+
.put(ownerAccountFirstCapsule.getAddress().toByteArray(), ownerAccountFirstCapsule);
177+
VoteWitnessContract actuator = getVoteWitnessContract(OWNER_ADDRESS, WITNESS_ADDRESS, 1L);
178+
TransactionCapsule transactionCapsule = new TransactionCapsule(actuator);
179+
transactionStore.put(key1, transactionCapsule);
180+
Assert.assertEquals("Store VoteWitnessTransaction is error",
181+
transactionStore.get(key1).getInstance(),
182+
transactionCapsule.getInstance());
183+
}
184+
185+
/**
186+
* put value is null and get it.
187+
*/
188+
@Test
189+
public void TransactionValueNullTest() {
190+
TransactionCapsule transactionCapsule = null;
191+
transactionStore.put(key2, transactionCapsule);
192+
Assert.assertNull("put value is null", transactionStore.get(key2));
193+
194+
}
84195

85-
Assert.assertEquals(key, ByteArray.toHexString(
86-
transactionCapsuleByHash.getInstance().getRawData().getVoutList().get(0).getPubKeyHash()
87-
.toByteArray()));
88-
Assert.assertEquals(value,
89-
transactionCapsuleByHash.getInstance().getRawData().getVoutList().get(0).getValue());
196+
/**
197+
* put key is null and get it.
198+
*/
199+
@Test
200+
public void TransactionKeyNullTest() {
201+
AccountCreateContract accountCreateContract = getContract(ACCOUNT_NAME,
202+
OWNER_ADDRESS);
203+
TransactionCapsule ret = new TransactionCapsule(accountCreateContract,
204+
dbManager.getAccountStore());
205+
byte[] key = null;
206+
transactionStore.put(key, ret);
207+
try {
208+
transactionStore.get(key);
209+
} catch (RuntimeException e) {
210+
Assert.assertEquals("The key argument cannot be null", e.getMessage());
211+
}
212+
}
213+
@AfterClass
214+
public static void destroy() {
215+
Args.clearParam();
216+
FileUtil.deleteDir(new File(dbPath));
217+
context.destroy();
218+
}
90219

91-
} */
92220

93221
public static byte[] randomBytes(int length) {
94222
// generate the random number

0 commit comments

Comments
 (0)