diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/Messaging/NamedMessageTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/Messaging/NamedMessageTests.cs index 64bab78658..61adb962e6 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/Messaging/NamedMessageTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/Messaging/NamedMessageTests.cs @@ -279,5 +279,38 @@ public unsafe void ErrorMessageIsPrintedWhenAttemptingToSendNamedMessageWithTooB Assert.IsTrue(message.Contains($"Given message size ({msgSize} bytes) is greater than the maximum"), $"Unexpected exception: {message}"); } } + + [Test] + public void NamedMessageHandlerIsUnregisteredWithoutException() + { + var messageName = Guid.NewGuid().ToString(); + const int numMessagesToSend = 3; + const int expectedMessageHandlerCallCount = 1; + + var messageHandlerCalled = 0; + m_ServerNetworkManager.CustomMessagingManager.RegisterNamedMessageHandler( + messageName, + (_, _) => + { + messageHandlerCalled++; + m_ServerNetworkManager.CustomMessagingManager.UnregisterNamedMessageHandler(messageName); + }); + + var messageContent = new ForceNetworkSerializeByMemcpy(Guid.NewGuid()); + var writer = new FastBufferWriter(1300, Allocator.Temp); + using (writer) + { + writer.WriteValueSafe(messageContent); + for (var i = 0; i < numMessagesToSend; i++) + { + m_ServerNetworkManager.CustomMessagingManager.SendNamedMessage( + messageName, + m_ServerNetworkManager.LocalClientId, + writer); + } + } + + Assert.AreEqual(expectedMessageHandlerCallCount, messageHandlerCalled); + } } } diff --git a/pvpExceptions.json b/pvpExceptions.json index d506649f88..6a7fc8d678 100644 --- a/pvpExceptions.json +++ b/pvpExceptions.json @@ -860,6 +860,7 @@ "Unity.Netcode.RuntimeTests.NamedMessageTests: IEnumerator WhenSendingNamedMessageToAll_AllClientsReceiveIt(): undocumented", "Unity.Netcode.RuntimeTests.NamedMessageTests: void WhenSendingNamedMessageToNullClientList_ArgumentNullExceptionIsThrown(): undocumented", "Unity.Netcode.RuntimeTests.NamedMessageTests: void ErrorMessageIsPrintedWhenAttemptingToSendNamedMessageWithTooBigBuffer(): undocumented", + "Unity.Netcode.RuntimeTests.NamedMessageTests: void NamedMessageHandlerIsUnregisteredWithoutException(): undocumented", "Unity.Netcode.RuntimeTests.UnnamedMessageTests: undocumented", "Unity.Netcode.RuntimeTests.UnnamedMessageTests: NumberOfClients: undocumented", "Unity.Netcode.RuntimeTests.UnnamedMessageTests: IEnumerator UnnamedMessageIsReceivedOnClientWithContent(): undocumented",