Skip to content

Commit cf50c54

Browse files
committed
feat(db): change log
1 parent 93ba0a1 commit cf50c54

1 file changed

Lines changed: 82 additions & 10 deletions

File tree

framework/src/test/java/org/tron/core/net/messagehandler/MessageHandlerTest.java

Lines changed: 82 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33

44
import static org.mockito.Mockito.mock;
5+
import static org.tron.core.net.message.handshake.HelloMessage.getEndpointFromNode;
56

67
import com.google.protobuf.ByteString;
78
import java.lang.reflect.Field;
@@ -36,7 +37,9 @@
3637
import org.tron.p2p.connection.Channel;
3738
import org.tron.p2p.discover.Node;
3839
import org.tron.p2p.utils.NetUtil;
40+
import org.tron.protos.Discover.Endpoint;
3941
import org.tron.protos.Protocol;
42+
import org.tron.protos.Protocol.HelloMessage.Builder;
4043
import org.tron.protos.Protocol.ReasonCode;
4144

4245
public class MessageHandlerTest {
@@ -63,10 +66,14 @@ public static void init() throws Exception {
6366

6467

6568
@Before
66-
public void clearPeers() throws NoSuchFieldException, IllegalAccessException {
67-
Field field = PeerManager.class.getDeclaredField("peers");
68-
field.setAccessible(true);
69-
field.set(PeerManager.class, Collections.synchronizedList(new ArrayList<>()));
69+
public void clearPeers() {
70+
try {
71+
Field field = PeerManager.class.getDeclaredField("peers");
72+
field.setAccessible(true);
73+
field.set(PeerManager.class, Collections.synchronizedList(new ArrayList<>()));
74+
} catch (NoSuchFieldException | IllegalAccessException e) {
75+
//ignore
76+
}
7077
}
7178

7279
@Test
@@ -115,30 +122,95 @@ public void testHelloMessage()
115122
Mockito.when(c1.getInetSocketAddress()).thenReturn(a1);
116123
Mockito.when(c1.getInetAddress()).thenReturn(a1.getAddress());
117124
PeerManager.add(ctx, c1);
125+
peer = PeerManager.getPeers().get(0);
118126

119127
Method method = p2pEventHandler.getClass()
120-
.getDeclaredMethod("onMessage", Channel.class, byte[].class);
128+
.getDeclaredMethod("processMessage", PeerConnection.class, byte[].class);
121129
method.setAccessible(true);
122130

123131
//ok
124-
peer = PeerManager.getPeers().get(0);
125132
Node node = new Node(NetUtil.getNodeId(),
126133
a1.getAddress().getHostAddress(),
127134
null,
128135
a1.getPort());
129136
HelloMessage helloMessage = new HelloMessage(node, System.currentTimeMillis(),
130137
ChainBaseManager.getChainBaseManager());
131-
method.invoke(p2pEventHandler, c1, helloMessage.getSendBytes());
138+
method.invoke(p2pEventHandler, peer, helloMessage.getSendBytes());
132139

133140
//dup hello message
134141
peer.setHelloMessageReceive(helloMessage);
135-
method.invoke(p2pEventHandler, c1, helloMessage.getSendBytes());
142+
method.invoke(p2pEventHandler, peer, helloMessage.getSendBytes());
136143

137144
//dup peer
138145
peer.setHelloMessageReceive(null);
139146
Mockito.when(c1.isDisconnect()).thenReturn(true);
140-
method.invoke(p2pEventHandler, c1, helloMessage.getSendBytes());
147+
method.invoke(p2pEventHandler, peer, helloMessage.getSendBytes());
148+
149+
//invalid hello message
150+
try {
151+
Protocol.HelloMessage.Builder builder =
152+
getHelloMessageBuilder(node, System.currentTimeMillis(),
153+
ChainBaseManager.getChainBaseManager());
154+
155+
BlockCapsule.BlockId hid = ChainBaseManager.getChainBaseManager().getHeadBlockId();
156+
Protocol.HelloMessage.BlockId hBlockId = Protocol.HelloMessage.BlockId.newBuilder()
157+
.setHash(ByteString.copyFrom(new byte[0]))
158+
.setNumber(hid.getNum())
159+
.build();
160+
builder.setHeadBlockId(hBlockId);
161+
helloMessage = new HelloMessage(builder.build().toByteArray());
162+
Assert.assertTrue(!helloMessage.valid());
163+
} catch (Exception e) {
164+
Assert.fail();
165+
}
166+
167+
//relay check service check failed
168+
Args.getInstance().fastForward = true;
169+
clearPeers();
170+
try {
171+
Protocol.HelloMessage.Builder builder =
172+
getHelloMessageBuilder(node, System.currentTimeMillis(),
173+
ChainBaseManager.getChainBaseManager());
174+
helloMessage = new HelloMessage(builder.build().toByteArray());
175+
method.invoke(p2pEventHandler, peer, helloMessage.getSendBytes());
176+
} catch (Exception e) {
177+
Assert.fail();
178+
}
179+
180+
}
141181

142-
// Assert.assertEquals(1, PeerManager.getPeers().size());
182+
private Protocol.HelloMessage.Builder getHelloMessageBuilder(Node from, long timestamp,
183+
ChainBaseManager chainBaseManager) throws Exception {
184+
Endpoint fromEndpoint = getEndpointFromNode(from);
185+
186+
BlockCapsule.BlockId gid = chainBaseManager.getGenesisBlockId();
187+
Protocol.HelloMessage.BlockId gBlockId = Protocol.HelloMessage.BlockId.newBuilder()
188+
.setHash(gid.getByteString())
189+
.setNumber(gid.getNum())
190+
.build();
191+
192+
BlockCapsule.BlockId sid = chainBaseManager.getSolidBlockId();
193+
Protocol.HelloMessage.BlockId sBlockId = Protocol.HelloMessage.BlockId.newBuilder()
194+
.setHash(sid.getByteString())
195+
.setNumber(sid.getNum())
196+
.build();
197+
198+
BlockCapsule.BlockId hid = chainBaseManager.getHeadBlockId();
199+
Protocol.HelloMessage.BlockId hBlockId = Protocol.HelloMessage.BlockId.newBuilder()
200+
.setHash(hid.getByteString())
201+
.setNumber(hid.getNum())
202+
.build();
203+
Builder builder = Protocol.HelloMessage.newBuilder();
204+
builder.setFrom(fromEndpoint);
205+
builder.setVersion(Args.getInstance().getNodeP2pVersion());
206+
builder.setTimestamp(timestamp);
207+
builder.setGenesisBlockId(gBlockId);
208+
builder.setSolidBlockId(sBlockId);
209+
builder.setHeadBlockId(hBlockId);
210+
builder.setNodeType(chainBaseManager.getNodeType().getType());
211+
builder.setLowestBlockNum(chainBaseManager.isLiteNode()
212+
? chainBaseManager.getLowestBlockNum() : 0);
213+
214+
return builder;
143215
}
144216
}

0 commit comments

Comments
 (0)