|
|
@@ -48,20 +48,19 @@ public class UnitTests
|
|
|
[Test]
|
|
|
public void SendAndRecv()
|
|
|
{
|
|
|
- ushort port = 7777;
|
|
|
- int maxClients = 1;
|
|
|
+ const ushort port = 7777;
|
|
|
+ const int maxClients = 1;
|
|
|
+ const byte dataVal = 42;
|
|
|
|
|
|
int clientEvents = 0;
|
|
|
int clientConnected = 0;
|
|
|
int clientDisconnected = 0;
|
|
|
int clientTimeout = 0;
|
|
|
int clientNone = 0;
|
|
|
- int clientSendData = 0;
|
|
|
int clientRecvData = 0;
|
|
|
int serverEvents = 0;
|
|
|
int serverConnected = 0;
|
|
|
int serverDisconnected = 0;
|
|
|
- int serverSendData = 0;
|
|
|
int serverRecvData = 0;
|
|
|
int serverTimeout = 0;
|
|
|
int serverNone = 0;
|
|
|
@@ -75,14 +74,15 @@ public class UnitTests
|
|
|
address.Port = port;
|
|
|
server.Create(address, maxClients);
|
|
|
|
|
|
- address.SetHost("0.0.0.0");
|
|
|
+ address.SetIP("127.0.0.1");
|
|
|
client.Create();
|
|
|
|
|
|
- Peer clientPeer;
|
|
|
+ Peer clientPeer = default;
|
|
|
Stopwatch sw = Stopwatch.StartNew();
|
|
|
- while (sw.ElapsedMilliseconds < 10000)
|
|
|
+ while (clientState != ClientState.Disconnected && sw.ElapsedMilliseconds < 10000)
|
|
|
{
|
|
|
- while (server.Service(15, out Event netEvent) > 0) {
|
|
|
+ while (server.Service(15, out Event netEvent) > 0)
|
|
|
+ {
|
|
|
serverEvents++;
|
|
|
switch (netEvent.Type)
|
|
|
{
|
|
|
@@ -94,59 +94,101 @@ public class UnitTests
|
|
|
break;
|
|
|
case EventType.Disconnect:
|
|
|
serverDisconnected++;
|
|
|
+ clientState = ClientState.Disconnected;
|
|
|
break;
|
|
|
case EventType.Timeout:
|
|
|
serverTimeout++;
|
|
|
break;
|
|
|
case EventType.Receive:
|
|
|
serverRecvData++;
|
|
|
+ Packet packet = default(Packet);
|
|
|
+ byte[] data = new byte[64];
|
|
|
+ netEvent.Packet.CopyTo(data);
|
|
|
+
|
|
|
+ for (int i = 0; i < data.Length; i++) Assert.True(data[i] == dataVal);
|
|
|
+
|
|
|
+ packet.Create(data);
|
|
|
+ netEvent.Peer.Send(0, ref packet);
|
|
|
netEvent.Packet.Dispose();
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
- server.Flush();
|
|
|
+ server.Flush();
|
|
|
|
|
|
- while (client.Service(15, out Event netEvent) > 0)
|
|
|
- {
|
|
|
- clientEvents++;
|
|
|
- switch (netEvent.Type)
|
|
|
+ while (client.Service(15, out Event netEvent) > 0)
|
|
|
{
|
|
|
- case EventType.None:
|
|
|
- clientNone++;
|
|
|
- break;
|
|
|
- case EventType.Connect:
|
|
|
- clientConnected++;
|
|
|
- break;
|
|
|
- case EventType.Disconnect:
|
|
|
- clientDisconnected++;
|
|
|
- break;
|
|
|
- case EventType.Timeout:
|
|
|
- clientTimeout++;
|
|
|
- break;
|
|
|
- case EventType.Receive:
|
|
|
- clientRecvData++;
|
|
|
- netEvent.Packet.Dispose();
|
|
|
- break;
|
|
|
+ clientEvents++;
|
|
|
+ switch (netEvent.Type)
|
|
|
+ {
|
|
|
+ case EventType.None:
|
|
|
+ clientNone++;
|
|
|
+ break;
|
|
|
+ case EventType.Connect:
|
|
|
+ clientConnected++;
|
|
|
+ clientState = ClientState.Connected;
|
|
|
+ break;
|
|
|
+ case EventType.Disconnect:
|
|
|
+ clientDisconnected++;
|
|
|
+ clientState = ClientState.Disconnected;
|
|
|
+ break;
|
|
|
+ case EventType.Timeout:
|
|
|
+ clientTimeout++;
|
|
|
+ break;
|
|
|
+ case EventType.Receive:
|
|
|
+ clientRecvData++;
|
|
|
+ byte[] data = new byte[64];
|
|
|
+ Packet packet = netEvent.Packet;
|
|
|
+ packet.CopyTo(data);
|
|
|
+ for (int i = 0; i < data.Length; i++) Assert.True(data[i] == dataVal);
|
|
|
+ netEvent.Packet.Dispose();
|
|
|
+
|
|
|
+ clientState = ClientState.RecvData;
|
|
|
+ break;
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
- client.Flush();
|
|
|
+ client.Flush();
|
|
|
|
|
|
- if (clientState == ClientState.None)
|
|
|
- {
|
|
|
- clientState = ClientState.Connecting;
|
|
|
- clientPeer = client.Connect(address);
|
|
|
- }
|
|
|
- else if (clientState == ClientState.Connected)
|
|
|
- {
|
|
|
+ if (clientState == ClientState.None)
|
|
|
+ {
|
|
|
+ clientState = ClientState.Connecting;
|
|
|
+ clientPeer = client.Connect(address);
|
|
|
+ }
|
|
|
+ else if (clientState == ClientState.Connected)
|
|
|
+ {
|
|
|
+ Packet packet = default(Packet);
|
|
|
+ byte[] data = new byte[64];
|
|
|
+ for (int i = 0; i < data.Length; i++) data[i] = dataVal;
|
|
|
+
|
|
|
+ packet.Create(data);
|
|
|
+ clientPeer.Send(0, ref packet);
|
|
|
|
|
|
+ clientState = ClientState.SendData;
|
|
|
+ }
|
|
|
+ else if (clientState == ClientState.RecvData)
|
|
|
+ {
|
|
|
+ clientPeer.DisconnectNow(0);
|
|
|
+ clientState = ClientState.Disconnecting;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
Assert.True(clientEvents != 0, "client host never generated an event");
|
|
|
Assert.True(serverEvents != 0, "server host never generated an event");
|
|
|
- Assert.True(clientState != ClientState.None, "client never changed state");
|
|
|
- Assert.AreEqual(1, clientConnected, "client did not connect to server");
|
|
|
- Assert.AreEqual(1, serverConnected, "server did not see client connection");
|
|
|
+
|
|
|
+ Assert.True(clientState == ClientState.Disconnected, "client didn't fully disconnect");
|
|
|
+
|
|
|
+ Assert.AreEqual(1, clientConnected, "client should have connected once");
|
|
|
+ Assert.AreEqual(1, serverConnected, "server should have had one inbound connect");
|
|
|
+
|
|
|
+ Assert.AreEqual(1, clientRecvData, "client should have recvd once");
|
|
|
+ Assert.AreEqual(1, serverRecvData, "server should have recvd once");
|
|
|
+
|
|
|
+ Assert.AreEqual(0, clientTimeout, "client had timeout events");
|
|
|
+ Assert.AreEqual(0, serverTimeout, "server had timeout events");
|
|
|
+
|
|
|
+ Assert.AreEqual(0, clientNone, "client had none events");
|
|
|
+ Assert.AreEqual(0, serverNone, "server had none events");
|
|
|
+
|
|
|
+ Assert.AreEqual(1, serverDisconnected, "server should have had one client disconnect");
|
|
|
}
|
|
|
}
|