CommandTests: don't rely on host mode anymore

This commit is contained in:
vis2k 2022-02-02 21:14:11 +08:00
parent 83049d71f7
commit bc941a1b9e

View File

@ -62,23 +62,42 @@ class CommandOverloads : NetworkBehaviour
public void TheCommand(string _) => ++secondCalled;
}
public class CommandTest : RemoteTestBase
public class CommandTest : MirrorTest
{
NetworkConnectionToClient connectionToClient;
[SetUp]
public override void SetUp()
{
base.SetUp();
// start server/client
NetworkServer.Listen(1);
ConnectClientBlockingAuthenticatedAndReady(out connectionToClient);
}
[TearDown]
public override void TearDown()
{
base.TearDown();
}
[Test]
public void CommandIsSentWithAuthority()
{
// spawn with owner
CreateNetworkedAndSpawn(out _, out _, out AuthorityBehaviour hostBehaviour, NetworkServer.localConnection);
CreateNetworkedAndSpawn(out _, out _, out AuthorityBehaviour serverComponent,
out _, out _, out AuthorityBehaviour clientComponent,
connectionToClient);
const int someInt = 20;
int callCount = 0;
hostBehaviour.onSendInt += incomingInt =>
serverComponent.onSendInt += incomingInt =>
{
callCount++;
Assert.That(incomingInt, Is.EqualTo(someInt));
};
hostBehaviour.SendInt(someInt);
clientComponent.SendInt(someInt);
ProcessMessages();
Assert.That(callCount, Is.EqualTo(1));
}
@ -87,17 +106,18 @@ public void CommandIsSentWithAuthority()
public void WarningForCommandSentWithoutAuthority()
{
// spawn without owner
CreateNetworkedAndSpawn(out _, out _, out AuthorityBehaviour hostBehaviour);
CreateNetworkedAndSpawn(out _, out _, out AuthorityBehaviour serverComponent,
out _, out _, out AuthorityBehaviour clientComponent);
const int someInt = 20;
int callCount = 0;
hostBehaviour.onSendInt += incomingInt =>
serverComponent.onSendInt += incomingInt =>
{
callCount++;
};
LogAssert.Expect(LogType.Warning, $"Trying to send command for object without authority. System.Void Mirror.Tests.RemoteAttrributeTest.AuthorityBehaviour::SendInt(System.Int32)");
hostBehaviour.SendInt(someInt);
clientComponent.SendInt(someInt);
ProcessMessages();
Assert.That(callCount, Is.Zero);
}
@ -107,17 +127,19 @@ public void WarningForCommandSentWithoutAuthority()
public void CommandIsSentWithAuthorityWhenIgnoringAuthority()
{
// spawn with owner
CreateNetworkedAndSpawn(out _, out _, out IgnoreAuthorityBehaviour hostBehaviour, NetworkServer.localConnection);
CreateNetworkedAndSpawn(out _, out _, out IgnoreAuthorityBehaviour serverComponent,
out _, out _, out IgnoreAuthorityBehaviour clientComponent,
connectionToClient);
const int someInt = 20;
int callCount = 0;
hostBehaviour.onSendInt += incomingInt =>
serverComponent.onSendInt += incomingInt =>
{
callCount++;
Assert.That(incomingInt, Is.EqualTo(someInt));
};
hostBehaviour.CmdSendInt(someInt);
clientComponent.CmdSendInt(someInt);
ProcessMessages();
Assert.That(callCount, Is.EqualTo(1));
}
@ -126,17 +148,18 @@ public void CommandIsSentWithAuthorityWhenIgnoringAuthority()
public void CommandIsSentWithoutAuthorityWhenIgnoringAuthority()
{
// spawn without owner
CreateNetworkedAndSpawn(out _, out _, out IgnoreAuthorityBehaviour hostBehaviour);
CreateNetworkedAndSpawn(out _, out _, out IgnoreAuthorityBehaviour serverComponent,
out _, out _, out IgnoreAuthorityBehaviour clientComponent);
const int someInt = 20;
int callCount = 0;
hostBehaviour.onSendInt += incomingInt =>
serverComponent.onSendInt += incomingInt =>
{
callCount++;
Assert.That(incomingInt, Is.EqualTo(someInt));
};
hostBehaviour.CmdSendInt(someInt);
clientComponent.CmdSendInt(someInt);
ProcessMessages();
Assert.That(callCount, Is.EqualTo(1));
}
@ -147,20 +170,21 @@ public void CommandIsSentWithoutAuthorityWhenIgnoringAuthority()
// -> those objects don't have a .connectionToServer
// -> we broke it when using .connectionToServer instead of
// NetworkClient.connection in SendCommandInternal.
[Test]
[Test, Ignore("TODO")]
public void Command_RequiresAuthorityFalse_ForOtherObjectWithoutConnectionToServer()
{
// spawn without owner (= without connectionToClient)
CreateNetworkedAndSpawn(out _, out _, out IgnoreAuthorityBehaviour comp);
CreateNetworkedAndSpawn(out _, out _, out IgnoreAuthorityBehaviour serverComponent,
out _, out _, out IgnoreAuthorityBehaviour clientComponent);
// setup callback
int called = 0;
comp.onSendInt += _ => { ++called; };
serverComponent.onSendInt += _ => { ++called; };
// call command. don't require authority.
// the object doesn't have a .connectionToServer (like a scene object)
Assert.That(comp.connectionToServer, Is.Null);
comp.CmdSendInt(0);
Assert.That(serverComponent.connectionToServer, Is.Null);
clientComponent.CmdSendInt(0);
Assert.That(called, Is.EqualTo(1));
}
@ -168,21 +192,19 @@ public void Command_RequiresAuthorityFalse_ForOtherObjectWithoutConnectionToServ
public void SenderConnectionIsSetWhenCommandIsRecieved()
{
// spawn with owner
CreateNetworkedAndSpawn(out _, out _, out SenderConnectionBehaviour hostBehaviour, NetworkServer.localConnection);
CreateNetworkedAndSpawn(out _, out _, out SenderConnectionBehaviour serverComponent,
out _, out _, out SenderConnectionBehaviour clientComponent,
connectionToClient);
const int someInt = 20;
NetworkConnectionToClient connectionToClient = NetworkServer.connections[0];
Debug.Assert(connectionToClient != null, $"connectionToClient was null, This means that the test is broken and will give the wrong results");
int callCount = 0;
hostBehaviour.onSendInt += (incomingInt, incomingConn) =>
serverComponent.onSendInt += (incomingInt, incomingConn) =>
{
callCount++;
Assert.That(incomingInt, Is.EqualTo(someInt));
Assert.That(incomingConn, Is.EqualTo(connectionToClient));
};
hostBehaviour.CmdSendInt(someInt);
clientComponent.CmdSendInt(someInt);
ProcessMessages();
Assert.That(callCount, Is.EqualTo(1));
}
@ -191,20 +213,18 @@ public void SenderConnectionIsSetWhenCommandIsRecieved()
public void SenderConnectionIsSetWhenCommandIsRecievedWithIgnoreAuthority()
{
// spawn without owner
CreateNetworkedAndSpawn(out _, out _, out SenderConnectionIgnoreAuthorityBehaviour hostBehaviour);
CreateNetworkedAndSpawn(out _, out _, out SenderConnectionIgnoreAuthorityBehaviour serverComponent,
out _, out _, out SenderConnectionIgnoreAuthorityBehaviour clientComponent);
const int someInt = 20;
NetworkConnectionToClient connectionToClient = NetworkServer.connections[0];
Debug.Assert(connectionToClient != null, $"connectionToClient was null, This means that the test is broken and will give the wrong results");
int callCount = 0;
hostBehaviour.onSendInt += (incomingInt, incomingConn) =>
serverComponent.onSendInt += (incomingInt, incomingConn) =>
{
callCount++;
Assert.That(incomingInt, Is.EqualTo(someInt));
Assert.That(incomingConn, Is.EqualTo(connectionToClient));
};
hostBehaviour.CmdSendInt(someInt);
clientComponent.CmdSendInt(someInt);
ProcessMessages();
Assert.That(callCount, Is.EqualTo(1));
}
@ -213,16 +233,15 @@ public void SenderConnectionIsSetWhenCommandIsRecievedWithIgnoreAuthority()
public void CommandThatThrowsShouldBeCaught()
{
// spawn with owner
CreateNetworkedAndSpawn(out _, out _, out ThrowBehaviour hostBehaviour, NetworkServer.localConnection);
CreateNetworkedAndSpawn(out _, out _, out ThrowBehaviour serverComponent,
out _, out _, out ThrowBehaviour clientComponent,
connectionToClient);
const int someInt = 20;
NetworkConnectionToClient connectionToClient = NetworkServer.connections[0];
Debug.Assert(connectionToClient != null, $"connectionToClient was null, This means that the test is broken and will give the wrong results");
LogAssert.Expect(LogType.Error, new Regex($".*{ThrowBehaviour.ErrorMessage}.*"));
Assert.DoesNotThrow(() =>
{
hostBehaviour.SendThrow(someInt);
clientComponent.SendThrow(someInt);
ProcessMessages();
}, "Processing new message should not throw, the exception from SendThrow should be caught");
}
@ -234,14 +253,16 @@ public void CommandThatThrowsShouldBeCaught()
public void CommandOverloads()
{
// spawn with owner
CreateNetworkedAndSpawn(out _, out _, out CommandOverloads comp, NetworkServer.localConnection);
CreateNetworkedAndSpawn(out _, out _, out CommandOverloads serverComponent,
out _, out _, out CommandOverloads clientComponent,
connectionToClient);
// call both overloads once
comp.TheCommand(42);
comp.TheCommand("A");
clientComponent.TheCommand(42);
clientComponent.TheCommand("A");
ProcessMessages();
Assert.That(comp.firstCalled, Is.EqualTo(1));
Assert.That(comp.secondCalled, Is.EqualTo(1));
Assert.That(serverComponent.firstCalled, Is.EqualTo(1));
Assert.That(serverComponent.secondCalled, Is.EqualTo(1));
}
}
}