Class NetcodeIntegrationTest
The default Netcode for GameObjects integration test helper class
Inherited Members
Namespace: Unity.Netcode.TestHelpers.Runtime
Assembly: Unity.Netcode.TestHelpers.Runtime.dll
Syntax
public abstract class NetcodeIntegrationTest
Constructors
NetcodeIntegrationTest()
Default constructor
Declaration
public NetcodeIntegrationTest()
NetcodeIntegrationTest(HostOrServer)
Constructor that allows specifying whether the test should run as a host or server. This can be used to break tests up as a host and a server.
Declaration
public NetcodeIntegrationTest(NetcodeIntegrationTest.HostOrServer hostOrServer)
Parameters
Type | Name | Description |
---|---|---|
NetcodeIntegrationTest.HostOrServer | hostOrServer | Specifies whether the test should run as a host or server. |
Examples
Decorate your child derived class with TestFixture and then create a constructor at the child level. Don't forget to set your constructor public, else Unity will give you a hard to decipher error.
[TestFixture(HostOrServer.Host)]
[TestFixture(HostOrServer.Server)]
public class MyChildClass : NetcodeIntegrationTest
{
public MyChildClass(HostOrServer hostOrServer) : base(hostOrServer) { }
}
Fields
NetcodeLogAssert
An instance of NetcodeLogAssert used to capture and assert log messages during integration tests. This helps in verifying that expected log messages are produced and unexpected log messages are not.
Declaration
public NetcodeLogAssert NetcodeLogAssert
Field Value
Type | Description |
---|---|
NetcodeLogAssert |
k_DefaultTickRate
The default tick rate used for the server's NetworkManager. This value is used to calculate the default wait time for one tick interval during integration tests.
Declaration
protected const uint k_DefaultTickRate = 30
Field Value
Type | Description |
---|---|
uint |
m_ClientNetworkManagers
The NetworkManager instances for the clients, one per client.
Declaration
protected NetworkManager[] m_ClientNetworkManagers
Field Value
Type | Description |
---|---|
NetworkManager[] |
m_CreateServerFirst
Set this to false to create the clients first. Note: If you are using scene placed NetworkObjects or doing any form of scene testing and get prefab hash id "soft synchronization" errors, then set this to false and run your test again. This is a work-around until we can resolve some issues with NetworkManagerOwner and NetworkManager.Singleton.
Declaration
protected bool m_CreateServerFirst
Field Value
Type | Description |
---|---|
bool |
m_PlayerNetworkObjects
Contains each client relative set of player NetworkObject instances [Client Relative set of player instances][The player instance ClientId][The player instance's NetworkObject] Example: To get the player instance with a ClientId of 3 that was instantiated (relative) on the player instance with a ClientId of 2 m_PlayerNetworkObjects[2][3]
Declaration
protected Dictionary<ulong, Dictionary<ulong, NetworkObject>> m_PlayerNetworkObjects
Field Value
Type | Description |
---|---|
Dictionary<ulong, Dictionary<ulong, NetworkObject>> |
m_PlayerPrefab
The player prefab used in the integration test.
Declaration
protected GameObject m_PlayerPrefab
Field Value
Type | Description |
---|---|
GameObject |
m_ServerNetworkManager
The NetworkManager instance for the server.
Declaration
protected NetworkManager m_ServerNetworkManager
Field Value
Type | Description |
---|---|
NetworkManager |
m_TargetFrameRate
The target frame rate for the integration test. This value is used to set the frame rate for the test environment.
Declaration
protected int m_TargetFrameRate
Field Value
Type | Description |
---|---|
int |
m_UseHost
Indicates whether the test should run as a host. If true, the test will run as a host; otherwise, it will run as a server.
Declaration
protected bool m_UseHost
Field Value
Type | Description |
---|---|
bool |
s_DefaultWaitForTick
A default wait time used to yield for one tick interval during integration tests. This is calculated based on the default tick rate of the server's NetworkManager.
Declaration
protected static WaitForSecondsRealtime s_DefaultWaitForTick
Field Value
Type | Description |
---|---|
WaitForSecondsRealtime |
s_GlobalNetworkObjects
Registered list of all NetworkObjects spawned. Format is as follows: [ClientId-side where this NetworkObject instance resides][NetworkObjectId][NetworkObject] Where finding the NetworkObject with a NetworkObjectId of 10 on ClientId of 2 would be: s_GlobalNetworkObjects[2][10] To find the client or server player objects please see: m_PlayerNetworkObjects
Declaration
protected static Dictionary<ulong, Dictionary<ulong, NetworkObject>> s_GlobalNetworkObjects
Field Value
Type | Description |
---|---|
Dictionary<ulong, Dictionary<ulong, NetworkObject>> |
s_GlobalTimeoutHelper
A global instance of TimeoutHelper used to manage timeouts during integration tests.
Declaration
protected static TimeoutHelper s_GlobalTimeoutHelper
Field Value
Type | Description |
---|---|
TimeoutHelper |
Properties
LogAllMessages
Indicates whether all network messages should be logged during the integration test. If true, detailed information about all sent and received network messages will be logged.
Declaration
protected virtual bool LogAllMessages { get; }
Property Value
Type | Description |
---|---|
bool |
NumberOfClients
Gets the number of clients to be created for the integration test.
Declaration
protected abstract int NumberOfClients { get; }
Property Value
Type | Description |
---|---|
int |
TotalClients
Gets the total number of clients, including the host if applicable.
Declaration
protected int TotalClients { get; }
Property Value
Type | Description |
---|---|
int |
m_BypassConnectionTimeout
When set to true, this will bypass the entire wait for clients to connect process.
Declaration
protected bool m_BypassConnectionTimeout { get; set; }
Property Value
Type | Description |
---|---|
bool |
Remarks
CAUTION: Setting this to true will bypass other helper identification related code, so this should only be used for connection failure oriented testing
m_EnableTimeTravel
Enables "Time Travel" within the test, which swaps the time provider for the SDK from Unity's Time class to MockTimeProvider, and also swaps the transport implementation from UnityTransport to MockTransport.
This enables five important things that help with both performance and determinism of tests that involve a lot of time and waiting:
- It allows time to move in a completely deterministic way (testing that something happens after n seconds, the test will always move exactly n seconds with no chance of any variability in the timing),
- It allows skipping periods of time without actually waiting that amount of time, while still simulating SDK frames as if that time were passing,
- It dissociates the SDK's update loop from Unity's update loop, allowing us to simulate SDK frame updates without waiting for Unity to process things like physics, animation, and rendering that aren't relevant to the test,
- It dissociates the SDK's messaging system from the networking hardware, meaning there's no delay between a message being sent and it being received, allowing us to deterministically rely on the message being received within specific time frames for the test, and
- It allows tests to be written without the use of coroutines, which not only improves the test's runtime, but also results in easier-to-read callstacks and removes the possibility for an assertion to result in the test hanging.
When time travel is enabled, the following methods become available:
TimeTravel(double, int): Simulates a specific number of frames passing over a specific time period TimeTravelToNextTick(): Skips forward to the next tick, siumlating at the current application frame rate WaitForConditionOrTimeOutWithTimeTravel(Func<bool>, int): Simulates frames at the application frame rate until the given condition is true WaitForMessageReceivedWithTimeTravel<T>(List<NetworkManager>, ReceiptType): Simulates frames at the application frame rate until the required message is received WaitForMessagesReceivedWithTimeTravel(List<Type>, List<NetworkManager>, ReceiptType): Simulates frames at the application frame rate until the required messages are received StartServerAndClientsWithTimeTravel(): Starts a server and client and allows them to connect via simulated frames CreateAndStartNewClientWithTimeTravel(): Creates a client and waits for it to connect via simulated frames WaitForClientsConnectedOrTimeOutWithTimeTravel(NetworkManager[]) Simulates frames at the application frame rate until the given clients are connected StopOneClientWithTimeTravel(NetworkManager, bool): Stops a client and simulates frames until it's fully disconnected.
When time travel is enabled, NetcodeIntegrationTest will automatically use these in its methods when doing things like automatically connecting clients during SetUp.
Additionally, the following methods replace their non-time-travel equivalents with variants that are not coroutines: OnTimeTravelStartedServerAndClients() - called when server and clients are started OnTimeTravelServerAndClientsConnected() - called when server and clients are connected
Note that all of the non-time travel functions can still be used even when time travel is enabled - this is sometimes needed for, e.g., testing NetworkAnimator, where the unity update loop needs to run to process animations. However, it's VERY important to note here that, because the SDK will not be operating based on real-world time but based on the frozen time that's locked in from MockTimeProvider, actions that pass 10 seconds apart by real-world clock time will be perceived by the SDK as having happened simultaneously if you don't call TimeTravel(double) to cover the equivalent time span in the mock time provider. (Calling TimeTravel(double) instead of TimeTravel(double, int) will move time forward without simulating any frames, which, in the case where real-world time has passed, is likely more desirable). In most cases, this desynch won't affect anything, but it is worth noting that it happens just in case a tested system depends on both the unity update loop happening and time moving forward.
Declaration
protected virtual bool m_EnableTimeTravel { get; }
Property Value
Type | Description |
---|---|
bool |
m_EnableVerboseDebug
Indicates whether verbose debug logging is enabled. If true, detailed debug information will be logged during the integration test.
Declaration
protected bool m_EnableVerboseDebug { get; set; }
Property Value
Type | Description |
---|---|
bool |
m_SetupIsACoroutine
If this is false, SetUp will call OnInlineSetUp instead of OnSetUp. This is a performance advantage when not using the coroutine functionality, as a coroutine that has no yield instructions in it will nonetheless still result in delaying the continuation of the method that called it for a full frame after it returns.
Declaration
protected virtual bool m_SetupIsACoroutine { get; }
Property Value
Type | Description |
---|---|
bool |
m_TearDownIsACoroutine
If this is false, TearDown will call OnInlineTearDown instead of OnTearDown. This is a performance advantage when not using the coroutine functionality, as a coroutine that has no yield instructions in it will nonetheless still result in delaying the continuation of the method that called it for a full frame after it returns.
Declaration
protected virtual bool m_TearDownIsACoroutine { get; }
Property Value
Type | Description |
---|---|
bool |
Methods
AssertOnTimeout(string, TimeoutHelper)
Just a helper function to avoid having to write the entire assert just to check if you timed out.
Declaration
protected void AssertOnTimeout(string timeOutErrorMessage, TimeoutHelper assignedTimeoutHelper = null)
Parameters
Type | Name | Description |
---|---|---|
string | timeOutErrorMessage | The error message to display if a timeout has occurred. |
TimeoutHelper | assignedTimeoutHelper | An optional TimeoutHelper instance to check for a timeout. If null, the global timeout helper is used. |
CanClientsLoad()
Override this method to control when clients can fake-load a scene.
Declaration
protected virtual bool CanClientsLoad()
Returns
Type | Description |
---|---|
bool | True if clients are allowed to load a scene; otherwise, false. |
CanClientsUnload()
Override this method to control when clients can fake-unload a scene.
Declaration
protected virtual bool CanClientsUnload()
Returns
Type | Description |
---|---|
bool | True if clients are allowed to unload a scene; otherwise, false. |
CanDestroyNetworkObject(NetworkObject)
Override this to filter out the NetworkObjects that you want to allow to persist between integration tests. DestroySceneNetworkObjects() ShutdownAndCleanUp()
Declaration
protected virtual bool CanDestroyNetworkObject(NetworkObject networkObject)
Parameters
Type | Name | Description |
---|---|---|
NetworkObject | networkObject | the network object in question to be destroyed |
Returns
Type | Description |
---|---|
bool | True if the NetworkObject can be destroyed; otherwise, false. |
CanStartServerAndClients()
Override this method and return false in order to be able to manually control when the server and clients are started.
Declaration
protected virtual bool CanStartServerAndClients()
Returns
Type | Description |
---|---|
bool | True if the server and clients can be started automatically; otherwise, false. |
ClientNetworkManagerPostStartInit()
Initializes the client network managers after they have been started. This method creates a dictionary for all player instances relative to each client and server. It provides a simpler way to get a specific player instance relative to a client instance.
Declaration
protected void ClientNetworkManagerPostStartInit()
ConfigureFramesPerTick()
Recalculates the m_TickFrequency and m_FramesPerTick that is used in TimeTravelAdvanceTick().
Declaration
protected void ConfigureFramesPerTick()
CreateAndStartNewClient()
This will create, start, and connect a new client while in the middle of an integration test.
Declaration
protected IEnumerator CreateAndStartNewClient()
Returns
Type | Description |
---|---|
IEnumerator | An IEnumerator for use with Unity's coroutine system. |
CreateAndStartNewClientWithTimeTravel()
This will create, start, and connect a new client while in the middle of an integration test.
Declaration
protected void CreateAndStartNewClientWithTimeTravel()
CreateNetworkObjectPrefab(string)
Creates a basic NetworkObject test prefab, assigns it to a new NetworkPrefab entry, and then adds it to the server and client(s) NetworkManagers' NetworkConfig.NetworkPrefab lists.
Declaration
protected GameObject CreateNetworkObjectPrefab(string baseName)
Parameters
Type | Name | Description |
---|---|---|
string | baseName | the basic name to be used for each instance |
Returns
Type | Description |
---|---|
GameObject | NetworkObject of the GameObject assigned to the new NetworkPrefab entry |
CreateServerAndClients()
Will create NumberOfClients number of clients. To create a specific number of clients CreateServerAndClients(int)
Declaration
protected void CreateServerAndClients()
CreateServerAndClients(int)
Creates the server and clients
Declaration
protected void CreateServerAndClients(int numberOfClients)
Parameters
Type | Name | Description |
---|---|---|
int | numberOfClients | The number of clients to create. |
DeRegisterSceneManagerHandler()
De-Registers from the CanClientsLoad and CanClientsUnload events of the ClientSceneHandler (default is IntegrationTestSceneHandler).
Declaration
protected void DeRegisterSceneManagerHandler()
DeregisterNetworkObject(ulong, ulong)
Deregisters a NetworkObject from the global list of spawned NetworkObjects using the clientId and NetworkObjectId.
Declaration
public static void DeregisterNetworkObject(ulong localClientId, ulong networkObjectId)
Parameters
Type | Name | Description |
---|---|---|
ulong | localClientId | clientId who owns the object. |
ulong | networkObjectId | The NetworkObjectId of the NetworkObject. |
DeregisterNetworkObject(NetworkObject)
Deregisters a NetworkObject from the global list of spawned NetworkObjects.
Declaration
public static void DeregisterNetworkObject(NetworkObject networkObject)
Parameters
Type | Name | Description |
---|---|---|
NetworkObject | networkObject | The NetworkObject to deregister. |
DestroySceneNetworkObjects()
Destroys all NetworkObjects at the end of a test cycle.
Declaration
protected void DestroySceneNetworkObjects()
EnableMessageLogging()
For debugging purposes, this will turn on verbose logging of all messages and batches sent and received
Declaration
protected void EnableMessageLogging()
GetFrameRate()
Gets the frame rate for the integration test.
Declaration
protected virtual int GetFrameRate()
Returns
Type | Description |
---|---|
int | The frame rate to be used for the integration test. |
GetTickRate()
Gets the tick rate for the integration test. Override this method to specify a custom tick rate for the test.
Declaration
protected virtual uint GetTickRate()
Returns
Type | Description |
---|---|
uint | The tick rate to be used for the integration test. |
OnCanSceneCleanUpUnload(Scene)
Determines whether a scene can be unloaded during the cleanup process. Override this method to specify custom logic for deciding if a scene should be unloaded.
Declaration
protected bool OnCanSceneCleanUpUnload(Scene scene)
Parameters
Type | Name | Description |
---|---|---|
Scene | scene | The scene to check. |
Returns
Type | Description |
---|---|
bool | True if the scene can be unloaded; otherwise, false. |
OnCreatePlayerPrefab()
Override this to add components or adjustments to the default player prefab m_PlayerPrefab
Declaration
protected virtual void OnCreatePlayerPrefab()
OnInlineSetup()
Called before creating and starting the server and clients Note: For AllTests and PerTest mode integration tests. For those two modes, if you want to have access to the server or client NetworkManagers then override OnServerAndClientsCreated(). m_ServerNetworkManager and m_ClientNetworkManagers
Declaration
protected virtual void OnInlineSetup()
OnInlineTearDown()
Called during the tear down process if m_TearDownIsACoroutine is set to false. Override this method to perform any tear down operations that do not require a coroutine.
Declaration
protected virtual void OnInlineTearDown()
OnNewClientCreated(NetworkManager)
Invoked when a new client has been created during the integration test. Override this method to perform any setup or configuration needed for the new client before it is started.
Declaration
protected virtual void OnNewClientCreated(NetworkManager networkManager)
Parameters
Type | Name | Description |
---|---|---|
NetworkManager | networkManager | The NetworkManager instance of the client. |
OnNewClientStarted(NetworkManager)
CreateAndStartNewClient Only Invoked when the newly created client has been created and started
Declaration
protected virtual void OnNewClientStarted(NetworkManager networkManager)
Parameters
Type | Name | Description |
---|---|---|
NetworkManager | networkManager | The NetworkManager instance of the client. |
OnNewClientStartedAndConnected(NetworkManager)
CreateAndStartNewClient Only Invoked when the newly created client has been created, started, and connected to the server-host.
Declaration
protected virtual void OnNewClientStartedAndConnected(NetworkManager networkManager)
Parameters
Type | Name | Description |
---|---|---|
NetworkManager | networkManager | The NetworkManager instance of the client. |
OnOneTimeSetup()
Override this method to perform any setup that needs to be done once before any tests are run. This method is called during the OneTimeSetup() process.
Declaration
protected virtual void OnOneTimeSetup()
OnOneTimeTearDown()
Override this method to do handle cleaning up once the test(s) within the child derived class have completed Note: For AllTests mode this is called before ShutdownAndCleanUp.
Declaration
protected virtual void OnOneTimeTearDown()
OnPlayerPrefabGameObjectCreated()
Invoked immediately after the player prefab GameObject is created prior to adding a NetworkObject component
Declaration
protected virtual void OnPlayerPrefabGameObjectCreated()
OnServerAndClientsConnected()
Invoked after the server and clients have started and verified their connections with each other.
Declaration
protected virtual IEnumerator OnServerAndClientsConnected()
Returns
Type | Description |
---|---|
IEnumerator | An IEnumerator for use with Unity's coroutine system. |
OnServerAndClientsCreated()
This is invoked before the server and client(s) are started. Override this method if you want to make any adjustments to their NetworkManager instances.
Declaration
protected virtual void OnServerAndClientsCreated()
OnSetIntegrationTestMode()
The very first thing invoked during the OneTimeSetup() that determines how this integration test handles NetworkManager instantiation and destruction. NetcodeIntegrationTest.NetworkManagerInstatiationMode Override this method to change the default mode: AllTests
Declaration
protected virtual NetcodeIntegrationTest.NetworkManagerInstatiationMode OnSetIntegrationTestMode()
Returns
Type | Description |
---|---|
NetcodeIntegrationTest.NetworkManagerInstatiationMode | The NetworkManager instantiation mode to be used for the integration test. |
OnSetVerboseDebug()
Override this and return true if you need to troubleshoot a hard to track bug within an integration test.
Declaration
protected virtual bool OnSetVerboseDebug()
Returns
Type | Description |
---|---|
bool | True if verbose debug logging should be enabled; otherwise, false. |
OnSetup()
Called before creating and starting the server and clients Note: For AllTests and PerTest mode integration tests. For those two modes, if you want to have access to the server or client NetworkManagers then override OnServerAndClientsCreated(). m_ServerNetworkManager and m_ClientNetworkManagers
Declaration
protected virtual IEnumerator OnSetup()
Returns
Type | Description |
---|---|
IEnumerator | An IEnumerator for use with Unity's coroutine system. |
OnStartedServerAndClients()
Invoked after the server and clients have started. Note: No connection verification has been done at this point
Declaration
protected virtual IEnumerator OnStartedServerAndClients()
Returns
Type | Description |
---|---|
IEnumerator | An IEnumerator for use with Unity's coroutine system. |
OnTearDown()
Note: For PerTest mode this is called before ShutdownAndCleanUp.
Declaration
protected virtual IEnumerator OnTearDown()
Returns
Type | Description |
---|---|
IEnumerator | An IEnumerator for use with Unity's coroutine system. |
OnTimeTravelServerAndClientsConnected()
Invoked after the server and clients have started and verified their connections with each other.
Declaration
protected virtual void OnTimeTravelServerAndClientsConnected()
OnTimeTravelStartedServerAndClients()
Invoked after the server and clients have started. Note: No connection verification has been done at this point
Declaration
protected virtual void OnTimeTravelStartedServerAndClients()
OneTimeSetup()
Called once before any tests are run to perform setup operations.
Declaration
[OneTimeSetUp]
public void OneTimeSetup()
OneTimeTearDown()
Called once after all tests have run to perform cleanup operations.
Declaration
[OneTimeTearDown]
public void OneTimeTearDown()
RegisterNetworkObject(NetworkObject)
Registers a NetworkObject to the global list of spawned NetworkObjects.
Declaration
public static void RegisterNetworkObject(NetworkObject networkObject)
Parameters
Type | Name | Description |
---|---|---|
NetworkObject | networkObject | The NetworkObject to register. |
RegisterSceneManagerHandler()
Registers the CanClientsLoad and CanClientsUnload events of the ClientSceneHandler. The default is: IntegrationTestSceneHandler.
Declaration
protected void RegisterSceneManagerHandler()
SetTimeTravelSimulatedDropRate(float)
Sets the simulated packet drop rate for time travel.
Declaration
protected void SetTimeTravelSimulatedDropRate(float dropRatePercent)
Parameters
Type | Name | Description |
---|---|---|
float | dropRatePercent | The percentage of packets to drop (0 to 100). |
SetTimeTravelSimulatedLatency(float)
Sets the simulated network latency for time travel.
Declaration
protected void SetTimeTravelSimulatedLatency(float latencySeconds)
Parameters
Type | Name | Description |
---|---|---|
float | latencySeconds | The amount of latency to simulate in seconds. |
SetTimeTravelSimulatedLatencyJitter(float)
Sets the simulated network latency jitter for time travel.
Declaration
protected void SetTimeTravelSimulatedLatencyJitter(float jitterSeconds)
Parameters
Type | Name | Description |
---|---|---|
float | jitterSeconds | The amount of jitter to simulate in seconds. |
SetUp()
Called before each test is run to perform setup operations.
Declaration
public IEnumerator SetUp()
Returns
Type | Description |
---|---|
IEnumerator | An IEnumerator for use with Unity's coroutine system. |
ShouldCheckForSpawnedPlayers()
Determines whether the test should check for spawned player objects after the server and clients have started and connected. Override this method to control whether player objects should be checked for existence after the server and clients are connected.
Declaration
protected virtual bool ShouldCheckForSpawnedPlayers()
Returns
Type | Description |
---|---|
bool | True if the test should check for spawned player objects; otherwise, false. |
ShouldWaitForNewClientToConnect(NetworkManager)
CreateAndStartNewClient Only Override this method to bypass the waiting for a client to connect.
Declaration
protected virtual bool ShouldWaitForNewClientToConnect(NetworkManager networkManager)
Parameters
Type | Name | Description |
---|---|---|
NetworkManager | networkManager | The NetworkManager instance of the client. |
Returns
Type | Description |
---|---|
bool | True if the test should wait for the new client to connect; otherwise, false. |
Remarks
Use this for testing connection and disconnection scenarios
ShutdownAndCleanUp()
This shuts down all NetworkManager instances registered via the NetcodeIntegrationTestHelpers class and cleans up the test runner scene of any left over NetworkObjects. DestroySceneNetworkObjects()
Declaration
protected void ShutdownAndCleanUp()
SimulateOneFrame()
Simulates one SDK frame. This can be used even without TimeTravel, though it's of somewhat less use without TimeTravel, as, without the mock transport, it will likely not provide enough time for any sent messages to be received even if called dozens of times.
Declaration
public static void SimulateOneFrame()
SpawnObject(GameObject, NetworkManager, bool)
Spawns a GameObject prefab instance.
Declaration
protected GameObject SpawnObject(GameObject prefabGameObject, NetworkManager owner, bool destroyWithScene = false)
Parameters
Type | Name | Description |
---|---|---|
GameObject | prefabGameObject | The prefab GameObject to spawn. |
NetworkManager | owner | the owner of the instance |
bool | destroyWithScene | If true, the spawned object will be destroyed when the scene is unloaded. Default is false. |
Returns
Type | Description |
---|---|
GameObject | GameObject instance spawned |
SpawnObjects(GameObject, NetworkManager, int, bool)
Will spawn (x) number of prefab GameObject SpawnObject(GameObject, NetworkManager, bool)
Declaration
protected List<GameObject> SpawnObjects(GameObject prefabGameObject, NetworkManager owner, int count, bool destroyWithScene = false)
Parameters
Type | Name | Description |
---|---|---|
GameObject | prefabGameObject | the prefab GameObject to spawn |
NetworkManager | owner | the owner of the instance |
int | count | number of instances to create and spawn |
bool | destroyWithScene | If true, the spawned objects will be destroyed when the scene is unloaded. Default is false. |
Returns
Type | Description |
---|---|
List<GameObject> | A list containing the spawned GameObject instances. |
StartServerAndClients()
This starts the server and clients as long as CanStartServerAndClients() returns true.
Declaration
protected IEnumerator StartServerAndClients()
Returns
Type | Description |
---|---|
IEnumerator | An IEnumerator for use with Unity's coroutine system. |
StartServerAndClientsWithTimeTravel()
This starts the server and clients as long as CanStartServerAndClients() returns true.
Declaration
protected void StartServerAndClientsWithTimeTravel()
StopOneClient(NetworkManager, bool)
This will stop a client while in the middle of an integration test
Declaration
protected IEnumerator StopOneClient(NetworkManager networkManager, bool destroy = false)
Parameters
Type | Name | Description |
---|---|---|
NetworkManager | networkManager | The NetworkManager instance of the client to stop. |
bool | destroy | If true, the client's NetworkManager GameObject will be destroyed. |
Returns
Type | Description |
---|---|
IEnumerator | An IEnumerator for use with Unity's coroutine system. |
StopOneClientWithTimeTravel(NetworkManager, bool)
This will stop a client while in the middle of an integration test
Declaration
protected void StopOneClientWithTimeTravel(NetworkManager networkManager, bool destroy = false)
Parameters
Type | Name | Description |
---|---|---|
NetworkManager | networkManager | The NetworkManager instance of the client to stop. |
bool | destroy | If true, the client's NetworkManager GameObject will be destroyed. |
TearDown()
Called during the tear down process after each test is run to perform cleanup operations.
Declaration
public IEnumerator TearDown()
Returns
Type | Description |
---|---|
IEnumerator | An IEnumerator for use with Unity's coroutine system. |
TimeTravel(double, int)
Simulate a number of frames passing over a specific amount of time. The delta time simulated for each frame will be evenly divided as time/numFrames This will only simulate the netcode update loop, as well as update events on NetworkBehaviour instances, and will not simulate any Unity update processes (physics, etc)
Declaration
protected static void TimeTravel(double amountOfTimeInSeconds, int numFramesToSimulate = -1)
Parameters
Type | Name | Description |
---|---|---|
double | amountOfTimeInSeconds | The total amount of time to simulate in seconds. |
int | numFramesToSimulate | The number of frames to simulate. If less than 0, it will be calculated based on the target frame rate. |
TimeTravelAdvanceTick()
Helper function to time travel exactly one tick's worth of time at the current frame and tick rates. This is NetcodeIntegrationTest instance relative and will automatically adjust based on GetFrameRate() and GetTickRate().
Declaration
protected void TimeTravelAdvanceTick()
TimeTravelToNextTick()
Helper function to time travel exactly one tick's worth of time at the current frame and tick rates. ** Is based on the global k_DefaultTickRate and is not local to each NetcodeIntegrationTest instance **
Declaration
public static void TimeTravelToNextTick()
VerboseDebug(string)
Used to display the various integration test stages and can be used to log verbose information for troubleshooting an integration test.
Declaration
protected void VerboseDebug(string msg)
Parameters
Type | Name | Description |
---|---|---|
string | msg | The message to log. |
WaitForClientsConnectedOrTimeOut()
Overloaded method that just passes in all clients to WaitForClientsConnectedOrTimeOut(NetworkManager[])
Declaration
protected IEnumerator WaitForClientsConnectedOrTimeOut()
Returns
Type | Description |
---|---|
IEnumerator | An IEnumerator for use with Unity's coroutine system. |
WaitForClientsConnectedOrTimeOut(NetworkManager[])
Validates that all remote clients (i.e. non-server) detect they are connected to the server and that the server reflects the appropriate number of clients have connected or it will time out.
Declaration
protected IEnumerator WaitForClientsConnectedOrTimeOut(NetworkManager[] clientsToCheck)
Parameters
Type | Name | Description |
---|---|---|
NetworkManager[] | clientsToCheck | An array of clients to be checked |
Returns
Type | Description |
---|---|
IEnumerator | An IEnumerator for use with Unity's coroutine system. |
WaitForClientsConnectedOrTimeOutWithTimeTravel()
Overloaded method that just passes in all clients to WaitForClientsConnectedOrTimeOut(NetworkManager[]) Uses time travel to simulate this for the given number of frames, simulating delta times at the application frame rate.
Declaration
protected bool WaitForClientsConnectedOrTimeOutWithTimeTravel()
Returns
Type | Description |
---|---|
bool | True if all clients are connected within the specified number of frames; otherwise, false. |
WaitForClientsConnectedOrTimeOutWithTimeTravel(NetworkManager[])
Validates that all remote clients (i.e. non-server) detect they are connected to the server and that the server reflects the appropriate number of clients have connected or it will time out. Uses time travel to simulate this for the given number of frames, simulating delta times at the application frame rate.
Declaration
protected bool WaitForClientsConnectedOrTimeOutWithTimeTravel(NetworkManager[] clientsToCheck)
Parameters
Type | Name | Description |
---|---|---|
NetworkManager[] | clientsToCheck | An array of clients to be checked |
Returns
Type | Description |
---|---|
bool | True if all clients are connected within the specified number of frames; otherwise, false. |
WaitForConditionOrTimeOut(Func<bool>, TimeoutHelper)
Waits for the function condition to return true or it will time out. This will operate at the current m_ServerNetworkManager.NetworkConfig.TickRate and allow for a unique TimeoutHelper handler (if none then it uses the default) Notes: This provides more stability when running integration tests that could be impacted by: -how the integration test is being executed (i.e. in editor or in a stand alone build) -potential platform performance issues (i.e. VM is throttled or maxed) Note: For more complex tests, ConditionalPredicateBase and the overloaded version of this method
Declaration
public static IEnumerator WaitForConditionOrTimeOut(Func<bool> checkForCondition, TimeoutHelper timeOutHelper = null)
Parameters
Type | Name | Description |
---|---|---|
Func<bool> | checkForCondition | A function that checks for the condition to be met. |
TimeoutHelper | timeOutHelper | An optional TimeoutHelper instance to manage the timeout. If null, the global timeout helper is used. |
Returns
Type | Description |
---|---|
IEnumerator | An IEnumerator for use with Unity's coroutine system. |
Exceptions
Type | Condition |
---|---|
ArgumentNullException | Thrown if the checkForCondition function is null. |
WaitForConditionOrTimeOut(IConditionalPredicate, TimeoutHelper)
This version accepts an IConditionalPredicate implementation to provide more flexibility for checking complex conditional cases.
Declaration
public static IEnumerator WaitForConditionOrTimeOut(IConditionalPredicate conditionalPredicate, TimeoutHelper timeOutHelper = null)
Parameters
Type | Name | Description |
---|---|---|
IConditionalPredicate | conditionalPredicate | An implementation of IConditionalPredicate that checks for the condition to be met. |
TimeoutHelper | timeOutHelper | An optional TimeoutHelper instance to manage the timeout. If null, the global timeout helper is used. |
Returns
Type | Description |
---|---|
IEnumerator | An IEnumerator for use with Unity's coroutine system. |
Exceptions
Type | Condition |
---|---|
ArgumentNullException | Thrown if the conditionalPredicate is null. |
WaitForConditionOrTimeOutWithTimeTravel(Func<bool>, int)
Waits for the function condition to return true or it will time out. Uses time travel to simulate this for the given number of frames, simulating delta times at the application frame rate.
Declaration
public bool WaitForConditionOrTimeOutWithTimeTravel(Func<bool> checkForCondition, int maxTries = 60)
Parameters
Type | Name | Description |
---|---|---|
Func<bool> | checkForCondition | A function that checks for the condition to be met. |
int | maxTries | The maximum number of frames to simulate while waiting for the condition to be met. Default is 60. |
Returns
Type | Description |
---|---|
bool | True if the condition is met within the specified number of frames; otherwise, false. |
Exceptions
Type | Condition |
---|---|
ArgumentNullException | Thrown if the checkForCondition function is null. |
ArgumentException | Thrown if time travel is not enabled. |
WaitForConditionOrTimeOutWithTimeTravel(IConditionalPredicate, int)
This version accepts an IConditionalPredicate implementation to provide more flexibility for checking complex conditional cases. Uses time travel to simulate this for the given number of frames, simulating delta times at the application frame rate.
Declaration
public bool WaitForConditionOrTimeOutWithTimeTravel(IConditionalPredicate conditionalPredicate, int maxTries = 60)
Parameters
Type | Name | Description |
---|---|---|
IConditionalPredicate | conditionalPredicate | An implementation of IConditionalPredicate that checks for the condition to be met. |
int | maxTries | The maximum number of frames to simulate while waiting for the condition to be met. Default is 60. |
Returns
Type | Description |
---|---|
bool | True if the condition is met within the specified number of frames; otherwise, false. |
Exceptions
Type | Condition |
---|---|
ArgumentNullException | Thrown if the checkForCondition function is null. |
ArgumentException | Thrown if time travel is not enabled. |
WaitForTicks(NetworkManager, int)
Yields until specified amount of network ticks and the expected number of frames has been passed.
Declaration
protected IEnumerator WaitForTicks(NetworkManager networkManager, int count)
Parameters
Type | Name | Description |
---|---|---|
NetworkManager | networkManager | The NetworkManager instance to wait for ticks on. |
int | count | The number of network ticks to wait for. |
Returns
Type | Description |
---|---|
IEnumerator | An IEnumerator for use with Unity's coroutine system. |