|
1 | 1 | using System; |
2 | 2 | using System.Collections.Generic; |
3 | 3 | using NUnit.Framework; |
4 | | -using NUnit.Framework.Internal; |
5 | 4 | using Unity.Collections; |
6 | 5 | using Unity.Collections.LowLevel.Unsafe; |
| 6 | +using UnityEngine.TestTools.Constraints; |
| 7 | +using Is = NUnit.Framework.Is; |
7 | 8 |
|
8 | 9 | namespace Unity.Netcode.EditorTests |
9 | 10 | { |
@@ -95,22 +96,23 @@ public void WhenHandlingAMessage_ReceiveMethodIsCalled() |
95 | 96 | }; |
96 | 97 | var message = GetMessage(); |
97 | 98 |
|
98 | | - var writer = new FastBufferWriter(1300, Allocator.Temp); |
99 | | - using (writer) |
100 | | - { |
101 | | - writer.TryBeginWrite(FastBufferWriter.GetWriteSize(message)); |
102 | | - writer.WriteValue(message); |
| 99 | + using var writer = new FastBufferWriter(1300, Allocator.Temp); |
| 100 | + writer.TryBeginWrite(FastBufferWriter.GetWriteSize(message)); |
| 101 | + writer.WriteValue(message); |
103 | 102 |
|
104 | | - var reader = new FastBufferReader(writer, Allocator.Temp); |
105 | | - using (reader) |
106 | | - { |
107 | | - m_MessageManager.HandleMessage(messageHeader, reader, 0, 0, 0); |
108 | | - Assert.IsTrue(TestMessage.Deserialized); |
109 | | - Assert.IsTrue(TestMessage.Handled); |
110 | | - Assert.AreEqual(1, TestMessage.DeserializedValues.Count); |
111 | | - Assert.AreEqual(message, TestMessage.DeserializedValues[0]); |
112 | | - } |
113 | | - } |
| 103 | + using var reader = new FastBufferReader(writer, Allocator.Temp); |
| 104 | + m_MessageManager.HandleMessage(messageHeader, reader, 0, 0, 0); |
| 105 | + Assert.IsTrue(TestMessage.Deserialized); |
| 106 | + Assert.IsTrue(TestMessage.Handled); |
| 107 | + Assert.AreEqual(1, TestMessage.DeserializedValues.Count); |
| 108 | + Assert.AreEqual(message, TestMessage.DeserializedValues[0]); |
| 109 | + |
| 110 | + // Check for GC Allocations |
| 111 | + Assert.That(() => |
| 112 | + { |
| 113 | + reader.Seek(0); |
| 114 | + m_MessageManager.HandleMessage(messageHeader, reader, 0, 0, 0); |
| 115 | + }, Is.Not.AllocatingGCMemory()); |
114 | 116 | } |
115 | 117 |
|
116 | 118 | [Test] |
@@ -220,44 +222,45 @@ public unsafe void WhenReceivingMultipleMessagesAndProcessingMessageQueue_Receiv |
220 | 222 | var message = GetMessage(); |
221 | 223 | var message2 = GetMessage(); |
222 | 224 |
|
223 | | - var writer = new FastBufferWriter(1300, Allocator.Temp); |
224 | | - using (writer) |
| 225 | + using var writer = new FastBufferWriter(1300, Allocator.Temp); |
| 226 | + writer.WriteValueSafe(batchHeader); |
| 227 | + BytePacker.WriteValueBitPacked(writer, messageHeader.MessageType); |
| 228 | + BytePacker.WriteValueBitPacked(writer, messageHeader.MessageSize); |
| 229 | + writer.WriteValueSafe(message); |
| 230 | + BytePacker.WriteValueBitPacked(writer, messageHeader.MessageType); |
| 231 | + BytePacker.WriteValueBitPacked(writer, messageHeader.MessageSize); |
| 232 | + writer.WriteValueSafe(message2); |
| 233 | + |
| 234 | + // Fill out the rest of the batch header |
| 235 | + writer.Seek(0); |
| 236 | + batchHeader = new NetworkBatchHeader |
225 | 237 | { |
226 | | - writer.WriteValueSafe(batchHeader); |
227 | | - BytePacker.WriteValueBitPacked(writer, messageHeader.MessageType); |
228 | | - BytePacker.WriteValueBitPacked(writer, messageHeader.MessageSize); |
229 | | - writer.WriteValueSafe(message); |
230 | | - BytePacker.WriteValueBitPacked(writer, messageHeader.MessageType); |
231 | | - BytePacker.WriteValueBitPacked(writer, messageHeader.MessageSize); |
232 | | - writer.WriteValueSafe(message2); |
| 238 | + Magic = NetworkBatchHeader.MagicValue, |
| 239 | + BatchSize = writer.Length, |
| 240 | + BatchHash = XXHash.Hash64(writer.GetUnsafePtr() + sizeof(NetworkBatchHeader), writer.Length - sizeof(NetworkBatchHeader)), |
| 241 | + BatchCount = 2 |
| 242 | + }; |
| 243 | + writer.WriteValue(batchHeader); |
233 | 244 |
|
234 | | - // Fill out the rest of the batch header |
235 | | - writer.Seek(0); |
236 | | - batchHeader = new NetworkBatchHeader |
237 | | - { |
238 | | - Magic = NetworkBatchHeader.MagicValue, |
239 | | - BatchSize = writer.Length, |
240 | | - BatchHash = XXHash.Hash64(writer.GetUnsafePtr() + sizeof(NetworkBatchHeader), writer.Length - sizeof(NetworkBatchHeader)), |
241 | | - BatchCount = 2 |
242 | | - }; |
243 | | - writer.WriteValue(batchHeader); |
| 245 | + var data = new ArraySegment<byte>(writer.ToArray()); |
| 246 | + m_MessageManager.HandleIncomingData(0, data, 0); |
| 247 | + Assert.IsFalse(TestMessage.Deserialized); |
| 248 | + Assert.IsFalse(TestMessage.Handled); |
| 249 | + Assert.IsEmpty(TestMessage.DeserializedValues); |
244 | 250 |
|
245 | | - var reader = new FastBufferReader(writer, Allocator.Temp); |
246 | | - using (reader) |
247 | | - { |
248 | | - m_MessageManager.HandleIncomingData(0, new ArraySegment<byte>(writer.ToArray()), 0); |
249 | | - Assert.IsFalse(TestMessage.Deserialized); |
250 | | - Assert.IsFalse(TestMessage.Handled); |
251 | | - Assert.IsEmpty(TestMessage.DeserializedValues); |
| 251 | + m_MessageManager.ProcessIncomingMessageQueue(); |
| 252 | + Assert.IsTrue(TestMessage.Deserialized); |
| 253 | + Assert.IsTrue(TestMessage.Handled); |
| 254 | + Assert.AreEqual(2, TestMessage.DeserializedValues.Count); |
| 255 | + Assert.AreEqual(message, TestMessage.DeserializedValues[0]); |
| 256 | + Assert.AreEqual(message2, TestMessage.DeserializedValues[1]); |
252 | 257 |
|
253 | | - m_MessageManager.ProcessIncomingMessageQueue(); |
254 | | - Assert.IsTrue(TestMessage.Deserialized); |
255 | | - Assert.IsTrue(TestMessage.Handled); |
256 | | - Assert.AreEqual(2, TestMessage.DeserializedValues.Count); |
257 | | - Assert.AreEqual(message, TestMessage.DeserializedValues[0]); |
258 | | - Assert.AreEqual(message2, TestMessage.DeserializedValues[1]); |
259 | | - } |
260 | | - } |
| 258 | + // Check for GC Allocations |
| 259 | + Assert.That(() => |
| 260 | + { |
| 261 | + m_MessageManager.HandleIncomingData(0, data, 0); |
| 262 | + m_MessageManager.ProcessIncomingMessageQueue(); |
| 263 | + }, Is.Not.AllocatingGCMemory()); |
261 | 264 | } |
262 | 265 | } |
263 | 266 | } |
0 commit comments