Class NetcodeIntegrationTest
The default Netcode for GameObjects integration test helper class
Inheritance
NetcodeIntegrationTest
Syntax
public abstract class NetcodeIntegrationTest
Constructors
NetcodeIntegrationTest()
Declaration
public NetcodeIntegrationTest()
NetcodeIntegrationTest(NetcodeIntegrationTest.HostOrServer)
Optional Host or Server integration tests
Constructor that allows you To break tests up as a host
and a server.
Example: 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) { }
}
Declaration
public NetcodeIntegrationTest(NetcodeIntegrationTest.HostOrServer hostOrServer)
Parameters
Fields
k_DefaultTickRate
Declaration
protected const uint k_DefaultTickRate = 30U
Field Value
m_ClientNetworkManagers
Declaration
protected NetworkManager[] m_ClientNetworkManagers
Field Value
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
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
m_PlayerPrefab
Declaration
protected GameObject m_PlayerPrefab
Field Value
m_ServerNetworkManager
Declaration
protected NetworkManager m_ServerNetworkManager
Field Value
m_TargetFrameRate
Declaration
protected int m_TargetFrameRate
Field Value
m_UseHost
Declaration
Field Value
s_DefaultWaitForTick
Declaration
protected static WaitForSeconds s_DefaultWaitForTick
Field Value
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
s_GlobalTimeoutHelper
Declaration
protected static TimeoutHelper s_GlobalTimeoutHelper
Field Value
Properties
m_EnableVerboseDebug
Declaration
protected bool m_EnableVerboseDebug { get; set; }
Property Value
NumberOfClients
Declaration
protected abstract int NumberOfClients { get; }
Property Value
TotalClients
Declaration
protected int TotalClients { get; }
Property Value
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
CanClientsLoad()
Override this method to control when clients
can fake-load a scene.
Declaration
protected virtual bool CanClientsLoad()
Returns
CanClientsUnload()
Override this method to control when clients
can fake-unload a scene.
Declaration
protected virtual bool CanClientsUnload()
Returns
CanDestroyNetworkObject(NetworkObject)
Declaration
protected virtual bool CanDestroyNetworkObject(NetworkObject networkObject)
Parameters
Type |
Name |
Description |
NetworkObject |
networkObject |
the network object in question to be destroyed
|
Returns
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
ClientNetworkManagerPostStartInit()
Declaration
protected void ClientNetworkManagerPostStartInit()
CreateAndStartNewClient()
Declaration
protected IEnumerator CreateAndStartNewClient()
Returns
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()
Declaration
protected void CreateServerAndClients()
CreateServerAndClients(Int32)
Creates the server and clients
Declaration
protected void CreateServerAndClients(int numberOfClients)
Parameters
Type |
Name |
Description |
Int32 |
numberOfClients |
|
DeregisterNetworkObject(UInt64, UInt64)
Declaration
public static void DeregisterNetworkObject(ulong localClientId, ulong networkObjectId)
Parameters
Type |
Name |
Description |
UInt64 |
localClientId |
|
UInt64 |
networkObjectId |
|
DeregisterNetworkObject(NetworkObject)
Declaration
public static void DeregisterNetworkObject(NetworkObject networkObject)
Parameters
DeRegisterSceneManagerHandler()
De-Registers from the CanClientsLoad and CanClientsUnload events of the
ClientSceneHandler (default is IntegrationTestSceneHandler).
Declaration
protected void DeRegisterSceneManagerHandler()
DestroySceneNetworkObjects()
Destroys all NetworkObjects at the end of a test cycle.
Declaration
protected void DestroySceneNetworkObjects()
OnCanSceneCleanUpUnload(Scene)
Declaration
protected bool OnCanSceneCleanUpUnload(Scene scene)
Parameters
Type |
Name |
Description |
Scene |
scene |
|
Returns
OnCreatePlayerPrefab()
Override this to add components or adjustments to the default player prefab
m_PlayerPrefab
Declaration
protected virtual void OnCreatePlayerPrefab()
OneTimeSetup()
Declaration
public void OneTimeSetup()
OneTimeTearDown()
Declaration
public void OneTimeTearDown()
OnNewClientCreated(NetworkManager)
Declaration
protected virtual void OnNewClientCreated(NetworkManager networkManager)
Parameters
OnNewClientStartedAndConnected(NetworkManager)
Declaration
protected virtual void OnNewClientStartedAndConnected(NetworkManager networkManager)
Parameters
OnOneTimeSetup()
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()
OnServerAndClientsConnected()
Invoked after the server and clients have started and verified
their connections with each other.
Declaration
protected virtual IEnumerator OnServerAndClientsConnected()
Returns
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()
Declaration
protected virtual NetcodeIntegrationTest.NetworkManagerInstatiationMode OnSetIntegrationTestMode()
Returns
OnSetup()
Declaration
protected virtual IEnumerator OnSetup()
Returns
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
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
OnTearDown()
Note: For PerTest mode
this is called before ShutdownAndCleanUp.
Declaration
protected virtual IEnumerator OnTearDown()
Returns
RegisterNetworkObject(NetworkObject)
Declaration
public static void RegisterNetworkObject(NetworkObject networkObject)
Parameters
RegisterSceneManagerHandler()
Registers the CanClientsLoad and CanClientsUnload events of the
ClientSceneHandler.
The default is: Unity.Netcode.TestHelpers.Runtime.IntegrationTestSceneHandler.
Declaration
protected void RegisterSceneManagerHandler()
SetUp()
Declaration
public IEnumerator SetUp()
Returns
ShutdownAndCleanUp()
Declaration
protected void ShutdownAndCleanUp()
SpawnObject(GameObject, NetworkManager, Boolean)
Overloaded method Unity.Netcode.TestHelpers.Runtime.NetcodeIntegrationTest.SpawnObject(Unity.Netcode.NetworkObject,Unity.Netcode.NetworkManager,System.Boolean)
Declaration
protected GameObject SpawnObject(GameObject prefabGameObject, NetworkManager owner, bool destroyWithScene = false)
Parameters
Returns
SpawnObjects(GameObject, NetworkManager, Int32, Boolean)
Overloaded method Unity.Netcode.TestHelpers.Runtime.NetcodeIntegrationTest.SpawnObjects(Unity.Netcode.NetworkObject,Unity.Netcode.NetworkManager,System.Int32,System.Boolean)
Declaration
protected List<GameObject> SpawnObjects(GameObject prefabGameObject, NetworkManager owner, int count, bool destroyWithScene = false)
Parameters
Returns
StartServerAndClients()
Declaration
protected IEnumerator StartServerAndClients()
Returns
StopOneClient(NetworkManager, Boolean)
Declaration
protected IEnumerator StopOneClient(NetworkManager networkManager, bool destroy = false)
Parameters
Returns
TearDown()
Declaration
public IEnumerator TearDown()
Returns
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 |
|
WaitForClientsConnectedOrTimeOut()
Declaration
protected IEnumerator WaitForClientsConnectedOrTimeOut()
Returns
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
WaitForConditionOrTimeOut(Func<Boolean>, 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
Returns
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
Returns