Skip to content

Commit

Permalink
feat(hub): hub naming now is invariant and will always use interface …
Browse files Browse the repository at this point in the history
…naming (#77)

* feat(hub): hub naming now it is invariant and it will always use the interface naming instead consistently

* fix non generic + add further tests
  • Loading branch information
stephenlautier authored and galvesribeiro committed Jun 6, 2019
1 parent 9bb9c41 commit 3ad2bce
Show file tree
Hide file tree
Showing 3 changed files with 77 additions and 1 deletion.
6 changes: 5 additions & 1 deletion src/SignalR.Orleans/OrleansHubLifetimeManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,17 @@ public class OrleansHubLifetimeManager<THub> : HubLifetimeManager<THub>, IDispos
private IStreamProvider _streamProvider;
private IAsyncStream<ClientMessage> _serverStream;
private IAsyncStream<AllMessage> _allStream;
private readonly string _hubName = typeof(THub).Name;
private readonly string _hubName;

public OrleansHubLifetimeManager(
ILogger<OrleansHubLifetimeManager<THub>> logger,
IClusterClientProvider clusterClientProvider
)
{
var hubType = typeof(THub).BaseType.GenericTypeArguments.FirstOrDefault() ?? typeof(THub);
_hubName = hubType.IsInterface && hubType.Name.StartsWith("I")
? hubType.Name.Substring(1)
: hubType.Name;
_serverId = Guid.NewGuid();
_logger = logger;
_clusterClientProvider = clusterClientProvider;
Expand Down
21 changes: 21 additions & 0 deletions test/SignalR.Orleans.Tests/Models/Hub.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,25 @@ public class DifferentHub : Hub
{

}

// matching interface naming
public class DaHub : Hub<IDaHub>
{
}

public interface IDaHub { }

// non matching interface and class
public class DaHubx : Hub<IDaHub>
{
}

// using base
public class DaHubUsingBase : DaGenericHubBase<IDaHub>
{
}

public class DaGenericHubBase<THub> : Hub<THub> where THub : class
{
}
}
51 changes: 51 additions & 0 deletions test/SignalR.Orleans.Tests/OrleansHubLifetimeManagerTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,57 @@ public async Task InvokeAllAsync_WritesTo_AllConnections_Output()
}
}

[Fact]
public async Task Hub_InterfaceMatchingNaming_Output()
{
using (var client1 = new TestClient())
{
var manager = new OrleansHubLifetimeManager<DaHub>(new LoggerFactory().CreateLogger<OrleansHubLifetimeManager<DaHub>>(), _fixture.ClientProvider);

var connection1 = HubConnectionContextUtils.Create(client1.Connection);

await manager.OnConnectedAsync(connection1).OrTimeout();

await manager.SendAllAsync("Hello", new object[] { "World" }).OrTimeout();

await AssertMessageAsync(client1);
}
}

[Fact]
public async Task Hub_NonInterfaceMatchingNaming_Output()
{
using (var client1 = new TestClient())
{
var manager = new OrleansHubLifetimeManager<DaHubx>(new LoggerFactory().CreateLogger<OrleansHubLifetimeManager<DaHubx>>(), _fixture.ClientProvider);

var connection1 = HubConnectionContextUtils.Create(client1.Connection);

await manager.OnConnectedAsync(connection1).OrTimeout();

await manager.SendAllAsync("Hello", new object[] { "World" }).OrTimeout();

await AssertMessageAsync(client1);
}
}

[Fact]
public async Task HubUsingGenericBase_NonInterfaceMatchingNaming_Output()
{
using (var client1 = new TestClient())
{
var manager = new OrleansHubLifetimeManager<DaHubUsingBase>(new LoggerFactory().CreateLogger<OrleansHubLifetimeManager<DaHubUsingBase>>(), _fixture.ClientProvider);

var connection1 = HubConnectionContextUtils.Create(client1.Connection);

await manager.OnConnectedAsync(connection1).OrTimeout();

await manager.SendAllAsync("Hello", new object[] { "World" }).OrTimeout();

await AssertMessageAsync(client1);
}
}

[Fact]
public async Task InvokeAllAsync_DoesNotWriteTo_DisconnectedConnections_Output()
{
Expand Down

0 comments on commit 3ad2bce

Please sign in to comment.