Fix AllProtocols with duplicates

This commit is contained in:
Brennan Conroy 2019-08-19 09:46:36 -07:00 committed by Doug Bunting
parent ff5c200345
commit 4fb2dda133
2 changed files with 18 additions and 3 deletions

View File

@ -23,13 +23,12 @@ namespace Microsoft.AspNetCore.SignalR.Internal
_logger = logger ?? NullLogger<DefaultHubProtocolResolver>.Instance;
_availableProtocols = new Dictionary<string, IHubProtocol>(StringComparer.OrdinalIgnoreCase);
// We might get duplicates in _hubProtocols, but we're going to check it and overwrite in just a sec.
_hubProtocols = availableProtocols.ToList();
foreach (var protocol in _hubProtocols)
foreach (var protocol in availableProtocols)
{
Log.RegisteredSignalRProtocol(_logger, protocol.Name, protocol.GetType());
_availableProtocols[protocol.Name] = protocol;
}
_hubProtocols = _availableProtocols.Values.ToList();
}
public virtual IHubProtocol GetProtocol(string protocolName, IReadOnlyList<string> supportedProtocols)

View File

@ -84,6 +84,22 @@ namespace Microsoft.AspNetCore.SignalR.Common.Protocol.Tests
Assert.Same(jsonProtocol2, resolvedProtocol);
}
[Fact]
public void AllProtocolsOnlyReturnsLatestOfSameType()
{
var jsonProtocol1 = new NewtonsoftJsonHubProtocol();
var jsonProtocol2 = new NewtonsoftJsonHubProtocol();
var resolver = new DefaultHubProtocolResolver(new[] {
jsonProtocol1,
jsonProtocol2
}, NullLogger<DefaultHubProtocolResolver>.Instance);
var hubProtocols = resolver.AllProtocols;
Assert.Equal(1, hubProtocols.Count);
Assert.Same(jsonProtocol2, hubProtocols[0]);
}
public static IEnumerable<object[]> HubProtocolNames => HubProtocolHelpers.AllProtocols.Select(p => new object[] {p.Name});
}
}