Skip to content

Commit 09c803f

Browse files
committed
add getTransactionTriggers unit test
1 parent 658a4e2 commit 09c803f

File tree

3 files changed

+85
-8
lines changed

3 files changed

+85
-8
lines changed

framework/src/main/java/org/tron/common/logsfilter/capsule/TransactionLogTriggerCapsule.java

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
import com.google.protobuf.Any;
77
import com.google.protobuf.ByteString;
88
import java.util.ArrayList;
9+
import java.util.HashMap;
910
import java.util.List;
11+
import java.util.Map;
1012
import java.util.Objects;
1113
import lombok.Getter;
1214
import lombok.Setter;
@@ -50,14 +52,20 @@ public TransactionLogTriggerCapsule(TransactionCapsule trxCapsule, BlockCapsule
5052
}
5153

5254
public TransactionLogTriggerCapsule(TransactionCapsule trxCapsule,
53-
BlockCapsule blockCapsule,
54-
TransactionInfo transactionInfo) {
55-
this(trxCapsule, blockCapsule, 0, 0, 0, transactionInfo, 0);
55+
BlockCapsule blockCapsule, TransactionInfo transactionInfo) {
56+
this(trxCapsule, blockCapsule, 0, 0, 0, transactionInfo, 0, true);
5657
}
5758

