示例#1
0
        public void EmptyPathDoesntTriggerReconnects()
        {
            // Arrange
            var transport = TestLongPollingTransport.Create(requestPath: "/");

            var connected   = false;
            var reconnected = false;

            transport.Connected = () =>
            {
                connected = true;
                return(TaskAsyncHelper.Empty);
            };

            transport.Reconnected = () =>
            {
                reconnected = true;
                return(TaskAsyncHelper.Empty);
            };

            var transportConnection = new Mock <ITransportConnection>();

            transportConnection.Setup(m => m.Receive(It.IsAny <string>(),
                                                     It.IsAny <Func <PersistentResponse, object, Task <bool> > >(),
                                                     It.IsAny <int>(),
                                                     It.IsAny <object>())).Returns(DisposableAction.Empty);

            // Act
            transport.ProcessRequest(transportConnection.Object);

            // Assert
            Assert.True(transport.ConnectTask.Wait(TimeSpan.FromSeconds(2)), "ConnectTask task not tripped");
            Assert.False(connected, "The Connected event should not be raised");
            Assert.False(reconnected, "The Reconnected event should not be raised");
        }
示例#2
0
        public void EmptyPathDoesntTriggerReconnects()
        {
            // Arrange
            var transport = TestLongPollingTransport.Create(requestPath: "/");

            var connected   = false;
            var reconnected = false;

            transport.Connected = () =>
            {
                connected = true;
                return(TaskAsyncHelper.Empty);
            };

            transport.Reconnected = () =>
            {
                reconnected = true;
                return(TaskAsyncHelper.Empty);
            };

            // Act
            transport.ProcessRequest(CreateMockTransportConnection());

            // Assert
            Assert.True(transport.ConnectTask.Wait(TimeSpan.FromSeconds(2)), "ConnectTask task not tripped");
            Assert.False(connected, "The Connected event should not be raised");
            Assert.False(reconnected, "The Reconnected event should not be raised");
        }
示例#3
0
            public static TestLongPollingTransport Create(
                string requestPath,
                Dictionary <string, string> queryString = null)
            {
                TestLongPollingTransport transport = null;
                var context = new TestContext(requestPath, queryString);

                context.MockResponse.SetupSet(m => m.ContentType = It.IsAny <string>()).Callback <string>(contentType =>
                {
                    transport._contentTypeTcs.SetResult(contentType);
                });

                var json            = JsonUtility.CreateDefaultSerializer();
                var heartBeat       = new Mock <ITransportHeartbeat>();
                var counters        = new Mock <IPerformanceCounterManager>();
                var appLifetime     = new Mock <IApplicationLifetime>();
                var loggerFactory   = new Mock <ILoggerFactory>();
                var optionsAccessor = new Mock <IOptions <SignalROptions> >();

                optionsAccessor.Setup(m => m.Value).Returns(new SignalROptions());
                var pool = new Mock <IMemoryPool>();

                transport = new TestLongPollingTransport(
                    context.MockHttpContext.Object,
                    json,
                    heartBeat.Object,
                    counters.Object,
                    appLifetime.Object,
                    loggerFactory.Object,
                    optionsAccessor.Object,
                    pool.Object);

                return(transport);
            }
        public async Task EmptyPathDoesntTriggerReconnects()
        {
            // Arrange
            var transport = TestLongPollingTransport.Create(requestPath: "/");

            var connected   = false;
            var reconnected = false;

            transport.Connected = () =>
            {
                connected = true;
                return(TaskAsyncHelper.Empty);
            };

            transport.Reconnected = () =>
            {
                reconnected = true;
                return(TaskAsyncHelper.Empty);
            };

            // Act
            _ = transport.ProcessRequest(CreateMockTransportConnection());

            // Assert
            await transport.ConnectTask.OrTimeout();

            Assert.False(connected, "The Connected event should not be raised");
            Assert.False(reconnected, "The Reconnected event should not be raised");
        }
示例#5
0
        public void SetTheCorrectMIMETypeForJSONPolls()
        {
            // Arrange
            var transport = TestLongPollingTransport.Create("/poll");

            // Act
            transport.ProcessRequest(CreateMockTransportConnection());

            // Assert
            Assert.True(transport.TestContentType.Wait(TimeSpan.FromSeconds(2)), "ContentType not set");
            Assert.Equal(JsonUtility.JsonMimeType, transport.TestContentType.Result);
        }
示例#6
0
        public void SetTheCorrectMIMETypeForJSONSends()
        {
            // Arrange
            var transport = TestLongPollingTransport.Create("/send");

            // Act
            transport.Send(new object());

            // Assert
            Assert.True(transport.TestContentType.Wait(TimeSpan.FromSeconds(2)), "ContentType not set");
            Assert.Equal(JsonUtility.JsonMimeType, transport.TestContentType.Result);
        }
