diff --git a/framework/src/main/java/org/tron/core/Wallet.java b/framework/src/main/java/org/tron/core/Wallet.java index c7d1a3f50aa..fdea2a555a8 100755 --- a/framework/src/main/java/org/tron/core/Wallet.java +++ b/framework/src/main/java/org/tron/core/Wallet.java @@ -84,6 +84,7 @@ import org.tron.api.GrpcAPI.NoteParameters; import org.tron.api.GrpcAPI.NumberMessage; import org.tron.api.GrpcAPI.PaymentAddressMessage; +import org.tron.api.GrpcAPI.PricesResponseMessage; import org.tron.api.GrpcAPI.PrivateParameters; import org.tron.api.GrpcAPI.PrivateParametersWithoutAsk; import org.tron.api.GrpcAPI.PrivateShieldedTRC20Parameters; @@ -4295,23 +4296,25 @@ public long getEnergyFee(long timestamp) { } } - public String getEnergyPrices() { + public PricesResponseMessage getEnergyPrices() { + PricesResponseMessage.Builder builder = PricesResponseMessage.newBuilder(); try { - return chainBaseManager.getDynamicPropertiesStore().getEnergyPriceHistory(); + builder.setPrices(chainBaseManager.getDynamicPropertiesStore().getEnergyPriceHistory()); + return builder.build(); } catch (Exception e) { logger.error("GetEnergyPrices failed", e); } - return null; } - public String getBandwidthPrices() { + public PricesResponseMessage getBandwidthPrices() { + PricesResponseMessage.Builder builder = PricesResponseMessage.newBuilder(); try { - return chainBaseManager.getDynamicPropertiesStore().getBandwidthPriceHistory(); + builder.setPrices(chainBaseManager.getDynamicPropertiesStore().getBandwidthPriceHistory()); + return builder.build(); } catch (Exception e) { logger.error("GetBandwidthPrices failed", e); } - return null; } @@ -4426,9 +4429,11 @@ public Block getBlock(GrpcAPI.BlockReq request) { return block.toBuilder().clearTransactions().build(); } - public String getMemoFeePrices() { + public PricesResponseMessage getMemoFeePrices() { + PricesResponseMessage.Builder builder = PricesResponseMessage.newBuilder(); try { - return chainBaseManager.getDynamicPropertiesStore().getMemoFeeHistory(); + builder.setPrices(chainBaseManager.getDynamicPropertiesStore().getMemoFeeHistory()); + return builder.build(); } catch (Exception e) { logger.error("GetMemoFeePrices failed", e); } diff --git a/framework/src/main/java/org/tron/core/services/RpcApiService.java b/framework/src/main/java/org/tron/core/services/RpcApiService.java index 26861523311..ec2eebb8826 100755 --- a/framework/src/main/java/org/tron/core/services/RpcApiService.java +++ b/framework/src/main/java/org/tron/core/services/RpcApiService.java @@ -49,6 +49,7 @@ import org.tron.api.GrpcAPI.OvkDecryptTRC20Parameters; import org.tron.api.GrpcAPI.PaginatedMessage; import org.tron.api.GrpcAPI.PaymentAddressMessage; +import org.tron.api.GrpcAPI.PricesResponseMessage; import org.tron.api.GrpcAPI.PrivateParameters; import org.tron.api.GrpcAPI.PrivateParametersWithoutAsk; import org.tron.api.GrpcAPI.PrivateShieldedTRC20Parameters; @@ -174,16 +175,12 @@ public class RpcApiService implements Service { private Server apiServer; @Autowired private Manager dbManager; - @Autowired private ChainBaseManager chainBaseManager; - @Autowired private Wallet wallet; - @Autowired private TransactionUtil transactionUtil; - @Autowired private NodeInfoService nodeInfoService; @Autowired @@ -192,10 +189,8 @@ public class RpcApiService implements Service { private LiteFnQueryGrpcInterceptor liteFnQueryGrpcInterceptor; @Autowired private RpcApiAccessInterceptor apiAccessInterceptor; - @Autowired private MetricsApiService metricsApiService; - @Getter private DatabaseApi databaseApi = new DatabaseApi(); private WalletApi walletApi = new WalletApi(); @@ -997,6 +992,28 @@ public void getBlock(GrpcAPI.BlockReq request, StreamObserver responseObserver) { getBlockCommon(request, responseObserver); } + + @Override + public void getBandwidthPrices(EmptyMessage request, + StreamObserver responseObserver) { + try { + responseObserver.onNext(wallet.getBandwidthPrices()); + } catch (Exception e) { + responseObserver.onError(getRunTimeException(e)); + } + responseObserver.onCompleted(); + } + + @Override + public void getEnergyPrices(EmptyMessage request, + StreamObserver responseObserver) { + try { + responseObserver.onNext(wallet.getEnergyPrices()); + } catch (Exception e) { + responseObserver.onError(getRunTimeException(e)); + } + responseObserver.onCompleted(); + } } /** @@ -2030,6 +2047,39 @@ public void getCanWithdrawUnfreezeAmount(CanWithdrawUnfreezeAmountRequestMessage responseObserver.onCompleted(); } + @Override + public void getBandwidthPrices(EmptyMessage request, + StreamObserver responseObserver) { + try { + responseObserver.onNext(wallet.getBandwidthPrices()); + } catch (Exception e) { + responseObserver.onError(getRunTimeException(e)); + } + responseObserver.onCompleted(); + } + + @Override + public void getEnergyPrices(EmptyMessage request, + StreamObserver responseObserver) { + try { + responseObserver.onNext(wallet.getEnergyPrices()); + } catch (Exception e) { + responseObserver.onError(getRunTimeException(e)); + } + responseObserver.onCompleted(); + } + + @Override + public void getMemoFee(EmptyMessage request, + StreamObserver responseObserver) { + try { + responseObserver.onNext(wallet.getMemoFeePrices()); + } catch (Exception e) { + responseObserver.onError(getRunTimeException(e)); + } + responseObserver.onCompleted(); + } + @Override public void getPaginatedProposalList(PaginatedMessage request, StreamObserver responseObserver) { diff --git a/framework/src/main/java/org/tron/core/services/http/GetBandwidthPricesServlet.java b/framework/src/main/java/org/tron/core/services/http/GetBandwidthPricesServlet.java index ea4b535af39..09d51cc8635 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetBandwidthPricesServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/GetBandwidthPricesServlet.java @@ -1,14 +1,13 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSONObject; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import org.tron.api.GrpcAPI.PricesResponseMessage; import org.tron.core.Wallet; - @Component @Slf4j(topic = "API") public class GetBandwidthPricesServlet extends RateLimiterServlet { @@ -16,21 +15,17 @@ public class GetBandwidthPricesServlet extends RateLimiterServlet { @Autowired private Wallet wallet; + @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) { try { - String reply = wallet.getBandwidthPrices(); - if (reply != null) { - JSONObject jsonObject = new JSONObject(); - jsonObject.put("prices", reply); - response.getWriter().println(jsonObject); - } else { - response.getWriter().println("{}"); - } + PricesResponseMessage reply = wallet.getBandwidthPrices(); + response.getWriter().println(reply == null ? "{}" : JsonFormat.printToString(reply)); } catch (Exception e) { Util.processError(e, response); } } + @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) { doGet(request, response); } diff --git a/framework/src/main/java/org/tron/core/services/http/GetEnergyPricesServlet.java b/framework/src/main/java/org/tron/core/services/http/GetEnergyPricesServlet.java index 36129d8ffdb..b9b6ba0d893 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetEnergyPricesServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/GetEnergyPricesServlet.java @@ -1,14 +1,13 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSONObject; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import org.tron.api.GrpcAPI.PricesResponseMessage; import org.tron.core.Wallet; - @Component @Slf4j(topic = "API") public class GetEnergyPricesServlet extends RateLimiterServlet { @@ -16,21 +15,17 @@ public class GetEnergyPricesServlet extends RateLimiterServlet { @Autowired private Wallet wallet; + @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) { try { - String reply = wallet.getEnergyPrices(); - if (reply != null) { - JSONObject jsonObject = new JSONObject(); - jsonObject.put("prices", reply); - response.getWriter().println(jsonObject); - } else { - response.getWriter().println("{}"); - } + PricesResponseMessage reply = wallet.getEnergyPrices(); + response.getWriter().println(reply == null ? "{}" : JsonFormat.printToString(reply)); } catch (Exception e) { Util.processError(e, response); } } + @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) { doGet(request, response); } diff --git a/framework/src/main/java/org/tron/core/services/http/GetMemoFeePricesServlet.java b/framework/src/main/java/org/tron/core/services/http/GetMemoFeePricesServlet.java index 8d5f46d8236..0da52bf9d35 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetMemoFeePricesServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/GetMemoFeePricesServlet.java @@ -1,14 +1,13 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSONObject; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import org.tron.api.GrpcAPI.PricesResponseMessage; import org.tron.core.Wallet; - @Component @Slf4j(topic = "API") public class GetMemoFeePricesServlet extends RateLimiterServlet { @@ -16,21 +15,17 @@ public class GetMemoFeePricesServlet extends RateLimiterServlet { @Autowired private Wallet wallet; + @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) { try { - String reply = wallet.getMemoFeePrices(); - if (reply != null) { - JSONObject jsonObject = new JSONObject(); - jsonObject.put("prices", reply); - response.getWriter().println(jsonObject); - } else { - response.getWriter().println("{}"); - } + PricesResponseMessage reply = wallet.getMemoFeePrices(); + response.getWriter().println(reply == null ? "{}" : JsonFormat.printToString(reply)); } catch (Exception e) { Util.processError(e, response); } } + @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) { doGet(request, response); } diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/RpcApiServiceOnPBFT.java b/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/RpcApiServiceOnPBFT.java index 2457e5fc891..7eea053592e 100755 --- a/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/RpcApiServiceOnPBFT.java +++ b/framework/src/main/java/org/tron/core/services/interfaceOnPBFT/RpcApiServiceOnPBFT.java @@ -31,6 +31,7 @@ import org.tron.api.GrpcAPI.NumberMessage; import org.tron.api.GrpcAPI.OvkDecryptTRC20Parameters; import org.tron.api.GrpcAPI.PaginatedMessage; +import org.tron.api.GrpcAPI.PricesResponseMessage; import org.tron.api.GrpcAPI.SpendResult; import org.tron.api.GrpcAPI.TransactionExtention; import org.tron.api.GrpcAPI.WitnessList; @@ -39,8 +40,6 @@ import org.tron.common.crypto.ECKey; import org.tron.common.es.ExecutorServiceManager; import org.tron.common.parameter.CommonParameter; -import org.tron.common.utils.StringUtil; -import org.tron.common.utils.Utils; import org.tron.core.config.args.Args; import org.tron.core.services.RpcApiService; import org.tron.core.services.filter.LiteFnQueryGrpcInterceptor; @@ -557,5 +556,19 @@ public void getBlock(GrpcAPI.BlockReq request, () -> rpcApiService.getWalletSolidityApi().getBlock(request, responseObserver)); } + @Override + public void getBandwidthPrices(EmptyMessage request, + StreamObserver responseObserver) { + walletOnPBFT.futureGet( + () -> rpcApiService.getWalletSolidityApi().getBandwidthPrices(request, responseObserver)); + } + + @Override + public void getEnergyPrices(EmptyMessage request, + StreamObserver responseObserver) { + walletOnPBFT.futureGet( + () -> rpcApiService.getWalletSolidityApi().getEnergyPrices(request, responseObserver)); + } + } } diff --git a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/RpcApiServiceOnSolidity.java b/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/RpcApiServiceOnSolidity.java index 5bf6f1846e5..75538cb5cdf 100755 --- a/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/RpcApiServiceOnSolidity.java +++ b/framework/src/main/java/org/tron/core/services/interfaceOnSolidity/RpcApiServiceOnSolidity.java @@ -27,6 +27,7 @@ import org.tron.api.GrpcAPI.NoteParameters; import org.tron.api.GrpcAPI.NumberMessage; import org.tron.api.GrpcAPI.PaginatedMessage; +import org.tron.api.GrpcAPI.PricesResponseMessage; import org.tron.api.GrpcAPI.Return; import org.tron.api.GrpcAPI.Return.response_code; import org.tron.api.GrpcAPI.SpendResult; @@ -40,8 +41,6 @@ import org.tron.common.es.ExecutorServiceManager; import org.tron.common.parameter.CommonParameter; import org.tron.common.utils.Sha256Hash; -import org.tron.common.utils.StringUtil; -import org.tron.common.utils.Utils; import org.tron.core.capsule.BlockCapsule; import org.tron.core.config.args.Args; import org.tron.core.services.RpcApiService; @@ -540,5 +539,19 @@ public void getBlock(GrpcAPI.BlockReq request, () -> rpcApiService.getWalletSolidityApi().getBlock(request, responseObserver)); } + @Override + public void getBandwidthPrices(EmptyMessage request, + StreamObserver responseObserver) { + walletOnSolidity.futureGet( + () -> rpcApiService.getWalletSolidityApi().getBandwidthPrices(request, responseObserver)); + } + + @Override + public void getEnergyPrices(EmptyMessage request, + StreamObserver responseObserver) { + walletOnSolidity.futureGet( + () -> rpcApiService.getWalletSolidityApi().getEnergyPrices(request, responseObserver)); + } + } } diff --git a/framework/src/test/java/org/tron/core/WalletTest.java b/framework/src/test/java/org/tron/core/WalletTest.java index 92bbebb8b37..712a708f822 100644 --- a/framework/src/test/java/org/tron/core/WalletTest.java +++ b/framework/src/test/java/org/tron/core/WalletTest.java @@ -43,6 +43,7 @@ import org.tron.api.GrpcAPI.BlockList; import org.tron.api.GrpcAPI.ExchangeList; import org.tron.api.GrpcAPI.NumberMessage; +import org.tron.api.GrpcAPI.PricesResponseMessage; import org.tron.api.GrpcAPI.ProposalList; import org.tron.common.BaseTest; import org.tron.common.crypto.ECKey; @@ -930,8 +931,8 @@ public void testGetCanWithdrawUnfreezeAmount() { @Test public void testGetMemoFeePrices() { - String memeFeeList = wallet.getMemoFeePrices(); - Assert.assertEquals("0:0", memeFeeList); + PricesResponseMessage memeFeeList = wallet.getMemoFeePrices(); + Assert.assertEquals("0:0", memeFeeList.getPrices()); } @Test diff --git a/framework/src/test/java/org/tron/core/services/filter/RpcApiAccessInterceptorTest.java b/framework/src/test/java/org/tron/core/services/filter/RpcApiAccessInterceptorTest.java index ac1f21f6160..d9f1081a285 100644 --- a/framework/src/test/java/org/tron/core/services/filter/RpcApiAccessInterceptorTest.java +++ b/framework/src/test/java/org/tron/core/services/filter/RpcApiAccessInterceptorTest.java @@ -1,5 +1,10 @@ package org.tron.core.services.filter; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertThrows; +import static org.junit.Assert.assertTrue; + import io.grpc.ManagedChannel; import io.grpc.ManagedChannelBuilder; import io.grpc.StatusRuntimeException; @@ -11,14 +16,16 @@ import java.util.Objects; import lombok.extern.slf4j.Slf4j; import org.junit.AfterClass; -import org.junit.Assert; import org.junit.BeforeClass; import org.junit.ClassRule; -import org.junit.Rule; import org.junit.Test; -import org.junit.rules.ExpectedException; import org.junit.rules.TemporaryFolder; -import org.tron.api.GrpcAPI; +import org.tron.api.GrpcAPI.BlockExtention; +import org.tron.api.GrpcAPI.BlockReq; +import org.tron.api.GrpcAPI.BytesMessage; +import org.tron.api.GrpcAPI.EmptyMessage; +import org.tron.api.GrpcAPI.NumberMessage; +import org.tron.api.GrpcAPI.TransactionIdList; import org.tron.api.WalletGrpc; import org.tron.api.WalletSolidityGrpc; import org.tron.common.application.Application; @@ -31,20 +38,15 @@ import org.tron.core.services.RpcApiService; import org.tron.core.services.interfaceOnPBFT.RpcApiServiceOnPBFT; import org.tron.core.services.interfaceOnSolidity.RpcApiServiceOnSolidity; +import org.tron.protos.Protocol.Transaction; @Slf4j public class RpcApiAccessInterceptorTest { private static TronApplicationContext context; - private static WalletGrpc.WalletBlockingStub blockingStubFull = null; private static WalletSolidityGrpc.WalletSolidityBlockingStub blockingStubSolidity = null; private static WalletSolidityGrpc.WalletSolidityBlockingStub blockingStubPBFT = null; - private static Application appTest; - - @Rule - public ExpectedException thrown = ExpectedException.none(); - @ClassRule public static TemporaryFolder temporaryFolder = new TemporaryFolder(); @@ -67,7 +69,7 @@ public static void init() throws IOException { ManagedChannel channelFull = ManagedChannelBuilder.forTarget(fullNode) .usePlaintext() .build(); - ManagedChannel channelpBFT = ManagedChannelBuilder.forTarget(pBFTNode) + ManagedChannel channelPBFT = ManagedChannelBuilder.forTarget(pBFTNode) .usePlaintext() .build(); ManagedChannel channelSolidity = ManagedChannelBuilder.forTarget(solidityNode) @@ -78,14 +80,14 @@ public static void init() throws IOException { blockingStubFull = WalletGrpc.newBlockingStub(channelFull); blockingStubSolidity = WalletSolidityGrpc.newBlockingStub(channelSolidity); - blockingStubPBFT = WalletSolidityGrpc.newBlockingStub(channelpBFT); + blockingStubPBFT = WalletSolidityGrpc.newBlockingStub(channelPBFT); RpcApiService rpcApiService = context.getBean(RpcApiService.class); RpcApiServiceOnSolidity rpcApiServiceOnSolidity = context.getBean(RpcApiServiceOnSolidity.class); RpcApiServiceOnPBFT rpcApiServiceOnPBFT = context.getBean(RpcApiServiceOnPBFT.class); - appTest = ApplicationFactory.create(context); + Application appTest = ApplicationFactory.create(context); appTest.addService(rpcApiService); appTest.addService(rpcApiServiceOnSolidity); appTest.addService(rpcApiServiceOnPBFT); @@ -110,59 +112,63 @@ public void testAccessDisabledFullNode() { disabledApiList.add("getblockbynum"); Args.getInstance().setDisabledApiList(disabledApiList); - final GrpcAPI.NumberMessage message = GrpcAPI.NumberMessage.newBuilder().setNum(0).build(); - thrown.expect(StatusRuntimeException.class); - thrown.expectMessage("this API is unavailable due to config"); - blockingStubFull.getBlockByNum(message); + final NumberMessage message = NumberMessage.newBuilder().setNum(0).build(); + assertThrows("this API is unavailable due to config", StatusRuntimeException.class, + () -> blockingStubFull.getBlockByNum(message)); } @Test public void testRpcApiService() { RpcApiService rpcApiService = context.getBean(RpcApiService.class); - ServerCallStreamObserverTest serverCallStreamObserverTest = new ServerCallStreamObserverTest(); - rpcApiService.getBlockCommon(GrpcAPI.BlockReq.getDefaultInstance(), - serverCallStreamObserverTest); - Assert.assertTrue("Get block Common failed!", serverCallStreamObserverTest.isReady()); + ServerCallStreamObserverTest serverCallStreamObserverTest = + new ServerCallStreamObserverTest<>(); + ServerCallStreamObserverTest serverCallStreamObserverTest1 = + new ServerCallStreamObserverTest<>(); + ServerCallStreamObserverTest serverCallStreamObserverTest2 = + new ServerCallStreamObserverTest<>(); + ServerCallStreamObserverTest serverCallStreamObserverTest3 = + new ServerCallStreamObserverTest<>(); + rpcApiService.getBlockCommon(BlockReq.getDefaultInstance(), serverCallStreamObserverTest); + assertTrue("Get block Common failed!", serverCallStreamObserverTest.isReady()); serverCallStreamObserverTest.isCancelled(); - rpcApiService.getBrokerageInfoCommon(GrpcAPI.BytesMessage.newBuilder().build(), - serverCallStreamObserverTest); - Assert.assertTrue("Get brokerage info Common failed!", - serverCallStreamObserverTest.isReady()); + rpcApiService.getBrokerageInfoCommon(BytesMessage.newBuilder().build(), + serverCallStreamObserverTest1); + assertTrue("Get brokerage info Common failed!", + serverCallStreamObserverTest1.isReady()); serverCallStreamObserverTest.isCancelled(); - rpcApiService.getBurnTrxCommon(GrpcAPI.EmptyMessage.newBuilder().build(), - serverCallStreamObserverTest); - Assert.assertTrue("Get burn trx common failed!", - serverCallStreamObserverTest.isReady()); + rpcApiService.getBurnTrxCommon(EmptyMessage.newBuilder().build(), + serverCallStreamObserverTest1); + assertTrue("Get burn trx common failed!", + serverCallStreamObserverTest1.isReady()); serverCallStreamObserverTest.isCancelled(); - rpcApiService.getPendingSizeCommon(GrpcAPI.EmptyMessage.getDefaultInstance(), - serverCallStreamObserverTest); - Assert.assertTrue("Get pending size common failed!", - serverCallStreamObserverTest.isReady()); + rpcApiService.getPendingSizeCommon(EmptyMessage.getDefaultInstance(), + serverCallStreamObserverTest1); + assertTrue("Get pending size common failed!", + serverCallStreamObserverTest1.isReady()); serverCallStreamObserverTest.isCancelled(); - rpcApiService.getRewardInfoCommon(GrpcAPI.BytesMessage.newBuilder().build(), - serverCallStreamObserverTest); - Assert.assertTrue("Get reward info common failed!", - serverCallStreamObserverTest.isReady()); + rpcApiService.getRewardInfoCommon(BytesMessage.newBuilder().build(), + serverCallStreamObserverTest1); + assertTrue("Get reward info common failed!", + serverCallStreamObserverTest1.isReady()); serverCallStreamObserverTest.isCancelled(); rpcApiService.getTransactionCountByBlockNumCommon( - GrpcAPI.NumberMessage.newBuilder().getDefaultInstanceForType(), - serverCallStreamObserverTest); - Assert.assertTrue("Get transaction count by block num failed!", - serverCallStreamObserverTest.isReady()); + NumberMessage.newBuilder().getDefaultInstanceForType(), + serverCallStreamObserverTest1); + assertTrue("Get transaction count by block num failed!", + serverCallStreamObserverTest1.isReady()); serverCallStreamObserverTest.isCancelled(); - rpcApiService.getTransactionFromPendingCommon(GrpcAPI.BytesMessage.newBuilder().build(), - serverCallStreamObserverTest); - Assert.assertTrue("Get transaction from pending failed!", - serverCallStreamObserverTest.isReady() == false); + rpcApiService.getTransactionFromPendingCommon(BytesMessage.newBuilder().build(), + serverCallStreamObserverTest2); + assertFalse("Get transaction from pending failed!", + serverCallStreamObserverTest2.isReady()); serverCallStreamObserverTest.isCancelled(); - rpcApiService.getTransactionListFromPendingCommon(GrpcAPI.EmptyMessage.newBuilder() - .getDefaultInstanceForType(), serverCallStreamObserverTest); - Assert.assertTrue("Get transaction list from pending failed!", - serverCallStreamObserverTest.isReady()); + rpcApiService.getTransactionListFromPendingCommon(EmptyMessage.newBuilder() + .getDefaultInstanceForType(), serverCallStreamObserverTest3); + assertTrue("Get transaction list from pending failed!", + serverCallStreamObserverTest3.isReady()); } - - class ServerCallStreamObserverTest extends ServerCallStreamObserver { + static class ServerCallStreamObserverTest extends ServerCallStreamObserver { Object ret; @@ -223,10 +229,9 @@ public void testAccessDisabledSolidityNode() { disabledApiList.add("getblockbynum"); Args.getInstance().setDisabledApiList(disabledApiList); - final GrpcAPI.NumberMessage message = GrpcAPI.NumberMessage.newBuilder().setNum(0).build(); - thrown.expect(StatusRuntimeException.class); - thrown.expectMessage("this API is unavailable due to config"); - blockingStubSolidity.getBlockByNum(message); + final NumberMessage message = NumberMessage.newBuilder().setNum(0).build(); + assertThrows("this API is unavailable due to config", StatusRuntimeException.class, + () -> blockingStubSolidity.getBlockByNum(message)); } @Test @@ -236,20 +241,19 @@ public void testAccessDisabledPBFTNode() { disabledApiList.add("getblockbynum"); Args.getInstance().setDisabledApiList(disabledApiList); - final GrpcAPI.NumberMessage message = GrpcAPI.NumberMessage.newBuilder().setNum(0).build(); - thrown.expect(StatusRuntimeException.class); - thrown.expectMessage("this API is unavailable due to config"); - blockingStubPBFT.getBlockByNum(message); + final NumberMessage message = NumberMessage.newBuilder().setNum(0).build(); + assertThrows("this API is unavailable due to config", StatusRuntimeException.class, + () -> blockingStubPBFT.getBlockByNum(message)); } @Test public void testAccessNoDisabled() { Args.getInstance().setDisabledApiList(Collections.emptyList()); - final GrpcAPI.NumberMessage message = GrpcAPI.NumberMessage.newBuilder().setNum(0).build(); - Assert.assertNotNull(blockingStubFull.getBlockByNum(message)); - Assert.assertNotNull(blockingStubSolidity.getBlockByNum(message)); - Assert.assertNotNull(blockingStubPBFT.getBlockByNum(message)); + final NumberMessage message = NumberMessage.newBuilder().setNum(0).build(); + assertNotNull(blockingStubFull.getBlockByNum(message)); + assertNotNull(blockingStubSolidity.getBlockByNum(message)); + assertNotNull(blockingStubPBFT.getBlockByNum(message)); } @Test @@ -258,10 +262,32 @@ public void testAccessDisabledNotIncluded() { disabledApiList.add("getaccount"); Args.getInstance().setDisabledApiList(disabledApiList); - final GrpcAPI.NumberMessage message = GrpcAPI.NumberMessage.newBuilder().setNum(0).build(); - Assert.assertNotNull(blockingStubFull.getBlockByNum(message)); - Assert.assertNotNull(blockingStubSolidity.getBlockByNum(message)); - Assert.assertNotNull(blockingStubPBFT.getBlockByNum(message)); + final NumberMessage message = NumberMessage.newBuilder().setNum(0).build(); + assertNotNull(blockingStubFull.getBlockByNum(message)); + assertNotNull(blockingStubSolidity.getBlockByNum(message)); + assertNotNull(blockingStubPBFT.getBlockByNum(message)); + } + + @Test + public void testGetBandwidthPrices() { + EmptyMessage message = EmptyMessage.newBuilder().build(); + assertNotNull(blockingStubFull.getBandwidthPrices(message)); + assertNotNull(blockingStubSolidity.getBandwidthPrices(message)); + assertNotNull(blockingStubPBFT.getBandwidthPrices(message)); + } + + @Test + public void testGetEnergyPrices() { + EmptyMessage message = EmptyMessage.newBuilder().build(); + assertNotNull(blockingStubFull.getEnergyPrices(message)); + assertNotNull(blockingStubSolidity.getEnergyPrices(message)); + assertNotNull(blockingStubPBFT.getEnergyPrices(message)); + } + + @Test + public void testGetMemoFee() { + EmptyMessage message = EmptyMessage.newBuilder().build(); + assertNotNull(blockingStubFull.getMemoFee(message)); } } diff --git a/framework/src/test/java/org/tron/core/services/http/GetBandwidthPricesServletTest.java b/framework/src/test/java/org/tron/core/services/http/GetBandwidthPricesServletTest.java new file mode 100644 index 00000000000..90d2794be9a --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/GetBandwidthPricesServletTest.java @@ -0,0 +1,62 @@ +package org.tron.core.services.http; + +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; +import static org.tron.common.utils.client.utils.HttpMethed.createRequest; + +import com.alibaba.fastjson.JSONObject; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import javax.annotation.Resource; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.junit.BeforeClass; +import org.junit.ClassRule; +import org.junit.Test; +import org.junit.rules.TemporaryFolder; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.tron.common.BaseTest; +import org.tron.core.Constant; +import org.tron.core.config.args.Args; + +public class GetBandwidthPricesServletTest extends BaseTest { + + @ClassRule + public static final TemporaryFolder temporaryFolder = new TemporaryFolder(); + @Resource + private GetBandwidthPricesServlet getBandwidthPricesServlet; + + @BeforeClass + public static void init() throws IOException { + Args.setParam(new String[]{"-d", temporaryFolder.newFolder().toString()}, Constant.TEST_CONF); + } + + @Test + public void testGet() { + MockHttpServletRequest request = createRequest(HttpGet.METHOD_NAME); + MockHttpServletResponse response = new MockHttpServletResponse(); + getBandwidthPricesServlet.doPost(request, response); + try { + String contentAsString = response.getContentAsString(); + JSONObject result = JSONObject.parseObject(contentAsString); + assertTrue(result.containsKey("prices")); + } catch (UnsupportedEncodingException e) { + fail(e.getMessage()); + } + } + + @Test + public void testPost() { + MockHttpServletRequest request = createRequest(HttpPost.METHOD_NAME); + try { + MockHttpServletResponse response = new MockHttpServletResponse(); + getBandwidthPricesServlet.doPost(request, response); + String contentAsString = response.getContentAsString(); + JSONObject result = JSONObject.parseObject(contentAsString); + assertTrue(result.containsKey("prices")); + } catch (UnsupportedEncodingException e) { + fail(e.getMessage()); + } + } +} diff --git a/framework/src/test/java/org/tron/core/services/http/GetEnergyPricesServletTest.java b/framework/src/test/java/org/tron/core/services/http/GetEnergyPricesServletTest.java new file mode 100644 index 00000000000..391f2c2d4a7 --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/GetEnergyPricesServletTest.java @@ -0,0 +1,62 @@ +package org.tron.core.services.http; + +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; +import static org.tron.common.utils.client.utils.HttpMethed.createRequest; + +import com.alibaba.fastjson.JSONObject; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import javax.annotation.Resource; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.junit.BeforeClass; +import org.junit.ClassRule; +import org.junit.Test; +import org.junit.rules.TemporaryFolder; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.tron.common.BaseTest; +import org.tron.core.Constant; +import org.tron.core.config.args.Args; + +public class GetEnergyPricesServletTest extends BaseTest { + + @ClassRule + public static final TemporaryFolder temporaryFolder = new TemporaryFolder(); + @Resource + private GetEnergyPricesServlet getEnergyPricesServlet; + + @BeforeClass + public static void init() throws IOException { + Args.setParam(new String[]{"-d", temporaryFolder.newFolder().toString()}, Constant.TEST_CONF); + } + + @Test + public void testGet() { + MockHttpServletRequest request = createRequest(HttpGet.METHOD_NAME); + MockHttpServletResponse response = new MockHttpServletResponse(); + getEnergyPricesServlet.doPost(request, response); + try { + String contentAsString = response.getContentAsString(); + JSONObject result = JSONObject.parseObject(contentAsString); + assertTrue(result.containsKey("prices")); + } catch (UnsupportedEncodingException e) { + fail(e.getMessage()); + } + } + + @Test + public void testPost() { + MockHttpServletRequest request = createRequest(HttpPost.METHOD_NAME); + try { + MockHttpServletResponse response = new MockHttpServletResponse(); + getEnergyPricesServlet.doPost(request, response); + String contentAsString = response.getContentAsString(); + JSONObject result = JSONObject.parseObject(contentAsString); + assertTrue(result.containsKey("prices")); + } catch (UnsupportedEncodingException e) { + fail(e.getMessage()); + } + } +} diff --git a/framework/src/test/java/org/tron/core/services/http/GetMemoFeePricesServletTest.java b/framework/src/test/java/org/tron/core/services/http/GetMemoFeePricesServletTest.java new file mode 100644 index 00000000000..cdfb32cb411 --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/GetMemoFeePricesServletTest.java @@ -0,0 +1,62 @@ +package org.tron.core.services.http; + +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; +import static org.tron.common.utils.client.utils.HttpMethed.createRequest; + +import com.alibaba.fastjson.JSONObject; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import javax.annotation.Resource; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.junit.BeforeClass; +import org.junit.ClassRule; +import org.junit.Test; +import org.junit.rules.TemporaryFolder; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.tron.common.BaseTest; +import org.tron.core.Constant; +import org.tron.core.config.args.Args; + +public class GetMemoFeePricesServletTest extends BaseTest { + + @ClassRule + public static final TemporaryFolder temporaryFolder = new TemporaryFolder(); + @Resource + private GetMemoFeePricesServlet getMemoFeePricesServlet; + + @BeforeClass + public static void init() throws IOException { + Args.setParam(new String[]{"-d", temporaryFolder.newFolder().toString()}, Constant.TEST_CONF); + } + + @Test + public void testGet() { + MockHttpServletRequest request = createRequest(HttpGet.METHOD_NAME); + MockHttpServletResponse response = new MockHttpServletResponse(); + getMemoFeePricesServlet.doPost(request, response); + try { + String contentAsString = response.getContentAsString(); + JSONObject result = JSONObject.parseObject(contentAsString); + assertTrue(result.containsKey("prices")); + } catch (UnsupportedEncodingException e) { + fail(e.getMessage()); + } + } + + @Test + public void testPost() { + MockHttpServletRequest request = createRequest(HttpPost.METHOD_NAME); + try { + MockHttpServletResponse response = new MockHttpServletResponse(); + getMemoFeePricesServlet.doPost(request, response); + String contentAsString = response.getContentAsString(); + JSONObject result = JSONObject.parseObject(contentAsString); + assertTrue(result.containsKey("prices")); + } catch (UnsupportedEncodingException e) { + fail(e.getMessage()); + } + } +} diff --git a/protocol/src/main/protos/api/api.proto b/protocol/src/main/protos/api/api.proto index d23d6e01729..9a7534cf6ce 100644 --- a/protocol/src/main/protos/api/api.proto +++ b/protocol/src/main/protos/api/api.proto @@ -767,6 +767,15 @@ service Wallet { rpc GetBlock (BlockReq) returns (BlockExtention) { } + + rpc GetBandwidthPrices (EmptyMessage) returns (PricesResponseMessage) { + } + + rpc GetEnergyPrices (EmptyMessage) returns (PricesResponseMessage) { + } + + rpc GetMemoFee (EmptyMessage) returns (PricesResponseMessage) { + } }; service WalletSolidity { @@ -963,6 +972,11 @@ service WalletSolidity { } rpc GetBlock (BlockReq) returns (BlockExtention) { } + rpc GetBandwidthPrices (EmptyMessage) returns (PricesResponseMessage) { + } + + rpc GetEnergyPrices (EmptyMessage) returns (PricesResponseMessage) { + } }; service WalletExtension { @@ -1107,6 +1121,10 @@ message CanWithdrawUnfreezeAmountResponseMessage { int64 amount = 1; } +message PricesResponseMessage { + string prices = 1; +} + // Gossip node list message NodeList { repeated Node nodes = 1;