Skip to content

Commit 4b79640

Browse files
committed
test: 更新发送失败单元测试
1 parent ad6f782 commit 4b79640

File tree

1 file changed

+83
-34
lines changed

1 file changed

+83
-34
lines changed

test/UnitTest/Services/TcpSocketFactoryTest.cs

Lines changed: 83 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -103,9 +103,12 @@ public async Task Send_Timeout()
103103
var port = 8887;
104104
var server = StartTcpServer(port, MockSplitPackageAsync);
105105

106-
var client = CreateClient();
107-
client.Options.SendTimeout = 100;
108-
client.SetDataHandler(new MockSendTimeoutHandler());
106+
var client = CreateClient(builder =>
107+
{
108+
// 增加发送报错 MockSocket
109+
builder.AddTransient<ISocketClientProvider, MockSendTimeoutSocketProvider>();
110+
});
111+
client.Options.SendTimeout = 10;
109112

110113
await client.ConnectAsync("localhost", port);
111114

@@ -117,7 +120,11 @@ public async Task Send_Timeout()
117120
[Fact]
118121
public async Task SendAsync_Error()
119122
{
120-
var client = CreateClient();
123+
var client = CreateClient(builder =>
124+
{
125+
// 增加发送报错 MockSocket
126+
builder.AddTransient<ISocketClientProvider, MockSendErrorSocketProvider>();
127+
});
121128

122129
// 测试未建立连接前调用 SendAsync 方法报异常逻辑
123130
var data = new ReadOnlyMemory<byte>([1, 2, 3, 4, 5]);
@@ -128,7 +135,6 @@ public async Task SendAsync_Error()
128135
var port = 8892;
129136
var server = StartTcpServer(port, MockSplitPackageAsync);
130137

131-
client.SetDataHandler(new MockSendErrorHandler());
132138
await client.ConnectAsync("localhost", port);
133139
Assert.True(client.IsConnected);
134140

@@ -156,25 +162,6 @@ public async Task SendAsync_Cancel()
156162
var result = await client.SendAsync("test", null, cst.Token);
157163
Assert.False(result);
158164

159-
// 设置延时发送适配器
160-
// 延时发送期间关闭 Socket 连接导致内部报错
161-
client.SetDataHandler(new MockSendCancelHandler()
162-
{
163-
Socket = client
164-
});
165-
166-
var tcs = new TaskCompletionSource();
167-
bool? sendResult = null;
168-
// 测试发送失败逻辑
169-
_ = Task.Run(async () =>
170-
{
171-
sendResult = await client.SendAsync("test", Encoding.UTF8);
172-
tcs.SetResult();
173-
});
174-
175-
await tcs.Task;
176-
Assert.False(sendResult);
177-
178165
// 关闭连接
179166
StopTcpServer(server);
180167
}
@@ -439,15 +426,15 @@ public async Task DelimiterDataPackageHandler_Ok()
439426
ReadOnlyMemory<byte> receivedBuffer = ReadOnlyMemory<byte>.Empty;
440427

441428
// 增加数据库处理适配器
442-
client.SetDataHandler(new DelimiterDataPackageHandler([0x13, 0x10])
443-
{
444-
ReceivedCallBack = buffer =>
445-
{
446-
receivedBuffer = buffer;
447-
tcs.SetResult();
448-
return ValueTask.CompletedTask;
449-
}
450-
});
429+
//client.SetDataHandler(new DelimiterDataPackageHandler([0x13, 0x10])
430+
//{
431+
// ReceivedCallBack = buffer =>
432+
// {
433+
// receivedBuffer = buffer;
434+
// tcs.SetResult();
435+
// return ValueTask.CompletedTask;
436+
// }
437+
//});
451438

452439
// 发送数据
453440
var data = new ReadOnlyMemory<byte>([1, 2, 3, 4, 5]);
@@ -584,14 +571,18 @@ private static void StopTcpServer(TcpListener server)
584571
server?.Stop();
585572
}
586573

587-
private static ITcpSocketClient CreateClient()
574+
private static ITcpSocketClient CreateClient(Action<ServiceCollection>? builder = null)
588575
{
589576
var sc = new ServiceCollection();
590577
sc.AddLogging(builder =>
591578
{
592579
builder.AddProvider(new MockLoggerProvider());
593580
});
594581
sc.AddBootstrapBlazorTcpSocketFactory();
582+
if (builder != null)
583+
{
584+
builder(sc);
585+
}
595586
var provider = sc.BuildServiceProvider();
596587
var factory = provider.GetRequiredService<ITcpSocketFactory>();
597588
var client = factory.GetOrCreate("test", op => op.LocalEndPoint = Utility.ConvertToIpEndPoint("localhost", 0));
@@ -689,4 +680,62 @@ public override async ValueTask ReceiveAsync(ReadOnlyMemory<byte> data, Cancella
689680
await base.ReceiveAsync(data, token);
690681
}
691682
}
683+
684+
class MockSendErrorSocketProvider : ISocketClientProvider
685+
{
686+
public bool IsConnected { get; private set; }
687+
688+
public IPEndPoint LocalEndPoint { get; set; }
689+
690+
public ValueTask CloseAsync()
691+
{
692+
return ValueTask.CompletedTask;
693+
}
694+
695+
public ValueTask<bool> ConnectAsync(IPEndPoint endPoint, CancellationToken token = default)
696+
{
697+
IsConnected = true;
698+
return ValueTask.FromResult(true);
699+
}
700+
701+
public ValueTask<int> ReceiveAsync(Memory<byte> buffer, CancellationToken token = default)
702+
{
703+
return ValueTask.FromResult(0);
704+
}
705+
706+
public ValueTask<bool> SendAsync(ReadOnlyMemory<byte> data, CancellationToken token = default)
707+
{
708+
throw new Exception("Mock send error");
709+
}
710+
}
711+
712+
class MockSendTimeoutSocketProvider : ISocketClientProvider
713+
{
714+
public bool IsConnected { get; private set; }
715+
716+
public IPEndPoint LocalEndPoint { get; set; }
717+
718+
public ValueTask CloseAsync()
719+
{
720+
return ValueTask.CompletedTask;
721+
}
722+
723+
public ValueTask<bool> ConnectAsync(IPEndPoint endPoint, CancellationToken token = default)
724+
{
725+
IsConnected = true;
726+
return ValueTask.FromResult(true);
727+
}
728+
729+
public ValueTask<int> ReceiveAsync(Memory<byte> buffer, CancellationToken token = default)
730+
{
731+
return ValueTask.FromResult(0);
732+
}
733+
734+
public async ValueTask<bool> SendAsync(ReadOnlyMemory<byte> data, CancellationToken token = default)
735+
{
736+
// 模拟超时发送
737+
await Task.Delay(100, token);
738+
return false;
739+
}
740+
}
692741
}

0 commit comments

Comments
 (0)