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