11package org .tron .core .net .services ;
22
3+ import static org .mockito .ArgumentMatchers .any ;
4+ import static org .mockito .Mockito .doNothing ;
35import static org .mockito .Mockito .mock ;
46
5- import com .google .common .collect .Lists ;
67import com .google .protobuf .ByteString ;
78import java .lang .reflect .Field ;
89import java .lang .reflect .Method ;
1213import java .util .List ;
1314import java .util .Set ;
1415import javax .annotation .Resource ;
15-
1616import lombok .extern .slf4j .Slf4j ;
1717import org .bouncycastle .util .encoders .Hex ;
1818import org .junit .Assert ;
2121import org .mockito .Mockito ;
2222import org .springframework .context .ApplicationContext ;
2323import org .tron .common .BaseTest ;
24+ import org .tron .common .crypto .SignInterface ;
25+ import org .tron .common .crypto .SignUtils ;
26+ import org .tron .common .parameter .CommonParameter ;
27+ import org .tron .common .utils .ByteArray ;
2428import org .tron .common .utils .ReflectUtils ;
29+ import org .tron .common .utils .Sha256Hash ;
2530import org .tron .core .ChainBaseManager ;
2631import org .tron .core .Constant ;
2732import org .tron .core .capsule .BlockCapsule ;
2833import org .tron .core .capsule .WitnessCapsule ;
2934import org .tron .core .config .args .Args ;
3035import org .tron .core .net .P2pEventHandlerImpl ;
36+ import org .tron .core .net .TronNetDelegate ;
37+ import org .tron .core .net .TronNetService ;
3138import org .tron .core .net .message .adv .BlockMessage ;
3239import org .tron .core .net .message .handshake .HelloMessage ;
3340import org .tron .core .net .peer .Item ;
3441import org .tron .core .net .peer .PeerConnection ;
3542import org .tron .core .net .peer .PeerManager ;
3643import org .tron .core .net .service .relay .RelayService ;
44+ import org .tron .p2p .P2pConfig ;
3745import org .tron .p2p .connection .Channel ;
3846import org .tron .p2p .discover .Node ;
3947import org .tron .p2p .utils .NetUtil ;
@@ -44,11 +52,13 @@ public class RelayServiceTest extends BaseTest {
4452
4553 @ Resource
4654 private RelayService service ;
47- @ Resource
48- private PeerConnection peer ;
55+
4956 @ Resource
5057 private P2pEventHandlerImpl p2pEventHandler ;
5158
59+ @ Resource
60+ private TronNetService tronNetService ;
61+
5262 /**
5363 * init context.
5464 */
@@ -67,8 +77,12 @@ public void test() throws Exception {
6777 }
6878
6979 private void initWitness () {
70- byte [] key = Hex .decode ("A04711BF7AFBDF44557DEFBDF4C4E7AA6138C6331F" );
80+ // key: 0154435f065a57fec6af1e12eaa2fa600030639448d7809f4c65bdcf8baed7e5
81+ // Hex: A08A8D690BF36806C36A7DAE3AF796643C1AA9CC01
82+ // Base58: 27bi7CD8d94AgXY3XFS9A9vx78Si5MqrECz
83+ byte [] key = Hex .decode ("A08A8D690BF36806C36A7DAE3AF796643C1AA9CC01" );//exist already
7184 WitnessCapsule witnessCapsule = chainBaseManager .getWitnessStore ().get (key );
85+ System .out .println (witnessCapsule .getInstance ());
7286 witnessCapsule .setVoteCount (1000 );
7387 chainBaseManager .getWitnessStore ().put (key , witnessCapsule );
7488 List <ByteString > list = new ArrayList <>();
@@ -83,7 +97,7 @@ public void testGetNextWitnesses() throws Exception {
8397 "getNextWitnesses" , ByteString .class , Integer .class );
8498 method .setAccessible (true );
8599 Set <ByteString > s1 = (Set <ByteString >) method .invoke (
86- service , getFromHexString ("A04711BF7AFBDF44557DEFBDF4C4E7AA6138C6331F " ), 3 );
100+ service , getFromHexString ("A08A8D690BF36806C36A7DAE3AF796643C1AA9CC01 " ), 3 );
87101 Assert .assertEquals (3 , s1 .size ());
88102 assertContains (s1 , "A0299F3DB80A24B20A254B89CE639D59132F157F13" );
89103 assertContains (s1 , "A0807337F180B62A77576377C1D0C9C24DF5C0DD62" );
@@ -93,35 +107,51 @@ public void testGetNextWitnesses() throws Exception {
93107 service , getFromHexString ("A0FAB5FBF6AFB681E4E37E9D33BDDB7E923D6132E5" ), 3 );
94108 Assert .assertEquals (3 , s2 .size ());
95109 assertContains (s2 , "A014EEBE4D30A6ACB505C8B00B218BDC4733433C68" );
96- assertContains (s2 , "A04711BF7AFBDF44557DEFBDF4C4E7AA6138C6331F " );
110+ assertContains (s2 , "A08A8D690BF36806C36A7DAE3AF796643C1AA9CC01 " );
97111 assertContains (s2 , "A0299F3DB80A24B20A254B89CE639D59132F157F13" );
98112
99113 Set <ByteString > s3 = (Set <ByteString >) method .invoke (
100- service , getFromHexString ("A04711BF7AFBDF44557DEFBDF4C4E7AA6138C6331F " ), 1 );
114+ service , getFromHexString ("A08A8D690BF36806C36A7DAE3AF796643C1AA9CC01 " ), 1 );
101115 Assert .assertEquals (1 , s3 .size ());
102116 assertContains (s3 , "A0299F3DB80A24B20A254B89CE639D59132F157F13" );
103117 }
104118
105119 private void testBroadcast () {
106120 try {
121+ PeerConnection peer = new PeerConnection ();
122+ InetSocketAddress a1 = new InetSocketAddress ("127.0.0.2" , 10001 );
123+ Channel c1 = mock (Channel .class );
124+ Mockito .when (c1 .getInetSocketAddress ()).thenReturn (a1 );
125+ Mockito .when (c1 .getInetAddress ()).thenReturn (a1 .getAddress ());
126+ doNothing ().when (c1 ).send ((byte []) any ());
127+
128+ peer .setChannel (c1 );
107129 peer .setAddress (getFromHexString ("A0299F3DB80A24B20A254B89CE639D59132F157F13" ));
108130 peer .setNeedSyncFromPeer (false );
109131 peer .setNeedSyncFromUs (false );
110132
111- List <PeerConnection > peers = Lists . newArrayList ();
133+ List <PeerConnection > peers = new ArrayList <> ();
112134 peers .add (peer );
113- ReflectUtils .setFieldValue (p2pEventHandler , "activePeers" , peers );
135+
136+ TronNetDelegate tronNetDelegate = Mockito .mock (TronNetDelegate .class );
137+ Mockito .doReturn (peers ).when (tronNetDelegate ).getActivePeer ();
138+
139+ Field field = service .getClass ().getDeclaredField ("tronNetDelegate" );
140+ field .setAccessible (true );
141+ field .set (service , tronNetDelegate );
142+
114143 BlockCapsule blockCapsule = new BlockCapsule (chainBaseManager .getHeadBlockNum () + 1 ,
115144 chainBaseManager .getHeadBlockId (),
116- 0 , getFromHexString ("A04711BF7AFBDF44557DEFBDF4C4E7AA6138C6331F " ));
145+ 0 , getFromHexString ("A08A8D690BF36806C36A7DAE3AF796643C1AA9CC01 " ));
117146 BlockMessage msg = new BlockMessage (blockCapsule );
118147 service .broadcast (msg );
119148 Item item = new Item (blockCapsule .getBlockId (), Protocol .Inventory .InventoryType .BLOCK );
120149 Assert .assertEquals (1 , peer .getAdvInvSpread ().size ());
121150 Assert .assertNotNull (peer .getAdvInvSpread ().getIfPresent (item ));
122151 peer .getChannel ().close ();
123- } catch (NullPointerException e ) {
124- System .out .println (e );
152+ } catch (Exception e ) {
153+ logger .info ("" , e );
154+ assert false ;
125155 }
126156 }
127157
@@ -135,20 +165,32 @@ private ByteString getFromHexString(String s) {
135165 }
136166
137167 private void testCheckHelloMessage () {
138- ByteString address = getFromHexString ("A04711BF7AFBDF44557DEFBDF4C4E7AA6138C6331F" );
168+ String key = "0154435f065a57fec6af1e12eaa2fa600030639448d7809f4c65bdcf8baed7e5" ;
169+ ByteString address = getFromHexString ("A08A8D690BF36806C36A7DAE3AF796643C1AA9CC01" );
139170 InetSocketAddress a1 = new InetSocketAddress ("127.0.0.1" , 10001 );
140171 Node node = new Node (NetUtil .getNodeId (), a1 .getAddress ().getHostAddress (),
141172 null , a1 .getPort ());
173+
174+ SignInterface cryptoEngine = SignUtils .fromPrivate (ByteArray .fromHexString (key ),
175+ Args .getInstance ().isECKeyCryptoEngine ());
142176 HelloMessage helloMessage = new HelloMessage (node , System .currentTimeMillis (),
143177 ChainBaseManager .getChainBaseManager ());
178+ ByteString sig = ByteString .copyFrom (cryptoEngine .Base64toBytes (cryptoEngine
179+ .signHash (Sha256Hash .of (CommonParameter .getInstance ()
180+ .isECKeyCryptoEngine (), ByteArray .fromLong (helloMessage
181+ .getTimestamp ())).getBytes ())));
144182 helloMessage .setHelloMessage (helloMessage .getHelloMessage ().toBuilder ()
145- .setAddress (address ).build ());
183+ .setAddress (address )
184+ .setSignature (sig )
185+ .build ());
186+
146187 Channel c1 = mock (Channel .class );
147188 Mockito .when (c1 .getInetSocketAddress ()).thenReturn (a1 );
148189 Mockito .when (c1 .getInetAddress ()).thenReturn (a1 .getAddress ());
149190 Channel c2 = mock (Channel .class );
150191 Mockito .when (c2 .getInetSocketAddress ()).thenReturn (a1 );
151192 Mockito .when (c2 .getInetAddress ()).thenReturn (a1 .getAddress ());
193+
152194 Args .getInstance ().fastForward = true ;
153195 ApplicationContext ctx = (ApplicationContext ) ReflectUtils .getFieldObject (p2pEventHandler ,
154196 "ctx" );
@@ -158,14 +200,23 @@ private void testCheckHelloMessage() {
158200 PeerConnection peer2 = PeerManager .add (ctx , c2 );
159201 assert peer2 != null ;
160202 peer2 .setAddress (address );
203+
204+ ReflectUtils .setFieldValue (tronNetService , "p2pConfig" , new P2pConfig ());
205+
161206 try {
162207 Field field = service .getClass ().getDeclaredField ("witnessScheduleStore" );
163208 field .setAccessible (true );
164209 field .set (service , chainBaseManager .getWitnessScheduleStore ());
210+
211+ Field field2 = service .getClass ().getDeclaredField ("manager" );
212+ field2 .setAccessible (true );
213+ field2 .set (service , dbManager );
214+
165215 boolean res = service .checkHelloMessage (helloMessage , c1 );
166- Assert .assertFalse (res );
216+ Assert .assertTrue (res );
167217 } catch (Exception e ) {
168- logger .info ("{}" , e .getMessage ());
218+ logger .info ("" , e );
219+ assert false ;
169220 }
170221 }
171222}
0 commit comments