Skip to content

Commit 5486b55

Browse files
authored
Merge pull request tronprotocol#3142 from MikumoGuynemer/develop
Add test case for broadcastservlet
2 parents 5a29292 + 885e1ab commit 5486b55

File tree

1 file changed

+161
-0
lines changed

1 file changed

+161
-0
lines changed
Lines changed: 161 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,161 @@
1+
package org.tron.core.services.http;
2+
3+
import static org.mockito.BDDMockito.given;
4+
import static org.mockito.Mockito.mock;
5+
import static org.mockito.Mockito.when;
6+
7+
import java.io.BufferedReader;
8+
import java.io.ByteArrayInputStream;
9+
import java.io.ByteArrayOutputStream;
10+
import java.io.File;
11+
import java.io.FileInputStream;
12+
import java.io.IOException;
13+
import java.io.InputStreamReader;
14+
import java.io.OutputStreamWriter;
15+
import java.io.PrintStream;
16+
import java.io.PrintWriter;
17+
18+
import java.net.HttpURLConnection;
19+
import java.net.URL;
20+
import java.net.URLStreamHandlerFactory;
21+
22+
import java.nio.charset.StandardCharsets;
23+
import javax.servlet.http.HttpServletRequest;
24+
import javax.servlet.http.HttpServletResponse;
25+
26+
import lombok.extern.slf4j.Slf4j;
27+
28+
import org.junit.After;
29+
import org.junit.Assert;
30+
import org.junit.Before;
31+
import org.junit.BeforeClass;
32+
import org.testng.annotations.Test;
33+
34+
import org.tron.common.utils.FileUtil;
35+
import org.tron.core.services.http.solidity.mockito.HttpUrlStreamHandler;
36+
37+
@Slf4j
38+
public class BroadcastServletTest {
39+
40+
private static HttpUrlStreamHandler httpUrlStreamHandler;
41+
private BroadcastServlet broadcastServlet;
42+
private HttpServletRequest request;
43+
private HttpServletResponse response;
44+
private HttpURLConnection httpUrlConnection;
45+
private OutputStreamWriter outputStreamWriter;
46+
private URL url;
47+
48+
/**
49+
* init before class.
50+
*/
51+
@BeforeClass
52+
public static void init() {
53+
// Allows for mocking URL connections
54+
URLStreamHandlerFactory urlStreamHandlerFactory = mock(URLStreamHandlerFactory.class);
55+
URL.setURLStreamHandlerFactory(urlStreamHandlerFactory);
56+
57+
httpUrlStreamHandler = new HttpUrlStreamHandler();
58+
given(urlStreamHandlerFactory.createURLStreamHandler("http")).willReturn(httpUrlStreamHandler);
59+
60+
}
61+
62+
/**
63+
* set up.
64+
* @throws InterruptedException .
65+
*/
66+
@Before
67+
public void setUp() throws InterruptedException {
68+
broadcastServlet = new BroadcastServlet();
69+
this.request = mock(HttpServletRequest.class);
70+
this.response = mock(HttpServletResponse.class);
71+
this.httpUrlConnection = mock(HttpURLConnection.class);
72+
this.outputStreamWriter = mock(OutputStreamWriter.class);
73+
httpUrlStreamHandler.resetConnections();
74+
}
75+
76+
/**
77+
* after test.
78+
*/
79+
@After
80+
public void tearDown() {
81+
if (FileUtil.deleteDir(new File("temp.txt"))) {
82+
logger.info("Release resources successful.");
83+
} else {
84+
logger.info("Release resources failure.");
85+
}
86+
}
87+
88+
@Test
89+
public void testDoPost() throws IOException {
90+
URLStreamHandlerFactory urlStreamHandlerFactory = mock(URLStreamHandlerFactory.class);
91+
URL.setURLStreamHandlerFactory(urlStreamHandlerFactory);
92+
93+
httpUrlStreamHandler = new HttpUrlStreamHandler();
94+
given(urlStreamHandlerFactory.createURLStreamHandler("http")).willReturn(httpUrlStreamHandler);
95+
96+
broadcastServlet = new BroadcastServlet();
97+
this.request = mock(HttpServletRequest.class);
98+
this.response = mock(HttpServletResponse.class);
99+
this.httpUrlConnection = mock(HttpURLConnection.class);
100+
this.outputStreamWriter = mock(OutputStreamWriter.class);
101+
httpUrlStreamHandler.resetConnections();
102+
103+
final ByteArrayOutputStream outContent = new ByteArrayOutputStream();
104+
System.setOut(new PrintStream(outContent));
105+
String href = "http://127.0.0.1:8090/wallet/broadcasttransaction";
106+
httpUrlStreamHandler.addConnection(new URL(href), httpUrlConnection);
107+
httpUrlConnection.setRequestMethod("POST");
108+
httpUrlConnection.setRequestProperty("Content-Type", "application/json");
109+
httpUrlConnection.setRequestProperty("Connection", "Keep-Alive");
110+
httpUrlConnection.setUseCaches(false);
111+
httpUrlConnection.setDoOutput(true);
112+
String postData = "{\"signature\":[\"97c825b41c77de2a8bd65b3df55cd4c0df59c307c0187e"
113+
+ "42321dcc1cc455ddba583dd9502e17cfec5945b34cad0511985a6165999092a6dec84c2bdd9"
114+
+ "7e649fc01\"],\"txID\":\"454f156bf1256587ff6ccdbc56e64ad0c51e4f8efea5490dcbc7"
115+
+ "20ee606bc7b8\",\"raw_data\":{\"contract\":[{\"parame"
116+
+ "ter\":{\"value\":{\"amount\":1000,\"owner_address\":\"41e552f6"
117+
+ "487585c2b58bc2c9bb4492bc1f17132cd0\",\"to_address\":\"41d1e7a6bc354106cb410e"
118+
+ "65ff8b181c600ff14292\"},\"type_url\":\"type.googl"
119+
+ "eapis.com/protocol.TransferContract\"},\"type\":\"TransferCon"
120+
+ "tract\"}],\"ref_block_bytes\":\"267e\",\"ref_block_hash\":\"9a447d222e8"
121+
+ "de9f2\",\"expiration\":1530893064000,\"timestamp\":1530893006233}}";
122+
httpUrlConnection.setRequestProperty("Content-Length", "" + postData.length());
123+
124+
when(httpUrlConnection.getOutputStream()).thenReturn(outContent);
125+
OutputStreamWriter out = new OutputStreamWriter(httpUrlConnection.getOutputStream(),
126+
StandardCharsets.UTF_8);
127+
out.write(postData);
128+
out.flush();
129+
out.close();
130+
PrintWriter writer = new PrintWriter("temp.txt");
131+
when(response.getWriter()).thenReturn(writer);
132+
133+
broadcastServlet.doPost(request, response);
134+
// Get Response Body
135+
String line;
136+
StringBuilder result = new StringBuilder();
137+
138+
byte[] buffer = new byte[1024];
139+
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(buffer);
140+
when(httpUrlConnection.getInputStream()).thenReturn(byteArrayInputStream);
141+
BufferedReader in = new BufferedReader(new InputStreamReader(httpUrlConnection.getInputStream(),
142+
StandardCharsets.UTF_8));
143+
144+
while ((line = in.readLine()) != null) {
145+
result.append(line).append("\n");
146+
}
147+
in.close();
148+
writer.flush();
149+
FileInputStream fileInputStream = new FileInputStream("temp.txt");
150+
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);
151+
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
152+
153+
StringBuffer sb = new StringBuffer();
154+
String text = null;
155+
while ((text = bufferedReader.readLine()) != null) {
156+
sb.append(text);
157+
}
158+
Assert.assertTrue(sb.toString().contains("null"));
159+
httpUrlConnection.disconnect();
160+
}
161+
}

0 commit comments

Comments
 (0)