test(headless): cover K4 death and cancellation
This commit is contained in:
parent
97c174fbb2
commit
bd236ce553
2 changed files with 115 additions and 17 deletions
|
|
@ -151,6 +151,7 @@ public sealed class HeadlessSessionIsolationTests
|
|||
.Select(index => CreateHost(index, operations, time))
|
||||
.ToArray();
|
||||
var reconnectCounts = new int[sessionCount];
|
||||
var deathCounts = new int[sessionCount];
|
||||
var random = new Random(0xAC2013);
|
||||
try
|
||||
{
|
||||
|
|
@ -197,6 +198,16 @@ public sealed class HeadlessSessionIsolationTests
|
|||
2 + reconnectCounts[index]
|
||||
+ (frame / 211))));
|
||||
}
|
||||
if (frame % 5003 == 0)
|
||||
{
|
||||
int index = (frame / 5003) % sessionCount;
|
||||
Death(
|
||||
operations.ActiveSession(
|
||||
hosts[index].SessionId),
|
||||
sharedPlayerGuid,
|
||||
frame);
|
||||
deathCounts[index]++;
|
||||
}
|
||||
if (frame % 353 == 0)
|
||||
{
|
||||
int index = random.Next(sessionCount);
|
||||
|
|
@ -289,25 +300,30 @@ public sealed class HeadlessSessionIsolationTests
|
|||
Assert.All(
|
||||
reconnectCounts,
|
||||
static count => Assert.True(count > 0));
|
||||
Assert.All(
|
||||
deathCounts,
|
||||
static count => Assert.True(count > 0));
|
||||
var finalRecords = new List<RuntimeEntityRecord>(
|
||||
sessionCount);
|
||||
Assert.All(
|
||||
hosts,
|
||||
host =>
|
||||
{
|
||||
Assert.Equal(
|
||||
(ulong)frameCount,
|
||||
host.Runtime.Clock.FrameNumber);
|
||||
Assert.True(
|
||||
host.Runtime.EntityObjects.Entities.TryGetActive(
|
||||
sharedPlayerGuid,
|
||||
out RuntimeEntityRecord finalRecord));
|
||||
finalRecords.Add(finalRecord);
|
||||
Assert.True(
|
||||
host.Runtime.TransitOwner
|
||||
.CaptureOwnership()
|
||||
.IsSessionIdle);
|
||||
});
|
||||
for (int index = 0; index < hosts.Length; index++)
|
||||
{
|
||||
HeadlessSessionHost host = hosts[index];
|
||||
Assert.Equal(
|
||||
(ulong)frameCount,
|
||||
host.Runtime.Clock.FrameNumber);
|
||||
Assert.True(
|
||||
host.Runtime.EntityObjects.Entities.TryGetActive(
|
||||
sharedPlayerGuid,
|
||||
out RuntimeEntityRecord finalRecord));
|
||||
finalRecords.Add(finalRecord);
|
||||
Assert.True(
|
||||
host.Runtime.TransitOwner
|
||||
.CaptureOwnership()
|
||||
.IsSessionIdle);
|
||||
Assert.True(
|
||||
host.Runtime.CommunicationOwner.View.Count
|
||||
>= deathCounts[index]);
|
||||
}
|
||||
Assert.Equal(
|
||||
sessionCount,
|
||||
finalRecords
|
||||
|
|
@ -420,6 +436,18 @@ public sealed class HeadlessSessionIsolationTests
|
|||
ForcePositionSequence: 0));
|
||||
}
|
||||
|
||||
private static void Death(
|
||||
WorldSession session,
|
||||
uint victimGuid,
|
||||
int sequence) =>
|
||||
EventDelegate<Action<PlayerKilled.Parsed>>(
|
||||
session,
|
||||
nameof(session.PlayerKilledReceived))(
|
||||
new PlayerKilled.Parsed(
|
||||
$"Headless death {sequence}.",
|
||||
victimGuid,
|
||||
0x5000FFFFu));
|
||||
|
||||
private static WorldSession.EntitySpawn Spawn(
|
||||
uint guid,
|
||||
float positionX)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue