From 9c47a312d178e467f2d7b269416ccee9184fb4d1 Mon Sep 17 00:00:00 2001 From: Mazo Date: Sun, 7 Feb 2021 12:07:15 +0000 Subject: [PATCH 1/3] Fix race conditions in damage tests involving jammers --- .../objects/equipment/JammingUnit.scala | 2 +- src/test/scala/objects/DamageableTest.scala | 25 +++---------------- 2 files changed, 5 insertions(+), 22 deletions(-) diff --git a/src/main/scala/net/psforever/objects/equipment/JammingUnit.scala b/src/main/scala/net/psforever/objects/equipment/JammingUnit.scala index a52e1fcd0a..c23b5fb175 100644 --- a/src/main/scala/net/psforever/objects/equipment/JammingUnit.scala +++ b/src/main/scala/net/psforever/objects/equipment/JammingUnit.scala @@ -152,8 +152,8 @@ trait JammableBehavior { case _ => true }) { - StartJammeredSound(obj, dur) StartJammeredStatus(obj, dur) + StartJammeredSound(obj, dur) } case None => } diff --git a/src/test/scala/objects/DamageableTest.scala b/src/test/scala/objects/DamageableTest.scala index 3c8fcff721..3d46c9146d 100644 --- a/src/test/scala/objects/DamageableTest.scala +++ b/src/test/scala/objects/DamageableTest.scala @@ -932,27 +932,10 @@ class DamageableWeaponTurretJammerTest extends ActorTest { turret.Actor ! Vitality.Damage(applyDamageTo) val msg12 = vehicleProbe.receiveN(2, 500 milliseconds) - assert( - msg12.head match { - case VehicleServiceMessage( - "test", - VehicleAction.PlanetsideAttribute(Service.defaultPlayerGUID, PlanetSideGUID(2), 27, 1) - ) => - true - case _ => false - } - ) - assert( - msg12(1) match { - case VehicleServiceMessage( - "test", - VehicleAction.PlanetsideAttribute(Service.defaultPlayerGUID, PlanetSideGUID(5), 27, 1) - ) => - true - case _ => false - } - ) - expectNoMessage(100 milliseconds) // FIXME this is a hack to make it pass + + assert(msg12.contains(VehicleServiceMessage("test", VehicleAction.PlanetsideAttribute(Service.defaultPlayerGUID, PlanetSideGUID(2), 27, 1)))) + assert(msg12.contains(VehicleServiceMessage("test", VehicleAction.PlanetsideAttribute(Service.defaultPlayerGUID, PlanetSideGUID(5), 27, 1)))) + assert(turret.Health == turret.Definition.DefaultHealth) assert(turret.Jammed) } From 26389fa80ae184deb2463cfa7d1a6ff96b89cb30 Mon Sep 17 00:00:00 2001 From: Mazo Date: Sun, 7 Feb 2021 12:07:50 +0000 Subject: [PATCH 2/3] Speed up environmental water tests --- src/test/scala/objects/PlayerControlTest.scala | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/test/scala/objects/PlayerControlTest.scala b/src/test/scala/objects/PlayerControlTest.scala index 4bde843f75..281b76f921 100644 --- a/src/test/scala/objects/PlayerControlTest.scala +++ b/src/test/scala/objects/PlayerControlTest.scala @@ -757,6 +757,7 @@ class PlayerControlDeathSeatedTest extends ActorTest { class PlayerControlInteractWithWaterTest extends ActorTest { val player1 = Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=1 + player1.Definition.UnderwaterLifespan(suffocation = 3000, recovery = 3000) // Override the default 60s down / 10s recovery so the tests don't take forever to run val avatarProbe = TestProbe() val guid = new NumberPoolHub(new MaxNumberSource(15)) val pool = Pool(EnvironmentAttribute.Water, DeepSquare(-1, 10, 10, 0, 0)) @@ -797,11 +798,12 @@ class PlayerControlInteractWithWaterTest extends ActorTest { case _ => false } ) - //player will die in 60s - //detailing these death messages is not necessary + + //player will die in 3s (overridden from 60s) assert(player1.Health == 100) - probe.receiveOne(65 seconds) //wait until our implants deinitialize - assert(player1.Health == 0) //ded + awaitAssert( + assert(player1.Health == 0) + , max = player1.Definition.UnderwaterLifespan(OxygenState.Suffocation) + 3000 milliseconds, interval = 1 second) } } } @@ -809,6 +811,7 @@ class PlayerControlInteractWithWaterTest extends ActorTest { class PlayerControlStopInteractWithWaterTest extends ActorTest { val player1 = Player(Avatar(0, "TestCharacter1", PlanetSideEmpire.TR, CharacterGender.Male, 0, CharacterVoice.Mute)) //guid=1 + player1.Definition.UnderwaterLifespan(suffocation = 3000, recovery = 3000) // Override the default 60s down / 10s recovery so the tests don't take forever to run val avatarProbe = TestProbe() val guid = new NumberPoolHub(new MaxNumberSource(15)) val pool = Pool(EnvironmentAttribute.Water, DeepSquare(-1, 10, 10, 0, 0)) @@ -849,7 +852,7 @@ class PlayerControlStopInteractWithWaterTest extends ActorTest { case _ => false } ) - //player would normally die in 60s + //player would normally die in 3s (overridden from 60s) player1.Position = Vector3.Zero //pool's closed player1.zoneInteraction() //trigger val msg_recover = avatarProbe.receiveOne(250 milliseconds) @@ -863,7 +866,7 @@ class PlayerControlStopInteractWithWaterTest extends ActorTest { } ) assert(player1.Health == 100) //still alive? - probe.expectNoMessage(65 seconds) + probe.expectNoMessage(5 seconds) assert(player1.Health == 100) //yep, still alive } } From cd14e1c5d2466a07df0f6a28898df92b9437a967 Mon Sep 17 00:00:00 2001 From: Mazo Date: Sun, 7 Feb 2021 13:32:57 +0000 Subject: [PATCH 3/3] Don't print numberpool replacement warning if zone id contains "test" --- .../scala/net/psforever/objects/zones/Zone.scala | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/main/scala/net/psforever/objects/zones/Zone.scala b/src/main/scala/net/psforever/objects/zones/Zone.scala index 8622ca769a..10ecd0c0c4 100644 --- a/src/main/scala/net/psforever/objects/zones/Zone.scala +++ b/src/main/scala/net/psforever/objects/zones/Zone.scala @@ -436,12 +436,16 @@ class Zone(val id: String, val map: ZoneMap, zoneNumber: Int) { if (actor == null && guid.Pools.values.foldLeft(0)(_ + _.Count) == 0) { import org.fusesource.jansi.Ansi.Color.RED import org.fusesource.jansi.Ansi.ansi - println( - ansi() - .fgBright(RED) - .a(s"""Caution: replacement of the number pool system for zone $id; function is for testing purposes only""") - .reset() - ) + + // If the number pool has been replaced for a test don't show this warning, if the zone id contains test we'll assume you know what you're doing. + if (!id.contains("test")) { + println( + ansi() + .fgBright(RED) + .a(s"""Caution: replacement of the number pool system for zone $id; function is for testing purposes only""") + .reset() + ) + } guid = hub true } else {