Skip to content

Commit 22e45ee

Browse files
committed
adding tests
1 parent 418cc88 commit 22e45ee

2 files changed

Lines changed: 89 additions & 2 deletions

File tree

com.unity.netcode.gameobjects/Runtime/Messaging/MessagingSystem.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ internal struct MessageWithHandler
7878
public MessageHandler Handler;
7979
}
8080

81-
private List<MessageWithHandler> PrioritizeMessageOrder(List<MessageWithHandler> allowedTypes)
81+
internal List<MessageWithHandler> PrioritizeMessageOrder(List<MessageWithHandler> allowedTypes)
8282
{
8383
var prioritizedTypes = new List<MessageWithHandler>();
8484

@@ -174,7 +174,7 @@ public void Unhook(INetworkHooks hooks)
174174
m_Hooks.Remove(hooks);
175175
}
176176

177-
private void RegisterMessageType(MessageWithHandler messageWithHandler)
177+
internal void RegisterMessageType(MessageWithHandler messageWithHandler)
178178
{
179179
m_MessageHandlers[m_HighMessageType] = messageWithHandler.Handler;
180180
m_ReverseTypeMap[m_HighMessageType] = messageWithHandler.MessageType;

com.unity.netcode.gameobjects/Tests/Editor/Messaging/MessageRegistrationTests.cs

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,5 +179,92 @@ public void WhenCreatingMessageSystem_BoundTypeMessageHandlersAreRegistered()
179179
Assert.AreEqual(handlerFour, systemThree.MessageHandlers[systemThree.GetMessageType(typeof(TestMessageFour))]);
180180
}
181181
}
182+
183+
internal class AAAEarlyLexicographicNetworkMessage : INetworkMessage
184+
{
185+
public void Serialize(FastBufferWriter writer)
186+
{
187+
}
188+
189+
public bool Deserialize(FastBufferReader reader, ref NetworkContext context)
190+
{
191+
return true;
192+
}
193+
194+
public void Handle(ref NetworkContext context)
195+
{
196+
}
197+
}
198+
199+
#pragma warning disable IDE1006
200+
internal class zzzLateLexicographicNetworkMessage : AAAEarlyLexicographicNetworkMessage
201+
{
202+
}
203+
#pragma warning restore IDE1006
204+
205+
internal class OrderingMessageProvider : IMessageProvider
206+
{
207+
public List<MessagingSystem.MessageWithHandler> GetMessages()
208+
{
209+
var listMessages = new List<MessagingSystem.MessageWithHandler>();
210+
211+
var messageWithHandler = new MessagingSystem.MessageWithHandler();
212+
213+
messageWithHandler.MessageType = typeof(zzzLateLexicographicNetworkMessage);
214+
listMessages.Add(messageWithHandler);
215+
216+
messageWithHandler.MessageType = typeof(ConnectionRequestMessage);
217+
listMessages.Add(messageWithHandler);
218+
219+
messageWithHandler.MessageType = typeof(ConnectionApprovedMessage);
220+
listMessages.Add(messageWithHandler);
221+
222+
messageWithHandler.MessageType = typeof(OrderingMessage);
223+
listMessages.Add(messageWithHandler);
224+
225+
messageWithHandler.MessageType = typeof(AAAEarlyLexicographicNetworkMessage);
226+
listMessages.Add(messageWithHandler);
227+
228+
return listMessages;
229+
}
230+
}
231+
232+
[Test]
233+
public void MessagesGetPrioritizedCorrectly()
234+
{
235+
var sender = new NopMessageSender();
236+
var provider = new OrderingMessageProvider();
237+
var messagingSystem = new MessagingSystem(sender, null, provider);
238+
239+
// the 3 priority messages should appear first, in lexicographic order
240+
Assert.AreEqual(messagingSystem.MessageTypes[0], typeof(ConnectionApprovedMessage));
241+
Assert.AreEqual(messagingSystem.MessageTypes[1], typeof(ConnectionRequestMessage));
242+
Assert.AreEqual(messagingSystem.MessageTypes[2], typeof(OrderingMessage));
243+
244+
// the other should follow after
245+
Assert.AreEqual(messagingSystem.MessageTypes[3], typeof(AAAEarlyLexicographicNetworkMessage));
246+
Assert.AreEqual(messagingSystem.MessageTypes[4], typeof(zzzLateLexicographicNetworkMessage));
247+
248+
// there should not be any extras
249+
Assert.AreEqual(messagingSystem.MessageHandlerCount, 5);
250+
Assert.AreEqual(messagingSystem.MessageHandlerCount, 5);
251+
252+
// reorder the zzz one to position 3
253+
messagingSystem.ReorderMessage(3, XXHash.Hash32(typeof(zzzLateLexicographicNetworkMessage).FullName));
254+
255+
// the 3 priority messages should still appear first, in lexicographic order
256+
Assert.AreEqual(messagingSystem.MessageTypes[0], typeof(ConnectionApprovedMessage));
257+
Assert.AreEqual(messagingSystem.MessageTypes[1], typeof(ConnectionRequestMessage));
258+
Assert.AreEqual(messagingSystem.MessageTypes[2], typeof(OrderingMessage));
259+
260+
// the other should follow after, but reordered
261+
Assert.AreEqual(messagingSystem.MessageTypes[3], typeof(zzzLateLexicographicNetworkMessage));
262+
Assert.AreEqual(messagingSystem.MessageTypes[4], typeof(AAAEarlyLexicographicNetworkMessage));
263+
264+
// there should still not be any extras
265+
Assert.AreEqual(messagingSystem.MessageHandlerCount, 5);
266+
Assert.AreEqual(messagingSystem.MessageHandlerCount, 5);
267+
268+
}
182269
}
183270
}

0 commit comments

Comments
 (0)