Dreamine.FullKit.Tests
1.0.0.0
Dreamine.FullKit.Tests 기능을 검증하는 자동화 테스트 프로젝트입니다.
Toggle main menu visibility
로딩중...
검색중...
일치하는것 없음
ResilientTransportStateTests.cs
이 파일의 문서화 페이지로 가기
1
using
Dreamine.Communication.Abstractions.Enums;
2
using
Dreamine.Communication.Abstractions.Interfaces;
3
using
Dreamine.Communication.Abstractions.Models;
4
using
Dreamine.Communication.Abstractions.Options;
5
using
Dreamine.Communication.Core.Resilience;
6
7
namespace
Dreamine.FullKit.Tests.Communication
;
8
17
public
sealed
class
ResilientTransportStateTests
18
{
35
[Fact]
36
public
async Task
StateChanged_NotFiredWithDuplicateState_UnderConcurrentNotify
()
37
{
38
var inner =
new
ControllableTransport
();
39
var policy =
new
ReconnectPolicy { Enabled =
false
};
40
await
using
var transport =
new
ResilientMessageTransport(inner, policy);
41
42
var states =
new
System.Collections.Concurrent.ConcurrentBag<ConnectionState>();
43
transport.StateChanged += (_, s) => states.Add(s);
44
45
// Trigger connect so state transitions to Connected, then disconnect.
46
await transport.ConnectAsync();
47
await transport.DisconnectAsync();
48
49
// All observed transitions must be real changes (no duplicate consecutive states).
50
var list = states.ToArray();
51
for
(
int
i = 1; i < list.Length; i++)
52
{
53
Assert.NotEqual(list[i - 1], list[i]);
54
}
55
}
56
73
[Fact]
74
public
async Task
DisposeAsync_IsIdempotent_UnderConcurrentCalls
()
75
{
76
var inner =
new
ControllableTransport
();
77
var policy =
new
ReconnectPolicy { Enabled =
false
};
78
var transport =
new
ResilientMessageTransport(inner, policy);
79
80
// Fire multiple concurrent DisposeAsync calls — only the first should take effect.
81
var tasks = Enumerable.Range(0, 8)
82
.Select(_ => transport.DisposeAsync().AsTask())
83
.ToArray();
84
85
await Task.WhenAll(tasks);
86
87
// Inner transport should have been disposed exactly once.
88
Assert.Equal(1, inner.DisposeCount);
89
}
90
107
[Fact]
108
public
async Task
SendAsync_QueuesMessageWhenDisconnected_WithQueuePolicy
()
109
{
110
var inner =
new
ControllableTransport
();
111
var policy =
new
ReconnectPolicy { Enabled =
false
};
112
var queueOptions =
new
OutboundQueueOptions
113
{
114
DisconnectedSendPolicy = DisconnectedSendPolicy.Queue
115
};
116
await
using
var transport =
new
ResilientMessageTransport(inner, policy, queueOptions);
117
118
var msg =
new
MessageEnvelope { Route =
"test.route"
, Name =
"hello"
};
119
await transport.SendAsync(msg);
120
121
Assert.Equal(1, transport.QueuedMessageCount);
122
}
123
132
private
sealed
class
ControllableTransport
: IMessageTransport
133
{
142
private
bool
_connected
;
151
private
int
_disposeCount
;
152
161
public
int
DisposeCount
=> System.Threading.Volatile.Read(ref
_disposeCount
);
162
163
#pragma warning disable CS0067
172
public
event
EventHandler<MessageEnvelope>?
MessageReceived
;
173
#pragma warning restore CS0067
182
public
event
EventHandler<ConnectionState>?
StateChanged
;
183
192
public
ConnectionState
State
=>
_connected
193
? ConnectionState.Connected
194
: ConnectionState.Disconnected;
195
204
public
TransportKind
Kind
=> TransportKind.InMemory;
205
230
public
Task
ConnectAsync
(CancellationToken cancellationToken =
default
)
231
{
232
_connected
=
true
;
233
StateChanged
?.Invoke(
this
, ConnectionState.Connected);
234
return
Task.CompletedTask;
235
}
236
261
public
Task
DisconnectAsync
(CancellationToken cancellationToken =
default
)
262
{
263
_connected
=
false
;
264
StateChanged
?.Invoke(
this
, ConnectionState.Disconnected);
265
return
Task.CompletedTask;
266
}
267
308
public
Task
SendAsync
(MessageEnvelope message, CancellationToken cancellationToken =
default
)
309
{
310
if
(!
_connected
)
311
throw
new
InvalidOperationException(
"Not connected."
);
312
return
Task.CompletedTask;
313
}
314
331
public
ValueTask
DisposeAsync
()
332
{
333
System.Threading.Interlocked.Increment(ref
_disposeCount
);
334
return
ValueTask.CompletedTask;
335
}
336
}
337
}
Dreamine.FullKit.Tests.Communication
Definition
CommunicationAbstractionsTests.cs:5
Dreamine.FullKit.Tests.Communication.ResilientTransportStateTests
Definition
ResilientTransportStateTests.cs:18
Dreamine.FullKit.Tests.Communication.ResilientTransportStateTests.StateChanged_NotFiredWithDuplicateState_UnderConcurrentNotify
async Task StateChanged_NotFiredWithDuplicateState_UnderConcurrentNotify()
Definition
ResilientTransportStateTests.cs:36
Dreamine.FullKit.Tests.Communication.ResilientTransportStateTests.SendAsync_QueuesMessageWhenDisconnected_WithQueuePolicy
async Task SendAsync_QueuesMessageWhenDisconnected_WithQueuePolicy()
Definition
ResilientTransportStateTests.cs:108
Dreamine.FullKit.Tests.Communication.ResilientTransportStateTests.DisposeAsync_IsIdempotent_UnderConcurrentCalls
async Task DisposeAsync_IsIdempotent_UnderConcurrentCalls()
Definition
ResilientTransportStateTests.cs:74
Dreamine.FullKit.Tests.Communication.ResilientTransportStateTests.ControllableTransport
Definition
ResilientTransportStateTests.cs:133
Dreamine.FullKit.Tests.Communication.ResilientTransportStateTests.ControllableTransport.DisposeCount
int DisposeCount
Definition
ResilientTransportStateTests.cs:161
Dreamine.FullKit.Tests.Communication.ResilientTransportStateTests.ControllableTransport.Kind
TransportKind Kind
Definition
ResilientTransportStateTests.cs:204
Dreamine.FullKit.Tests.Communication.ResilientTransportStateTests.ControllableTransport._connected
bool _connected
Definition
ResilientTransportStateTests.cs:142
Dreamine.FullKit.Tests.Communication.ResilientTransportStateTests.ControllableTransport.SendAsync
Task SendAsync(MessageEnvelope message, CancellationToken cancellationToken=default)
Definition
ResilientTransportStateTests.cs:308
Dreamine.FullKit.Tests.Communication.ResilientTransportStateTests.ControllableTransport._disposeCount
int _disposeCount
Definition
ResilientTransportStateTests.cs:151
Dreamine.FullKit.Tests.Communication.ResilientTransportStateTests.ControllableTransport.MessageReceived
EventHandler< MessageEnvelope >? MessageReceived
Definition
ResilientTransportStateTests.cs:172
Dreamine.FullKit.Tests.Communication.ResilientTransportStateTests.ControllableTransport.State
ConnectionState State
Definition
ResilientTransportStateTests.cs:192
Dreamine.FullKit.Tests.Communication.ResilientTransportStateTests.ControllableTransport.StateChanged
EventHandler< ConnectionState >? StateChanged
Definition
ResilientTransportStateTests.cs:182
Dreamine.FullKit.Tests.Communication.ResilientTransportStateTests.ControllableTransport.ConnectAsync
Task ConnectAsync(CancellationToken cancellationToken=default)
Definition
ResilientTransportStateTests.cs:230
Dreamine.FullKit.Tests.Communication.ResilientTransportStateTests.ControllableTransport.DisposeAsync
ValueTask DisposeAsync()
Definition
ResilientTransportStateTests.cs:331
Dreamine.FullKit.Tests.Communication.ResilientTransportStateTests.ControllableTransport.DisconnectAsync
Task DisconnectAsync(CancellationToken cancellationToken=default)
Definition
ResilientTransportStateTests.cs:261
Communication
ResilientTransportStateTests.cs
다음에 의해 생성됨 :
1.17.0