您最多选择25个主题 主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 

240 行
8.7 KiB

using System;
using System.Threading;
using System.Net;
using NUnit.Framework;
using System.Net.Sockets;
using UnityEngine;
using SQP;
using System.Text;
namespace TransportTests
{
public class SQPTests
{
byte[] m_Buffer = new byte[1472];
ByteInputStream reader;
ByteOutputStream writer;
[SetUp]
public void Setup()
{
reader = new ByteInputStream(m_Buffer);
writer = new ByteOutputStream(m_Buffer);
}
[TearDown]
public void Teardown()
{
}
[Test]
public void SQP_SerializeChallangeRequest_NoError()
{
var snd = new ChallangeRequest();
snd.ToStream(ref writer);
var rcv = new ChallangeRequest();
rcv.FromStream(ref reader);
Assert.AreEqual((byte)SQPMessageType.ChallangeRequest, rcv.Header.Type);
}
[Test]
public void SQP_SerializeChallangeResponse_NoError()
{
var id = (uint)1337;
var snd = new ChallangeResponse();
snd.Header.ChallangeId = id;
snd.ToStream(ref writer);
var rcv = new ChallangeResponse();
rcv.FromStream(ref reader);
Assert.AreEqual((byte)SQPMessageType.ChallangeResponse, rcv.Header.Type);
Assert.AreEqual(id, (uint)rcv.Header.ChallangeId);
}
[Test]
public void SQP_SerializeQueryRequest_NoError()
{
var id = (uint)1337;
var chunk = (byte)31;
var snd = new QueryRequest();
snd.Header.ChallangeId = id;
snd.RequestedChunks = chunk;
snd.ToStream(ref writer);
var rcv = new QueryRequest();
rcv.FromStream(ref reader);
Assert.AreEqual((byte)SQPMessageType.QueryRequest, rcv.Header.Type);
Assert.AreEqual(id, (uint)rcv.Header.ChallangeId);
Assert.AreEqual(chunk, rcv.RequestedChunks);
}
[Test]
public void SQP_SerializeQueryResponseHeader_NoError()
{
var id = (uint)1337;
var version = (ushort)12345;
var packet = (byte)3;
var last = (byte)9;
var snd = new QueryResponseHeader();
snd.Header.ChallangeId = id;
snd.Version = version;
snd.CurrentPacket = packet;
snd.LastPacket = last;
snd.ToStream(ref writer);
var rcv = new QueryResponseHeader();
rcv.FromStream(ref reader);
Assert.AreEqual((byte)SQPMessageType.QueryResponse, rcv.Header.Type);
Assert.AreEqual(id, (uint)rcv.Header.ChallangeId);
Assert.AreEqual(version, rcv.Version);
Assert.AreEqual(packet, rcv.CurrentPacket);
Assert.AreEqual(last, rcv.LastPacket);
}
[Test]
public void ByteOutputStream_WriteAndReadString_Works()
{
var encoding = new UTF8Encoding();
var sendShort = "banana";
var sendLong = "thisisalongstringrepeatedoverthisisalongstringrepeatedoverthisisalongstringrepeatedoverandoverthisisalongstringrepeatedoverandoverthisisalongstringrepeatedoverandoverthisisalongstringrepeatedoverandoverthisisalongstringrepeatedoverandoverthisisalongstringrepeatedoverandover";
var sendUTF = "ᚠᛇᚻ᛫ᛒᛦᚦ᛫ᚠᚱᚩᚠᚢᚱ᛫ᚠᛁᚱᚪ᛫ᚷᛖᚻᚹᛦᛚᚳᚢᛗᚠᛇᚻ᛫ᛒᛦᚦ᛫ᚠᚱᚩᚠᚢᚱ᛫ᚠᛁᚱᚪ᛫ᚷᛖᚻᚹᛦᛚᚳᚢᛗᚠᛇᚻ᛫ᛒᛦᚦ᛫ᚠᚱᚩᚠᚢᚱ᛫ᚠᛁᚱᚪ᛫ᚷᛖᚻᚹᛦᛚᚳᚢᛗᚠᛇᚻ᛫ᛒᛦᚦ᛫ᚠᚱᚩᚠᚢᚱ᛫ᚠᛁᚱᚪ᛫ᚷᛖᚻᚹᛦᛚᚳᚢᛗᚠᛇᚻ᛫ᛒᛦᚦ᛫ᚠᚱᚩᚠᚢᚱ᛫ᚠᛁᚱᚪ᛫ᚷᛖᚻᚹᛦᛚᚳᚢᛗᚠᛇᚻ᛫ᛒᛦᚦ᛫ᚠᚱᚩᚠᚢᚱ᛫ᚠᛁᚱᚪ᛫ᚷᛖᚻᚹᛦᛚᚳᚢᛗᚠᛇᚻ᛫ᛒᛦᚦ᛫ᚠᚱᚩᚠᚢᚱ᛫ᚠᛁᚱᚪ᛫ᚷᛖᚻᚹᛦᛚᚳᚢᛗᚠᛇᚻ᛫ᛒᛦᚦ᛫ᚠᚱᚩᚠᚢᚱ᛫ᚠᛁᚱᚪ᛫ᚷᛖᚻᚹᛦᛚᚳᚢᛗᚠᛇᚻ᛫ᛒᛦᚦ᛫ᚠᚱᚩᚠᚢᚱ᛫ᚠᛁᚱᚪ᛫ᚷᛖᚻᚹᛦᛚᚳᚢᛗᚠᛇᚻ᛫ᛒᛦᚦ᛫ᚠᚱᚩᚠᚢᚱ᛫ᚠᛁᚱᚪ᛫ᚷᛖᚻᚹᛦᛚᚳᚢᛗ";
writer.WriteString(sendShort, encoding);
writer.WriteString(sendLong, encoding);
writer.WriteString(sendUTF, encoding);
var recvShort = reader.ReadString(encoding);
var recvLong = reader.ReadString(encoding);
var recvUTF = reader.ReadString(encoding);
Assert.AreEqual(sendShort, recvShort);
sendLong = sendLong.Substring(0, recvLong.Length);
Assert.AreEqual(sendLong, recvLong);
sendUTF = sendUTF.Substring(0, recvUTF.Length);
Assert.AreEqual(sendUTF, recvUTF);
}
[Test]
public void SQP_SerializeServerInfo_NoError()
{
var current = (ushort)34;
var max = (ushort)35;
var port = (ushort)35001;
var build = "2018.3";
var header = new QueryResponseHeader();
header.Header.ChallangeId = 1337;
header.Version = 12345;
header.CurrentPacket = 12;
header.LastPacket = 13;
var snd = new SQP.ServerInfo();
snd.QueryHeader = header;
snd.ServerInfoData.CurrentPlayers = current;
snd.ServerInfoData.MaxPlayers = max;
snd.ServerInfoData.ServerName = "Server";
snd.ServerInfoData.GameType = "GameType";
snd.ServerInfoData.BuildId = "2018.3";
snd.ServerInfoData.Map = "Level0";
snd.ServerInfoData.Port = port;
snd.ToStream(ref writer);
var rcv = new SQP.ServerInfo();
rcv.FromStream(ref reader);
Assert.AreEqual((byte)SQPMessageType.QueryResponse, rcv.QueryHeader.Header.Type);
Assert.AreEqual((uint)header.Header.ChallangeId, (uint)rcv.QueryHeader.Header.ChallangeId);
Assert.AreEqual(header.Version, rcv.QueryHeader.Version);
Assert.AreEqual(header.CurrentPacket, rcv.QueryHeader.CurrentPacket);
Assert.AreEqual(header.LastPacket, rcv.QueryHeader.LastPacket);
Assert.AreEqual(current, (ushort)rcv.ServerInfoData.CurrentPlayers);
Assert.AreEqual(max, (ushort)rcv.ServerInfoData.MaxPlayers);
Assert.AreEqual(port, (ushort)rcv.ServerInfoData.Port);
Assert.AreEqual(build, rcv.ServerInfoData.BuildId);
}
[Test]
public void SQPClientServer_ServerInfoQuery_ServerInfoReceived()
{
var port = 13337;
var server = new SQPServer(port);
var endpoint = new IPEndPoint(IPAddress.Loopback, port);
var client = new SQPClient(endpoint);
server.ServerInfoData.ServerName = "Banana Boy Adventures";
server.ServerInfoData.BuildId = "2018-1";
server.ServerInfoData.CurrentPlayers = 1;
server.ServerInfoData.MaxPlayers = 20;
server.ServerInfoData.Port = 1337;
server.ServerInfoData.GameType = "Capture the egg.";
server.ServerInfoData.Map = "Great escape to the see";
client.StartInfoQuery();
var iterations = 0;
while (!(client.ClientState == SQPClient.SQPClientState.Success ||
client.ClientState == SQPClient.SQPClientState.Failure) &&
iterations++ < 1000)
{
server.Update();
client.Update();
}
Assert.Less(iterations, 1000);
Assert.AreEqual(client.ClientState, SQPClient.SQPClientState.Success);
}
//[Test]
public void SQPServer_ServerInfoQueryTest_ShouldWork()
{
var port = 10001;
var server = new SQPServer(port);
server.ServerInfoData.ServerName = "Banana Boy Adventures";
server.ServerInfoData.BuildId = "2018-1";
server.ServerInfoData.CurrentPlayers = 1;
server.ServerInfoData.MaxPlayers = 20;
server.ServerInfoData.Port = 1337;
server.ServerInfoData.GameType = "Capture the egg.";
server.ServerInfoData.Map = "Great escape to the see";
var start = NetworkUtils.stopwatch.ElapsedMilliseconds;
while(true)
{
server.Update();
/*
if (server.IsDone)
{
Debug.Log("ServerDone");
return;
}
*/
if (NetworkUtils.stopwatch.ElapsedMilliseconds - start > 1000)
Debug.Log("Listening");
}
}
}
}