示例#7
0
        public void SupressReconnectsForRequestsNotEndingInReconnect()
        {
            // Arrange transports while specifying request paths
            var reconnectTransport = TestLongPollingTransport.Create("/reconnect");
            var pollTransport      = TestLongPollingTransport.Create("/poll");
            var emptyPathTransport = TestLongPollingTransport.Create("/");

            // Assert
            Assert.False(reconnectTransport.TestSuppressReconnect);
            Assert.True(pollTransport.TestSuppressReconnect);
            Assert.True(emptyPathTransport.TestSuppressReconnect);
        }
        public void SetTheCorrectMIMETypeForJSONPPolls()
        {
            // Arrange
            // Make the transport think it is responding to a JSONP request
            var queryString = new NameValueCollection { { "callback", "foo" } };
            var transport = TestLongPollingTransport.Create("/poll", queryString);

            // Act
            transport.ProcessRequest(CreateMockTransportConnection());

            // Assert
            Assert.True(transport.TestContentType.Wait(TimeSpan.FromSeconds(2)), "ContentType not set");
            Assert.Equal(JsonUtility.JavaScriptMimeType, transport.TestContentType.Result);
        }
示例#9
0
        public void SetTheCorrectMIMETypeForJSONPSends()
        {
            // Arrange
            // Make the transport think it is responding to a JSONP request
            var queryString = new Dictionary <string, string> {
                { "callback", "foo" }
            };
            var transport = TestLongPollingTransport.Create("/send", queryString);

            // Act
            // JSONP send
            transport.Send(new object());

            // Assert
            Assert.True(transport.TestContentType.Wait(TimeSpan.FromSeconds(2)), "ContentType not set");
            Assert.Equal(JsonUtility.JavaScriptMimeType, transport.TestContentType.Result);
        }
示例#10
0
            public static TestLongPollingTransport Create(
                string requestPath,
                NameValueCollection queryString = null)
            {
                TestLongPollingTransport transport = null;

                var request = new Mock <IRequest>();

                queryString = queryString ?? new NameValueCollection();
                queryString["messageId"] = queryString["messageId"] ?? string.Empty;
                request.Setup(m => m.QueryString).Returns(new NameValueCollectionWrapper(queryString));
                request.Setup(m => m.LocalPath).Returns(requestPath);

                var response = new Mock <IResponse>();

                response.Setup(m => m.Flush()).Returns(TaskAsyncHelper.Empty);
                response.SetupSet(m => m.ContentType = It.IsAny <string>()).Callback <string>(contentType =>
                {
                    transport._contentTypeTcs.SetResult(contentType);
                });

                var hostContext         = new HostContext(request.Object, response.Object);
                var json                = JsonUtility.CreateDefaultSerializer();
                var heartBeat           = new Mock <ITransportHeartbeat>();
                var counters            = new Mock <IPerformanceCounterManager>();
                var traceManager        = new Mock <ITraceManager>();
                var configuarionManager = new Mock <IConfigurationManager>();

                transport = new TestLongPollingTransport(
                    hostContext,
                    json,
                    heartBeat.Object,
                    counters.Object,
                    traceManager.Object,
                    configuarionManager.Object);

                return(transport);
            }
            public static TestLongPollingTransport Create(
                string requestPath,
                NameValueCollection queryString = null)
            {
                TestLongPollingTransport transport = null;

                var request = new Mock<IRequest>();
                queryString = queryString ?? new NameValueCollection();
                request.Setup(m => m.QueryString).Returns(new NameValueCollectionWrapper(queryString));
                request.Setup(m => m.LocalPath).Returns(requestPath);

                var response = new Mock<IResponse>();
                response.Setup(m => m.Flush()).Returns(TaskAsyncHelper.Empty);
                response.SetupSet(m => m.ContentType = It.IsAny<string>()).Callback<string>(contentType =>
                {
                    transport._contentTypeTcs.SetResult(contentType);
                });

                var hostContext = new HostContext(request.Object, response.Object);
                var json = JsonUtility.CreateDefaultSerializer();
                var heartBeat = new Mock<ITransportHeartbeat>();
                var counters = new Mock<IPerformanceCounterManager>();
                var traceManager = new Mock<ITraceManager>();
                var configuarionManager = new Mock<IConfigurationManager>();

                transport = new TestLongPollingTransport(
                    hostContext,
                    json,
                    heartBeat.Object,
                    counters.Object,
                    traceManager.Object,
                    configuarionManager.Object);

                return transport;
            }
            public static TestLongPollingTransport Create(
                string requestPath,
                Dictionary<string, string> queryString = null)
            {
                TestLongPollingTransport transport = null;
                var context = new TestContext(requestPath, queryString);

                context.MockResponse.SetupSet(m => m.ContentType = It.IsAny<string>()).Callback<string>(contentType =>
                {
                    transport._contentTypeTcs.SetResult(contentType);
                });

                var json = JsonUtility.CreateDefaultSerializer();
                var heartBeat = new Mock<ITransportHeartbeat>();
                var counters = new Mock<IPerformanceCounterManager>();
                var appLifetime = new Mock<IApplicationLifetime>();
                var loggerFactory = new Mock<ILoggerFactory>();
                var optionsAccessor = new Mock<IOptions<SignalROptions>>();
                optionsAccessor.Setup(m => m.Options).Returns(new SignalROptions());
                var pool = new Mock<IMemoryPool>();

                transport = new TestLongPollingTransport(
                    context.MockHttpContext.Object,
                    json,
                    heartBeat.Object,
                    counters.Object,
                    appLifetime.Object,
                    loggerFactory.Object,
                    optionsAccessor.Object,
                    pool.Object);

                return transport;
            }