-
Notifications
You must be signed in to change notification settings - Fork 1.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix(http): fix java.lang.IllegalStateException: STREAMED #5367
Changes from 11 commits
029c040
9003b0e
0bcaaad
0664c4a
e404b18
b1a2870
8bad304
b3400df
75d832e
304dba4
c8a0cc5
9cc6b5e
1d3036a
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. For historical reasons, this logic does not have a unit test. Better add comprehensive unit tests for all situations after changing the whole logic of the param extraction to make sure all the new logic works well, such as: good requests for both form&json |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,91 @@ | ||
package org.tron.core.services.http; | ||
|
||
import com.alibaba.fastjson.JSONObject; | ||
|
||
import java.io.UnsupportedEncodingException; | ||
import javax.annotation.Resource; | ||
|
||
import org.junit.Assert; | ||
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 extends BaseTest { | ||
|
||
@Resource | ||
private GetBrokerageServlet getBrokerageServlet; | ||
|
||
static { | ||
dbPath = "db_GetBrokerageServlet_test"; | ||
Args.setParam( | ||
new String[]{ | ||
"--output-directory", dbPath, | ||
}, Constant.TEST_CONF | ||
); | ||
} | ||
|
||
public MockHttpServletRequest createRequest(String contentType) { | ||
MockHttpServletRequest request = new MockHttpServletRequest(); | ||
request.setMethod("POST"); | ||
request.setContentType(contentType); | ||
request.setCharacterEncoding("UTF-8"); | ||
return request; | ||
} | ||
|
||
@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(); | ||
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 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(); | ||
JSONObject result = JSONObject.parseObject(contentAsString); | ||
int brokerage = (int)result.get("brokerage"); | ||
Assert.assertEquals(expect, brokerage); | ||
String content = (String) result.get("Error"); | ||
Assert.assertNull(content); | ||
} catch (UnsupportedEncodingException e) { | ||
Assert.fail(e.getMessage()); | ||
} | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,127 @@ | ||
package org.tron.core.services.http; | ||
|
||
import static org.tron.common.utils.Commons.decodeFromBase58Check; | ||
|
||
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.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; | ||
import org.tron.core.service.MortgageService; | ||
import org.tron.core.store.DelegationStore; | ||
|
||
public class GetRewardServletTest extends BaseTest { | ||
|
||
@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 | ||
); | ||
} | ||
|
||
public MockHttpServletRequest createRequest(String contentType) { | ||
MockHttpServletRequest request = new MockHttpServletRequest(); | ||
request.setMethod("POST"); | ||
request.setContentType(contentType); | ||
request.setCharacterEncoding("UTF-8"); | ||
return request; | ||
} | ||
|
||
public void init() { | ||
manager.getDynamicPropertiesStore().saveChangeDelegation(1); | ||
byte[] sr = decodeFromBase58Check("27VZHn9PFZwNh7o2EporxmLkpe157iWZVkh"); | ||
delegationStore.setBrokerage(0, sr, 10); | ||
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 { | ||
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); | ||
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 getByBlankParamTest() { | ||
MockHttpServletRequest request = createRequest("application/x-www-form-urlencoded"); | ||
MockHttpServletResponse response = new MockHttpServletResponse(); | ||
request.addParameter("address", ""); | ||
GetRewardServlet getRewardServlet = new GetRewardServlet(); | ||
getRewardServlet.doPost(request, response); | ||
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"); | ||
Assert.assertNull(content); | ||
} catch (UnsupportedEncodingException e) { | ||
Assert.fail(e.getMessage()); | ||
} | ||
} | ||
|
||
@After | ||
public void deleteDatabase() { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yes, it can be dispensed with here |
||
Args.clearParam(); | ||
if (StringUtils.isNotEmpty(dbPath)) { | ||
FileUtil.deleteDir(new File(dbPath)); | ||
} | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
getParam
orcheckAndGetParam
?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Use
checkGetParam
as the method name, because there are some checking judgments