11package org .tron .core .net .peer ;
22
3+ import static org .mockito .Mockito .mock ;
4+
5+ import java .net .InetSocketAddress ;
6+ import java .util .ArrayList ;
7+ import java .util .LinkedList ;
8+ import java .util .List ;
9+
310import org .junit .Assert ;
411import org .junit .Test ;
12+ import org .mockito .Mockito ;
13+ import org .tron .common .overlay .message .Message ;
14+ import org .tron .common .utils .Pair ;
15+ import org .tron .common .utils .ReflectUtils ;
16+ import org .tron .common .utils .Sha256Hash ;
17+ import org .tron .core .capsule .BlockCapsule ;
18+ import org .tron .core .net .message .adv .InventoryMessage ;
19+ import org .tron .core .net .message .handshake .HelloMessage ;
20+ import org .tron .core .net .message .keepalive .PingMessage ;
21+ import org .tron .core .net .message .keepalive .PongMessage ;
22+ import org .tron .core .net .service .adv .AdvService ;
23+ import org .tron .core .net .service .sync .SyncService ;
24+ import org .tron .p2p .connection .Channel ;
25+ import org .tron .protos .Protocol ;
526
627public class PeerConnectionTest {
728
@@ -16,4 +37,243 @@ public void testVariableDefaultValue() {
1637 Assert .assertTrue (peerConnection .isNeedSyncFromUs ());
1738 Assert .assertTrue (!peerConnection .isSyncFinish ());
1839 }
40+
41+ @ Test
42+ public void testOnDisconnect () {
43+ PeerConnection peerConnection = new PeerConnection ();
44+
45+ SyncService syncService = mock (SyncService .class );
46+ ReflectUtils .setFieldValue (peerConnection , "syncService" , syncService );
47+
48+ AdvService advService = mock (AdvService .class );
49+ ReflectUtils .setFieldValue (peerConnection , "advService" , advService );
50+
51+ Item item = new Item (Sha256Hash .ZERO_HASH , Protocol .Inventory .InventoryType .TRX );
52+ Long time = System .currentTimeMillis ();
53+ BlockCapsule .BlockId blockId = new BlockCapsule .BlockId ();
54+ peerConnection .getAdvInvReceive ().put (item , time );
55+ peerConnection .getAdvInvSpread ().put (item , time );
56+ peerConnection .getSyncBlockIdCache ().put (item .getHash (), time );
57+ peerConnection .getSyncBlockToFetch ().add (blockId );
58+ peerConnection .getSyncBlockRequested ().put (blockId , time );
59+ peerConnection .getSyncBlockInProcess ().add (blockId );
60+
61+ peerConnection .onDisconnect ();
62+
63+ //Assert.assertEquals(0, peerConnection.getAdvInvReceive().size());
64+ //Assert.assertEquals(0, peerConnection.getAdvInvSpread().size());
65+ //Assert.assertEquals(0, peerConnection.getSyncBlockIdCache().size());
66+ Assert .assertEquals (0 , peerConnection .getSyncBlockToFetch ().size ());
67+ Assert .assertEquals (0 , peerConnection .getSyncBlockRequested ().size ());
68+ Assert .assertEquals (0 , peerConnection .getSyncBlockInProcess ().size ());
69+ }
70+
71+ @ Test
72+ public void testIsIdle () {
73+ PeerConnection peerConnection = new PeerConnection ();
74+ boolean f = peerConnection .isIdle ();
75+ Assert .assertTrue (f );
76+
77+ Item item = new Item (Sha256Hash .ZERO_HASH , Protocol .Inventory .InventoryType .TRX );
78+ Long time = System .currentTimeMillis ();
79+ peerConnection .getAdvInvRequest ().put (item , time );
80+ f = peerConnection .isIdle ();
81+ Assert .assertTrue (!f );
82+
83+ peerConnection .getAdvInvRequest ().clear ();
84+ f = peerConnection .isIdle ();
85+ Assert .assertTrue (f );
86+
87+ BlockCapsule .BlockId blockId = new BlockCapsule .BlockId ();
88+ peerConnection .getSyncBlockRequested ().put (blockId , time );
89+ f = peerConnection .isIdle ();
90+ Assert .assertTrue (!f );
91+
92+ peerConnection .getSyncBlockRequested ().clear ();
93+ f = peerConnection .isIdle ();
94+ Assert .assertTrue (f );
95+
96+ peerConnection .setSyncChainRequested (new Pair <>(new LinkedList <>(), time ));
97+ f = peerConnection .isIdle ();
98+ Assert .assertTrue (!f );
99+ }
100+
101+ @ Test
102+ public void testOnConnect () {
103+ PeerConnection peerConnection = new PeerConnection ();
104+ SyncService syncService = mock (SyncService .class );
105+ ReflectUtils .setFieldValue (peerConnection , "syncService" , syncService );
106+
107+ HelloMessage m1 = mock (HelloMessage .class );
108+ BlockCapsule .BlockId b1 = new BlockCapsule .BlockId (Sha256Hash .ZERO_HASH , 1 );
109+ Mockito .when (m1 .getHeadBlockId ()).thenReturn (b1 );
110+
111+ HelloMessage m2 = mock (HelloMessage .class );
112+ BlockCapsule .BlockId b2 = new BlockCapsule .BlockId (Sha256Hash .ZERO_HASH , 2 );
113+ Mockito .when (m2 .getHeadBlockId ()).thenReturn (b2 );
114+
115+ Assert .assertTrue (peerConnection .isNeedSyncFromUs ());
116+ Assert .assertTrue (peerConnection .isNeedSyncFromPeer ());
117+
118+ ReflectUtils .setFieldValue (peerConnection , "helloMessageReceive" , m1 );
119+ ReflectUtils .setFieldValue (peerConnection , "helloMessageSend" , m2 );
120+ peerConnection .onConnect ();
121+ Assert .assertTrue (peerConnection .isNeedSyncFromUs ());
122+ Assert .assertTrue (!peerConnection .isNeedSyncFromPeer ());
123+
124+ peerConnection .setNeedSyncFromPeer (true );
125+ peerConnection .setNeedSyncFromUs (true );
126+ ReflectUtils .setFieldValue (peerConnection , "helloMessageReceive" , m2 );
127+ ReflectUtils .setFieldValue (peerConnection , "helloMessageSend" , m1 );
128+ peerConnection .onConnect ();
129+ Assert .assertTrue (!peerConnection .isNeedSyncFromUs ());
130+ Assert .assertTrue (peerConnection .isNeedSyncFromPeer ());
131+
132+ peerConnection .setNeedSyncFromPeer (true );
133+ peerConnection .setNeedSyncFromUs (true );
134+ ReflectUtils .setFieldValue (peerConnection , "helloMessageReceive" , m1 );
135+ ReflectUtils .setFieldValue (peerConnection , "helloMessageSend" , m1 );
136+ peerConnection .onConnect ();
137+ Assert .assertTrue (!peerConnection .isNeedSyncFromUs ());
138+ Assert .assertTrue (!peerConnection .isNeedSyncFromPeer ());
139+ }
140+
141+ @ Test
142+ public void testSetChannel () {
143+ PeerConnection peerConnection = new PeerConnection ();
144+
145+ InetSocketAddress inetSocketAddress =
146+ new InetSocketAddress ("127.0.0.2" , 10001 );
147+ Channel c1 = new Channel ();
148+ ReflectUtils .setFieldValue (c1 , "inetSocketAddress" , inetSocketAddress );
149+ ReflectUtils .setFieldValue (c1 , "inetAddress" , inetSocketAddress .getAddress ());
150+
151+ List <InetSocketAddress > relayNodes = new ArrayList <>();
152+ ReflectUtils .setFieldValue (peerConnection , "relayNodes" , relayNodes );
153+
154+ peerConnection .setChannel (c1 );
155+ Assert .assertTrue (!peerConnection .isRelayPeer ());
156+
157+ relayNodes .add (inetSocketAddress );
158+ peerConnection .setChannel (c1 );
159+ Assert .assertTrue (peerConnection .isRelayPeer ());
160+ }
161+
162+ @ Test
163+ public void testIsSyncFinish () {
164+ PeerConnection peerConnection = new PeerConnection ();
165+ boolean f = peerConnection .isSyncFinish ();
166+ Assert .assertTrue (!f );
167+
168+ peerConnection .setNeedSyncFromUs (false );
169+ f = peerConnection .isSyncFinish ();
170+ Assert .assertTrue (!f );
171+
172+ peerConnection .setNeedSyncFromPeer (false );
173+ f = peerConnection .isSyncFinish ();
174+ Assert .assertTrue (f );
175+ }
176+
177+ @ Test
178+ public void testCheckAndPutAdvInvRequest () {
179+ PeerConnection peerConnection = new PeerConnection ();
180+ Item item = new Item (Sha256Hash .ZERO_HASH , Protocol .Inventory .InventoryType .TRX );
181+ Long time = System .currentTimeMillis ();
182+ boolean f = peerConnection .checkAndPutAdvInvRequest (item , time );
183+ Assert .assertTrue (f );
184+
185+ f = peerConnection .checkAndPutAdvInvRequest (item , time );
186+ Assert .assertTrue (!f );
187+ }
188+
189+ @ Test
190+ public void testEquals () {
191+ List <InetSocketAddress > relayNodes = new ArrayList <>();
192+
193+ PeerConnection p1 = new PeerConnection ();
194+ InetSocketAddress inetSocketAddress1 =
195+ new InetSocketAddress ("127.0.0.2" , 10001 );
196+ Channel c1 = new Channel ();
197+ ReflectUtils .setFieldValue (c1 , "inetSocketAddress" , inetSocketAddress1 );
198+ ReflectUtils .setFieldValue (c1 , "inetAddress" , inetSocketAddress1 .getAddress ());
199+ ReflectUtils .setFieldValue (p1 , "relayNodes" , relayNodes );
200+ p1 .setChannel (c1 );
201+
202+ PeerConnection p2 = new PeerConnection ();
203+ InetSocketAddress inetSocketAddress2 =
204+ new InetSocketAddress ("127.0.0.2" , 10002 );
205+ Channel c2 = new Channel ();
206+ ReflectUtils .setFieldValue (c2 , "inetSocketAddress" , inetSocketAddress2 );
207+ ReflectUtils .setFieldValue (c2 , "inetAddress" , inetSocketAddress2 .getAddress ());
208+ ReflectUtils .setFieldValue (p2 , "relayNodes" , relayNodes );
209+ p2 .setChannel (c2 );
210+
211+ PeerConnection p3 = new PeerConnection ();
212+ InetSocketAddress inetSocketAddress3 =
213+ new InetSocketAddress ("127.0.0.2" , 10002 );
214+ Channel c3 = new Channel ();
215+ ReflectUtils .setFieldValue (c3 , "inetSocketAddress" , inetSocketAddress3 );
216+ ReflectUtils .setFieldValue (c3 , "inetAddress" , inetSocketAddress3 .getAddress ());
217+ ReflectUtils .setFieldValue (p3 , "relayNodes" , relayNodes );
218+ p3 .setChannel (c3 );
219+
220+ Assert .assertTrue (p1 .equals (p1 ));
221+ Assert .assertTrue (!p1 .equals (p2 ));
222+ Assert .assertTrue (p2 .equals (p3 ));
223+ }
224+
225+ @ Test
226+ public void testHashCode () {
227+ List <InetSocketAddress > relayNodes = new ArrayList <>();
228+
229+ PeerConnection p1 = new PeerConnection ();
230+ InetSocketAddress inetSocketAddress1 =
231+ new InetSocketAddress ("127.0.0.2" , 10001 );
232+ Channel c1 = new Channel ();
233+ ReflectUtils .setFieldValue (c1 , "inetSocketAddress" , inetSocketAddress1 );
234+ ReflectUtils .setFieldValue (c1 , "inetAddress" , inetSocketAddress1 .getAddress ());
235+ ReflectUtils .setFieldValue (p1 , "relayNodes" , relayNodes );
236+ p1 .setChannel (c1 );
237+
238+ PeerConnection p2 = new PeerConnection ();
239+ InetSocketAddress inetSocketAddress2 =
240+ new InetSocketAddress ("127.0.0.2" , 10002 );
241+ Channel c2 = new Channel ();
242+ ReflectUtils .setFieldValue (c2 , "inetSocketAddress" , inetSocketAddress2 );
243+ ReflectUtils .setFieldValue (c2 , "inetAddress" , inetSocketAddress2 .getAddress ());
244+ ReflectUtils .setFieldValue (p2 , "relayNodes" , relayNodes );
245+ p2 .setChannel (c2 );
246+
247+ PeerConnection p3 = new PeerConnection ();
248+ InetSocketAddress inetSocketAddress3 =
249+ new InetSocketAddress ("127.0.0.2" , 10002 );
250+ Channel c3 = new Channel ();
251+ ReflectUtils .setFieldValue (c3 , "inetSocketAddress" , inetSocketAddress3 );
252+ ReflectUtils .setFieldValue (c3 , "inetAddress" , inetSocketAddress3 .getAddress ());
253+ ReflectUtils .setFieldValue (p3 , "relayNodes" , relayNodes );
254+ p3 .setChannel (c3 );
255+
256+ Assert .assertTrue (p1 .hashCode () != p2 .hashCode ());
257+ Assert .assertTrue (p2 .hashCode () == p3 .hashCode ());
258+ }
259+
260+ @ Test
261+ public void testNeedToLog () throws Exception {
262+ Message msg = new PingMessage ();
263+ boolean f = PeerConnection .needToLog (msg );
264+ Assert .assertTrue (!f );
265+
266+ msg = new PongMessage ();
267+ f = PeerConnection .needToLog (msg );
268+ Assert .assertTrue (!f );
269+
270+ msg = new InventoryMessage (new ArrayList <>(), Protocol .Inventory .InventoryType .TRX );
271+ f = PeerConnection .needToLog (msg );
272+ Assert .assertTrue (!f );
273+
274+ msg = new InventoryMessage (new ArrayList <>(), Protocol .Inventory .InventoryType .BLOCK );
275+ f = PeerConnection .needToLog (msg );
276+ Assert .assertTrue (f );
277+ }
278+
19279}
0 commit comments