5859
public TransactionLogTriggerCapsule(TransactionCapsule trxCapsule, BlockCapsule blockCapsule,
5960
int txIndex, long preCumulativeEnergyUsed, long preCumulativeLogCount,
6061
TransactionInfo transactionInfo, long energyUnitPrice) {
62+
this(trxCapsule, blockCapsule, txIndex, preCumulativeEnergyUsed, preCumulativeLogCount,
63+
transactionInfo, energyUnitPrice, false);
64+
}
65+
66+
public TransactionLogTriggerCapsule(TransactionCapsule trxCapsule, BlockCapsule blockCapsule,
67+
int txIndex, long preCumulativeEnergyUsed, long preCumulativeLogCount,
68+
TransactionInfo transactionInfo, long energyUnitPrice, boolean flag) {
6169
transactionLogTrigger = new TransactionLogTrigger();
6270

6371
String blockHash = "";
@@ -69,7 +77,7 @@ public TransactionLogTriggerCapsule(TransactionCapsule trxCapsule, BlockCapsule
6977
String transactionHash = trxCapsule.getTransactionId().toString();
7078
transactionLogTrigger.setTransactionId(transactionHash);
7179
transactionLogTrigger.setTimeStamp(blockCapsule.getTimeStamp());
72-
transactionLogTrigger.setBlockNumber(blockCapsule.getNum());
80+
transactionLogTrigger.setBlockNumber(trxCapsule.getBlockNum());
7381
transactionLogTrigger.setData(Hex.toHexString(trxCapsule
7482
.getInstance().getRawData().getData().toByteArray()));
7583

@@ -301,7 +309,7 @@ public TransactionLogTriggerCapsule(TransactionCapsule trxCapsule, BlockCapsule
301309
getInternalTransactionList(programResult.getInternalTransactions()));
302310
}
303311

304-
if (Objects.isNull(trxTrace) && Objects.nonNull(transactionInfo)) {
312+
if (Objects.isNull(trxTrace) && Objects.nonNull(transactionInfo) && flag) {
305313
Protocol.ResourceReceipt receipt = transactionInfo.getReceipt();
306314
energyUsageTotal = receipt.getEnergyUsageTotal();
307315
transactionLogTrigger.setEnergyFee(receipt.getEnergyFee());
@@ -346,7 +354,7 @@ public TransactionLogTriggerCapsule(TransactionCapsule trxCapsule, BlockCapsule
346354
logPojo.setAddress((log.getAddress() != null)
347355
? Hex.toHexString(log.getAddress().toByteArray()) : "");
348356
logPojo.setBlockHash(blockHash);
349-
logPojo.setBlockNumber(blockCapsule.getNum());
357+
logPojo.setBlockNumber(trxCapsule.getBlockNum());
350358
logPojo.setData(Hex.toHexString(log.getData().toByteArray()));
351359
logPojo.setLogIndex(preCumulativeLogCount + index);
352360

framework/src/main/java/org/tron/core/services/event/BlockEventGet.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ public class BlockEventGet {
5454

5555
public BlockEvent getBlockEvent(long blockNum) throws Exception {
5656
BlockCapsule block = manager.getChainBaseManager().getBlockByNum(blockNum);
57+
block.getTransactions().forEach(t -> t.setBlockNum(block.getNum()));
5758
long solidNum = manager.getDynamicPropertiesStore().getLatestSolidifiedBlockNum();
5859
BlockEvent blockEvent = new BlockEvent();
5960
blockEvent.setBlockId(block.getBlockId());
@@ -359,7 +360,7 @@ public List<TransactionLogTriggerCapsule> getTransactionLogTrigger(BlockCapsule
359360
TransactionCapsule transactionCapsule = transactionCapsuleList.get(i);
360361
transactionCapsule.setBlockNum(block.getNum());
361362
TransactionLogTriggerCapsule trx = new TransactionLogTriggerCapsule(transactionCapsule, block,
362-
i, cumulativeEnergyUsed, cumulativeLogCount, transactionInfo, energyUnitPrice);
363+
i, cumulativeEnergyUsed, cumulativeLogCount, transactionInfo, energyUnitPrice, true);
363364
trx.setLatestSolidifiedBlockNumber(solidNum);
364365
cumulativeEnergyUsed += trx.getTransactionLogTrigger().getEnergyUsageTotal();
365366
cumulativeLogCount += transactionInfo.getLogCount();
@@ -391,6 +392,7 @@ public List<TransactionLogTriggerCapsule> getTransactionTriggers(BlockCapsule bl
391392
if (block.getTransactions().size() == 0) {
392393
return list;
393394
}
395+
394396
GrpcAPI.TransactionInfoList transactionInfoList = GrpcAPI
395397
.TransactionInfoList.newBuilder().build();
396398
GrpcAPI.TransactionInfoList.Builder transactionInfoListBuilder = GrpcAPI

framework/src/test/java/org/tron/core/event/BlockEventGetTest.java

Lines changed: 68 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package org.tron.core.event;
22

3+
import static org.mockito.Mockito.mock;
4+
35
import com.google.protobuf.ByteString;
46
import java.io.IOException;
57
import java.time.LocalDateTime;
@@ -15,6 +17,7 @@
1517
import org.junit.ClassRule;
1618
import org.junit.Test;
1719
import org.junit.rules.TemporaryFolder;
20+
import org.mockito.Mockito;
1821
import org.tron.common.application.TronApplicationContext;
1922
import org.tron.common.logsfilter.EventPluginConfig;
2023
import org.tron.common.logsfilter.EventPluginLoader;
@@ -23,11 +26,13 @@
2326
import org.tron.common.runtime.TvmTestUtils;
2427
import org.tron.common.utils.ByteArray;
2528
import org.tron.common.utils.PublicMethod;
29+
import org.tron.common.utils.ReflectUtils;
2630
import org.tron.common.utils.Sha256Hash;
2731
import org.tron.core.ChainBaseManager;
2832
import org.tron.core.Constant;
2933
import org.tron.core.capsule.AccountCapsule;
3034
import org.tron.core.capsule.BlockCapsule;
35+
import org.tron.core.capsule.TransactionRetCapsule;
3136
import org.tron.core.capsule.WitnessCapsule;
3237
import org.tron.core.config.DefaultConfig;
3338
import org.tron.core.config.args.Args;
@@ -38,6 +43,7 @@
3843
import org.tron.core.services.event.BlockEventGet;
3944
import org.tron.core.services.event.bo.BlockEvent;
4045
import org.tron.core.store.DynamicPropertiesStore;
46+
import org.tron.core.store.TransactionRetStore;
4147
import org.tron.protos.Protocol;
4248

4349
@Slf4j
@@ -187,7 +193,7 @@ public void test() throws Exception {
187193
}
188194

189195
@Test
190-
public void getTransactionTriggers() {
196+
public void getTransactionTriggers() throws Exception {
191197
BlockEventGet blockEventGet = new BlockEventGet();
192198
BlockCapsule bc = new BlockCapsule(1, Sha256Hash.ZERO_HASH,
193199
100, Sha256Hash.ZERO_HASH.getByteString());
@@ -209,5 +215,66 @@ public void getTransactionTriggers() {
209215
list = blockEventGet.getTransactionTriggers(bc, 1);
210216
Assert.assertEquals(1, list.size());
211217
Assert.assertEquals(100, list.get(0).getTransactionLogTrigger().getTimeStamp());
218+
219+
Protocol.TransactionInfo.Builder infoBuild = Protocol.TransactionInfo.newBuilder();
220+
221+
Protocol.ResourceReceipt.Builder resourceBuild = Protocol.ResourceReceipt.newBuilder();
222+
resourceBuild.setEnergyFee(1);
223+
resourceBuild.setEnergyUsageTotal(2);
224+
resourceBuild.setEnergyUsage(3);
225+
resourceBuild.setOriginEnergyUsage(4);
226+
resourceBuild.setNetFee(5);
227+
resourceBuild.setNetUsage(6);
228+
229+
String address = "A0B4750E2CD76E19DCA331BF5D089B71C3C2798548";
230+
infoBuild
231+
.setContractAddress(ByteString.copyFrom(ByteArray.fromHexString(address)))
232+
.addContractResult(ByteString.copyFrom(ByteArray.fromHexString("112233")))
233+
.setReceipt(resourceBuild.build());
234+
235+
Manager manager = mock(Manager.class);
236+
ReflectUtils.setFieldValue(blockEventGet, "manager", manager);
237+
238+
ChainBaseManager chainBaseManager = mock(ChainBaseManager.class);
239+
Mockito.when(manager.getChainBaseManager()).thenReturn(chainBaseManager);
240+
241+
TransactionRetStore transactionRetStore = mock(TransactionRetStore.class);
242+
Mockito.when(chainBaseManager.getTransactionRetStore()).thenReturn(transactionRetStore);
243+
244+
Protocol.TransactionRet transactionRet = Protocol.TransactionRet.newBuilder()
245+
.addTransactioninfo(infoBuild.build()).build();
246+
247+
TransactionRetCapsule result = new TransactionRetCapsule(transactionRet.toByteArray());
248+
249+
Mockito.when(transactionRetStore.getTransactionInfoByBlockNum(ByteArray.fromLong(0)))
250+
.thenReturn(result);
251+
252+
Protocol.Block block = Protocol.Block.newBuilder()
253+
.addTransactions(transaction).build();
254+
255+
BlockCapsule blockCapsule = new BlockCapsule(block);
256+
blockCapsule.getTransactions().forEach(t -> t.setBlockNum(blockCapsule.getNum()));
257+
258+
list = blockEventGet.getTransactionTriggers(blockCapsule, 1);
259+
260+
Assert.assertEquals(1, list.size());
261+
Assert.assertEquals(1,
262+
list.get(0).getTransactionLogTrigger().getLatestSolidifiedBlockNumber());
263+
Assert.assertEquals(0,
264+
list.get(0).getTransactionLogTrigger().getBlockNumber());
265+
Assert.assertEquals(2,
266+
list.get(0).getTransactionLogTrigger().getEnergyUsageTotal());
267+
268+
Mockito.when(transactionRetStore.getTransactionInfoByBlockNum(ByteArray.fromLong(0)))
269+
.thenReturn(null);
270+
list = blockEventGet.getTransactionTriggers(blockCapsule, 1);
271+
Assert.assertEquals(1, list.size());
272+
Assert.assertEquals(1,
273+
list.get(0).getTransactionLogTrigger().getLatestSolidifiedBlockNumber());
274+
Assert.assertEquals(0,
275+
list.get(0).getTransactionLogTrigger().getBlockNumber());
276+
Assert.assertEquals(0,
277+
list.get(0).getTransactionLogTrigger().getEnergyUsageTotal());
212278
}
279+
213280
}

0 commit comments

Comments
 (0)