public void ServerWindowSizeDisableThenFallback() { var ch = new EmbeddedChannel(new WebSocketServerExtensionHandler( new PerMessageDeflateServerExtensionHandshaker(6, false, 15, false, false))); IHttpRequest req = NewUpgradeRequest( PerMessageDeflateExtension + "; " + ServerMaxWindow + "=10, " + PerMessageDeflateExtension); 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> exts = WebSocketExtensionUtil.ExtractExtensions(value.ToString()); Assert.Equal(PerMessageDeflateExtension, exts[0].Name); Assert.Empty(exts[0].Parameters); Assert.NotNull(ch.Pipeline.Get <PerMessageDeflateDecoder>()); Assert.NotNull(ch.Pipeline.Get <PerMessageDeflateEncoder>()); }
public void FallbackSuccess() { this.mainHandshaker.Setup(x => x.NewRequestData()) .Returns(new WebSocketExtensionData("main", new Dictionary <string, string>())); this.mainHandshaker.Setup(x => x.HandshakeExtension(It.IsAny <WebSocketExtensionData>())) .Returns(default(IWebSocketClientExtension)); this.fallbackHandshaker.Setup(x => x.NewRequestData()) .Returns(new WebSocketExtensionData("fallback", new Dictionary <string, string>())); this.fallbackHandshaker.Setup(x => x.HandshakeExtension(It.IsAny <WebSocketExtensionData>())) .Returns(this.fallbackExtension.Object); this.fallbackExtension.Setup(x => x.Rsv).Returns(WebSocketRsv.Rsv1); this.fallbackExtension.Setup(x => x.NewExtensionEncoder()).Returns(new DummyEncoder()); this.fallbackExtension.Setup(x => x.NewExtensionDecoder()).Returns(new DummyDecoder()); var ch = new EmbeddedChannel( new WebSocketClientExtensionHandler( this.mainHandshaker.Object, this.fallbackHandshaker.Object)); IHttpRequest req = NewUpgradeRequest(null); ch.WriteOutbound(req); var req2 = ch.ReadOutbound <IHttpRequest>(); Assert.True(req2.Headers.TryGet(HttpHeaderNames.SecWebsocketExtensions, out ICharSequence value)); List <WebSocketExtensionData> reqExts = WebSocketExtensionUtil.ExtractExtensions(value.ToString()); IHttpResponse res = NewUpgradeResponse("fallback"); ch.WriteInbound(res); var res2 = ch.ReadInbound <IHttpResponse>(); Assert.True(res2.Headers.TryGet(HttpHeaderNames.SecWebsocketExtensions, out value)); List <WebSocketExtensionData> resExts = WebSocketExtensionUtil.ExtractExtensions(value.ToString()); Assert.Equal(2, reqExts.Count); Assert.Equal("main", reqExts[0].Name); Assert.Equal("fallback", reqExts[1].Name); Assert.Single(resExts); Assert.Equal("fallback", resExts[0].Name); Assert.Empty(resExts[0].Parameters); Assert.NotNull(ch.Pipeline.Get <DummyDecoder>()); Assert.NotNull(ch.Pipeline.Get <DummyEncoder>()); this.fallbackExtension.Verify(x => x.Rsv, Times.AtLeastOnce); }
public void MainAndFallbackUseRsv1WillFail() { this.mainHandshaker.Setup(x => x.NewRequestData()) .Returns(new WebSocketExtensionData("main", new Dictionary <string, string>())); this.mainHandshaker.Setup(x => x.HandshakeExtension( It.Is <WebSocketExtensionData>(v => v.Name.Equals("main")))) .Returns(this.mainExtension.Object); this.mainHandshaker.Setup(x => x.HandshakeExtension( It.Is <WebSocketExtensionData>(v => v.Name.Equals("fallback")))) .Returns(default(IWebSocketClientExtension)); this.fallbackHandshaker.Setup(x => x.NewRequestData()) .Returns(new WebSocketExtensionData("fallback", new Dictionary <string, string>())); this.fallbackHandshaker.Setup(x => x.HandshakeExtension( It.Is <WebSocketExtensionData>(v => v.Name.Equals("fallback")))) .Returns(this.fallbackExtension.Object); this.mainExtension.Setup(x => x.Rsv).Returns(WebSocketRsv.Rsv1); this.fallbackExtension.Setup(x => x.Rsv).Returns(WebSocketRsv.Rsv1); var ch = new EmbeddedChannel(new WebSocketClientExtensionHandler( this.mainHandshaker.Object, this.fallbackHandshaker.Object)); IHttpRequest req = NewUpgradeRequest(null); ch.WriteOutbound(req); var req2 = ch.ReadOutbound <IHttpRequest>(); Assert.True(req2.Headers.TryGet(HttpHeaderNames.SecWebsocketExtensions, out ICharSequence value)); List <WebSocketExtensionData> reqExts = WebSocketExtensionUtil.ExtractExtensions(value.ToString()); IHttpResponse res = NewUpgradeResponse("main, fallback"); Assert.Throws <CodecException>(() => ch.WriteInbound(res)); Assert.Equal(2, reqExts.Count); Assert.Equal("main", reqExts[0].Name); Assert.Equal("fallback", reqExts[1].Name); this.mainHandshaker.Verify(x => x.HandshakeExtension( It.Is <WebSocketExtensionData>(v => v.Name.Equals("main"))), Times.AtLeastOnce); this.mainHandshaker.Verify(x => x.HandshakeExtension( It.Is <WebSocketExtensionData>(v => v.Name.Equals("fallback"))), Times.AtLeastOnce); this.fallbackHandshaker.Verify(x => x.HandshakeExtension( It.Is <WebSocketExtensionData>(v => v.Name.Equals("fallback"))), Times.AtLeastOnce); this.mainExtension.Verify(x => x.Rsv, Times.AtLeastOnce); this.fallbackExtension.Verify(x => x.Rsv, Times.AtLeastOnce); }
public void NormalSuccess() { var ch = new EmbeddedChannel(new WebSocketServerCompressionHandler()); IHttpRequest req = NewUpgradeRequest(PerMessageDeflateExtension); 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> exts = WebSocketExtensionUtil.ExtractExtensions(value.ToString()); Assert.Equal(PerMessageDeflateExtension, exts[0].Name); Assert.Empty(exts[0].Parameters); Assert.NotNull(ch.Pipeline.Get <PerMessageDeflateDecoder>()); Assert.NotNull(ch.Pipeline.Get <PerMessageDeflateEncoder>()); }
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); }
public void CompatibleExtensionTogetherSuccess() { this.mainHandshaker.Setup(x => x.HandshakeExtension( It.Is <WebSocketExtensionData>(v => v.Name.Equals("main")))) .Returns(this.mainExtension.Object); this.mainHandshaker.Setup(x => x.HandshakeExtension( It.Is <WebSocketExtensionData>(v => v.Name.Equals("fallback")))) .Returns(default(IWebSocketServerExtension)); this.fallbackHandshaker.Setup(x => x.HandshakeExtension( It.Is <WebSocketExtensionData>(v => v.Name.Equals("fallback")))) .Returns(this.fallbackExtension.Object); this.fallbackHandshaker.Setup(x => x.HandshakeExtension( It.Is <WebSocketExtensionData>(v => v.Name.Equals("main")))) .Returns(default(IWebSocketServerExtension)); this.mainExtension.Setup(x => x.Rsv).Returns(WebSocketRsv.Rsv1); this.mainExtension.Setup(x => x.NewReponseData()).Returns( new WebSocketExtensionData("main", new Dictionary <string, string>())); this.mainExtension.Setup(x => x.NewExtensionEncoder()).Returns(new DummyEncoder()); this.mainExtension.Setup(x => x.NewExtensionDecoder()).Returns(new DummyDecoder()); this.fallbackExtension.Setup(x => x.Rsv).Returns(WebSocketRsv.Rsv2); this.fallbackExtension.Setup(x => x.NewReponseData()).Returns( new WebSocketExtensionData("fallback", new Dictionary <string, string>())); this.fallbackExtension.Setup(x => x.NewExtensionEncoder()).Returns(new Dummy2Encoder()); this.fallbackExtension.Setup(x => x.NewExtensionDecoder()).Returns(new Dummy2Decoder()); var ch = new EmbeddedChannel(new WebSocketServerExtensionHandler( this.mainHandshaker.Object, this.fallbackHandshaker.Object)); 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()); Assert.Equal(2, resExts.Count); Assert.Equal("main", resExts[0].Name); Assert.Equal("fallback", resExts[1].Name); Assert.NotNull(ch.Pipeline.Get <DummyDecoder>()); Assert.NotNull(ch.Pipeline.Get <DummyEncoder>()); Assert.NotNull(ch.Pipeline.Get <Dummy2Decoder>()); Assert.NotNull(ch.Pipeline.Get <Dummy2Encoder>()); this.mainHandshaker.Verify(x => x.HandshakeExtension( It.Is <WebSocketExtensionData>(v => v.Name.Equals("main"))), Times.AtLeastOnce); this.mainHandshaker.Verify(x => x.HandshakeExtension( It.Is <WebSocketExtensionData>(v => v.Name.Equals("fallback"))), Times.AtLeastOnce); this.fallbackHandshaker.Verify(x => x.HandshakeExtension( It.Is <WebSocketExtensionData>(v => v.Name.Equals("fallback"))), Times.AtLeastOnce); this.mainExtension.Verify(x => x.Rsv, Times.Exactly(2)); this.fallbackExtension.Verify(x => x.Rsv, Times.Exactly(2)); }