Skip to content

Commit 2942484

Browse files
authored
Add null check (#2192)
* Add test * Resolve comments
1 parent 6c04665 commit 2942484

File tree

2 files changed

+20
-7
lines changed

2 files changed

+20
-7
lines changed

src/Microsoft.Azure.SignalR/ServerConnections/ServiceConnectionManager.cs

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,12 @@
1010
using Microsoft.Azure.SignalR.Common;
1111
using Microsoft.Azure.SignalR.Protocol;
1212

13+
#nullable enable
1314
namespace Microsoft.Azure.SignalR;
1415

1516
internal class ServiceConnectionManager<THub> : IDisposable, IServiceConnectionManager<THub> where THub : Hub
1617
{
17-
private IServiceConnectionContainer _serviceConnection;
18+
private IServiceConnectionContainer? _serviceConnection;
1819

1920
public void SetServiceConnection(IServiceConnectionContainer serviceConnection)
2021
{
@@ -23,22 +24,22 @@ public void SetServiceConnection(IServiceConnectionContainer serviceConnection)
2324

2425
public Task StartAsync()
2526
{
26-
return _serviceConnection.StartAsync();
27+
return _serviceConnection?.StartAsync() ?? throw new InvalidOperationException();
2728
}
2829

2930
public Task StopAsync()
3031
{
31-
return _serviceConnection.StopAsync();
32+
return _serviceConnection?.StopAsync() ?? Task.CompletedTask;
3233
}
3334

34-
public async Task OfflineAsync(GracefulShutdownMode mode, CancellationToken token)
35+
public Task OfflineAsync(GracefulShutdownMode mode, CancellationToken token)
3536
{
36-
await _serviceConnection.OfflineAsync(mode, token);
37+
return _serviceConnection?.OfflineAsync(mode, token) ?? Task.CompletedTask;
3738
}
3839

39-
public async Task CloseClientConnections(CancellationToken cancellationToken)
40+
public Task CloseClientConnections(CancellationToken cancellationToken)
4041
{
41-
await _serviceConnection.CloseClientConnections(cancellationToken);
42+
return _serviceConnection?.CloseClientConnections(cancellationToken) ?? Task.CompletedTask;
4243
}
4344

4445
public Task WriteAsync(ServiceMessage serviceMessage)
@@ -68,6 +69,11 @@ public void Dispose()
6869

6970
public IAsyncEnumerable<GroupMember> ListConnectionsInGroupAsync(string groupName, int? top = null, ulong? tracingId = null, CancellationToken token = default)
7071
{
72+
if (_serviceConnection == null)
73+
{
74+
throw new AzureSignalRNotConnectedException();
75+
}
76+
7177
return _serviceConnection.ListConnectionsInGroupAsync(groupName, top, tracingId, token);
7278
}
7379
}

test/Microsoft.Azure.SignalR.Tests/ServiceLifetimeManagerFacts.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,13 @@ public async Task ServiceLifetimeManagerGroupTest(string functionName, Type type
110110
Assert.False(blazorDetector.IsBlazor(nameof(TestHub)));
111111
}
112112

113+
[Fact]
114+
public async Task ServiceLifetimeManagerStopShouldNotThrow()
115+
{
116+
var serviceConnectionManager = new ServiceConnectionManager<TestHub>();
117+
await serviceConnectionManager.StopAsync();
118+
}
119+
113120
[Theory]
114121
[InlineData("SendAllAsync", typeof(BroadcastDataMessage))]
115122
[InlineData("SendAllExceptAsync", typeof(BroadcastDataMessage))]

0 commit comments

Comments
 (0)