89 lines
2.5 KiB
C#
89 lines
2.5 KiB
C#
using System.Collections;
|
|
using NUnit.Framework;
|
|
using UnityEngine.TestTools;
|
|
using UnityEngine;
|
|
using UnityEngine.Networking;
|
|
|
|
#pragma warning disable 618
|
|
public class ChannelBufferHandlesOverflow
|
|
{
|
|
int kListenPort = 7073;
|
|
const int kPacketSize = 1000;
|
|
const short kMsgId = 155;
|
|
const int kNumMsgs = 14000;
|
|
|
|
NetworkClient myClient;
|
|
|
|
bool isTestDone;
|
|
|
|
[UnityTest]
|
|
public IEnumerator ChannelBufferHandlesOverflowTest()
|
|
{
|
|
NetworkClient.ShutdownAll();
|
|
NetworkServer.Reset();
|
|
|
|
ConnectionConfig config = new ConnectionConfig();
|
|
config.AddChannel(QosType.ReliableSequenced);
|
|
config.AddChannel(QosType.Unreliable);
|
|
|
|
myClient = new NetworkClient();
|
|
if (!myClient.Configure(config, 10))
|
|
{
|
|
Assert.Fail("Client configure failed");
|
|
}
|
|
|
|
NetworkServer.RegisterHandler(kMsgId, OnServerMsg);
|
|
myClient.RegisterHandler(MsgType.Connect, OnClientConnected);
|
|
|
|
int retries = 0;
|
|
while (!NetworkServer.Listen("127.0.0.1", ++kListenPort))
|
|
{
|
|
Assert.IsTrue(retries++ < 10, "Couldn't Listen for more than 10 retries");
|
|
}
|
|
|
|
myClient.Connect("127.0.0.1", kListenPort);
|
|
|
|
while (!isTestDone)
|
|
{
|
|
yield return null;
|
|
}
|
|
//Debug.Log("Shutting down");
|
|
//NetworkServer.DisconnectAll();
|
|
//NetworkClient.ShutdownAll();
|
|
//NetworkTransport.Shutdown();
|
|
|
|
yield return null;
|
|
}
|
|
|
|
public void OnServerMsg(NetworkMessage netMsg)
|
|
{
|
|
//need this method simply to prevent "Unknown ID" error message
|
|
}
|
|
|
|
public void OnClientConnected(NetworkMessage netMsg)
|
|
{
|
|
NetworkWriter writer = new NetworkWriter();
|
|
writer.StartMessage(kMsgId);
|
|
byte[] data = new byte[kPacketSize];
|
|
writer.Write(data, kPacketSize);
|
|
writer.FinishMessage();
|
|
LogAssert.Expect(LogType.Error, "ChannelBuffer buffer limit of 16 packets reached.");
|
|
|
|
// these messages do not all fit in the transport layer send queue.
|
|
// to be recieved on the server, they must be buffered by HLAPI
|
|
bool gotFailure = false;
|
|
for (int i = 0; i < kNumMsgs; i++)
|
|
{
|
|
if (!myClient.SendWriter(writer, Channels.DefaultReliable))
|
|
{
|
|
gotFailure = true;
|
|
break;
|
|
}
|
|
}
|
|
|
|
Assert.AreEqual(true, gotFailure);
|
|
isTestDone = true;
|
|
}
|
|
}
|
|
#pragma warning restore 618
|