Тестовое соединения и тесты к нему
checks / check and test (push) Has been cancelled
Details
checks / check and test (push) Has been cancelled
Details
parent
0c59ba8d64
commit
7ddb102efe
|
@ -0,0 +1,109 @@
|
|||
using Sphagnum.Common.Infrastructure.Contracts;
|
||||
using System.Net;
|
||||
using System.Net.Sockets;
|
||||
using System.Threading.Channels;
|
||||
|
||||
namespace Sphagnum.Server.Tests.Services
|
||||
{
|
||||
/// <summary>
|
||||
/// Класс имитирующий передачу данных через сокет.
|
||||
/// </summary>
|
||||
internal class TestConnection : IConnection
|
||||
{
|
||||
public CancellationTokenSource CancellationTokenSource { get; set; } = new CancellationTokenSource();
|
||||
public Guid ConnectionId { get; private set; }
|
||||
|
||||
public bool Connected { get; set; }
|
||||
|
||||
public event Action<Guid>? ConnectionClosed;
|
||||
|
||||
public Channel<byte[]> _channel = Channel.CreateUnbounded<byte[]>();
|
||||
public Channel<TestConnection> _newConnectionsChannel = Channel.CreateUnbounded<TestConnection>();
|
||||
|
||||
public TestConnection(Guid id)
|
||||
{
|
||||
ConnectionId = id;
|
||||
}
|
||||
|
||||
public TestConnection()
|
||||
{
|
||||
ConnectionId = Guid.NewGuid();
|
||||
}
|
||||
|
||||
public void Bind(EndPoint endPoint)
|
||||
{
|
||||
}
|
||||
|
||||
public void Close()
|
||||
{
|
||||
Connected = false;
|
||||
CancellationTokenSource.Cancel();
|
||||
ConnectionClosed?.Invoke(ConnectionId);
|
||||
}
|
||||
|
||||
public Task ConnectAsync(string host, int port)
|
||||
{
|
||||
Connected = true;
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
CancellationTokenSource.Cancel();
|
||||
ConnectionClosed?.Invoke(ConnectionId);
|
||||
}
|
||||
|
||||
public void Listen(int backlog)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public async ValueTask<int> ReceiveAsync(Memory<byte> buffer, SocketFlags socketFlags, CancellationToken cancellationToken = default)
|
||||
{
|
||||
var canRead = await _channel.Reader.WaitToReadAsync(cancellationToken);
|
||||
if (canRead)
|
||||
{
|
||||
if (socketFlags == SocketFlags.Peek)
|
||||
{
|
||||
if (_channel.Reader.TryPeek(out var data))
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < buffer.Length && i < data.Length; i++)
|
||||
{
|
||||
buffer.Span[i] = data[i];
|
||||
}
|
||||
return i;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var data = await _channel.Reader.ReadAsync(cancellationToken);
|
||||
for (var i = 0; i < buffer.Length && i < data.Length; i++)
|
||||
{
|
||||
buffer.Span[i] = data[i];
|
||||
}
|
||||
return data.Length;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
public async ValueTask<int> SendAsync(ReadOnlyMemory<byte> buffer, SocketFlags socketFlags, CancellationToken cancellationToken = default)
|
||||
{
|
||||
var data = new byte[buffer.Length];
|
||||
buffer.CopyTo(data);
|
||||
await _channel.Writer.WriteAsync(data, cancellationToken);
|
||||
return data.Length;
|
||||
}
|
||||
|
||||
public async Task<IConnection> AcceptAsync()
|
||||
{
|
||||
return await _newConnectionsChannel.Reader.ReadAsync();
|
||||
}
|
||||
|
||||
internal async Task AddInputConnection(Guid? connectionId = null)
|
||||
{
|
||||
await _newConnectionsChannel.Writer.WriteAsync(connectionId.HasValue ? new TestConnection(connectionId.Value) : new TestConnection());
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,29 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
|
||||
<IsPackable>false</IsPackable>
|
||||
<IsTestProject>true</IsTestProject>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="AutoFixture" Version="4.18.1" />
|
||||
<PackageReference Include="coverlet.collector" Version="6.0.0" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
|
||||
<PackageReference Include="NUnit" Version="3.14.0" />
|
||||
<PackageReference Include="NUnit.Analyzers" Version="3.9.0" />
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="4.5.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\src\Sphagnum.Server\Sphagnum.Server.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Using Include="NUnit.Framework" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
|
@ -0,0 +1,162 @@
|
|||
using AutoFixture;
|
||||
using Sphagnum.Common.Messaging.Extensions;
|
||||
using Sphagnum.Server.Tests.Services;
|
||||
using System.Security.Cryptography;
|
||||
|
||||
namespace Sphagnum.Server.Tests
|
||||
{
|
||||
public class TestConnectionTests
|
||||
{
|
||||
|
||||
[Test]
|
||||
public async Task IsNewConnectionCretesCorrect()
|
||||
{
|
||||
var connection = new TestConnection();
|
||||
var connectionTask = connection.AcceptAsync();
|
||||
var id = Guid.NewGuid();
|
||||
await Task.WhenAll(connection.AddInputConnection(id), connectionTask);
|
||||
Assert.That(id, Is.EqualTo(connectionTask.Result.ConnectionId));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ïðîâåðÿåò ñöåíàðèé, êîãäà íåñêîëüêî ðàç ïîäðÿä ÷èòàþòñÿ äàííûå
|
||||
/// ñ ôëàãîì peek - òî åñòü ãëÿíóòü ÷òî ëåæèò íà ïîâåðõíîñòè, íå âû÷èòûâàÿ.
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[Test]
|
||||
public async Task SendRecieveData_WithPeekSocketFlag_MultipleReading()
|
||||
{
|
||||
var connection = new TestConnection();
|
||||
var buffer1 = new byte[5];
|
||||
var recievingTask = connection.ReceiveAsync(buffer1, System.Net.Sockets.SocketFlags.Peek);
|
||||
var fix = new Fixture();
|
||||
var data = fix.CreateMany<byte>(11).ToArray();
|
||||
var sendingTask = connection.SendAsync(data, System.Net.Sockets.SocketFlags.None);
|
||||
await Task.WhenAll(sendingTask.AsTask(), recievingTask.AsTask());
|
||||
for (int i = 0; i < 5; i++)
|
||||
{
|
||||
Assert.That(buffer1[i] == data[i]);
|
||||
}
|
||||
Assert.That(recievingTask.Result == 5);
|
||||
var buffer2 = new byte[5];
|
||||
var count = await connection.ReceiveAsync(buffer2, System.Net.Sockets.SocketFlags.Peek);
|
||||
Assert.That(recievingTask.Result == count);
|
||||
for (int i = 0; i < 5; i++)
|
||||
{
|
||||
Assert.That(buffer2[i] == data[i]);
|
||||
}
|
||||
|
||||
var buffer3 = new byte[5];
|
||||
var count3 = await connection.ReceiveAsync(buffer3, System.Net.Sockets.SocketFlags.Peek);
|
||||
Assert.That(recievingTask.Result == count3);
|
||||
for (int i = 0; i < 5; i++)
|
||||
{
|
||||
Assert.That(buffer3[i] == data[i]);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ïðîâåðÿåò ñöåíàðèé, êîãäà íåñêîëüêî ðàç ïîäðÿä ÷èòàþòñÿ äàííûå
|
||||
/// ñ ôëàãîì peek - òî åñòü ãëÿíóòü ÷òî ëåæèò íà ïîâåðõíîñòè, íå âû÷èòûâàÿ. Ïðè ýòîì, â ïðîöåññå ðàáîòû ïðîäîëæàþò ïèñàòüñÿ íîâûå äàííûå.
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[Test]
|
||||
public async Task SendRecieveData_WithPeekSocketFlag_MultipleReadingWithWriting()
|
||||
{
|
||||
var connection = new TestConnection();
|
||||
var buffer1 = new byte[5];
|
||||
var recievingTask = connection.ReceiveAsync(buffer1, System.Net.Sockets.SocketFlags.Peek);
|
||||
var fix = new Fixture();
|
||||
var data = fix.CreateMany<byte>(RandomNumberGenerator.GetInt32(5, 100)).ToArray();
|
||||
var sendingTask = connection.SendAsync(data, System.Net.Sockets.SocketFlags.None);
|
||||
await Task.WhenAll(sendingTask.AsTask(), recievingTask.AsTask());
|
||||
for (int i = 0; i < 5; i++)
|
||||
{
|
||||
Assert.That(buffer1[i] == data[i]);
|
||||
}
|
||||
Assert.That(recievingTask.Result == 5);
|
||||
var buffer2 = new byte[5];
|
||||
var count = await connection.ReceiveAsync(buffer2, System.Net.Sockets.SocketFlags.Peek);
|
||||
Assert.That(recievingTask.Result == count);
|
||||
for (int i = 0; i < 5; i++)
|
||||
{
|
||||
Assert.That(buffer2[i] == data[i]);
|
||||
}
|
||||
|
||||
for (int c = 0; c < 20; c++)
|
||||
{
|
||||
var data2 = fix.CreateMany<byte>(RandomNumberGenerator.GetInt32(5, 100)).ToArray();
|
||||
var sendingCount = await connection.SendAsync(data2, System.Net.Sockets.SocketFlags.None);
|
||||
var buffer3 = new byte[5];
|
||||
var count3 = await connection.ReceiveAsync(buffer3, System.Net.Sockets.SocketFlags.Peek);
|
||||
Assert.That(recievingTask.Result == count3);
|
||||
for (int i = 0; i < 5; i++)
|
||||
{
|
||||
Assert.That(buffer3[i] == data[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ïðîâåðÿåò ñöåíàðèé, ÷òåíèÿ-îòïðàâëåíèÿ äàííûõ.
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[Test]
|
||||
public async Task SendRecieveData_WithNoneSocketFlag()
|
||||
{
|
||||
var fix = new Fixture();
|
||||
|
||||
var connection = new TestConnection();
|
||||
|
||||
for (int c = 0; c < 20; c++)
|
||||
{
|
||||
int dataSize = RandomNumberGenerator.GetInt32(5, 100);
|
||||
var buffer1 = new byte[dataSize];
|
||||
var recievingTask = connection.ReceiveAsync(buffer1, System.Net.Sockets.SocketFlags.None);
|
||||
var data = fix.CreateMany<byte>(dataSize).ToArray();
|
||||
|
||||
|
||||
var sendingTask = connection.SendAsync(data, System.Net.Sockets.SocketFlags.None);
|
||||
|
||||
await Task.WhenAll(sendingTask.AsTask(), recievingTask.AsTask());
|
||||
for (int i = 0; i < dataSize; i++)
|
||||
{
|
||||
Assert.That(buffer1[i] == data[i]);
|
||||
}
|
||||
Assert.IsTrue(recievingTask.Result == sendingTask.Result);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ïðîâåðÿåò ñöåíàðèé, ÷òåíèÿ-îòïðàâëåíèÿ äàííûõ c ïîìîùüþ ìåòîäà ðàñøèðåíèÿ.
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[Test]
|
||||
public async Task SendRecieveData_WithExtensionMethod()
|
||||
{
|
||||
var fix = new Fixture();
|
||||
|
||||
var connection = new TestConnection();
|
||||
|
||||
for (int c = 0; c < 20; c++)
|
||||
{
|
||||
int dataSize = RandomNumberGenerator.GetInt32(5, 100);
|
||||
|
||||
var recievingTask = connection.ReceiveAsync(CancellationToken.None);
|
||||
var payload = fix.CreateMany<byte>(dataSize).ToArray();
|
||||
var length = BitConverter.GetBytes(dataSize);
|
||||
var data = new byte[dataSize + 4];
|
||||
length.CopyTo(data, 0);
|
||||
payload.CopyTo(data, 4);
|
||||
|
||||
var sendingTask = connection.SendAsync(data, System.Net.Sockets.SocketFlags.None);
|
||||
|
||||
await Task.WhenAll(sendingTask.AsTask(), recievingTask.AsTask());
|
||||
for (int i = 0; i < dataSize; i++)
|
||||
{
|
||||
Assert.That(recievingTask.Result[i] == data[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -9,7 +9,6 @@ namespace Sphagnum.DebugClient.Controllers
|
|||
public class TestController : ControllerBase
|
||||
{
|
||||
private readonly ClientDefault _connection;
|
||||
private static readonly Task? rec;
|
||||
|
||||
public TestController(ClientDefault connection)
|
||||
{
|
||||
|
@ -17,7 +16,7 @@ namespace Sphagnum.DebugClient.Controllers
|
|||
}
|
||||
|
||||
[HttpGet]
|
||||
public string test()
|
||||
public string Test()
|
||||
{
|
||||
return "Ok!";
|
||||
}
|
||||
|
|
|
@ -23,6 +23,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sphagnum.Common.UnitTests",
|
|||
EndProject
|
||||
Project("{E53339B2-1760-4266-BCC7-CA923CBCF16C}") = "docker-compose", "docker-compose.dcproj", "{BF7E9B18-1C0F-4AA6-B4BD-F38617B72A1B}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sphagnum.Server.Tests", "..\Sphagnum.Server.Tests\Sphagnum.Server.Tests.csproj", "{134442E7-CA62-4BE4-B7EB-63847385A98C}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
|
@ -57,6 +59,10 @@ Global
|
|||
{BF7E9B18-1C0F-4AA6-B4BD-F38617B72A1B}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{BF7E9B18-1C0F-4AA6-B4BD-F38617B72A1B}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{BF7E9B18-1C0F-4AA6-B4BD-F38617B72A1B}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{134442E7-CA62-4BE4-B7EB-63847385A98C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{134442E7-CA62-4BE4-B7EB-63847385A98C}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{134442E7-CA62-4BE4-B7EB-63847385A98C}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{134442E7-CA62-4BE4-B7EB-63847385A98C}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
@ -68,6 +74,7 @@ Global
|
|||
{C344FDF3-3D4D-4BC6-B257-4AD907BE1BE4} = {71CDAFF8-7C3D-4915-8FAA-5C263857AD62}
|
||||
{77F76F27-D883-4392-90D5-8F441043F468} = {71CDAFF8-7C3D-4915-8FAA-5C263857AD62}
|
||||
{25865911-1F2D-4083-A99C-C65E13F05C14} = {8E76791F-BA23-44AD-BACB-E14DD5FCE750}
|
||||
{134442E7-CA62-4BE4-B7EB-63847385A98C} = {8E76791F-BA23-44AD-BACB-E14DD5FCE750}
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {42DA8F91-1667-49BC-971D-D83C0870393A}
|
||||
|
|
|
@ -2,6 +2,6 @@
|
|||
|
||||
//Тесты
|
||||
[assembly: InternalsVisibleTo("Sphagnum.Common.UnitTests")]
|
||||
|
||||
[assembly: InternalsVisibleTo("Sphagnum.Server.Tests")]
|
||||
[assembly: InternalsVisibleTo("Sphagnum.Client")]
|
||||
[assembly: InternalsVisibleTo("Sphagnum.Server")]
|
|
@ -28,6 +28,6 @@ namespace Sphagnum.Common.Infrastructure.Contracts
|
|||
void Close();
|
||||
bool Connected { get; }
|
||||
|
||||
public event Action<Guid> ConnectionClosed;
|
||||
public event Action<Guid>? ConnectionClosed;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,11 +6,11 @@ using System.Threading.Tasks;
|
|||
|
||||
namespace Sphagnum.Common.Messaging.Extensions
|
||||
{
|
||||
internal static class IConntcrionExtensions
|
||||
internal static class IConnectionExtensions
|
||||
{
|
||||
public static async ValueTask<byte[]> ReceiveAsync(this IConnection connection, CancellationToken cancellationToken = default)
|
||||
{
|
||||
var lengthBuffer = new byte[4];
|
||||
var lengthBuffer = new byte[5];
|
||||
await connection.ReceiveAsync(lengthBuffer, SocketFlags.Peek, cancellationToken);
|
||||
var length = BitConverter.ToInt32(lengthBuffer, 0);
|
||||
var result = new byte[length];
|
|
@ -9,7 +9,6 @@ namespace Sphagnum.Server.Broker.Services
|
|||
{
|
||||
private readonly int _port;
|
||||
private readonly CancellationTokenSource _cts = new();
|
||||
private Task _acceptationTask;
|
||||
private readonly IConnection _connection;
|
||||
private readonly ConnectionsManager _manager;
|
||||
private readonly MessagesProcessor _processor;
|
||||
|
@ -43,7 +42,7 @@ namespace Sphagnum.Server.Broker.Services
|
|||
{
|
||||
_connection.Bind(new IPEndPoint(IPAddress.Any, _port));
|
||||
_connection?.Listen(1000); //todo разобраться что делает этот параметр.
|
||||
_acceptationTask = AcceptationWorker();
|
||||
var _ = AcceptationWorker();
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@ namespace Sphagnum.Server.Broker.Services
|
|||
{
|
||||
Connections.TryRemove(id, out var conn);
|
||||
};
|
||||
ProcessMessages(connection);
|
||||
var _ = ProcessMessages(connection);
|
||||
}
|
||||
|
||||
internal static async Task ProcessMessages(IConnection connection)
|
||||
|
|
|
@ -18,8 +18,11 @@ namespace Sphagnum.Common.UnitTests
|
|||
var bytes2 = MessageParser.PackMessage(message2);
|
||||
var f1 = (MessageFlags)BitConverter.ToUInt16(bytes.AsSpan(5, 2));
|
||||
var f2 = (MessageFlags)BitConverter.ToUInt16(bytes2.AsSpan(5, 2));
|
||||
Assert.That(Comparers.MessagesComparer.Compare(message, message2), Is.True);
|
||||
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(f1, Is.EqualTo(f2));
|
||||
Assert.That(Comparers.MessagesComparer.Compare(message, message2), Is.True);
|
||||
});
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
@ -36,9 +39,11 @@ namespace Sphagnum.Common.UnitTests
|
|||
var bytes2 = MessageParser.PackMessage(message2);
|
||||
var f1 = (MessageFlags)BitConverter.ToUInt16(bytes.AsSpan(5, 2));
|
||||
var f2 = (MessageFlags)BitConverter.ToUInt16(bytes2.AsSpan(5, 2));
|
||||
Assert.IsTrue(f1 == f2);
|
||||
Assert.That(Comparers.MessagesComparer.Compare(message, message2), Is.True);
|
||||
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(f1, Is.EqualTo(f2));
|
||||
Assert.That(Comparers.MessagesComparer.Compare(message, message2), Is.True);
|
||||
});
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
@ -56,8 +61,11 @@ namespace Sphagnum.Common.UnitTests
|
|||
var bytes2 = MessageParser.PackMessage(message2);
|
||||
var f1 = (MessageFlags)BitConverter.ToUInt16(bytes.AsSpan(5, 2));
|
||||
var f2 = (MessageFlags)BitConverter.ToUInt16(bytes2.AsSpan(5, 2));
|
||||
Assert.IsTrue(f1 == f2);
|
||||
Assert.That(Comparers.MessagesComparer.Compare(message, message2), Is.True);
|
||||
Assert.Multiple(() =>
|
||||
{
|
||||
Assert.That(f1, Is.EqualTo(f2));
|
||||
Assert.That(Comparers.MessagesComparer.Compare(message, message2), Is.True);
|
||||
});
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,17 +0,0 @@
|
|||
namespace Sphagnum.Common.UnitTests.Old
|
||||
{
|
||||
public class ConnectionTests
|
||||
{
|
||||
[SetUp]
|
||||
public void Setup()
|
||||
{
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Test1()
|
||||
{
|
||||
Assert.Pass();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -1,160 +0,0 @@
|
|||
//using Sphagnum.Common.Messaging.Utils;
|
||||
//using Sphagnum.Common.Old.Utils.Enums;
|
||||
//using Sphagnum.Common.UnitTests.Comparers;
|
||||
//using Sphagnum.Common.UnitTests.DataGenerators;
|
||||
|
||||
//namespace Sphagnum.Common.UnitTests.Old
|
||||
//{
|
||||
// public class MessageParserTests
|
||||
// {
|
||||
// [Test]
|
||||
// public void PackUnpackIncomingMessage_WithPayload()
|
||||
// {
|
||||
// var count = 0;
|
||||
// while (count < 100)
|
||||
// {
|
||||
// var message = MessagesGenerator.GetRandomIncommingMessage();
|
||||
// var bytes = MessageParserold.PackMessage(message);
|
||||
// var message2 = MessageParserold.UnpackIncomingMessage(bytes);
|
||||
// Assert.That(MessagesComparer.Compare(message, message2), Is.True);
|
||||
|
||||
// count++;
|
||||
// }
|
||||
// }
|
||||
|
||||
// [Test]
|
||||
// public void PackUnpackIncomingMessage_WithEmptyPayload()
|
||||
// {
|
||||
// var count = 0;
|
||||
// while (count < 100)
|
||||
// {
|
||||
// var message = MessagesGenerator.GetRandoIncommingMessage(true);
|
||||
// var bytes = MessageParserold.PackMessage(message);
|
||||
// var message2 = MessageParserold.UnpackIncomingMessage(bytes);
|
||||
// Assert.That(MessagesComparer.Compare(message, message2), Is.True);
|
||||
// Assert.IsTrue((MessageFlags)BitConverter.ToUInt16(bytes.AsSpan(5, 2)) == MessageFlags.HasPayload);
|
||||
// count++;
|
||||
// }
|
||||
// }
|
||||
|
||||
// [Test]
|
||||
// public void PackUnpackOutgoingMessageGetMessageId_WithRoutingKeyAndPayload()
|
||||
// {
|
||||
// var count = 0;
|
||||
// while (count < 100)
|
||||
// {
|
||||
// var id = Guid.NewGuid();
|
||||
// var message = MessagesGenerator.GetRandomOutgoingMessage();
|
||||
// var bytesForFlags = MessageParserold.PackMessage(message);
|
||||
// var flags = (MessageFlags)BitConverter.ToUInt16(bytesForFlags.AsSpan(5, 2));
|
||||
// var bytes = MessageParserold.Pack(message, id, flags, bytesForFlags.Length);
|
||||
|
||||
// var message2 = MessageParserold.UnpackOutgoingMessage(bytes);
|
||||
// Assert.That(MessagesComparer.Compare(message, message2), Is.True);
|
||||
// var id2 = MessageParserold.GetMessageId(bytes);
|
||||
// Assert.That(id, Is.EqualTo(id2));
|
||||
// count++;
|
||||
// }
|
||||
// }
|
||||
|
||||
// [Test]
|
||||
// public void PackUnpackOutgoingMessageGetMessageId_WithEmptyRoutingKeyAndEmptyPayload()
|
||||
// {
|
||||
// var count = 0;
|
||||
// while (count < 100)
|
||||
// {
|
||||
// var id = Guid.NewGuid();
|
||||
// var message = MessagesGenerator.GetRandomOutgoingMessage(true, true);
|
||||
// var bytesForFlags = MessageParserold.PackMessage(message);
|
||||
// var flags = (MessageFlags)BitConverter.ToUInt16(bytesForFlags.AsSpan(5, 2));
|
||||
// var bytes = MessageParserold.Pack(message, id, flags, bytesForFlags.Length);
|
||||
|
||||
// var message2 = MessageParserold.UnpackOutgoingMessage(bytes);
|
||||
// Assert.That(MessagesComparer.Compare(message, message2), Is.True);
|
||||
// var id2 = MessageParserold.GetMessageId(bytes);
|
||||
// Assert.That(id, Is.EqualTo(id2));
|
||||
// count++;
|
||||
// }
|
||||
// }
|
||||
|
||||
// [Test]
|
||||
// public void PackUnpackOutgoingMessage_WithRoutingKeyAndPayload()
|
||||
// {
|
||||
// var count = 0;
|
||||
// while (count < 100)
|
||||
// {
|
||||
// var message = MessagesGenerator.GetRandomOutgoingMessage();
|
||||
// var bytes = MessageParserold.PackMessage(message);
|
||||
// var message2 = MessageParserold.UnpackOutgoingMessage(bytes);
|
||||
// Assert.That(MessagesComparer.Compare(message, message2), Is.True);
|
||||
// var bytes2 = MessageParserold.PackMessage(message2);
|
||||
// var message3 = MessageParserold.UnpackOutgoingMessage(bytes2);
|
||||
// Assert.That(MessagesComparer.ComparePayloads(message2, message3), Is.True);
|
||||
// var bytes3 = MessageParserold.PackMessage(message2);
|
||||
// var message4 = MessageParserold.UnpackOutgoingMessage(bytes3);
|
||||
// Assert.That(MessagesComparer.ComparePayloads(message3, message4), Is.True);
|
||||
// count++;
|
||||
// }
|
||||
// }
|
||||
|
||||
// [Test]
|
||||
// public void PackUnpackOutgoingMessage_WithRoutingKeyAndEmptyPayload()
|
||||
// {
|
||||
// var count = 0;
|
||||
// while (count < 100)
|
||||
// {
|
||||
// var message = MessagesGenerator.GetRandomOutgoingMessage(false, true);
|
||||
// var bytes = MessageParserold.PackMessage(message);
|
||||
// var message2 = MessageParserold.UnpackOutgoingMessage(bytes);
|
||||
// Assert.That(MessagesComparer.Compare(message, message2), Is.True);
|
||||
// var bytes2 = MessageParserold.PackMessage(message2);
|
||||
// var message3 = MessageParserold.UnpackOutgoingMessage(bytes2);
|
||||
// Assert.That(MessagesComparer.ComparePayloads(message2, message3), Is.True);
|
||||
// var bytes3 = MessageParserold.PackMessage(message2);
|
||||
// var message4 = MessageParserold.UnpackOutgoingMessage(bytes3);
|
||||
// Assert.That(MessagesComparer.ComparePayloads(message3, message4), Is.True);
|
||||
// count++;
|
||||
// }
|
||||
// }
|
||||
|
||||
// [Test]
|
||||
// public void PackUnpackOutgoingMessage_WithEmptyRoutingKey()
|
||||
// {
|
||||
// var count = 0;
|
||||
// while (count < 100)
|
||||
// {
|
||||
// var message = MessagesGenerator.GetRandomOutgoingMessage(true);
|
||||
// var bytes = MessageParserold.PackMessage(message);
|
||||
// var message2 = MessageParserold.UnpackOutgoingMessage(bytes);
|
||||
// Assert.That(MessagesComparer.Compare(message, message2), Is.True);
|
||||
// var bytes2 = MessageParserold.PackMessage(message2);
|
||||
// var message3 = MessageParserold.UnpackOutgoingMessage(bytes2);
|
||||
// Assert.That(MessagesComparer.ComparePayloads(message2, message3), Is.True);
|
||||
// var bytes3 = MessageParserold.PackMessage(message2);
|
||||
// var message4 = MessageParserold.UnpackOutgoingMessage(bytes3);
|
||||
// Assert.That(MessagesComparer.ComparePayloads(message3, message4), Is.True);
|
||||
// count++;
|
||||
// }
|
||||
// }
|
||||
|
||||
// [Test]
|
||||
// public void PackUnpackOutgoingMessage_WithEmptyRoutingKeyAndEmptyPayload()
|
||||
// {
|
||||
// var count = 0;
|
||||
// while (count < 100)
|
||||
// {
|
||||
// var message = MessagesGenerator.GetRandomOutgoingMessage(true, true);
|
||||
// var bytes = MessageParserold.PackMessage(message);
|
||||
// var message2 = MessageParserold.UnpackOutgoingMessage(bytes);
|
||||
// Assert.That(MessagesComparer.Compare(message, message2), Is.True);
|
||||
// var bytes2 = MessageParserold.PackMessage(message2);
|
||||
// var message3 = MessageParserold.UnpackOutgoingMessage(bytes2);
|
||||
// Assert.That(MessagesComparer.ComparePayloads(message2, message3), Is.True);
|
||||
// var bytes3 = MessageParserold.PackMessage(message2);
|
||||
// var message4 = MessageParserold.UnpackOutgoingMessage(bytes3);
|
||||
// Assert.That(MessagesComparer.ComparePayloads(message3, message4), Is.True);
|
||||
// count++;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//}
|
|
@ -1,82 +0,0 @@
|
|||
using Sphagnum.Common.Infrastructure.Contracts;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Net;
|
||||
using System.Net.Sockets;
|
||||
|
||||
namespace Sphagnum.Common.UnitTests.Old.Services
|
||||
{
|
||||
internal class TestConnection : IConnection
|
||||
{
|
||||
private readonly ConcurrentQueue<byte[]> _queue = new();
|
||||
public bool Connected => true;
|
||||
|
||||
public IConnection Accept()
|
||||
{
|
||||
return new TestConnection();
|
||||
}
|
||||
|
||||
public Task<IConnection> AcceptAsync()
|
||||
{
|
||||
return Task.FromResult<IConnection>(new TestConnection());
|
||||
}
|
||||
|
||||
public void Bind(EndPoint endPoint)
|
||||
{
|
||||
}
|
||||
|
||||
public void Close()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public Task ConnectAsync(string host, int port)
|
||||
{
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void Listen(int backlog)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public async ValueTask<int> ReceiveAsync(Memory<byte> buffer, SocketFlags socketFlags, CancellationToken cancellationToken = default)
|
||||
{
|
||||
var res = new byte[buffer.Length];
|
||||
await Receive(res, socketFlags, cancellationToken);
|
||||
res.CopyTo(buffer);
|
||||
return res.Length;
|
||||
}
|
||||
|
||||
public ValueTask<int> SendAsync(ReadOnlyMemory<byte> buffer, SocketFlags socketFlags, CancellationToken cancellationToken = default)
|
||||
{
|
||||
_queue.Enqueue(buffer.Span.ToArray());
|
||||
return ValueTask.FromResult(buffer.Length);
|
||||
}
|
||||
|
||||
private async ValueTask<int> Receive(byte[] buffer, SocketFlags socketFlags, CancellationToken cancellationToken = default, int counter = 0)
|
||||
{
|
||||
if (counter > 200)
|
||||
{
|
||||
throw new TimeoutException();
|
||||
}
|
||||
|
||||
if (socketFlags == SocketFlags.Peek ? _queue.TryPeek(out byte[]? result) : _queue.TryDequeue(out result))
|
||||
{
|
||||
result.CopyTo(buffer, 0);
|
||||
return result.Length;
|
||||
}
|
||||
else
|
||||
{
|
||||
await Task.Delay(100, cancellationToken);
|
||||
counter++;
|
||||
await Receive(buffer, socketFlags, cancellationToken, counter);
|
||||
}
|
||||
throw new TimeoutException();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,18 +0,0 @@
|
|||
//using Sphagnum.Common.Old.Contracts.Login;
|
||||
//using Sphagnum.Common.Old.Services;
|
||||
|
||||
//namespace Sphagnum.Common.UnitTests.Old.Services
|
||||
//{
|
||||
// internal class TestConnectionFactory : ConnectionFactory
|
||||
// {
|
||||
// internal override SphagnumConnectionOld CreateDefault(Func<Func<byte[], Task>> messagesProcessorFactory)
|
||||
// {
|
||||
// return new SphagnumConnectionOld(() => new TestConnection(), messagesProcessorFactory);
|
||||
// }
|
||||
|
||||
// internal override Task<SphagnumConnectionOld> CreateDefaultConnected(Func<Func<byte[], Task>> messagesProcessorFactory)
|
||||
// {
|
||||
// return Task.FromResult(new SphagnumConnectionOld(() => new TestConnection(), messagesProcessorFactory));
|
||||
// }
|
||||
// }
|
||||
//}
|
|
@ -1,158 +0,0 @@
|
|||
//using Sphagnum.Common.UnitTests.Services;
|
||||
//using System;
|
||||
//using System.Collections.Generic;
|
||||
//using System.Linq;
|
||||
//using System.Text;
|
||||
//using System.Threading.Tasks;
|
||||
|
||||
//namespace Sphagnum.Common.UnitTests
|
||||
//{
|
||||
// public class TestConnectionTests
|
||||
// {
|
||||
// [Test]
|
||||
// public async Task SendRecieve8BytesWithBufferSize10()
|
||||
// {
|
||||
// var connection = new TestConnection
|
||||
// {
|
||||
// BufferSize = 10
|
||||
// };
|
||||
// var data = new byte[8];
|
||||
// Array.Fill<byte>(data, 1);
|
||||
// _ = await connection.SendAsync(data);
|
||||
// var forResult = new List<byte>();
|
||||
// for (int i = 0; i < 1; i++)
|
||||
// {
|
||||
// var buffer = new byte[connection.BufferSize];
|
||||
// _ = await connection.ReceiveAsync(buffer);
|
||||
// for (int j = 0; j < buffer.Length; j++)
|
||||
// {
|
||||
// var el = buffer[j];
|
||||
// if (el == 1)
|
||||
// {
|
||||
// forResult.Add(el);
|
||||
// }
|
||||
// }
|
||||
// Array.Clear(buffer);
|
||||
// }
|
||||
|
||||
// Assert.IsTrue(data.Length == forResult.Count);
|
||||
// }
|
||||
|
||||
// [Test]
|
||||
// public async Task SendRecieve10BytesWithBufferSize10()
|
||||
// {
|
||||
// var connection = new TestConnection
|
||||
// {
|
||||
// BufferSize = 10
|
||||
// };
|
||||
// var data = new byte[10];
|
||||
// Array.Fill<byte>(data, 1);
|
||||
// _ = await connection.SendAsync(data);
|
||||
// var forResult = new List<byte>();
|
||||
// for (int i = 0; i < 1; i++)
|
||||
// {
|
||||
// var buffer = new byte[connection.BufferSize];
|
||||
// _ = await connection.ReceiveAsync(buffer);
|
||||
// for (int j = 0; j < buffer.Length; j++)
|
||||
// {
|
||||
// var el = buffer[j];
|
||||
// if (el == 1)
|
||||
// {
|
||||
// forResult.Add(el);
|
||||
// }
|
||||
// }
|
||||
// Array.Clear(buffer);
|
||||
// }
|
||||
|
||||
// Assert.IsTrue(data.Length == forResult.Count);
|
||||
// }
|
||||
|
||||
// [Test]
|
||||
// public async Task SendRecieve11BytesWithBufferSize10()
|
||||
// {
|
||||
// var connection = new TestConnection
|
||||
// {
|
||||
// BufferSize = 10
|
||||
// };
|
||||
// var data = new byte[11];
|
||||
// Array.Fill<byte>(data, 1);
|
||||
// _ = await connection.SendAsync(data);
|
||||
// var forResult = new List<byte>();
|
||||
// for (int i = 0; i < 2; i++)
|
||||
// {
|
||||
// var buffer = new byte[connection.BufferSize];
|
||||
// _ = await connection.ReceiveAsync(buffer);
|
||||
// for (int j = 0; j < buffer.Length; j++)
|
||||
// {
|
||||
// var el = buffer[j];
|
||||
// if (el==1)
|
||||
// {
|
||||
// forResult.Add(el);
|
||||
// }
|
||||
// }
|
||||
// Array.Clear(buffer);
|
||||
// }
|
||||
|
||||
// Assert.IsTrue(data.Length == forResult.Count);
|
||||
// }
|
||||
|
||||
// [Test]
|
||||
// public async Task SendRecieve31BytesWithBufferSize10()
|
||||
// {
|
||||
// var connection = new TestConnection
|
||||
// {
|
||||
// BufferSize = 10
|
||||
// };
|
||||
// var data = new byte[31];
|
||||
// Array.Fill<byte>(data, 1);
|
||||
// _ = await connection.SendAsync(data);
|
||||
// var forResult = new List<byte>();
|
||||
// for (int i = 0; i < 4; i++)
|
||||
// {
|
||||
// var buffer = new byte[connection.BufferSize];
|
||||
// _ = await connection.ReceiveAsync(buffer);
|
||||
// for (int j = 0; j < buffer.Length; j++)
|
||||
// {
|
||||
// var el = buffer[j];
|
||||
// if (el == 1)
|
||||
// {
|
||||
// forResult.Add(el);
|
||||
// }
|
||||
// }
|
||||
// Array.Clear(buffer);
|
||||
// }
|
||||
|
||||
// Assert.IsTrue(data.Length == forResult.Count);
|
||||
// }
|
||||
|
||||
// [Test]
|
||||
// public async Task SendRecieve30BytesWithBufferSize10()
|
||||
// {
|
||||
// var connection = new TestConnection
|
||||
// {
|
||||
// BufferSize = 10
|
||||
// };
|
||||
// var data = new byte[30];
|
||||
// Array.Fill<byte>(data, 1);
|
||||
// _ = await connection.SendAsync(data);
|
||||
// var forResult = new List<byte>();
|
||||
// for (int i = 0; i < 3; i++)
|
||||
// {
|
||||
// var buffer = new byte[connection.BufferSize];
|
||||
// _ = await connection.ReceiveAsync(buffer);
|
||||
// for (int j = 0; j < buffer.Length; j++)
|
||||
// {
|
||||
// var el = buffer[j];
|
||||
// if (el == 1)
|
||||
// {
|
||||
// forResult.Add(el);
|
||||
// }
|
||||
// }
|
||||
// Array.Clear(buffer);
|
||||
// }
|
||||
|
||||
// Assert.IsTrue(data.Length == forResult.Count);
|
||||
// }
|
||||
// }
|
||||
|
||||
//}
|
Loading…
Reference in New Issue