sphagnum/tests/Sphagnum.Common.UnitTests/TestConnectionTests.cs

163 lines
6.6 KiB
C#

using AutoFixture;
using Sphagnum.Common.Infrastructure.Extensions;
using Sphagnum.Common.UnitTests.Services;
using System.Security.Cryptography;
namespace Sphagnum.Common.UnitTests
{
public class TestConnectionTests
{
[Test]
public async Task IsNewConnectionCretesCorrect()
{
var connection = new TestConnection();
var connection2 = new TestConnection();
var connectionTask = connection.AcceptAsync();
await Task.WhenAll(connection.AddInputConnection(connection2), connectionTask);
Assert.That(connection2.ConnectionId, 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]);
}
}
}
}
}