public void CanRegisterAListener() { IWebSocketListener listener = this._SubprotocolListener("abc"); var registry = new WebSocketListenerRegistry(); Assert.True(registry.TryRegister(listener)); }
public void CannotRegisterAListenerWithoutASubProtocol() { IWebSocketListener listener = this._SubprotocolListener(null); var registry = new WebSocketListenerRegistry(); Assert.Throws <ArgumentNullException>(() => registry.TryRegister(listener)); }
public async Task AuthorizedRequestWhenCertIsNotSet() { var next = Mock.Of <RequestDelegate>(); var listener = new Mock <IWebSocketListener>(); listener.Setup(wsl => wsl.SubProtocol).Returns("abc"); listener.Setup( wsl => wsl.ProcessWebSocketRequestAsync( It.IsAny <WebSocket>(), It.IsAny <Option <EndPoint> >(), It.IsAny <EndPoint>(), It.IsAny <string>())) .Returns(Task.CompletedTask); var registry = new WebSocketListenerRegistry(); registry.TryRegister(listener.Object); HttpContext httpContext = this.ContextWithRequestedSubprotocols("abc"); var authenticator = new Mock <IAuthenticator>(); authenticator.Setup(p => p.AuthenticateAsync(It.IsAny <IClientCredentials>())).ReturnsAsync(false); IHttpProxiedCertificateExtractor certExtractor = new HttpProxiedCertificateExtractor(authenticator.Object, Mock.Of <IClientCredentialsFactory>(), "hub", "edge", "proxy"); var middleware = new WebSocketHandlingMiddleware(next, registry, Task.FromResult(certExtractor)); await middleware.Invoke(httpContext); authenticator.Verify(auth => auth.AuthenticateAsync(It.IsAny <IClientCredentials>()), Times.Never); listener.VerifyAll(); }
public void CannotUnregisterANonExistentListener() { var registry = new WebSocketListenerRegistry(); Assert.False(registry.TryUnregister("abc", out IWebSocketListener outListener)); Assert.Null(outListener); }
public void CannotInvokeWhenNoListenersAreRegistered() { var registry = new WebSocketListenerRegistry(); HttpContext httpContext = this._ContextWithRequestedSubprotocols("abc"); Assert.False(registry.GetListener(httpContext.WebSockets.WebSocketRequestedProtocols).HasValue); }
public async Task CannotInvokeWhenNoListenersAreRegistered() { var registry = new WebSocketListenerRegistry(); HttpContext httpContext = this._ContextWithRequestedSubprotocols("abc"); Assert.False(await registry.InvokeAsync(httpContext, "dontcare")); Assert.Equal((int)HttpStatusCode.BadRequest, httpContext.Response.StatusCode); }
public void CannotRegisterTheSameListenerTwice() { IWebSocketListener listener = this._SubprotocolListener("abc"); var registry = new WebSocketListenerRegistry(); registry.TryRegister(listener); Assert.False(registry.TryRegister(listener)); }
public async Task CanInvokeARegisteredListener() { var registry = new WebSocketListenerRegistry(); registry.TryRegister(this._SubprotocolListener("abc")); HttpContext httpContext = this._ContextWithRequestedSubprotocols("abc"); Assert.True(await registry.InvokeAsync(httpContext, "dontcare")); }
public void CannotInvokeANonExistentListener() { var registry = new WebSocketListenerRegistry(); registry.TryRegister(this._SubprotocolListener("abc")); HttpContext httpContext = this._ContextWithRequestedSubprotocols("xyz"); Assert.False(registry.GetListener(httpContext.WebSockets.WebSocketRequestedProtocols).HasValue); }
public void CanUnregisterAListener() { IWebSocketListener inListener = this._SubprotocolListener("abc"); var registry = new WebSocketListenerRegistry(); registry.TryRegister(inListener); Assert.True(registry.TryUnregister("abc", out IWebSocketListener outListener)); Assert.Equal(inListener, outListener); }
public async Task SetsBadrequestWhenNoRegisteredListener() { var registry = new WebSocketListenerRegistry(); HttpContext httpContext = this.ContextWithRequestedSubprotocols("xyz"); var middleware = new WebSocketHandlingMiddleware(this.ThrowingNextDelegate(), registry, Task.FromResult(Mock.Of <IHttpProxiedCertificateExtractor>())); await middleware.Invoke(httpContext); Assert.Equal((int)HttpStatusCode.BadRequest, httpContext.Response.StatusCode); }
public async Task SetsBadrequestWhenNoRegisteredListener() { var registry = new WebSocketListenerRegistry(); HttpContext httpContext = this._ContextWithRequestedSubprotocols("xyz"); var middleware = new WebSocketHandlingMiddleware(this._ThrowingNextDelegate(), registry); await middleware.Invoke(httpContext); Assert.Equal((int)HttpStatusCode.BadRequest, httpContext.Response.StatusCode); }
public void CannotUnregisterAListenerWithANullOrWhitespaceSubProtocol() { IWebSocketListener inListener = this._SubprotocolListener("abc"); var registry = new WebSocketListenerRegistry(); registry.TryRegister(inListener); Assert.Throws <ArgumentException>(() => registry.TryUnregister(null, out IWebSocketListener _)); Assert.Throws <ArgumentException>(() => registry.TryUnregister(string.Empty, out IWebSocketListener _)); Assert.Throws <ArgumentException>(() => registry.TryUnregister(" ", out IWebSocketListener _)); }
public void CanInvokeARegisteredListener() { var registry = new WebSocketListenerRegistry(); registry.TryRegister(this._SubprotocolListener("abc")); HttpContext httpContext = this._ContextWithRequestedSubprotocols("abc"); Option <IWebSocketListener> listener = registry.GetListener(httpContext.WebSockets.WebSocketRequestedProtocols); Assert.True(listener.HasValue); }
public async Task SetsBadrequestWhenANonExistentListener() { var listener = Mock.Of <IWebSocketListener>(wsl => wsl.SubProtocol == "abc"); var registry = new WebSocketListenerRegistry(); registry.TryRegister(listener); HttpContext httpContext = this._ContextWithRequestedSubprotocols("xyz"); var middleware = new WebSocketHandlingMiddleware(this._ThrowingNextDelegate(), registry); await middleware.Invoke(httpContext); Assert.Equal((int)HttpStatusCode.BadRequest, httpContext.Response.StatusCode); }
public async Task AlwaysInvokesTheFirstMatchingListener() { IWebSocketListener abcListener = this._SubprotocolListener("abc"); IWebSocketListener xyzListener = this._SubprotocolListener("xyz"); var registry = new WebSocketListenerRegistry(); registry.TryRegister(abcListener); registry.TryRegister(xyzListener); HttpContext httpContext = this._ContextWithRequestedSubprotocols("xyz", "abc"); Assert.True(await registry.InvokeAsync(httpContext, "123")); Mock.Get(xyzListener).Verify(wsl => wsl.ProcessWebSocketRequestAsync(httpContext, "123")); }
public async Task HandlesAWebSocketRequest() { HttpContext httpContext = this._ContextWithRequestedSubprotocols("abc"); var listener = Mock.Of <IWebSocketListener>(wsl => wsl.SubProtocol == "abc"); var registry = new WebSocketListenerRegistry(); registry.TryRegister(listener); var middleware = new WebSocketHandlingMiddleware(this._ThrowingNextDelegate(), registry); await middleware.Invoke(httpContext); Mock.Get(listener).Verify(r => r.ProcessWebSocketRequestAsync(It.IsAny <WebSocket>(), It.IsAny <Option <EndPoint> >(), It.IsAny <EndPoint>(), It.IsAny <string>())); }
public void AlwaysInvokesTheFirstMatchingListener() { IWebSocketListener abcListener = this._SubprotocolListener("abc"); IWebSocketListener xyzListener = this._SubprotocolListener("xyz"); var registry = new WebSocketListenerRegistry(); registry.TryRegister(abcListener); registry.TryRegister(xyzListener); HttpContext httpContext = this._ContextWithRequestedSubprotocols("xyz", "abc"); var listener = registry.GetListener(httpContext.WebSockets.WebSocketRequestedProtocols); Assert.True(listener.HasValue); listener.ForEach(l => Assert.Equal(l.SubProtocol, "xyz")); //Mock.Get(xyzListener).Verify(wsl => wsl.ProcessWebSocketRequestAsync(It.IsAny<WebSocket>(), It.IsAny<string>(), It.IsAny<EndPoint>(), It.IsAny<EndPoint>(), It.IsAny<string>())); }
public async Task AuthorizedRequestWhenProxyAuthSuccess() { var next = Mock.Of <RequestDelegate>(); var listener = new Mock <IWebSocketListener>(); listener.Setup(wsl => wsl.SubProtocol).Returns("abc"); listener.Setup( wsl => wsl.ProcessWebSocketRequestAsync( It.IsAny <WebSocket>(), It.IsAny <Option <EndPoint> >(), It.IsAny <EndPoint>(), It.IsAny <string>(), It.IsAny <X509Certificate2>(), It.IsAny <IList <X509Certificate2> >(), It.Is <IAuthenticator>(auth => auth == null))) .Returns(Task.CompletedTask); var registry = new WebSocketListenerRegistry(); registry.TryRegister(listener.Object); var certContentBytes = Util.Test.Common.CertificateHelper.GenerateSelfSignedCert($"test_cert").Export(X509ContentType.Cert); string certContentBase64 = Convert.ToBase64String(certContentBytes); string clientCertString = $"-----BEGIN CERTIFICATE-----\n{certContentBase64}\n-----END CERTIFICATE-----\n"; clientCertString = WebUtility.UrlEncode(clientCertString); HttpContext httpContext = this.ContextWithRequestedSubprotocolsAndForwardedCert(new StringValues(clientCertString), "abc"); var certExtractor = new Mock <IHttpProxiedCertificateExtractor>(); certExtractor.Setup(p => p.GetClientCertificate(It.IsAny <HttpContext>())).ReturnsAsync(Option.Some(new X509Certificate2(certContentBytes))); var middleware = new WebSocketHandlingMiddleware(next, registry, Task.FromResult(certExtractor.Object)); await middleware.Invoke(httpContext); listener.VerifyAll(); }
public void CannotRegisterANullListener() { var registry = new WebSocketListenerRegistry(); Assert.Throws <ArgumentNullException>(() => registry.TryRegister(null)); }