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