From 1892ab2b7ff40722d0fca107be79110752513312 Mon Sep 17 00:00:00 2001 From: Noel Stephens Date: Fri, 25 Sep 2026 14:04:27 -0500 Subject: [PATCH 1/2] fix: NGO CoreCLR compatibility Resolves the NGO CoreCLR test failures and re-enables every test that was disabled for CoreCLR. UUM-149592 - NetworkVariable serialization codegen not generated for some types - CoreCLR enforces generic constraints on method instantiations and Mono does not. The ILPP-generated NetworkVariableSerializationHelper.InitializeSerialization emitted InitializeEqualityChecker_HashSet>, which violates T : IEquatable, so CoreCLR rejected the whole method and every type registered by that assembly fell back to FallbackSerializer. - Removed the IEquatable constraint from InitializeEqualityChecker_HashSet and EqualityEqualsHashSet. Neither uses it, and #3891 already removed it from the rest of the HashSet serialization path to support nested HashSets. - NetworkBehaviourILPP now validates every emitted serializer and equality checker call against its generic constraints, and reports a compile error instead of emitting IL that CoreCLR rejects. UUM-149591 - integration tests fail to start server and client instances - Mostly a consequence of UUM-149592: player prefabs with NetworkVariables threw during synchronization, so connections never completed. - PeerDisconnectCallbackTests assumed client ids follow creation order. It now finds the target client by id. UUM-149595 - DAHost player-prefab fetch throws "An item with the same key has already been added" - NetworkClientAndPlayerObjectTests never cleared m_ChangedPlayerPrefabs between tests and keyed each fetched prefab on the last client's id. It now clears the dictionary on teardown and keys on the fetching client. UUM-149597 - unexpected owner write-permission error - OwnerPermissionHideTests assumed client ids follow creation order. Each object's owner is now chosen by client id. Removed all ENABLE_CORECLR [Explicit] and [UnityCoreClrExplicitDisabled] attributes. Every previously disabled test passes on CoreCLR (833/833), and the full PlayMode (5423 passed, 0 failed) and EditMode (1371 passed) suites pass on a trunk CoreCLR editor. --- .../Editor/CodeGen/CodeGenHelpers.cs | 142 ++++++++++++++++++ .../Editor/CodeGen/NetworkBehaviourILPP.cs | 13 ++ .../Serialization/NetworkVariableEquality.cs | 2 +- .../Serialization/TypedILPPInitializers.cs | 2 +- .../DeferredDespawningTests.cs | 3 - .../NetworkClientAndPlayerObjectTests.cs | 11 +- .../Configuration/SinglePlayerSessions.cs | 3 - .../CustomSerializationDocsTests.cs | 6 - .../MessageReceiveAllocationTests.cs | 1 - .../NetworkObjectSynchronizationTests.cs | 9 -- .../NetworkVariable/NetworkListTests.cs | 3 - .../NetworkVariableAnticipationTests.cs | 3 - ...NetworkVariableCollectionsChangingTests.cs | 3 - .../NetworkVariableCollectionsTests.cs | 3 - .../NetworkVariableGeneralTests.cs | 3 - .../NetworkVariablePermissionTests.cs | 3 - .../NetworkVariable/NetworkVariableTests.cs | 81 ---------- .../NetworkVariableTraitsTests.cs | 3 - ...tworkVariableUserSerializableTypesTests.cs | 6 - .../NetworkVariable/OwnerPermissionTests.cs | 16 +- .../Runtime/PeerDisconnectCallbackTests.cs | 15 +- .../Tests/Runtime/Rpc/RpcTests.cs | 3 - .../Runtime/Rpc/RpcTypeSerializationTests.cs | 6 - .../NetworkBehaviourReferenceTests.cs | 12 -- .../NetworkObjectReferenceTests.cs | 9 -- .../Transports/SinglePlayerTransportTests.cs | 3 - 26 files changed, 181 insertions(+), 183 deletions(-) diff --git a/com.unity.netcode.gameobjects/Editor/CodeGen/CodeGenHelpers.cs b/com.unity.netcode.gameobjects/Editor/CodeGen/CodeGenHelpers.cs index 2b3b7d99f1..41d4a8c570 100644 --- a/com.unity.netcode.gameobjects/Editor/CodeGen/CodeGenHelpers.cs +++ b/com.unity.netcode.gameobjects/Editor/CodeGen/CodeGenHelpers.cs @@ -208,6 +208,148 @@ public static bool HasInterface(this TypeReference typeReference, string interfa } } + /// + /// Checks a generic method instantiation against the generic constraints of the method it instantiates. + /// Mono does not enforce these on the calls codegen emits, but CoreCLR does, and it rejects the entire + /// calling method if any single call in it violates them. + /// + /// The instantiation to validate. + /// Why the instantiation is invalid, or null when it is valid. + /// True if every generic argument satisfies its parameter's constraints. + public static bool SatisfiesGenericConstraints(this GenericInstanceMethod method, out string violation) + { + var genericParameters = method.ElementMethod.Resolve().GenericParameters; + for (var i = 0; i < genericParameters.Count; ++i) + { + var parameter = genericParameters[i]; + var argument = method.GenericArguments[i]; + violation = GetConstraintViolation(parameter, argument, method.GenericArguments); + if (violation != null) + { + violation = $"{argument.FullName} {violation} (required by {parameter.Name} on {method.ElementMethod.Name})"; + return false; + } + } + + violation = null; + return true; + } + + private static string GetConstraintViolation(GenericParameter parameter, TypeReference argument, IList methodArguments) + { + var resolved = argument.Resolve(); + if (resolved == null) + { + return "could not be resolved"; + } + + if (parameter.HasNotNullableValueTypeConstraint && (!resolved.IsValueType || resolved.FullName == typeof(Nullable<>).FullName)) + { + return "is not a non-nullable value type"; + } + + if (parameter.HasReferenceTypeConstraint && resolved.IsValueType) + { + return "is not a reference type"; + } + + if (parameter.HasDefaultConstructorConstraint && !resolved.IsValueType && (resolved.IsAbstract || !HasPublicParameterlessConstructor(resolved))) + { + return "does not have a public parameterless constructor"; + } + + foreach (var constraint in parameter.Constraints) + { +#if CECIL_CONSTRAINTS_ARE_TYPE_REFERENCES + var constraintType = constraint; +#else + var constraintType = constraint.ConstraintType; +#endif + // The unmanaged constraint is encoded as System.ValueType modreq(UnmanagedType); the runtime only checks the value type part. + if (constraintType is RequiredModifierType modifierType) + { + constraintType = modifierType.ElementType; + } + + constraintType = SubstituteGenericArguments(constraintType, GenericParameterType.Method, methodArguments); + if (constraintType.FullName == typeof(ValueType).FullName) + { + continue; + } + + if (!IsAssignableTo(argument, constraintType.FullName)) + { + return $"does not implement or derive from {constraintType.FullName}"; + } + } + + return null; + } + + private static bool HasPublicParameterlessConstructor(TypeDefinition type) + { + foreach (var method in type.Methods) + { + if (method.IsConstructor && !method.IsStatic && method.IsPublic && !method.HasParameters) + { + return true; + } + } + + return false; + } + + private static bool IsAssignableTo(TypeReference type, string targetFullName) + { + if (type.FullName == targetFullName) + { + return true; + } + + var resolved = type.Resolve(); + if (resolved == null) + { + return false; + } + + // Interfaces and the base type are declared against the definition's own generic parameters, so close them over this instance's arguments. + var typeArguments = (type as GenericInstanceType)?.GenericArguments; + foreach (var implemented in resolved.Interfaces) + { + if (IsAssignableTo(SubstituteGenericArguments(implemented.InterfaceType, GenericParameterType.Type, typeArguments), targetFullName)) + { + return true; + } + } + + return resolved.BaseType != null && IsAssignableTo(SubstituteGenericArguments(resolved.BaseType, GenericParameterType.Type, typeArguments), targetFullName); + } + + private static TypeReference SubstituteGenericArguments(TypeReference type, GenericParameterType parameterType, IList arguments) + { + if (arguments == null) + { + return type; + } + + if (type is GenericParameter genericParameter && genericParameter.Type == parameterType) + { + return arguments[genericParameter.Position]; + } + + if (type is GenericInstanceType genericInstance) + { + var substituted = new GenericInstanceType(genericInstance.ElementType); + foreach (var argument in genericInstance.GenericArguments) + { + substituted.GenericArguments.Add(SubstituteGenericArguments(argument, parameterType, arguments)); + } + return substituted; + } + + return type; + } + public static bool IsSerializable(this TypeReference typeReference) { var typeSystem = typeReference.Module.TypeSystem; diff --git a/com.unity.netcode.gameobjects/Editor/CodeGen/NetworkBehaviourILPP.cs b/com.unity.netcode.gameobjects/Editor/CodeGen/NetworkBehaviourILPP.cs index 0714f554dd..d8ab346df4 100644 --- a/com.unity.netcode.gameobjects/Editor/CodeGen/NetworkBehaviourILPP.cs +++ b/com.unity.netcode.gameobjects/Editor/CodeGen/NetworkBehaviourILPP.cs @@ -424,6 +424,19 @@ private void CreateNetworkVariableTypeInitializers(AssemblyDefinition assembly, equalityMethod.GenericArguments.Add(type); } + // A single call violating its constraints makes CoreCLR reject this whole method, dropping every registration in the assembly. + if (serializeMethod != null && !serializeMethod.SatisfiesGenericConstraints(out var serializeViolation)) + { + m_Diagnostics.AddError($"{type} cannot be used in a network variable - {serializeViolation}."); + continue; + } + + if (!equalityMethod.SatisfiesGenericConstraints(out var equalityViolation)) + { + m_Diagnostics.AddError($"{type} cannot be used in a network variable - {equalityViolation}."); + continue; + } + if (serializeMethod != null) { instructions.Add(processor.Create(OpCodes.Call, m_MainModule.ImportReference(serializeMethod))); diff --git a/com.unity.netcode.gameobjects/Runtime/NetworkVariable/Serialization/NetworkVariableEquality.cs b/com.unity.netcode.gameobjects/Runtime/NetworkVariable/Serialization/NetworkVariableEquality.cs index 6b0a3c08c0..6a0168511c 100644 --- a/com.unity.netcode.gameobjects/Runtime/NetworkVariable/Serialization/NetworkVariableEquality.cs +++ b/com.unity.netcode.gameobjects/Runtime/NetworkVariable/Serialization/NetworkVariableEquality.cs @@ -124,7 +124,7 @@ internal static bool EqualityEqualsList(ref List a, ref return true; } - internal static bool EqualityEqualsHashSet(ref HashSet a, ref HashSet b) where TValueType : IEquatable + internal static bool EqualityEqualsHashSet(ref HashSet a, ref HashSet b) { if (a == null != (b == null)) { diff --git a/com.unity.netcode.gameobjects/Runtime/NetworkVariable/Serialization/TypedILPPInitializers.cs b/com.unity.netcode.gameobjects/Runtime/NetworkVariable/Serialization/TypedILPPInitializers.cs index 9fd42b2ae3..9fe5e38b2d 100644 --- a/com.unity.netcode.gameobjects/Runtime/NetworkVariable/Serialization/TypedILPPInitializers.cs +++ b/com.unity.netcode.gameobjects/Runtime/NetworkVariable/Serialization/TypedILPPInitializers.cs @@ -231,7 +231,7 @@ public static void InitializeEqualityChecker_List() /// Registers an unmanaged type that will be checked for equality using T.Equals() /// /// The type of elements in the HashSet - public static void InitializeEqualityChecker_HashSet() where T : IEquatable + public static void InitializeEqualityChecker_HashSet() { NetworkVariableSerialization>.AreEqual = NetworkVariableEquality.EqualityEqualsHashSet; } diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/DistributedAuthority/DeferredDespawningTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/DistributedAuthority/DeferredDespawningTests.cs index 262d78dd0a..1902539113 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/DistributedAuthority/DeferredDespawningTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/DistributedAuthority/DeferredDespawningTests.cs @@ -53,9 +53,6 @@ protected override void OnServerAndClientsCreated() [UnityTest] -#if ENABLE_CORECLR - [Explicit("NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer), see https://jira.unity3d.com/browse/UUM-149592")] -#endif public IEnumerator DeferredDespawning() { // Setup for test diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/DistributedAuthority/NetworkClientAndPlayerObjectTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/DistributedAuthority/NetworkClientAndPlayerObjectTests.cs index fd0723e111..f4b1167a9e 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/DistributedAuthority/NetworkClientAndPlayerObjectTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/DistributedAuthority/NetworkClientAndPlayerObjectTests.cs @@ -30,6 +30,7 @@ public NetworkClientAndPlayerObjectTests(HostOrServer hostOrServer) : base(hostO protected override IEnumerator OnTearDown() { m_PlayerPrefabs.Clear(); + m_ChangedPlayerPrefabs.Clear(); return base.OnTearDown(); } @@ -47,7 +48,7 @@ protected override void OnNewClientCreated(NetworkManager networkManager) { if (m_DistributedAuthority) { - networkManager.OnFetchLocalPlayerPrefabToSpawn = FetchPlayerPrefabToSpawn; + networkManager.OnFetchLocalPlayerPrefabToSpawn = () => FetchPlayerPrefabToSpawn(networkManager); } base.OnNewClientCreated(networkManager); } @@ -56,11 +57,10 @@ protected override void OnNewClientCreated(NetworkManager networkManager) /// Only for distributed authority mode /// /// a unique player prefab for the player - private GameObject FetchPlayerPrefabToSpawn() + private GameObject FetchPlayerPrefabToSpawn(NetworkManager networkManager) { var prefabObject = GetRandomPlayerPrefab(); - var clientId = m_ClientNetworkManagers[m_ClientNetworkManagers.Length - 1].LocalClientId; - m_ChangedPlayerPrefabs.Add(clientId, prefabObject.GlobalObjectIdHash); + m_ChangedPlayerPrefabs.Add(networkManager.LocalClientId, prefabObject.GlobalObjectIdHash); return prefabObject.gameObject; } @@ -155,9 +155,6 @@ private bool AllNetworkClientsValidated() /// Validates the same thing when a client late joins and when a client disconnects. /// [UnityTest] -#if ENABLE_CORECLR - [Explicit("ValidateNetworkClients throws duplicate-key ArgumentException on CoreCLR (DAHost), see https://jira.unity3d.com/browse/UUM-149595")] -#endif public IEnumerator ValidateNetworkClients() { // Validate the initial clients created diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/DocumentationCodeSamples/Configuration/SinglePlayerSessions.cs b/com.unity.netcode.gameobjects/Tests/Runtime/DocumentationCodeSamples/Configuration/SinglePlayerSessions.cs index 7b46e03916..945807a06c 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/DocumentationCodeSamples/Configuration/SinglePlayerSessions.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/DocumentationCodeSamples/Configuration/SinglePlayerSessions.cs @@ -151,9 +151,6 @@ protected override void OnNewClientCreated(NetworkManager networkManager) } [UnityTest] -#if ENABLE_CORECLR - [Explicit("NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer), see https://jira.unity3d.com/browse/UUM-149592")] -#endif public IEnumerator SwitchTransportTest() { var authority = GetAuthorityNetworkManager(); diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/DocumentationCodeSamples/NetworkVariable/CustomSerializationDocsTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/DocumentationCodeSamples/NetworkVariable/CustomSerializationDocsTests.cs index fc87bd93af..1e6096b187 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/DocumentationCodeSamples/NetworkVariable/CustomSerializationDocsTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/DocumentationCodeSamples/NetworkVariable/CustomSerializationDocsTests.cs @@ -1,8 +1,5 @@ using System.Collections; using System.Text; -#if ENABLE_CORECLR -using NUnit.Framework; -#endif using Unity.Netcode; using Unity.Netcode.TestHelpers.Runtime; using UnityEngine; @@ -176,9 +173,6 @@ private bool ValidateAllAreEqual(StringBuilder errorLog) } [UnityTest] -#if ENABLE_CORECLR - [Explicit("NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer), see https://jira.unity3d.com/browse/UUM-149592")] -#endif public IEnumerator TestHealthCode() { var authority = GetAuthorityNetworkManager(); diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/Messaging/MessageReceiveAllocationTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/Messaging/MessageReceiveAllocationTests.cs index b0520eb486..bcd768ac9c 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/Messaging/MessageReceiveAllocationTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/Messaging/MessageReceiveAllocationTests.cs @@ -23,7 +23,6 @@ public void NotMeRpc() [TestFixture(HostOrServer.Host)] [TestFixture(HostOrServer.DAHost)] - [UnityCoreClrExplicitDisabled("https://jira.unity3d.com/browse/UUM-149591", "NGO multi-instance test sessions fail to start/connect or time out on CoreCLR")] internal class MessageReceiveAllocationTests : NetcodeIntegrationTest { protected override int NumberOfClients => 1; diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkObject/NetworkObjectSynchronizationTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkObject/NetworkObjectSynchronizationTests.cs index f0deca9593..7535e4ffce 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkObject/NetworkObjectSynchronizationTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkObject/NetworkObjectSynchronizationTests.cs @@ -94,9 +94,6 @@ protected override void OnNewClientCreated(NetworkManager networkManager) } [UnityTest] -#if ENABLE_CORECLR - [Explicit("NGO multi-instance test sessions fail to start/connect or time out on CoreCLR, see https://jira.unity3d.com/browse/UUM-149591")] -#endif public IEnumerator NetworkObjectDeserializationFailure() { m_CurrentLogLevel = LogLevel.Nothing; @@ -280,9 +277,6 @@ private void ValidateNetworkBehaviourWithNetworkVariables(NetworkObject authorit /// will still be initialized properly /// [UnityTest] -#if ENABLE_CORECLR - [Explicit("NGO multi-instance test sessions fail to start/connect or time out on CoreCLR, see https://jira.unity3d.com/browse/UUM-149591")] -#endif public IEnumerator NetworkBehaviourSynchronization() { var authority = GetAuthorityNetworkManager(); @@ -325,9 +319,6 @@ public IEnumerator NetworkBehaviourSynchronization() /// A basic validation for the NetworkBehaviour.OnSynchronize method /// [UnityTest] -#if ENABLE_CORECLR - [Explicit("NGO multi-instance test sessions fail to start/connect or time out on CoreCLR, see https://jira.unity3d.com/browse/UUM-149591")] -#endif public IEnumerator NetworkBehaviourOnSynchronize() { var authority = GetAuthorityNetworkManager(); diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkListTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkListTests.cs index 5ff1529d66..daceeee8b9 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkListTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkListTests.cs @@ -248,9 +248,6 @@ void TestForceUpdateCallback(NetworkListEvent _) // don't extend this please [UnityTest] -#if ENABLE_CORECLR - [Explicit("NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer), see https://jira.unity3d.com/browse/UUM-149592")] -#endif public IEnumerator LegacyPredicateTesting() { var authority = GetAuthorityNetworkManager(); diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableAnticipationTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableAnticipationTests.cs index aa56a4ef40..09d37cb64a 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableAnticipationTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableAnticipationTests.cs @@ -58,9 +58,6 @@ public void SetReanticipateValueRpc(float f) } } -#if ENABLE_CORECLR - [Explicit("NGO multi-instance test sessions fail to start/connect or time out on CoreCLR, see https://jira.unity3d.com/browse/UUM-149591")] -#endif internal class NetworkVariableAnticipationTests : NetcodeIntegrationTest { protected override int NumberOfClients => 2; diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableCollectionsChangingTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableCollectionsChangingTests.cs index cf9e0e103c..ce0b7d378c 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableCollectionsChangingTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableCollectionsChangingTests.cs @@ -17,9 +17,6 @@ namespace Unity.Netcode.RuntimeTests [TestFixture(HostOrServer.Host, CollectionTypes.Dictionary)] [TestFixture(HostOrServer.Server, CollectionTypes.List)] [TestFixture(HostOrServer.Server, CollectionTypes.Dictionary)] -#if ENABLE_CORECLR - [Explicit("NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer), see https://jira.unity3d.com/browse/UUM-149592")] -#endif internal class NetworkVariableCollectionsChangingTests : NetcodeIntegrationTest { protected override int NumberOfClients => 2; diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableCollectionsTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableCollectionsTests.cs index fb3d2a72bb..69e8727f27 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableCollectionsTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableCollectionsTests.cs @@ -22,9 +22,6 @@ namespace Unity.Netcode.RuntimeTests /// [TestFixture(HostOrServer.Host)] [TestFixture(HostOrServer.Server)] -#if ENABLE_CORECLR - [Explicit("NGO multi-instance test sessions fail to start/connect or time out on CoreCLR, see https://jira.unity3d.com/browse/UUM-149591")] -#endif internal class NetworkVariableCollectionsTests : NetcodeIntegrationTest { protected override int NumberOfClients => 2; diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableGeneralTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableGeneralTests.cs index 8e3e954879..b0f3e8be56 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableGeneralTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableGeneralTests.cs @@ -140,9 +140,6 @@ private bool ChangedValueMatches(StringBuilder errorLog) /// instances invoke . /// [UnityTest] -#if ENABLE_CORECLR - [Explicit("NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer), see https://jira.unity3d.com/browse/UUM-149592")] -#endif public IEnumerator ApplyValueDuringSpawnSequence() { var authority = GetAuthorityNetworkManager(); diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariablePermissionTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariablePermissionTests.cs index 90f3f774ed..73481fd02c 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariablePermissionTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariablePermissionTests.cs @@ -11,9 +11,6 @@ namespace Unity.Netcode.RuntimeTests { [TestFixtureSource(nameof(TestDataSource))] -#if ENABLE_CORECLR - [Explicit("NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer), see https://jira.unity3d.com/browse/UUM-149592")] -#endif internal class NetworkVariablePermissionTests : NetcodeIntegrationTest { public static IEnumerable TestDataSource() diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableTests.cs index be4e94cb7c..a545d88fa8 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableTests.cs @@ -354,9 +354,6 @@ private void InitializeServerAndClients(HostOrServer useHost) /// Runs generalized tests on all predefined NetworkVariable types /// [Test] -#if ENABLE_CORECLR - [Explicit("NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer), see https://jira.unity3d.com/browse/UUM-149592")] -#endif public void AllNetworkVariableTypes([Values] HostOrServer useHost) { #if UNIFIED_NETCODE @@ -403,9 +400,6 @@ public void AllNetworkVariableTypes([Values] HostOrServer useHost) } [Test] -#if ENABLE_CORECLR - [Explicit("NGO multi-instance test sessions fail to start/connect or time out on CoreCLR, see https://jira.unity3d.com/browse/UUM-149591")] -#endif public void ClientWritePermissionTest([Values] HostOrServer useHost) { InitializeServerAndClients(useHost); @@ -420,9 +414,6 @@ public void ClientWritePermissionTest([Values] HostOrServer useHost) /// Runs tests that network variables sync on client whatever the local value of . /// [Test] -#if ENABLE_CORECLR - [Explicit("NGO multi-instance test sessions fail to start/connect or time out on CoreCLR, see https://jira.unity3d.com/browse/UUM-149591")] -#endif public void NetworkVariableSync_WithDifferentTimeScale([Values] HostOrServer useHost, [Values(0.0f, 1.0f, 2.0f)] float timeScale) { Time.timeScale = timeScale; @@ -437,9 +428,6 @@ public void NetworkVariableSync_WithDifferentTimeScale([Values] HostOrServer use } [Test] -#if ENABLE_CORECLR - [Explicit("NGO multi-instance test sessions fail to start/connect or time out on CoreCLR, see https://jira.unity3d.com/browse/UUM-149591")] -#endif public void FixedString32Test([Values] HostOrServer useHost) { InitializeServerAndClients(useHost); @@ -451,9 +439,6 @@ public void FixedString32Test([Values] HostOrServer useHost) } [Test] -#if ENABLE_CORECLR - [Explicit("NGO multi-instance test sessions fail to start/connect or time out on CoreCLR, see https://jira.unity3d.com/browse/UUM-149591")] -#endif public void TestNetworkVariableClass([Values] HostOrServer useHost) { InitializeServerAndClients(useHost); @@ -473,9 +458,6 @@ bool VerifyClass() } [Test] -#if ENABLE_CORECLR - [Explicit("NGO multi-instance test sessions fail to start/connect or time out on CoreCLR, see https://jira.unity3d.com/browse/UUM-149591")] -#endif public void TestNetworkVariableTemplateClass([Values] HostOrServer useHost) { InitializeServerAndClients(useHost); @@ -494,9 +476,6 @@ bool VerifyClass() } [Test] -#if ENABLE_CORECLR - [Explicit("NGO multi-instance test sessions fail to start/connect or time out on CoreCLR, see https://jira.unity3d.com/browse/UUM-149591")] -#endif public void TestNetworkVariableStruct([Values] HostOrServer useHost) { InitializeServerAndClients(useHost); @@ -515,9 +494,6 @@ bool VerifyStructure() } [Test] -#if ENABLE_CORECLR - [Explicit("NGO multi-instance test sessions fail to start/connect or time out on CoreCLR, see https://jira.unity3d.com/browse/UUM-149591")] -#endif public void TestNetworkVariableTemplateStruct([Values] HostOrServer useHost) { InitializeServerAndClients(useHost); @@ -536,9 +512,6 @@ bool VerifyStructure() } [Test] -#if ENABLE_CORECLR - [Explicit("NGO multi-instance test sessions fail to start/connect or time out on CoreCLR, see https://jira.unity3d.com/browse/UUM-149591")] -#endif public void TestNetworkVariableTemplateBehaviourClass([Values] HostOrServer useHost) { InitializeServerAndClients(useHost); @@ -561,9 +534,6 @@ bool VerifyClass() } [Test] -#if ENABLE_CORECLR - [Explicit("NGO multi-instance test sessions fail to start/connect or time out on CoreCLR, see https://jira.unity3d.com/browse/UUM-149591")] -#endif public void TestNetworkVariableTemplateBehaviourClassNotReferencedElsewhere([Values] HostOrServer useHost) { InitializeServerAndClients(useHost); @@ -582,9 +552,6 @@ bool VerifyClass() } [Test] -#if ENABLE_CORECLR - [Explicit("NGO multi-instance test sessions fail to start/connect or time out on CoreCLR, see https://jira.unity3d.com/browse/UUM-149591")] -#endif public void TestNetworkVariableTemplateBehaviourStruct([Values] HostOrServer useHost) { InitializeServerAndClients(useHost); @@ -603,9 +570,6 @@ bool VerifyClass() } [Test] -#if ENABLE_CORECLR - [Explicit("NGO multi-instance test sessions fail to start/connect or time out on CoreCLR, see https://jira.unity3d.com/browse/UUM-149591")] -#endif public void TestNetworkVariableEnum([Values] HostOrServer useHost) { InitializeServerAndClients(useHost); @@ -623,9 +587,6 @@ bool VerifyStructure() } [Test] -#if ENABLE_CORECLR - [Explicit("NGO multi-instance test sessions fail to start/connect or time out on CoreCLR, see https://jira.unity3d.com/browse/UUM-149591")] -#endif public void TestINetworkSerializableClassCallsNetworkSerialize([Values] HostOrServer useHost) { InitializeServerAndClients(useHost); @@ -644,9 +605,6 @@ public void TestINetworkSerializableClassCallsNetworkSerialize([Values] HostOrSe } [Test] -#if ENABLE_CORECLR - [Explicit("NGO multi-instance test sessions fail to start/connect or time out on CoreCLR, see https://jira.unity3d.com/browse/UUM-149591")] -#endif public void TestINetworkSerializableStructCallsNetworkSerialize([Values] HostOrServer useHost) { InitializeServerAndClients(useHost); @@ -661,9 +619,6 @@ public void TestINetworkSerializableStructCallsNetworkSerialize([Values] HostOrS } [Test] -#if ENABLE_CORECLR - [Explicit("NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer), see https://jira.unity3d.com/browse/UUM-149592")] -#endif public void TestCustomGenericSerialization() { // Just verifies that the ILPP codegen initialized these values for this type. @@ -717,9 +672,6 @@ public void TestUnsupportedManagedTypesThrowExceptions() } [Test] -#if ENABLE_CORECLR - [Explicit("NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer), see https://jira.unity3d.com/browse/UUM-149592")] -#endif public void TestUnsupportedManagedTypesWithUserSerializationDoNotThrowExceptions() { var variable = new NetworkVariable(); @@ -775,9 +727,6 @@ public void TestUnsupportedUnmanagedTypesThrowExceptions() } [Test] -#if ENABLE_CORECLR - [Explicit("NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer), see https://jira.unity3d.com/browse/UUM-149592")] -#endif public void TestTypesReferencedInSubclassSerializeSuccessfully() { var variable = new NetworkVariableSubclass>(); @@ -793,9 +742,6 @@ public void TestTypesReferencedInSubclassSerializeSuccessfully() } [Test] -#if ENABLE_CORECLR - [Explicit("NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer), see https://jira.unity3d.com/browse/UUM-149592")] -#endif public void TestUnsupportedUnmanagedTypesWithUserSerializationDoNotThrowExceptions() { var variable = new NetworkVariable(); @@ -869,9 +815,6 @@ public void WhenCreatingAnArrayOfNetVars_InitializingVariablesDoesNotThrowAnExce } [Test] -#if ENABLE_CORECLR - [Explicit("NGO multi-instance test sessions fail to start/connect or time out on CoreCLR, see https://jira.unity3d.com/browse/UUM-149591")] -#endif public void TestNetworkVariableChangeAndReturnInSameFrame([Values] HostOrServer useHost) { InitializeServerAndClients(useHost); @@ -1429,9 +1372,6 @@ private void TestValueTypeNativeHashMap(NativeHashMap te } #endif [Test] -#if ENABLE_CORECLR - [Explicit("NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer), see https://jira.unity3d.com/browse/UUM-149592")] -#endif public void WhenSerializingAndDeserializingValueTypeNetworkVariables_ValuesAreSerializedCorrectly( [Values(typeof(byte), typeof(sbyte), typeof(short), typeof(ushort), typeof(int), typeof(uint), @@ -1599,9 +1539,6 @@ public void WhenSerializingAndDeserializingValueTypeNetworkVariables_ValuesAreSe } [Test] -#if ENABLE_CORECLR - [Explicit("NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer), see https://jira.unity3d.com/browse/UUM-149592")] -#endif public void WhenSerializingAndDeserializingValueTypeNativeArrayNetworkVariables_ValuesAreSerializedCorrectly( [Values(typeof(byte), typeof(sbyte), typeof(short), typeof(ushort), typeof(int), typeof(uint), @@ -1945,9 +1882,6 @@ public string ArrayStr(NativeArray arr) where T : unmanaged [Test] [UnityPlatform(exclude = new[] { RuntimePlatform.Android, RuntimePlatform.IPhonePlayer })] // Ignored test tracked in MTT-11343 [Repeat(5)] -#if ENABLE_CORECLR - [Explicit("NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer), see https://jira.unity3d.com/browse/UUM-149592")] -#endif public void WhenSerializingAndDeserializingVeryLargeValueTypeNativeArrayNetworkVariables_ValuesAreSerializedCorrectly( [Values(typeof(byte), typeof(sbyte), typeof(short), typeof(ushort), typeof(int), typeof(uint), @@ -2410,9 +2344,6 @@ public string DictionaryStr(Dictionary list) [Test] [UnityPlatform(exclude = new[] { RuntimePlatform.Android, RuntimePlatform.IPhonePlayer })] // Ignored test tracked in MTT-11343 [Repeat(5)] -#if ENABLE_CORECLR - [Explicit("NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer), see https://jira.unity3d.com/browse/UUM-149592")] -#endif public void WhenSerializingAndDeserializingVeryLargeListNetworkVariables_ValuesAreSerializedCorrectly( [Values(typeof(byte), typeof(sbyte), typeof(short), typeof(ushort), typeof(int), typeof(uint), @@ -2608,9 +2539,6 @@ public void WhenSerializingAndDeserializingVeryLargeListNetworkVariables_ValuesA [Test] [UnityPlatform(exclude = new[] { RuntimePlatform.Android, RuntimePlatform.IPhonePlayer })] // Ignored test tracked in MTT-11343 [Repeat(5)] -#if ENABLE_CORECLR - [Explicit("NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer), see https://jira.unity3d.com/browse/UUM-149592")] -#endif public void WhenSerializingAndDeserializingVeryLargeHashSetNetworkVariables_ValuesAreSerializedCorrectly( [Values(typeof(byte), typeof(sbyte), typeof(short), typeof(ushort), typeof(int), typeof(uint), @@ -2775,9 +2703,6 @@ public void WhenSerializingAndDeserializingVeryLargeHashSetNetworkVariables_Valu [Test] [UnityPlatform(exclude = new[] { RuntimePlatform.Android, RuntimePlatform.IPhonePlayer })] // Ignored test tracked in MTT-11343 [Repeat(5)] -#if ENABLE_CORECLR - [Explicit("NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer), see https://jira.unity3d.com/browse/UUM-149592")] -#endif public void WhenSerializingAndDeserializingVeryLargeDictionaryNetworkVariables_ValuesAreSerializedCorrectly( [Values(typeof(byte), typeof(ulong), typeof(Vector2), typeof(HashMapKeyClass))] Type keyType, @@ -4894,9 +4819,6 @@ public void WhenSerializingAndDeserializingVeryLargeValueTypeNativeHashMapNetwor #endif [Test] -#if ENABLE_CORECLR - [Explicit("NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer), see https://jira.unity3d.com/browse/UUM-149592")] -#endif public void TestManagedINetworkSerializableNetworkVariablesDeserializeInPlace() { var variable = new NetworkVariable @@ -4933,9 +4855,6 @@ public void TestManagedINetworkSerializableNetworkVariablesDeserializeInPlace() } [Test] -#if ENABLE_CORECLR - [Explicit("NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer), see https://jira.unity3d.com/browse/UUM-149592")] -#endif public void TestUnmnagedINetworkSerializableNetworkVariablesDeserializeInPlace() { var variable = new NetworkVariable diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableTraitsTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableTraitsTests.cs index 0672b50077..97d3e7a499 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableTraitsTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableTraitsTests.cs @@ -15,9 +15,6 @@ internal class NetworkVariableTraitsComponent : NetworkBehaviour [TestFixture(HostOrServer.Host)] [TestFixture(HostOrServer.DAHost)] -#if ENABLE_CORECLR - [Explicit("NGO multi-instance test sessions fail to start/connect or time out on CoreCLR, see https://jira.unity3d.com/browse/UUM-149591")] -#endif internal class NetworkVariableTraitsTests : NetcodeIntegrationTest { protected override int NumberOfClients => 3; diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableUserSerializableTypesTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableUserSerializableTypesTests.cs index 2b5700d3b8..c261bdf032 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableUserSerializableTypesTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableUserSerializableTypesTests.cs @@ -142,9 +142,6 @@ private bool CheckForClientInstance() where T : WorkingUserNetworkVariableCom } [UnityTest] -#if ENABLE_CORECLR - [Explicit("NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer), see https://jira.unity3d.com/browse/UUM-149592")] -#endif public IEnumerator WhenUsingAUserSerializableNetworkVariableWithUserSerialization_ReplicationWorks() { UserNetworkVariableSerialization.WriteValue = (FastBufferWriter writer, in MyTypeOne value) => @@ -185,9 +182,6 @@ public IEnumerator WhenUsingAUserSerializableNetworkVariableWithUserSerializatio } [UnityTest] -#if ENABLE_CORECLR - [Explicit("NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer), see https://jira.unity3d.com/browse/UUM-149592")] -#endif public IEnumerator WhenUsingAUserSerializableNetworkVariableWithUserSerializationViaExtensionMethod_ReplicationWorks() { UserNetworkVariableSerialization.WriteValue = NetworkVariableUserSerializableTypesTestsExtensionMethods.WriteValueSafe; diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/OwnerPermissionTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/OwnerPermissionTests.cs index 84edb4035e..95322ea42a 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/OwnerPermissionTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/OwnerPermissionTests.cs @@ -1,8 +1,5 @@ using System.Collections; using System.Collections.Generic; -#if ENABLE_CORECLR -using NUnit.Framework; -#endif using Unity.Netcode.TestHelpers.Runtime; using UnityEngine; using UnityEngine.TestTools; @@ -101,9 +98,6 @@ protected override void OnServerAndClientsCreated() } [UnityTest] -#if ENABLE_CORECLR - [Explicit("Unexpected owner write-permission error logged on CoreCLR, see https://jira.unity3d.com/browse/UUM-149597")] -#endif public IEnumerator OwnerPermissionTest() { // create 3 objects @@ -111,10 +105,18 @@ public IEnumerator OwnerPermissionTest() { OwnerPermissionObject.CurrentlySpawning = objectIndex; + // Object N is owned by client id N; ids follow connection order, which is not guaranteed to match creation order NetworkManager ownerManager = m_ServerNetworkManager; if (objectIndex != 0) { - ownerManager = m_ClientNetworkManagers[objectIndex - 1]; + foreach (var clientNetworkManager in m_ClientNetworkManagers) + { + if (clientNetworkManager.LocalClientId == (ulong)objectIndex) + { + ownerManager = clientNetworkManager; + break; + } + } } var spawnedInstance = SpawnObject(m_PrefabToSpawn, ownerManager); diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/PeerDisconnectCallbackTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/PeerDisconnectCallbackTests.cs index 2daaaf7a5f..ef6d71fad5 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/PeerDisconnectCallbackTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/PeerDisconnectCallbackTests.cs @@ -104,13 +104,20 @@ private void ClientToDisconnect_OnClientStopped(bool wasHost) } [UnityTest] -#if ENABLE_CORECLR - [Explicit("NGO multi-instance test sessions fail to start/connect or time out on CoreCLR, see https://jira.unity3d.com/browse/UUM-149591")] -#endif public IEnumerator TestPeerDisconnectCallback([Values] ClientDisconnectType clientDisconnectType, [Values(1ul, 2ul, 3ul)] ulong disconnectedClient) { m_TargetClientShutdown = false; - m_TargetClient = m_ClientNetworkManagers[disconnectedClient - 1]; + // Client ids follow connection order, which is not guaranteed to match creation order + m_TargetClient = null; + foreach (var clientNetworkManager in m_ClientNetworkManagers) + { + if (clientNetworkManager.LocalClientId == disconnectedClient) + { + m_TargetClient = clientNetworkManager; + break; + } + } + Assert.NotNull(m_TargetClient, $"No client has id {disconnectedClient}!"); m_TargetClientId = m_TargetClient.LocalClientId; m_TargetClient.OnClientStopped += ClientToDisconnect_OnClientStopped; foreach (var client in m_NetworkManagers) diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/Rpc/RpcTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/Rpc/RpcTests.cs index 306d329bbf..23c546e4fa 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/Rpc/RpcTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/Rpc/RpcTests.cs @@ -91,9 +91,6 @@ protected override void OnCreatePlayerPrefab() } [UnityTest] -#if ENABLE_CORECLR - [Explicit("NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer), see https://jira.unity3d.com/browse/UUM-149592")] -#endif public IEnumerator TestRpcs() { // This is the *SERVER VERSION* of the *CLIENT PLAYER* RpcTestNB component diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/Rpc/RpcTypeSerializationTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/Rpc/RpcTypeSerializationTests.cs index 964cacac4a..ca1ce942ae 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/Rpc/RpcTypeSerializationTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/Rpc/RpcTypeSerializationTests.cs @@ -1125,9 +1125,6 @@ public IEnumerator TestValueTypeNativeList(NativeList firstTest, NativeLis #endif [UnityTest] -#if ENABLE_CORECLR - [Explicit("NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer), see https://jira.unity3d.com/browse/UUM-149592")] -#endif public IEnumerator WhenSendingAValueTypeOverAnRpc_ValuesAreSerializedCorrectly( [Values(typeof(byte), typeof(sbyte), typeof(short), typeof(ushort), typeof(int), typeof(uint), @@ -1542,9 +1539,6 @@ public IEnumerator WhenSendingAnArrayOfValueTypesOverAnRpc_ValuesAreSerializedCo } [UnityTest] -#if ENABLE_CORECLR - [Explicit("NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer), see https://jira.unity3d.com/browse/UUM-149592")] -#endif public IEnumerator WhenSendingANativeArrayOfValueTypesOverAnRpc_ValuesAreSerializedCorrectly( [Values(typeof(byte), typeof(sbyte), typeof(short), typeof(ushort), typeof(int), typeof(uint), diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/Serialization/NetworkBehaviourReferenceTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/Serialization/NetworkBehaviourReferenceTests.cs index 9248ed159f..20e27d6492 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/Serialization/NetworkBehaviourReferenceTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/Serialization/NetworkBehaviourReferenceTests.cs @@ -22,9 +22,6 @@ public NetworkBehaviourReferenceTests(HostOrServer hostOrServer) : base(hostOrSe #region Tests using non-null NetworkBehaviours and RPCs [UnityTest] -#if ENABLE_CORECLR - [Explicit("NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer), see https://jira.unity3d.com/browse/UUM-149592")] -#endif public IEnumerator TestRpc() { yield return SpawnTestPrefabInstance(); @@ -39,9 +36,6 @@ public IEnumerator TestRpc() [UnityTest] -#if ENABLE_CORECLR - [Explicit("NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer), see https://jira.unity3d.com/browse/UUM-149592")] -#endif public IEnumerator TestRpcImplicitNetworkBehaviour() { yield return SpawnTestPrefabInstance(); @@ -57,9 +51,6 @@ public IEnumerator TestRpcImplicitNetworkBehaviour() #region Tests using non-null NetworkBehaviours and NetworkVariable [UnityTest] -#if ENABLE_CORECLR - [Explicit("NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer), see https://jira.unity3d.com/browse/UUM-149592")] -#endif public IEnumerator TestNetworkVariable() { yield return SpawnTestPrefabInstance(); @@ -78,9 +69,6 @@ public IEnumerator TestNetworkVariable() #region Validating using NULL as a NetworkBehaviourReference [UnityTest] -#if ENABLE_CORECLR - [Explicit("NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer), see https://jira.unity3d.com/browse/UUM-149592")] -#endif public IEnumerator TestSerializeNull() { yield return SpawnTestPrefabInstance(true); diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/Serialization/NetworkObjectReferenceTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/Serialization/NetworkObjectReferenceTests.cs index 8d6122a27b..139a4a9e4f 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/Serialization/NetworkObjectReferenceTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/Serialization/NetworkObjectReferenceTests.cs @@ -34,9 +34,6 @@ protected override void OnOneTimeSetup() } [UnityTest] -#if ENABLE_CORECLR - [Explicit("NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer), see https://jira.unity3d.com/browse/UUM-149592")] -#endif public IEnumerator TestSerializeNetworkObject() { yield return SpawnTestPrefabInstance(); @@ -64,9 +61,6 @@ public IEnumerator TestSerializeNetworkObject() } [UnityTest] -#if ENABLE_CORECLR - [Explicit("NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer), see https://jira.unity3d.com/browse/UUM-149592")] -#endif public IEnumerator TestSerializeNull() { yield return SpawnTestPrefabInstance(true); @@ -114,9 +108,6 @@ public IEnumerator TestSerializeNull() } [UnityTest] -#if ENABLE_CORECLR - [Explicit("NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer), see https://jira.unity3d.com/browse/UUM-149592")] -#endif public IEnumerator TestGetReferenceAndConversion() { yield return SpawnTestPrefabInstance(); diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/Transports/SinglePlayerTransportTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/Transports/SinglePlayerTransportTests.cs index 466a4e5a6b..4f198c73d2 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/Transports/SinglePlayerTransportTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/Transports/SinglePlayerTransportTests.cs @@ -176,9 +176,6 @@ protected override bool CanStartServerAndClients() } [UnityTest] -#if ENABLE_CORECLR - [Explicit("NGO NetworkVariable serialization codegen not generated for some types on CoreCLR (falls back to FallbackSerializer), see https://jira.unity3d.com/browse/UUM-149592")] -#endif public IEnumerator StartSinglePlayerAndSpawn() { m_CanStartHost = true; From efb31c3895c176dc5b74bfa30bab7efd0c249611 Mon Sep 17 00:00:00 2001 From: Noel Stephens Date: Fri, 25 Sep 2026 20:39:28 -0500 Subject: [PATCH 2/2] test: skip BuildTests.BasicBuildTest on Linux editors BuildPlayer in BasicBuildTest hangs past the job timeout on the ubuntu CI agents, for both 6000.7 and trunk, while Windows and macOS pass. The same timeouts happen on the develop-3.x.x nightly. Ignored on Linux editors only, as a temporary measure until the ubuntu CI issue is resolved. --- .../Tests/Editor/Build/BuildTests.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/com.unity.netcode.gameobjects/Tests/Editor/Build/BuildTests.cs b/com.unity.netcode.gameobjects/Tests/Editor/Build/BuildTests.cs index 432f3bdef8..68720220c1 100644 --- a/com.unity.netcode.gameobjects/Tests/Editor/Build/BuildTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Editor/Build/BuildTests.cs @@ -15,6 +15,10 @@ internal class BuildTests // Increased the Build test timeout from 3 to 10 minutes. [Timeout(900000)] [Test] +#if UNITY_EDITOR_LINUX + // Temporary: BuildPlayer hangs past the job timeout on the ubuntu CI agents (6000.7 and trunk), while Windows and macOS pass. + [Ignore("BuildPlayer hangs on the ubuntu CI agents; temporarily disabled on Linux editors until the ubuntu CI issue is resolved.")] +#endif public void BasicBuildTest() { var execAssembly = Assembly.GetExecutingAssembly();