Skip to content

Commit 0cdea15

Browse files
jeffreyrainy0xFA11
andauthored
test: replace manual tests with automated tests (#1365)
* test: automated test for TestRails 'Verify ServerRpc method replication and invocation being dropped/skipped for non-owners when RequireOwnership' * test: forgotten .meta file in previous commit * test: automated test for TestRails (rpc, ownership) (#1358) - C788896 Verify the user can define their own custom network serialized type - C788897 Verify multiple custom types can be used in the same RPC parameter list - C788899 Verify custom types and primitive types can be used in the same RPC parameter list - C788900 Verify C# and Unity primitive types work without any new requirements/serialization - C788901 Verify arrays of custom types are being serialized in the exact same order in both ends - C788902 Verify empty arrays of custom types are being serialized Co-authored-by: M. Fatih MAR <mfatihmar@gmail.com>
1 parent 2740332 commit 0cdea15

File tree

2 files changed

+129
-2
lines changed

2 files changed

+129
-2
lines changed

com.unity.netcode.gameobjects/Tests/Runtime/RpcOwnershipTests.cs renamed to com.unity.netcode.gameobjects/Tests/Runtime/RpcOwnershipCustomTests.cs

Lines changed: 129 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,64 @@
55

66
namespace Unity.Netcode.RuntimeTests
77
{
8+
public class CustomType : INetworkSerializable
9+
{
10+
public int SomeValue;
11+
private const int k_ByteFactor = 256;
12+
public void NetworkSerialize<T>(BufferSerializer<T> serializer) where T : IReaderWriter
13+
{
14+
if (serializer.IsReader)
15+
{
16+
var reader = serializer.GetFastBufferReader();
17+
reader.TryBeginRead(2);
18+
byte value;
19+
reader.ReadByte(out value);
20+
SomeValue = value * k_ByteFactor;
21+
reader.ReadByte(out value);
22+
SomeValue += value;
23+
}
24+
else
25+
{
26+
var writer = serializer.GetFastBufferWriter();
27+
writer.TryBeginWrite(2);
28+
writer.WriteByte((byte)(SomeValue / k_ByteFactor));
29+
writer.WriteByte((byte)(SomeValue % k_ByteFactor));
30+
}
31+
}
32+
};
33+
34+
public class DifferentCustomType : INetworkSerializable
35+
{
36+
public int SomeValue;
37+
public bool SomeBoolean;
38+
private const int k_ByteFactor = 256;
39+
40+
public void NetworkSerialize<T>(BufferSerializer<T> serializer) where T : IReaderWriter
41+
{
42+
if (serializer.IsReader)
43+
{
44+
var reader = serializer.GetFastBufferReader();
45+
reader.TryBeginRead(3);
46+
byte value;
47+
reader.ReadByte(out value);
48+
SomeValue = value * k_ByteFactor;
49+
reader.ReadByte(out value);
50+
SomeValue += value;
51+
52+
reader.ReadByte(out value);
53+
SomeBoolean = value > 0;
54+
}
55+
else
56+
{
57+
var writer = serializer.GetFastBufferWriter();
58+
writer.TryBeginWrite(3);
59+
writer.WriteByte((byte)(SomeValue / k_ByteFactor));
60+
writer.WriteByte((byte)(SomeValue % k_ByteFactor));
61+
writer.WriteByte((byte)(SomeBoolean ? 1 : 0));
62+
}
63+
}
64+
};
65+
866
public class RpcOwnershipTest : NetworkBehaviour
967
{
1068

@@ -14,6 +72,7 @@ public class RpcOwnershipObject : NetworkBehaviour
1472
{
1573
public int RequireOwnershipCount = 0;
1674
public int DoesntRequireOwnershipCount = 0;
75+
public int ArrayRpcCount = 0;
1776

1877
[ServerRpc(RequireOwnership = true)]
1978
public void RequireOwnershipServerRpc()
@@ -26,9 +85,37 @@ public void DoesntRequireOwnershipServerRpc()
2685
{
2786
DoesntRequireOwnershipCount++;
2887
}
88+
89+
[ServerRpc]
90+
public void TwoCustomTypesAndVect3ServerRpc(CustomType someObject, DifferentCustomType someOtherObject, Vector3 vect)
91+
{
92+
Debug.Assert(someObject.SomeValue == 50);
93+
Debug.Assert(someOtherObject.SomeValue == 300);
94+
Debug.Assert(someOtherObject.SomeBoolean = true);
95+
Debug.Assert(vect.x == 20);
96+
Debug.Assert(vect.y == 30);
97+
Debug.Assert(vect.z == 40);
98+
}
99+
100+
[ServerRpc]
101+
public void ArrayOfCustomTypesServerRpc(CustomType[] arrayOfObjects, CustomType[] emptyArray)
102+
{
103+
Debug.Assert(arrayOfObjects.Length > 0);
104+
for (int i = 0; i < arrayOfObjects.Length; i++)
105+
{
106+
if (i > 0)
107+
{
108+
Debug.Assert(arrayOfObjects[i].SomeValue > arrayOfObjects[i - 1].SomeValue);
109+
}
110+
}
111+
112+
Debug.Assert(emptyArray.Length == 0);
113+
114+
ArrayRpcCount++;
115+
}
29116
}
30117

31-
public class RpcOwnershipTests : BaseMultiInstanceTest
118+
public class RpcOwnershipCustomTests : BaseMultiInstanceTest
32119
{
33120
protected override int NbClients => 2;
34121

@@ -70,6 +157,45 @@ public IEnumerator RpcOwnershipTest()
70157
yield return RunTests(true);
71158
}
72159

160+
[UnityTest]
161+
public IEnumerator RpcArrayCustomTypesTest()
162+
{
163+
var spawnedObject = UnityEngine.Object.Instantiate(m_PrefabToSpawn);
164+
var netSpawnedObject = spawnedObject.GetComponent<NetworkObject>();
165+
netSpawnedObject.NetworkManagerOwner = m_ServerNetworkManager;
166+
167+
netSpawnedObject.Spawn();
168+
169+
var arrayOfObjects = new CustomType[2] { new CustomType(), new CustomType() };
170+
var emptyArray = new CustomType[0];
171+
172+
arrayOfObjects[0].SomeValue = 1;
173+
arrayOfObjects[1].SomeValue = 2;
174+
175+
netSpawnedObject.GetComponent<RpcOwnershipObject>().ArrayOfCustomTypesServerRpc(arrayOfObjects, emptyArray);
176+
177+
Debug.Assert(netSpawnedObject.GetComponent<RpcOwnershipObject>().ArrayRpcCount == 1);
178+
yield return null;
179+
}
180+
181+
[UnityTest]
182+
public IEnumerator CustomTypesTest()
183+
{
184+
var spawnedObject = UnityEngine.Object.Instantiate(m_PrefabToSpawn);
185+
var netSpawnedObject = spawnedObject.GetComponent<NetworkObject>();
186+
netSpawnedObject.NetworkManagerOwner = m_ServerNetworkManager;
187+
188+
netSpawnedObject.Spawn();
189+
190+
var someObject = new CustomType() { SomeValue = 50 };
191+
var someOtherObject = new DifferentCustomType() { SomeValue = 300, SomeBoolean = true };
192+
var vect = new Vector3() { x = 20, y = 30, z = 40 };
193+
194+
spawnedObject.GetComponent<RpcOwnershipObject>().TwoCustomTypesAndVect3ServerRpc(someObject, someOtherObject, vect);
195+
196+
yield return null;
197+
}
198+
73199
private IEnumerator RunTests(bool serverOwned)
74200
{
75201
m_ExpectedRequireOwnershipCount = 0;
@@ -126,7 +252,8 @@ private IEnumerator RunTests(bool serverOwned)
126252
netSpawnedObjectOnClient.GetComponent<RpcOwnershipObject>().RequireOwnershipServerRpc();
127253
netSpawnedObjectOnClient.GetComponent<RpcOwnershipObject>().DoesntRequireOwnershipServerRpc();
128254

129-
yield return new WaitForSeconds(1.0f);
255+
var nextFrameNumber = Time.frameCount + 3;
256+
yield return new WaitUntil(() => Time.frameCount >= nextFrameNumber);
130257

131258
// verify counts
132259
Debug.Assert(spawnedObject.GetComponent<RpcOwnershipObject>().RequireOwnershipCount == m_ExpectedRequireOwnershipCount);

0 commit comments

Comments
 (0)