Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion .pr_agent.toml
Original file line number Diff line number Diff line change
@@ -1,2 +1,9 @@
# This is the configuration for the u-pr bot
# https://github.cds.internal.unity3d.com/unity/u-pr
# For configuration of this file:
# https://developer.portal.internal.unity.com/catalog/default/component/u-pr/docs/configuration/automatic_runs/

[github_app]
pr_commands = []
handle_pr_actions = ['opened', 'ready_for_review'] # PR events that auto-run pr_commands
pr_commands = ["/harness-review"] # what runs on those events
reviewer_commands = ["/harness-review"] # what runs when @u-pr is added as reviewer
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
using Unity.Collections;
using Unity.Netcode;
using Unity.Netcode.TestHelpers.Runtime;
using UnityEngine;
using UnityEngine.TestTools;

namespace TestProject.RuntimeTests
Expand All @@ -24,6 +25,7 @@ public SceneManagementSynchronizationTests(HostOrServer hostOrServer) : base(hos

private struct ExpectedEvent
{
public bool IsSceneEvent;
public SceneEvent SceneEvent;
public ConnectionEventData ConnectionEvent;
}
Expand Down Expand Up @@ -51,13 +53,19 @@ private void AssertEventMatchesExpectedEvent<T>(Action<ExpectedEvent> predicate,
if (m_ExpectedEventQueue.Count > 0)
{
var expectedEvent = m_ExpectedEventQueue.Dequeue();
predicate(expectedEvent);
try
{
predicate(expectedEvent);
}
catch (Exception failure)
{
Debug.LogException(failure);
}
}
else
{
Assert.Fail($"Received unexpected event at index {s_NumEventsProcessed}: {eventType}");
}

s_NumEventsProcessed++;
}

Expand Down Expand Up @@ -100,42 +108,30 @@ public IEnumerator SynchronizationCallbacks_Authority()
var expectedClientId = GetNonAuthorityNetworkManager().LocalClientId + 1;

// Setup expected events
m_ExpectedEventQueue.Enqueue(new ExpectedEvent()
AddExpectedEvent(new SceneEvent()
{
SceneEvent = new SceneEvent()
{
SceneEventType = SceneEventType.Synchronize,
ClientId = expectedClientId
},
SceneEventType = SceneEventType.Synchronize,
ClientId = expectedClientId
});

m_ExpectedEventQueue.Enqueue(new ExpectedEvent()
AddExpectedEvent(new SceneEvent()
{
SceneEvent = new SceneEvent()
{
SceneEventType = SceneEventType.SynchronizeComplete,
ClientId = expectedClientId,
},
SceneEventType = SceneEventType.SynchronizeComplete,
ClientId = expectedClientId,
});

m_ExpectedEventQueue.Enqueue(new ExpectedEvent()
AddExpectedEvent(new ConnectionEventData()
{
ConnectionEvent = new ConnectionEventData()
{
EventType = ConnectionEvent.ClientConnected,
ClientId = expectedClientId,
}
EventType = ConnectionEvent.ClientConnected,
ClientId = expectedClientId,
});

if (m_UseHost)
{
m_ExpectedEventQueue.Enqueue(new ExpectedEvent()
AddExpectedEvent(new ConnectionEventData()
{
ConnectionEvent = new ConnectionEventData()
{
EventType = ConnectionEvent.PeerConnected,
ClientId = expectedClientId,
}
EventType = ConnectionEvent.PeerConnected,
ClientId = expectedClientId,
});
}

Expand All @@ -158,31 +154,22 @@ public IEnumerator SynchronizationCallbacks_NonAuthority()
var expectedPeerClientIds = m_UseHost ? new[] { authorityId, peerClientId } : new[] { peerClientId };

// Setup expected events
m_ExpectedEventQueue.Enqueue(new ExpectedEvent()
AddExpectedEvent(new SceneEvent()
{
SceneEvent = new SceneEvent()
{
SceneEventType = SceneEventType.Synchronize,
ClientId = expectedClientId,
},
SceneEventType = SceneEventType.Synchronize,
ClientId = expectedClientId,
});
m_ExpectedEventQueue.Enqueue(new ExpectedEvent()
AddExpectedEvent(new ConnectionEventData()
{
ConnectionEvent = new ConnectionEventData()
{
EventType = ConnectionEvent.ClientConnected,
ClientId = expectedClientId,
PeerClientIds = new NativeArray<ulong>(expectedPeerClientIds.ToArray(), Allocator.Persistent),
}
EventType = ConnectionEvent.ClientConnected,
ClientId = expectedClientId,
PeerClientIds = new NativeArray<ulong>(expectedPeerClientIds.ToArray(), Allocator.Persistent),
});

m_ExpectedEventQueue.Enqueue(new ExpectedEvent()
AddExpectedEvent(new SceneEvent()
{
SceneEvent = new SceneEvent()
{
SceneEventType = SceneEventType.SynchronizeComplete,
ClientId = expectedClientId,
},
SceneEventType = SceneEventType.SynchronizeComplete,
ClientId = expectedClientId,
});

Assert.Null(m_ManagerToTest, "m_ManagerToTest should be null as we should be testing newly created client");
Expand All @@ -203,27 +190,22 @@ public IEnumerator LateJoiningClient_PeerCallbacks()
var nonAuthority = GetNonAuthorityNetworkManager();
var expectedClientId = nonAuthority.LocalClientId + 1;
SetManagerToTest(nonAuthority);

// Setup expected events
if (m_UseCmbService)
AddExpectedEvent(new ConnectionEventData()
{
m_ExpectedEventQueue.Enqueue(new ExpectedEvent()
{
SceneEvent = new SceneEvent()
{
SceneEventType = SceneEventType.SynchronizeComplete,
ClientId = expectedClientId,
},
});
}
EventType = ConnectionEvent.PeerConnected,
ClientId = expectedClientId,
});

m_ExpectedEventQueue.Enqueue(new ExpectedEvent()
if (m_UseCmbService)
{
ConnectionEvent = new ConnectionEventData()
AddExpectedEvent(new SceneEvent()
{
EventType = ConnectionEvent.PeerConnected,
SceneEventType = SceneEventType.SynchronizeComplete,
ClientId = expectedClientId,
}
});
});
}

//////////////////////////////////////////
// Testing event notifications
Expand All @@ -233,16 +215,34 @@ public IEnumerator LateJoiningClient_PeerCallbacks()
Assert.IsEmpty(m_ExpectedEventQueue, "Not all expected callbacks were received");
}

private void AddExpectedEvent(SceneEvent expectedEvent)
{
m_ExpectedEventQueue.Enqueue(new ExpectedEvent()
{
IsSceneEvent = true,
SceneEvent = expectedEvent,
});
}

private void AddExpectedEvent(ConnectionEventData expectedEvent)
{
m_ExpectedEventQueue.Enqueue(new ExpectedEvent()
{
IsSceneEvent = false,
ConnectionEvent = expectedEvent,
});
}

private static void ValidateSceneEventsAreEqual(ExpectedEvent expectedEvent, SceneEvent sceneEvent)
{
Assert.NotNull(expectedEvent.SceneEvent, $"Received unexpected scene event {sceneEvent.SceneEventType} at index {s_NumEventsProcessed}");
Assert.That(expectedEvent.IsSceneEvent, Is.True, $"Received unexpected scene event {sceneEvent.SceneEventType} at index {s_NumEventsProcessed}. Expected connection event: {expectedEvent.ConnectionEvent.EventType}");
AssertField(expectedEvent.SceneEvent.SceneEventType, sceneEvent.SceneEventType, nameof(sceneEvent.SceneEventType), sceneEvent.SceneEventType);
AssertField(expectedEvent.SceneEvent.ClientId, sceneEvent.ClientId, nameof(sceneEvent.ClientId), sceneEvent.SceneEventType);
}

private static void ValidateConnectionEventsAreEqual(ExpectedEvent expectedEvent, ConnectionEventData eventData)
{
Assert.NotNull(expectedEvent.ConnectionEvent, $"Received unexpected connection event {eventData.EventType} at index {s_NumEventsProcessed}");
Assert.That(expectedEvent.IsSceneEvent, Is.False, $"Received unexpected connection event {eventData.EventType} at index {s_NumEventsProcessed}. Expected scene event: {expectedEvent.ConnectionEvent.EventType}");
AssertField(expectedEvent.ConnectionEvent.EventType, eventData.EventType, nameof(eventData.EventType), eventData.EventType);
AssertField(expectedEvent.ConnectionEvent.ClientId, eventData.ClientId, nameof(eventData.ClientId), eventData.EventType);

Expand Down