DeviceNetworkTest.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
  1. using System.Numerics;
  2. using Content.Server.DeviceNetwork;
  3. using Content.Server.DeviceNetwork.Components;
  4. using Content.Server.DeviceNetwork.Systems;
  5. using Content.Shared.DeviceNetwork;
  6. using Robust.Shared.GameObjects;
  7. using Robust.Shared.IoC;
  8. using Robust.Shared.Map;
  9. using Robust.Shared.Map.Components;
  10. namespace Content.IntegrationTests.Tests.DeviceNetwork
  11. {
  12. [TestFixture]
  13. [TestOf(typeof(DeviceNetworkComponent))]
  14. [TestOf(typeof(WiredNetworkComponent))]
  15. [TestOf(typeof(WirelessNetworkComponent))]
  16. public sealed class DeviceNetworkTest
  17. {
  18. [TestPrototypes]
  19. private const string Prototypes = @"
  20. - type: entity
  21. name: DummyNetworkDevice
  22. id: DummyNetworkDevice
  23. components:
  24. - type: DeviceNetwork
  25. transmitFrequency: 100
  26. receiveFrequency: 100
  27. - type: entity
  28. name: DummyWiredNetworkDevice
  29. id: DummyWiredNetworkDevice
  30. components:
  31. - type: DeviceNetwork
  32. deviceNetId: Wired
  33. transmitFrequency: 0
  34. receiveFrequency: 0
  35. - type: WiredNetworkConnection
  36. - type: ApcPowerReceiver
  37. - type: entity
  38. name: WirelessNetworkDeviceDummy
  39. id: WirelessNetworkDeviceDummy
  40. components:
  41. - type: DeviceNetwork
  42. transmitFrequency: 100
  43. receiveFrequency: 100
  44. deviceNetId: Wireless
  45. - type: WirelessNetworkConnection
  46. range: 100
  47. ";
  48. [Test]
  49. public async Task NetworkDeviceSendAndReceive()
  50. {
  51. await using var pair = await PoolManager.GetServerClient();
  52. var server = pair.Server;
  53. var mapManager = server.ResolveDependency<IMapManager>();
  54. var entityManager = server.ResolveDependency<IEntityManager>();
  55. var deviceNetSystem = entityManager.EntitySysManager.GetEntitySystem<DeviceNetworkSystem>();
  56. var deviceNetTestSystem = entityManager.EntitySysManager.GetEntitySystem<DeviceNetworkTestSystem>();
  57. EntityUid device1 = default;
  58. EntityUid device2 = default;
  59. DeviceNetworkComponent networkComponent1 = null;
  60. DeviceNetworkComponent networkComponent2 = null;
  61. var testValue = "test";
  62. var payload = new NetworkPayload
  63. {
  64. ["Test"] = testValue,
  65. ["testnumber"] = 1,
  66. ["testbool"] = true
  67. };
  68. await server.WaitAssertion(() =>
  69. {
  70. device1 = entityManager.SpawnEntity("DummyNetworkDevice", MapCoordinates.Nullspace);
  71. Assert.That(entityManager.TryGetComponent(device1, out networkComponent1), Is.True);
  72. Assert.Multiple(() =>
  73. {
  74. Assert.That(networkComponent1.ReceiveFrequency, Is.Not.Null);
  75. Assert.That(networkComponent1.Address, Is.Not.EqualTo(string.Empty));
  76. });
  77. device2 = entityManager.SpawnEntity("DummyNetworkDevice", MapCoordinates.Nullspace);
  78. Assert.That(entityManager.TryGetComponent(device2, out networkComponent2), Is.True);
  79. Assert.Multiple(() =>
  80. {
  81. Assert.That(networkComponent1.ReceiveFrequency, Is.Not.Null);
  82. Assert.That(networkComponent2.Address, Is.Not.EqualTo(string.Empty));
  83. Assert.That(networkComponent1.Address, Is.Not.EqualTo(networkComponent2.Address));
  84. });
  85. deviceNetSystem.QueuePacket(device1, networkComponent2.Address, payload, networkComponent2.ReceiveFrequency.Value);
  86. });
  87. await server.WaitRunTicks(2);
  88. await server.WaitIdleAsync();
  89. await server.WaitAssertion(() =>
  90. {
  91. Assert.That(payload, Is.EquivalentTo(deviceNetTestSystem.LastPayload));
  92. });
  93. await pair.CleanReturnAsync();
  94. }
  95. [Test]
  96. public async Task WirelessNetworkDeviceSendAndReceive()
  97. {
  98. await using var pair = await PoolManager.GetServerClient();
  99. var server = pair.Server;
  100. var testMap = await pair.CreateTestMap();
  101. var coordinates = testMap.GridCoords;
  102. var mapManager = server.ResolveDependency<IMapManager>();
  103. var entityManager = server.ResolveDependency<IEntityManager>();
  104. var deviceNetSystem = entityManager.EntitySysManager.GetEntitySystem<DeviceNetworkSystem>();
  105. var deviceNetTestSystem = entityManager.EntitySysManager.GetEntitySystem<DeviceNetworkTestSystem>();
  106. EntityUid device1 = default;
  107. EntityUid device2 = default;
  108. DeviceNetworkComponent networkComponent1 = null;
  109. DeviceNetworkComponent networkComponent2 = null;
  110. WirelessNetworkComponent wirelessNetworkComponent = null;
  111. var testValue = "test";
  112. var payload = new NetworkPayload
  113. {
  114. ["Test"] = testValue,
  115. ["testnumber"] = 1,
  116. ["testbool"] = true
  117. };
  118. await server.WaitAssertion(() =>
  119. {
  120. device1 = entityManager.SpawnEntity("WirelessNetworkDeviceDummy", coordinates);
  121. Assert.Multiple(() =>
  122. {
  123. Assert.That(entityManager.TryGetComponent(device1, out networkComponent1), Is.True);
  124. Assert.That(entityManager.TryGetComponent(device1, out wirelessNetworkComponent), Is.True);
  125. });
  126. Assert.Multiple(() =>
  127. {
  128. Assert.That(networkComponent1.ReceiveFrequency, Is.Not.Null);
  129. Assert.That(networkComponent1.Address, Is.Not.EqualTo(string.Empty));
  130. });
  131. device2 = entityManager.SpawnEntity("WirelessNetworkDeviceDummy", new MapCoordinates(new Vector2(0, 50), testMap.MapId));
  132. Assert.That(entityManager.TryGetComponent(device2, out networkComponent2), Is.True);
  133. Assert.Multiple(() =>
  134. {
  135. Assert.That(networkComponent2.ReceiveFrequency, Is.Not.Null);
  136. Assert.That(networkComponent2.Address, Is.Not.EqualTo(string.Empty));
  137. Assert.That(networkComponent1.Address, Is.Not.EqualTo(networkComponent2.Address));
  138. });
  139. deviceNetSystem.QueuePacket(device1, networkComponent2.Address, payload, networkComponent2.ReceiveFrequency.Value);
  140. });
  141. await server.WaitRunTicks(2);
  142. await server.WaitIdleAsync();
  143. await server.WaitAssertion(() =>
  144. {
  145. Assert.That(payload, Is.EqualTo(deviceNetTestSystem.LastPayload).AsCollection);
  146. payload = new NetworkPayload
  147. {
  148. ["Wirelesstest"] = 5
  149. };
  150. wirelessNetworkComponent.Range = 0;
  151. deviceNetSystem.QueuePacket(device1, networkComponent2.Address, payload, networkComponent2.ReceiveFrequency.Value);
  152. });
  153. await server.WaitRunTicks(1);
  154. await server.WaitIdleAsync();
  155. await server.WaitAssertion(() =>
  156. {
  157. Assert.That(payload, Is.Not.EqualTo(deviceNetTestSystem.LastPayload).AsCollection);
  158. });
  159. await pair.CleanReturnAsync();
  160. }
  161. [Test]
  162. public async Task WiredNetworkDeviceSendAndReceive()
  163. {
  164. await using var pair = await PoolManager.GetServerClient();
  165. var server = pair.Server;
  166. var testMap = await pair.CreateTestMap();
  167. var coordinates = testMap.GridCoords;
  168. var mapManager = server.ResolveDependency<IMapManager>();
  169. var entityManager = server.ResolveDependency<IEntityManager>();
  170. var deviceNetSystem = entityManager.EntitySysManager.GetEntitySystem<DeviceNetworkSystem>();
  171. var deviceNetTestSystem = entityManager.EntitySysManager.GetEntitySystem<DeviceNetworkTestSystem>();
  172. EntityUid device1 = default;
  173. EntityUid device2 = default;
  174. DeviceNetworkComponent networkComponent1 = null;
  175. DeviceNetworkComponent networkComponent2 = null;
  176. WiredNetworkComponent wiredNetworkComponent = null;
  177. var grid = testMap.Grid.Comp;
  178. var testValue = "test";
  179. var payload = new NetworkPayload
  180. {
  181. ["Test"] = testValue,
  182. ["testnumber"] = 1,
  183. ["testbool"] = true
  184. };
  185. await server.WaitRunTicks(2);
  186. await server.WaitIdleAsync();
  187. await server.WaitAssertion(() =>
  188. {
  189. device1 = entityManager.SpawnEntity("DummyWiredNetworkDevice", coordinates);
  190. Assert.Multiple(() =>
  191. {
  192. Assert.That(entityManager.TryGetComponent(device1, out networkComponent1), Is.True);
  193. Assert.That(entityManager.TryGetComponent(device1, out wiredNetworkComponent), Is.True);
  194. });
  195. Assert.Multiple(() =>
  196. {
  197. Assert.That(networkComponent1.ReceiveFrequency, Is.Not.Null);
  198. Assert.That(networkComponent1.Address, Is.Not.EqualTo(string.Empty));
  199. });
  200. device2 = entityManager.SpawnEntity("DummyWiredNetworkDevice", coordinates);
  201. Assert.That(entityManager.TryGetComponent(device2, out networkComponent2), Is.True);
  202. Assert.Multiple(() =>
  203. {
  204. Assert.That(networkComponent2.ReceiveFrequency, Is.Not.Null);
  205. Assert.That(networkComponent2.Address, Is.Not.EqualTo(string.Empty));
  206. Assert.That(networkComponent1.Address, Is.Not.EqualTo(networkComponent2.Address));
  207. });
  208. deviceNetSystem.QueuePacket(device1, networkComponent2.Address, payload, networkComponent2.ReceiveFrequency.Value);
  209. });
  210. await server.WaitRunTicks(1);
  211. await server.WaitIdleAsync();
  212. await server.WaitAssertion(() =>
  213. {
  214. //CollectionAssert.AreNotEqual(deviceNetTestSystem.LastPayload, payload);
  215. entityManager.SpawnEntity("CableApcExtension", coordinates);
  216. deviceNetSystem.QueuePacket(device1, networkComponent2.Address, payload, networkComponent2.ReceiveFrequency.Value);
  217. });
  218. await server.WaitRunTicks(1);
  219. await server.WaitIdleAsync();
  220. await server.WaitAssertion(() =>
  221. {
  222. Assert.That(payload, Is.EqualTo(deviceNetTestSystem.LastPayload).AsCollection);
  223. });
  224. await pair.CleanReturnAsync();
  225. }
  226. }
  227. }