From 029c0408c1341d1c449f7bc96de477d3572d8acd Mon Sep 17 00:00:00 2001 From: forfreeday Date: Fri, 14 Jul 2023 20:14:58 +0800 Subject: [PATCH 01/12] feat(Servlet): Optimize Http Servlet 1. Optimized Util getAddress method 2. add `GetBrokerageServletTest` test case 3. add `GetRewardServletTest` test case --- framework/build.gradle | 1 + .../org/tron/core/services/http/Util.java | 7 +++ .../http/GetBrokerageServletTest.java | 43 +++++++++++++++++++ .../services/http/GetRewardServletTest.java | 43 +++++++++++++++++++ 4 files changed, 94 insertions(+) create mode 100644 framework/src/test/java/org/tron/core/services/http/GetBrokerageServletTest.java create mode 100644 framework/src/test/java/org/tron/core/services/http/GetRewardServletTest.java diff --git a/framework/build.gradle b/framework/build.gradle index d3e13ac0a7e..fbc91e7d516 100644 --- a/framework/build.gradle +++ b/framework/build.gradle @@ -85,6 +85,7 @@ dependencies { compile group: 'org.pf4j', name: 'pf4j', version: '2.5.0' testImplementation group: 'org.springframework', name: 'spring-test', version: '5.2.0.RELEASE' + testImplementation group: 'org.springframework', name: 'spring-web', version: '5.2.0.RELEASE' compile group: 'org.zeromq', name: 'jeromq', version: '0.5.3' compile project(":chainbase") diff --git a/framework/src/main/java/org/tron/core/services/http/Util.java b/framework/src/main/java/org/tron/core/services/http/Util.java index 2cbf5d2e718..489e6bc0cd3 100644 --- a/framework/src/main/java/org/tron/core/services/http/Util.java +++ b/framework/src/main/java/org/tron/core/services/http/Util.java @@ -70,6 +70,7 @@ public class Util { public static final String FUNCTION_SELECTOR = "function_selector"; public static final String FUNCTION_PARAMETER = "parameter"; public static final String CALL_DATA = "data"; + public static final String APPLICATION_FORM_URLENCODED = "application/x-www-form-urlencoded"; public static String printTransactionFee(String transactionFee) { JSONObject jsonObject = new JSONObject(); @@ -499,6 +500,12 @@ public static byte[] getAddress(HttpServletRequest request) throws Exception { byte[] address = null; String addressParam = "address"; String addressStr = request.getParameter(addressParam); + + if (APPLICATION_FORM_URLENCODED.equals(request.getContentType()) + && StringUtils.isBlank(addressStr)) { + throw new IllegalArgumentException("invalid request parameter"); + } + if (StringUtils.isBlank(addressStr)) { String input = request.getReader().lines() .collect(Collectors.joining(System.lineSeparator())); diff --git a/framework/src/test/java/org/tron/core/services/http/GetBrokerageServletTest.java b/framework/src/test/java/org/tron/core/services/http/GetBrokerageServletTest.java new file mode 100644 index 00000000000..11a07dd8022 --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/GetBrokerageServletTest.java @@ -0,0 +1,43 @@ +package org.tron.core.services.http; + +import static org.junit.Assert.assertEquals; + +import com.alibaba.fastjson.JSONObject; + +import java.io.UnsupportedEncodingException; + +import org.junit.Before; +import org.junit.Test; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; + +public class GetBrokerageServletTest { + + private MockHttpServletRequest request; + private MockHttpServletResponse response; + + @Before + public void setUp() { + request = new MockHttpServletRequest(); + request.setMethod("POST"); + request.setContentType("application/x-www-form-urlencoded"); + request.setCharacterEncoding("UTF-8"); + + response = new MockHttpServletResponse(); + } + + @Test + public void getBrokerageTest() { + request.addParameter("address", ""); + GetRewardServlet getRewardServlet = new GetRewardServlet(); + getRewardServlet.doPost(request, response); + try { + String contentAsString = response.getContentAsString(); + JSONObject result = JSONObject.parseObject(contentAsString); + String content = (String) result.get("Error"); + assertEquals(content, "INVALID address, invalid request parameter"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + } +} diff --git a/framework/src/test/java/org/tron/core/services/http/GetRewardServletTest.java b/framework/src/test/java/org/tron/core/services/http/GetRewardServletTest.java new file mode 100644 index 00000000000..b91583e185a --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/GetRewardServletTest.java @@ -0,0 +1,43 @@ +package org.tron.core.services.http; + +import static org.junit.Assert.assertEquals; + +import com.alibaba.fastjson.JSONObject; + +import java.io.UnsupportedEncodingException; + +import org.junit.Before; +import org.junit.Test; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; + +public class GetRewardServletTest { + + private MockHttpServletRequest request; + private MockHttpServletResponse response; + + @Before + public void setUp() { + request = new MockHttpServletRequest(); + request.setMethod("POST"); + request.setContentType("application/x-www-form-urlencoded"); + request.setCharacterEncoding("UTF-8"); + + response = new MockHttpServletResponse(); + } + + @Test + public void getRewardTest() { + request.addParameter("address", ""); + GetRewardServlet getRewardServlet = new GetRewardServlet(); + getRewardServlet.doPost(request, response); + try { + String contentAsString = response.getContentAsString(); + JSONObject result = JSONObject.parseObject(contentAsString); + String content = (String) result.get("Error"); + assertEquals(content, "INVALID address, invalid request parameter"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + } +} From 9003b0ee45b135f8cb782c11de86cd783cc76bd9 Mon Sep 17 00:00:00 2001 From: liukai Date: Fri, 28 Jul 2023 12:16:36 +0800 Subject: [PATCH 02/12] feat(util): optimization parameter check 1. add parameter checking methods --- .../org/tron/core/services/http/Util.java | 76 +++++++++++++++---- 1 file changed, 60 insertions(+), 16 deletions(-) diff --git a/framework/src/main/java/org/tron/core/services/http/Util.java b/framework/src/main/java/org/tron/core/services/http/Util.java index 489e6bc0cd3..514797851b8 100644 --- a/framework/src/main/java/org/tron/core/services/http/Util.java +++ b/framework/src/main/java/org/tron/core/services/http/Util.java @@ -11,19 +11,26 @@ import com.google.protobuf.GeneratedMessageV3; import com.google.protobuf.InvalidProtocolBufferException; import com.google.protobuf.Message; + +import java.io.BufferedReader; import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; import java.lang.reflect.Constructor; import java.math.BigDecimal; +import java.net.HttpURLConnection; import java.nio.charset.Charset; import java.security.InvalidParameterException; import java.util.ArrayList; import java.util.List; +import java.util.Locale; import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.bouncycastle.util.encoders.Hex; +import org.eclipse.jetty.http.HttpMethod; import org.eclipse.jetty.util.StringUtil; import org.tron.api.GrpcAPI; import org.tron.api.GrpcAPI.BlockList; @@ -71,6 +78,7 @@ public class Util { public static final String FUNCTION_PARAMETER = "parameter"; public static final String CALL_DATA = "data"; public static final String APPLICATION_FORM_URLENCODED = "application/x-www-form-urlencoded"; + public static final String APPLICATION_JSON = "application/json"; public static String printTransactionFee(String transactionFee) { JSONObject jsonObject = new JSONObject(); @@ -499,22 +507,7 @@ public static void printAccount(Account reply, HttpServletResponse response, Boo public static byte[] getAddress(HttpServletRequest request) throws Exception { byte[] address = null; String addressParam = "address"; - String addressStr = request.getParameter(addressParam); - - if (APPLICATION_FORM_URLENCODED.equals(request.getContentType()) - && StringUtils.isBlank(addressStr)) { - throw new IllegalArgumentException("invalid request parameter"); - } - - if (StringUtils.isBlank(addressStr)) { - String input = request.getReader().lines() - .collect(Collectors.joining(System.lineSeparator())); - Util.checkBodySize(input); - JSONObject jsonObject = JSON.parseObject(input); - if (jsonObject != null) { - addressStr = jsonObject.getString(addressParam); - } - } + String addressStr = checkGetParam(request, addressParam); if (StringUtils.isNotBlank(addressStr)) { if (StringUtils.startsWith(addressStr, Constant.ADD_PRE_FIX_STRING_MAINNET)) { address = Hex.decode(addressStr); @@ -525,6 +518,57 @@ public static byte[] getAddress(HttpServletRequest request) throws Exception { return address; } + private static String checkGetParam(HttpServletRequest request, String key) throws Exception { + String method = request.getMethod(); + String value; + + if (HttpMethod.GET.toString().toUpperCase() .equalsIgnoreCase(method)) { + value = request.getParameter(key); + if (StringUtils.isBlank(value)) { + throw new IllegalArgumentException("Invalid request parameter"); + } + return value; + } else if (HttpMethod.POST.toString().toUpperCase().equals(method)) { + String contentType = request.getContentType(); + if (StringUtils.isBlank(contentType)) { + throw new IllegalArgumentException("Invalid request parameter"); + } + if (APPLICATION_JSON.toLowerCase().contains(contentType)){ + value = getValue(request); + if (StringUtils.isBlank(value)) { + return null; + } + + JSONObject jsonObject = JSON.parseObject(value); + if (jsonObject != null) { + return jsonObject.getString(key); + } + } else if (APPLICATION_FORM_URLENCODED.toLowerCase().contains(contentType)) { + value = getValue(request); + String[] keyValue = value.split("="); + if (keyValue.length <= 1) { + throw new IllegalArgumentException("Invalid request parameter"); + } + if (keyValue[0].equals("address")) { + return keyValue[1]; + } + } else { + throw new IllegalArgumentException("Invalid request types"); + } + } + return null; + } + + public static String getValue(HttpServletRequest request) throws IOException { + BufferedReader reader = new BufferedReader(new InputStreamReader(request.getInputStream())); + String line; + StringBuilder sb = new StringBuilder(); + while ((line = reader.readLine()) != null) { + sb.append(line); + } + return sb.toString(); + } + public static List convertLogAddressToTronAddress(TransactionInfo transactionInfo) { List newLogList = new ArrayList<>(); From 0bcaaad77d458a0b3c223bf04b61e3bf0d6fa289 Mon Sep 17 00:00:00 2001 From: liukai Date: Wed, 9 Aug 2023 15:16:15 +0800 Subject: [PATCH 03/12] feat(Servlet): Optimize request parameter fetching --- .../org/tron/core/services/http/Util.java | 44 +++++++++++-------- 1 file changed, 25 insertions(+), 19 deletions(-) diff --git a/framework/src/main/java/org/tron/core/services/http/Util.java b/framework/src/main/java/org/tron/core/services/http/Util.java index 514797851b8..568d768bef6 100644 --- a/framework/src/main/java/org/tron/core/services/http/Util.java +++ b/framework/src/main/java/org/tron/core/services/http/Util.java @@ -14,17 +14,13 @@ import java.io.BufferedReader; import java.io.IOException; -import java.io.InputStream; import java.io.InputStreamReader; import java.lang.reflect.Constructor; import java.math.BigDecimal; -import java.net.HttpURLConnection; import java.nio.charset.Charset; import java.security.InvalidParameterException; import java.util.ArrayList; import java.util.List; -import java.util.Locale; -import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; @@ -520,21 +516,17 @@ public static byte[] getAddress(HttpServletRequest request) throws Exception { private static String checkGetParam(HttpServletRequest request, String key) throws Exception { String method = request.getMethod(); - String value; + String value = null; if (HttpMethod.GET.toString().toUpperCase() .equalsIgnoreCase(method)) { - value = request.getParameter(key); - if (StringUtils.isBlank(value)) { - throw new IllegalArgumentException("Invalid request parameter"); - } - return value; + return request.getParameter(key); } else if (HttpMethod.POST.toString().toUpperCase().equals(method)) { String contentType = request.getContentType(); if (StringUtils.isBlank(contentType)) { throw new IllegalArgumentException("Invalid request parameter"); } if (APPLICATION_JSON.toLowerCase().contains(contentType)){ - value = getValue(request); + value = getRequestValue(request); if (StringUtils.isBlank(value)) { return null; } @@ -544,22 +536,36 @@ private static String checkGetParam(HttpServletRequest request, String key) thro return jsonObject.getString(key); } } else if (APPLICATION_FORM_URLENCODED.toLowerCase().contains(contentType)) { - value = getValue(request); - String[] keyValue = value.split("="); - if (keyValue.length <= 1) { - throw new IllegalArgumentException("Invalid request parameter"); + return getParam(getRequestValue(request)); + } else { + return null; + } + } + return value; + } + + private static String getParam(String requestParam) { + String[] params = requestParam.split("&"); + if (params.length == 0) { + String[] keyValue = requestParam.split("="); + if (keyValue.length <= 1) { + return null; + } + return keyValue[1]; + } else { + for (String param : params) { + String[] keyValue = param.split("="); + if (keyValue.length == 1) { + continue; } if (keyValue[0].equals("address")) { return keyValue[1]; } - } else { - throw new IllegalArgumentException("Invalid request types"); } } return null; } - - public static String getValue(HttpServletRequest request) throws IOException { + public static String getRequestValue(HttpServletRequest request) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(request.getInputStream())); String line; StringBuilder sb = new StringBuilder(); From 0664c4a403e6fe9e6819744993fd5414449c4f84 Mon Sep 17 00:00:00 2001 From: liukai Date: Wed, 9 Aug 2023 15:55:51 +0800 Subject: [PATCH 04/12] test(Servlet): modify assertion conditions --- .../tron/core/services/http/GetBrokerageServletTest.java | 5 ++++- .../org/tron/core/services/http/GetRewardServletTest.java | 7 ++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/framework/src/test/java/org/tron/core/services/http/GetBrokerageServletTest.java b/framework/src/test/java/org/tron/core/services/http/GetBrokerageServletTest.java index 11a07dd8022..33e42f096e9 100644 --- a/framework/src/test/java/org/tron/core/services/http/GetBrokerageServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/GetBrokerageServletTest.java @@ -6,6 +6,7 @@ import java.io.UnsupportedEncodingException; +import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.springframework.mock.web.MockHttpServletRequest; @@ -34,8 +35,10 @@ public void getBrokerageTest() { try { String contentAsString = response.getContentAsString(); JSONObject result = JSONObject.parseObject(contentAsString); + int reward = (int)result.get("reward"); + Assert.assertEquals(0, reward); String content = (String) result.get("Error"); - assertEquals(content, "INVALID address, invalid request parameter"); + Assert.assertNull(content); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } diff --git a/framework/src/test/java/org/tron/core/services/http/GetRewardServletTest.java b/framework/src/test/java/org/tron/core/services/http/GetRewardServletTest.java index b91583e185a..2e98c1c9dd5 100644 --- a/framework/src/test/java/org/tron/core/services/http/GetRewardServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/GetRewardServletTest.java @@ -1,11 +1,10 @@ package org.tron.core.services.http; -import static org.junit.Assert.assertEquals; - import com.alibaba.fastjson.JSONObject; import java.io.UnsupportedEncodingException; +import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.springframework.mock.web.MockHttpServletRequest; @@ -34,8 +33,10 @@ public void getRewardTest() { try { String contentAsString = response.getContentAsString(); JSONObject result = JSONObject.parseObject(contentAsString); + int reward = (int)result.get("reward"); + Assert.assertEquals(0, reward); String content = (String) result.get("Error"); - assertEquals(content, "INVALID address, invalid request parameter"); + Assert.assertNull(content); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } From e404b18a93f10338babbfa015290954ec5502981 Mon Sep 17 00:00:00 2001 From: liukai Date: Wed, 9 Aug 2023 16:51:51 +0800 Subject: [PATCH 05/12] feat(Util): Optimize of the method into the parameter --- .../src/main/java/org/tron/core/services/http/Util.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/framework/src/main/java/org/tron/core/services/http/Util.java b/framework/src/main/java/org/tron/core/services/http/Util.java index 568d768bef6..2fec5d5a316 100644 --- a/framework/src/main/java/org/tron/core/services/http/Util.java +++ b/framework/src/main/java/org/tron/core/services/http/Util.java @@ -536,7 +536,7 @@ private static String checkGetParam(HttpServletRequest request, String key) thro return jsonObject.getString(key); } } else if (APPLICATION_FORM_URLENCODED.toLowerCase().contains(contentType)) { - return getParam(getRequestValue(request)); + return getParam(getRequestValue(request), key); } else { return null; } @@ -544,7 +544,7 @@ private static String checkGetParam(HttpServletRequest request, String key) thro return value; } - private static String getParam(String requestParam) { + private static String getParam(String requestParam, String key) { String[] params = requestParam.split("&"); if (params.length == 0) { String[] keyValue = requestParam.split("="); @@ -558,7 +558,7 @@ private static String getParam(String requestParam) { if (keyValue.length == 1) { continue; } - if (keyValue[0].equals("address")) { + if (keyValue[0].equals(key)) { return keyValue[1]; } } From b1a28701c37a31a09c7583b9758a830f4d51252e Mon Sep 17 00:00:00 2001 From: liukai Date: Wed, 9 Aug 2023 17:36:33 +0800 Subject: [PATCH 06/12] feat(Util): simplified return logic --- .../org/tron/core/services/http/Util.java | 26 +++---------------- 1 file changed, 3 insertions(+), 23 deletions(-) diff --git a/framework/src/main/java/org/tron/core/services/http/Util.java b/framework/src/main/java/org/tron/core/services/http/Util.java index 2fec5d5a316..de4209b9f87 100644 --- a/framework/src/main/java/org/tron/core/services/http/Util.java +++ b/framework/src/main/java/org/tron/core/services/http/Util.java @@ -520,7 +520,8 @@ private static String checkGetParam(HttpServletRequest request, String key) thro if (HttpMethod.GET.toString().toUpperCase() .equalsIgnoreCase(method)) { return request.getParameter(key); - } else if (HttpMethod.POST.toString().toUpperCase().equals(method)) { + } + if (HttpMethod.POST.toString().toUpperCase().equals(method)) { String contentType = request.getContentType(); if (StringUtils.isBlank(contentType)) { throw new IllegalArgumentException("Invalid request parameter"); @@ -536,7 +537,7 @@ private static String checkGetParam(HttpServletRequest request, String key) thro return jsonObject.getString(key); } } else if (APPLICATION_FORM_URLENCODED.toLowerCase().contains(contentType)) { - return getParam(getRequestValue(request), key); + return request.getParameter(key); } else { return null; } @@ -544,27 +545,6 @@ private static String checkGetParam(HttpServletRequest request, String key) thro return value; } - private static String getParam(String requestParam, String key) { - String[] params = requestParam.split("&"); - if (params.length == 0) { - String[] keyValue = requestParam.split("="); - if (keyValue.length <= 1) { - return null; - } - return keyValue[1]; - } else { - for (String param : params) { - String[] keyValue = param.split("="); - if (keyValue.length == 1) { - continue; - } - if (keyValue[0].equals(key)) { - return keyValue[1]; - } - } - } - return null; - } public static String getRequestValue(HttpServletRequest request) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(request.getInputStream())); String line; From 8bad3048ab3b094d7fe220deb82256687207265a Mon Sep 17 00:00:00 2001 From: liukai Date: Wed, 9 Aug 2023 18:01:39 +0800 Subject: [PATCH 07/12] feat(Util): remove Content-type checksums --- framework/src/main/java/org/tron/core/services/http/Util.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/src/main/java/org/tron/core/services/http/Util.java b/framework/src/main/java/org/tron/core/services/http/Util.java index de4209b9f87..a03fd274964 100644 --- a/framework/src/main/java/org/tron/core/services/http/Util.java +++ b/framework/src/main/java/org/tron/core/services/http/Util.java @@ -524,7 +524,7 @@ private static String checkGetParam(HttpServletRequest request, String key) thro if (HttpMethod.POST.toString().toUpperCase().equals(method)) { String contentType = request.getContentType(); if (StringUtils.isBlank(contentType)) { - throw new IllegalArgumentException("Invalid request parameter"); + return null; } if (APPLICATION_JSON.toLowerCase().contains(contentType)){ value = getRequestValue(request); From b3400dfed327b8bbbbe68880d9f1567fc5758495 Mon Sep 17 00:00:00 2001 From: liukai Date: Wed, 9 Aug 2023 21:56:30 +0800 Subject: [PATCH 08/12] feat(Util): fix codeStyle --- framework/src/main/java/org/tron/core/services/http/Util.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/framework/src/main/java/org/tron/core/services/http/Util.java b/framework/src/main/java/org/tron/core/services/http/Util.java index a03fd274964..06c4f8ef26a 100644 --- a/framework/src/main/java/org/tron/core/services/http/Util.java +++ b/framework/src/main/java/org/tron/core/services/http/Util.java @@ -518,7 +518,7 @@ private static String checkGetParam(HttpServletRequest request, String key) thro String method = request.getMethod(); String value = null; - if (HttpMethod.GET.toString().toUpperCase() .equalsIgnoreCase(method)) { + if (HttpMethod.GET.toString().toUpperCase().equalsIgnoreCase(method)) { return request.getParameter(key); } if (HttpMethod.POST.toString().toUpperCase().equals(method)) { @@ -526,7 +526,7 @@ private static String checkGetParam(HttpServletRequest request, String key) thro if (StringUtils.isBlank(contentType)) { return null; } - if (APPLICATION_JSON.toLowerCase().contains(contentType)){ + if (APPLICATION_JSON.toLowerCase().contains(contentType)) { value = getRequestValue(request); if (StringUtils.isBlank(value)) { return null; From 75d832e2391ac789d32354543ee379f34eb05878 Mon Sep 17 00:00:00 2001 From: liukai Date: Mon, 14 Aug 2023 19:32:51 +0800 Subject: [PATCH 09/12] test(case): add routine use cases --- .../http/GetBrokerageServletTest.java | 46 ++++++++++++--- .../services/http/GetRewardServletTest.java | 58 ++++++++++++++++++- 2 files changed, 94 insertions(+), 10 deletions(-) diff --git a/framework/src/test/java/org/tron/core/services/http/GetBrokerageServletTest.java b/framework/src/test/java/org/tron/core/services/http/GetBrokerageServletTest.java index 33e42f096e9..743946f6bd7 100644 --- a/framework/src/test/java/org/tron/core/services/http/GetBrokerageServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/GetBrokerageServletTest.java @@ -1,22 +1,37 @@ package org.tron.core.services.http; -import static org.junit.Assert.assertEquals; - import com.alibaba.fastjson.JSONObject; import java.io.UnsupportedEncodingException; +import javax.annotation.Resource; import org.junit.Assert; import org.junit.Before; import org.junit.Test; 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 GetBrokerageServletTest { +public class GetBrokerageServletTest extends BaseTest { private MockHttpServletRequest request; private MockHttpServletResponse response; + @Resource + private GetBrokerageServlet getBrokerageServlet; + + + static { + dbPath = "db_GetBrokerageServlet_test"; + Args.setParam( + new String[]{ + "--output-directory", dbPath, + }, Constant.TEST_CONF + ); + } + @Before public void setUp() { request = new MockHttpServletRequest(); @@ -27,20 +42,35 @@ public void setUp() { response = new MockHttpServletResponse(); } + @Test + public void getBrokerageValueTest() { + int expect = 20; + request.addParameter("address", "27VZHn9PFZwNh7o2EporxmLkpe157iWZVkh"); + getBrokerageServlet.doPost(request, response); + try { + String contentAsString = response.getContentAsString(); + JSONObject result = JSONObject.parseObject(contentAsString); + int brokerage = (int)result.get("brokerage"); + Assert.assertEquals(expect, brokerage); + } catch (UnsupportedEncodingException e) { + Assert.fail(e.getMessage()); + } + } + @Test public void getBrokerageTest() { + int expect = 0; request.addParameter("address", ""); - GetRewardServlet getRewardServlet = new GetRewardServlet(); - getRewardServlet.doPost(request, response); + getBrokerageServlet.doPost(request, response); try { String contentAsString = response.getContentAsString(); JSONObject result = JSONObject.parseObject(contentAsString); - int reward = (int)result.get("reward"); - Assert.assertEquals(0, reward); + int brokerage = (int)result.get("brokerage"); + Assert.assertEquals(expect, brokerage); String content = (String) result.get("Error"); Assert.assertNull(content); } catch (UnsupportedEncodingException e) { - e.printStackTrace(); + Assert.fail(e.getMessage()); } } } diff --git a/framework/src/test/java/org/tron/core/services/http/GetRewardServletTest.java b/framework/src/test/java/org/tron/core/services/http/GetRewardServletTest.java index 2e98c1c9dd5..adff7f21827 100644 --- a/framework/src/test/java/org/tron/core/services/http/GetRewardServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/GetRewardServletTest.java @@ -1,20 +1,50 @@ package org.tron.core.services.http; +import static org.tron.common.utils.Commons.decodeFromBase58Check; + import com.alibaba.fastjson.JSONObject; import java.io.UnsupportedEncodingException; +import javax.annotation.Resource; import org.junit.Assert; import org.junit.Before; import org.junit.Test; 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; +import org.tron.core.db.Manager; +import org.tron.core.service.MortgageService; +import org.tron.core.store.DelegationStore; -public class GetRewardServletTest { +public class GetRewardServletTest extends BaseTest { private MockHttpServletRequest request; private MockHttpServletResponse response; + @Resource + private Manager manager; + + @Resource + private MortgageService mortgageService; + + @Resource + private DelegationStore delegationStore; + + @Resource + GetRewardServlet getRewardServlet; + + static { + dbPath = "db_GetRewardServlet_test"; + Args.setParam( + new String[]{ + "--output-directory", dbPath, + }, Constant.TEST_CONF + ); + } + @Before public void setUp() { request = new MockHttpServletRequest(); @@ -25,6 +55,30 @@ public void setUp() { response = new MockHttpServletResponse(); } + public void init() { + manager.getDynamicPropertiesStore().saveChangeDelegation(1); + byte[] sr = decodeFromBase58Check("27VZHn9PFZwNh7o2EporxmLkpe157iWZVkh"); + delegationStore.setBrokerage(0, sr, 10); + delegationStore.setWitnessVote(0, sr, 100000000); + } + + @Test + public void getRewardValueTest() { + init(); + int expect = 138181; + mortgageService.payStandbyWitness(); + request.addParameter("address", "27VZHn9PFZwNh7o2EporxmLkpe157iWZVkh"); + getRewardServlet.doPost(request, response); + try { + String contentAsString = response.getContentAsString(); + JSONObject result = JSONObject.parseObject(contentAsString); + int reward = (int)result.get("reward"); + Assert.assertEquals(expect, reward); + } catch (UnsupportedEncodingException e) { + Assert.fail(e.getMessage()); + } + } + @Test public void getRewardTest() { request.addParameter("address", ""); @@ -38,7 +92,7 @@ public void getRewardTest() { String content = (String) result.get("Error"); Assert.assertNull(content); } catch (UnsupportedEncodingException e) { - e.printStackTrace(); + Assert.fail(e.getMessage()); } } } From 304dba489f9c8d81867dace69f9636187795fd37 Mon Sep 17 00:00:00 2001 From: liukai Date: Tue, 15 Aug 2023 14:32:34 +0800 Subject: [PATCH 10/12] test(case): add json case --- .../http/GetBrokerageServletTest.java | 37 +++++++++---- .../services/http/GetRewardServletTest.java | 52 +++++++++++++++---- 2 files changed, 67 insertions(+), 22 deletions(-) diff --git a/framework/src/test/java/org/tron/core/services/http/GetBrokerageServletTest.java b/framework/src/test/java/org/tron/core/services/http/GetBrokerageServletTest.java index 743946f6bd7..898108d0dcd 100644 --- a/framework/src/test/java/org/tron/core/services/http/GetBrokerageServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/GetBrokerageServletTest.java @@ -6,7 +6,6 @@ import javax.annotation.Resource; import org.junit.Assert; -import org.junit.Before; import org.junit.Test; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.mock.web.MockHttpServletResponse; @@ -16,13 +15,9 @@ public class GetBrokerageServletTest extends BaseTest { - private MockHttpServletRequest request; - private MockHttpServletResponse response; - @Resource private GetBrokerageServlet getBrokerageServlet; - static { dbPath = "db_GetBrokerageServlet_test"; Args.setParam( @@ -32,20 +27,38 @@ public class GetBrokerageServletTest extends BaseTest { ); } - @Before - public void setUp() { - request = new MockHttpServletRequest(); + public MockHttpServletRequest createRequest(String contentType) { + MockHttpServletRequest request = new MockHttpServletRequest(); request.setMethod("POST"); - request.setContentType("application/x-www-form-urlencoded"); + request.setContentType(contentType); request.setCharacterEncoding("UTF-8"); + return request; + } - response = new MockHttpServletResponse(); + @Test + public void getBrokerageValueByJsonTest() { + int expect = 20; + String jsonParam = "{\"address\": \"27VZHn9PFZwNh7o2EporxmLkpe157iWZVkh\"}"; + MockHttpServletRequest request = createRequest("application/json"); + request.setContent(jsonParam.getBytes()); + MockHttpServletResponse response = new MockHttpServletResponse(); + getBrokerageServlet.doPost(request, response); + try { + String contentAsString = response.getContentAsString(); + JSONObject result = JSONObject.parseObject(contentAsString); + int brokerage = (int)result.get("brokerage"); + Assert.assertEquals(expect, brokerage); + } catch (UnsupportedEncodingException e) { + Assert.fail(e.getMessage()); + } } @Test public void getBrokerageValueTest() { int expect = 20; + MockHttpServletRequest request = createRequest("application/x-www-form-urlencoded"); request.addParameter("address", "27VZHn9PFZwNh7o2EporxmLkpe157iWZVkh"); + MockHttpServletResponse response = new MockHttpServletResponse(); getBrokerageServlet.doPost(request, response); try { String contentAsString = response.getContentAsString(); @@ -58,9 +71,11 @@ public void getBrokerageValueTest() { } @Test - public void getBrokerageTest() { + public void getByBlankParamTest() { int expect = 0; + MockHttpServletRequest request = createRequest("application/x-www-form-urlencoded"); request.addParameter("address", ""); + MockHttpServletResponse response = new MockHttpServletResponse(); getBrokerageServlet.doPost(request, response); try { String contentAsString = response.getContentAsString(); diff --git a/framework/src/test/java/org/tron/core/services/http/GetRewardServletTest.java b/framework/src/test/java/org/tron/core/services/http/GetRewardServletTest.java index adff7f21827..44ac100f924 100644 --- a/framework/src/test/java/org/tron/core/services/http/GetRewardServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/GetRewardServletTest.java @@ -4,15 +4,18 @@ import com.alibaba.fastjson.JSONObject; +import java.io.File; import java.io.UnsupportedEncodingException; import javax.annotation.Resource; +import org.apache.commons.lang3.StringUtils; +import org.junit.After; import org.junit.Assert; -import org.junit.Before; import org.junit.Test; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.mock.web.MockHttpServletResponse; import org.tron.common.BaseTest; +import org.tron.common.utils.FileUtil; import org.tron.core.Constant; import org.tron.core.config.args.Args; import org.tron.core.db.Manager; @@ -21,9 +24,6 @@ public class GetRewardServletTest extends BaseTest { - private MockHttpServletRequest request; - private MockHttpServletResponse response; - @Resource private Manager manager; @@ -45,14 +45,12 @@ public class GetRewardServletTest extends BaseTest { ); } - @Before - public void setUp() { - request = new MockHttpServletRequest(); + public MockHttpServletRequest createRequest(String contentType) { + MockHttpServletRequest request = new MockHttpServletRequest(); request.setMethod("POST"); - request.setContentType("application/x-www-form-urlencoded"); + request.setContentType(contentType); request.setCharacterEncoding("UTF-8"); - - response = new MockHttpServletResponse(); + return request; } public void init() { @@ -62,10 +60,32 @@ public void init() { delegationStore.setWitnessVote(0, sr, 100000000); } + @Test + public void getRewardValueByJsonTest() { + init(); + int expect = 138181; + String jsonParam = "{\"address\": \"27VZHn9PFZwNh7o2EporxmLkpe157iWZVkh\"}"; + MockHttpServletRequest request = createRequest("application/json"); + MockHttpServletResponse response = new MockHttpServletResponse(); + request.setContent(jsonParam.getBytes()); + try { + mortgageService.payStandbyWitness(); + getRewardServlet.doPost(request, response); + String contentAsString = response.getContentAsString(); + JSONObject result = JSONObject.parseObject(contentAsString); + int reward = (int)result.get("reward"); + Assert.assertEquals(expect, reward); + } catch (UnsupportedEncodingException e) { + Assert.fail(e.getMessage()); + } + } + @Test public void getRewardValueTest() { init(); int expect = 138181; + MockHttpServletRequest request = createRequest("application/x-www-form-urlencoded"); + MockHttpServletResponse response = new MockHttpServletResponse(); mortgageService.payStandbyWitness(); request.addParameter("address", "27VZHn9PFZwNh7o2EporxmLkpe157iWZVkh"); getRewardServlet.doPost(request, response); @@ -80,7 +100,9 @@ public void getRewardValueTest() { } @Test - public void getRewardTest() { + public void getByBlankParamTest() { + MockHttpServletRequest request = createRequest("application/x-www-form-urlencoded"); + MockHttpServletResponse response = new MockHttpServletResponse(); request.addParameter("address", ""); GetRewardServlet getRewardServlet = new GetRewardServlet(); getRewardServlet.doPost(request, response); @@ -95,4 +117,12 @@ public void getRewardTest() { Assert.fail(e.getMessage()); } } + + @After + public void deleteDatabase() { + Args.clearParam(); + if (StringUtils.isNotEmpty(dbPath)) { + FileUtil.deleteDir(new File(dbPath)); + } + } } From c8a0cc522c8ba792f0bd6715cf7c92b9de44bfbc Mon Sep 17 00:00:00 2001 From: liukai Date: Wed, 16 Aug 2023 16:55:07 +0800 Subject: [PATCH 11/12] test(case): fix case --- .../java/org/tron/core/services/http/GetRewardServletTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/framework/src/test/java/org/tron/core/services/http/GetRewardServletTest.java b/framework/src/test/java/org/tron/core/services/http/GetRewardServletTest.java index 44ac100f924..ae95d992bea 100644 --- a/framework/src/test/java/org/tron/core/services/http/GetRewardServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/GetRewardServletTest.java @@ -69,7 +69,6 @@ public void getRewardValueByJsonTest() { MockHttpServletResponse response = new MockHttpServletResponse(); request.setContent(jsonParam.getBytes()); try { - mortgageService.payStandbyWitness(); getRewardServlet.doPost(request, response); String contentAsString = response.getContentAsString(); JSONObject result = JSONObject.parseObject(contentAsString); From 9cc6b5ea9996294ed2e3572ee490ef1342a5ce19 Mon Sep 17 00:00:00 2001 From: liukai Date: Thu, 17 Aug 2023 18:02:10 +0800 Subject: [PATCH 12/12] test(case): remove useless methods --- .../org/tron/core/services/http/GetRewardServletTest.java | 7 ------- 1 file changed, 7 deletions(-) diff --git a/framework/src/test/java/org/tron/core/services/http/GetRewardServletTest.java b/framework/src/test/java/org/tron/core/services/http/GetRewardServletTest.java index ae95d992bea..47e563f01f9 100644 --- a/framework/src/test/java/org/tron/core/services/http/GetRewardServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/GetRewardServletTest.java @@ -117,11 +117,4 @@ public void getByBlankParamTest() { } } - @After - public void deleteDatabase() { - Args.clearParam(); - if (StringUtils.isNotEmpty(dbPath)) { - FileUtil.deleteDir(new File(dbPath)); - } - } }