163 lines
6.6 KiB
C#
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]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |