public void ExtensionHandlerNotRemovedByFailureWritePromise() { // initialize _mainHandshaker.Setup(x => x.HandshakeExtension( It.Is <WebSocketExtensionData>(v => v.Name.Equals("main")))). Returns(_mainExtension.Object); _mainExtension.Setup(x => x.NewReponseData()).Returns( new WebSocketExtensionData("main", new Dictionary <string, string>())); // execute WebSocketServerExtensionHandler extensionHandler = new WebSocketServerExtensionHandler(_mainHandshaker.Object); EmbeddedChannel ch = new EmbeddedChannel(extensionHandler); IHttpRequest req = NewUpgradeRequest("main"); ch.WriteInbound(req); IHttpResponse res = NewUpgradeResponse(null); var failurePromise = ch.NewPromise(); ch.WriteOneOutbound(res, failurePromise); failurePromise.SetException(new IOException("Cannot write response")); // test Assert.Null(ch.ReadOutbound()); Assert.NotNull(ch.Pipeline.Context(extensionHandler)); Assert.True(ch.Finish()); }
public void NoneExtensionMatchingSuccess() { // initialize _mainHandshaker.Setup(x => x.HandshakeExtension( It.Is <WebSocketExtensionData>(v => v.Name.Equals("unknown")))). Returns(default(IWebSocketServerExtension)); _mainHandshaker.Setup(x => x.HandshakeExtension( It.Is <WebSocketExtensionData>(v => v.Name.Equals("unknown2")))). Returns(default(IWebSocketServerExtension)); _fallbackHandshaker.Setup(x => x.HandshakeExtension( It.Is <WebSocketExtensionData>(v => v.Name.Equals("unknown")))). Returns(default(IWebSocketServerExtension)); _fallbackHandshaker.Setup(x => x.HandshakeExtension( It.Is <WebSocketExtensionData>(v => v.Name.Equals("unknown2")))). Returns(default(IWebSocketServerExtension)); // execute WebSocketServerExtensionHandler extensionHandler = new WebSocketServerExtensionHandler(_mainHandshaker.Object, _fallbackHandshaker.Object); var ch = new EmbeddedChannel(extensionHandler); IHttpRequest req = NewUpgradeRequest("unknown, unknown2"); ch.WriteInbound(req); IHttpResponse res = NewUpgradeResponse(null); ch.WriteOutbound(res); var res2 = ch.ReadOutbound <IHttpResponse>(); // test Assert.Null(ch.Pipeline.Context(extensionHandler)); Assert.False(res2.Headers.Contains(HttpHeaderNames.SecWebsocketExtensions)); _mainHandshaker.Verify(x => x.HandshakeExtension(It.Is <WebSocketExtensionData>(v => v.Name.Equals("unknown")))); _mainHandshaker.Verify(x => x.HandshakeExtension(It.Is <WebSocketExtensionData>(v => v.Name.Equals("unknown2")))); _fallbackHandshaker.Verify(x => x.HandshakeExtension(It.Is <WebSocketExtensionData>(v => v.Name.Equals("unknown")))); _fallbackHandshaker.Verify(x => x.HandshakeExtension(It.Is <WebSocketExtensionData>(v => v.Name.Equals("unknown2")))); }
public void MainSuccess() { // initialize _mainHandshaker.Setup( x => x.HandshakeExtension( It.Is <WebSocketExtensionData>(v => v.Name.Equals("main")))) .Returns(_mainExtension.Object); _mainHandshaker.Setup( x => x.HandshakeExtension( It.Is <WebSocketExtensionData>(v => v.Name.Equals("fallback")))) .Returns(default(IWebSocketServerExtension)); _fallbackHandshaker.Setup( x => x.HandshakeExtension( It.Is <WebSocketExtensionData>(v => v.Name.Equals("fallback")))) .Returns(_fallbackExtension.Object); _fallbackHandshaker.Setup( x => x.HandshakeExtension( It.Is <WebSocketExtensionData>(v => v.Name.Equals("main")))) .Returns(default(IWebSocketServerExtension)); _mainExtension.Setup(x => x.Rsv).Returns(WebSocketRsv.Rsv1); _mainExtension.Setup(x => x.NewReponseData()).Returns( new WebSocketExtensionData("main", new Dictionary <string, string>())); _mainExtension.Setup(x => x.NewExtensionEncoder()).Returns(new DummyEncoder()); _mainExtension.Setup(x => x.NewExtensionDecoder()).Returns(new DummyDecoder()); _fallbackExtension.Setup(x => x.Rsv).Returns(WebSocketRsv.Rsv1); // execute WebSocketServerExtensionHandler extensionHandler = new WebSocketServerExtensionHandler(_mainHandshaker.Object, _fallbackHandshaker.Object); var ch = new EmbeddedChannel(extensionHandler); IHttpRequest req = NewUpgradeRequest("main, fallback"); ch.WriteInbound(req); IHttpResponse res = NewUpgradeResponse(null); ch.WriteOutbound(res); var res2 = ch.ReadOutbound <IHttpResponse>(); Assert.True(res2.Headers.TryGet(HttpHeaderNames.SecWebsocketExtensions, out ICharSequence value)); List <WebSocketExtensionData> resExts = WebSocketExtensionUtil.ExtractExtensions(value.ToString()); // test Assert.Null(ch.Pipeline.Context(extensionHandler)); Assert.Single(resExts); Assert.Equal("main", resExts[0].Name); Assert.Empty(resExts[0].Parameters); Assert.NotNull(ch.Pipeline.Get <DummyDecoder>()); Assert.NotNull(ch.Pipeline.Get <DummyEncoder>()); _mainHandshaker.Verify( x => x.HandshakeExtension( It.Is <WebSocketExtensionData>(v => v.Name.Equals("main"))), Times.AtLeastOnce); _mainHandshaker.Verify( x => x.HandshakeExtension( It.Is <WebSocketExtensionData>(v => v.Name.Equals("fallback"))), Times.AtLeastOnce); _fallbackHandshaker.Verify( x => x.HandshakeExtension( It.Is <WebSocketExtensionData>(v => v.Name.Equals("fallback"))), Times.AtLeastOnce); _mainExtension.Verify(x => x.Rsv, Times.AtLeastOnce); _mainExtension.Verify(x => x.NewReponseData()); _mainExtension.Verify(x => x.NewExtensionEncoder()); _mainExtension.Verify(x => x.NewExtensionDecoder()); _fallbackExtension.Verify(x => x.Rsv, Times.AtLeastOnce); }