public async Task StartCreatesAndOpensWebSocket()
        {
            var fakeWebSocketTransport = new FakeWebSocketTransport();

            fakeWebSocketTransport.Setup("OpenWebSocket", () =>
            {
                var tcs = new TaskCompletionSource<object>();
                tcs.TrySetResult(null);
                return tcs.Task;
            });

            var fakeConnection = new FakeConnection
            {
                TransportConnectTimeout = new TimeSpan(0, 0, 0, 0, 100),
                TotalTransportConnectTimeout = new TimeSpan(0, 0, 0, 0, 100),
                Url = "http://fake.url",
                Protocol = new Version(1, 42),
                ConnectionToken = "MyConnToken",
                MessageId = "MsgId"
            };

            // connect timeout unblocks this call hence the expected exception
            await Assert.ThrowsAsync<TimeoutException>(
                async () => await fakeWebSocketTransport.Start(fakeConnection, "test", CancellationToken.None));

            Assert.Equal(1, fakeConnection.GetInvocations("Trace").Count());
            Assert.Equal(1, fakeConnection.GetInvocations("PrepareRequest").Count());

            var openWebSocketInvocations = fakeWebSocketTransport.GetInvocations("OpenWebSocket").ToArray();
            Assert.Equal(1, openWebSocketInvocations.Length);
            Assert.StartsWith(
                "ws://fake.urlconnect/?clientProtocol=1.42&transport=webSockets&connectionData=test&connectionToken=MyConnToken&messageId=MsgId",
                ((Uri)openWebSocketInvocations[0][1]).AbsoluteUri);
        }
Esempio n. 2
0
        public async Task StartCreatesAndOpensWebSocket()
        {
            var fakeWebSocketTransport = new FakeWebSocketTransport();

            fakeWebSocketTransport.Setup("OpenWebSocket", () =>
            {
                var tcs = new TaskCompletionSource <object>();
                tcs.TrySetResult(null);
                return(tcs.Task);
            });

            var fakeConnection = new FakeConnection
            {
                TransportConnectTimeout      = new TimeSpan(0, 0, 0, 0, 100),
                TotalTransportConnectTimeout = new TimeSpan(0, 0, 0, 0, 100),
                Url             = "http://fake.url",
                Protocol        = new Version(1, 42),
                ConnectionToken = "MyConnToken",
                MessageId       = "MsgId"
            };

            // connect timeout unblocks this call hence the expected exception
            await Assert.ThrowsAsync <TimeoutException>(
                async() => await fakeWebSocketTransport.Start(fakeConnection, "test", CancellationToken.None));

            Assert.Equal(1, fakeConnection.GetInvocations("Trace").Count());
            Assert.Equal(1, fakeConnection.GetInvocations("PrepareRequest").Count());

            var openWebSocketInvocations = fakeWebSocketTransport.GetInvocations("OpenWebSocket").ToArray();

            Assert.Equal(1, openWebSocketInvocations.Length);
            Assert.StartsWith(
                "ws://fake.urlconnect/?clientProtocol=1.42&transport=webSockets&connectionData=test&connectionToken=MyConnToken&messageId=MsgId&noCache=",
                ((Uri)openWebSocketInvocations[0][1]).AbsoluteUri);
        }
Esempio n. 3
0
        public async Task InCaseOfExceptionStartInvokesOnFailureAndThrowsOriginalException()
        {
            var fakeConnection = new FakeConnection {
                TotalTransportConnectTimeout = new TimeSpan(0, 0, 10)
            };
            var fakeWebSocketTransport = new FakeWebSocketTransport();

            var expectedException = new Exception("OpenWebSocket failed.");

            fakeWebSocketTransport.Setup <Task>("OpenWebSocket", () =>
            {
                throw expectedException;
            });

            Assert.Same(expectedException,
                        await Assert.ThrowsAsync <Exception>(
                            async() => await fakeWebSocketTransport.Start(fakeConnection, null, CancellationToken.None)));

            Assert.Equal(1, fakeWebSocketTransport.GetInvocations("OnStartFailed").Count());
        }
Esempio n. 4
0
        public async Task ReconnectDoesNotStartNewWebSocketIfDisconnectTokenTripped()
        {
            var fakeConnection = new FakeConnection
            {
                LastActiveAt    = DateTime.UtcNow,
                ReconnectWindow = new TimeSpan(0, 0, 15),
                Url             = "http://fakeserver/",
                State           = ConnectionState.Reconnecting
            };

            var fakeWebSocketTransport = new FakeWebSocketTransport();

            // this is called just to initialize the disconnect token
            var _ = fakeWebSocketTransport.Start(new FakeConnection(), string.Empty, new CancellationToken(true));

            await fakeWebSocketTransport.Reconnect(fakeConnection, null);

            Assert.Equal(0, fakeWebSocketTransport.GetInvocations("OpenWebSocket").Count());
            Assert.Equal(0, fakeConnection.GetInvocations("Stop").Count());
        }
Esempio n. 5
0
        public async Task StartInvokesOnFailureAndThrowsIfOpenWebSocketCancelled()
        {
            var fakeConnection = new FakeConnection {
                TotalTransportConnectTimeout = new TimeSpan(0, 0, 10)
            };
            var fakeWebSocketTransport = new FakeWebSocketTransport();

            fakeWebSocketTransport.Setup <Task>("OpenWebSocket", () =>
            {
                var tcs = new TaskCompletionSource <object>();
                tcs.SetCanceled();
                return(tcs.Task);
            });

            Assert.Equal(
                ResourceUtil.GetResource("Error_TransportFailedToConnect"),
                (await Assert.ThrowsAsync <InvalidOperationException>(
                     async() => await fakeWebSocketTransport.Start(fakeConnection, null, CancellationToken.None))).Message);

            Assert.Equal(1, fakeWebSocketTransport.GetInvocations("OnStartFailed").Count());
        }
        public async Task InCaseOfExceptionStartInvokesOnFailureAndThrowsOriginalException()
        {
            var fakeConnection = new FakeConnection { TotalTransportConnectTimeout = new TimeSpan(0, 0, 10)};
            var fakeWebSocketTransport = new FakeWebSocketTransport();  

            var expectedException = new Exception("OpenWebSocket failed.");
            fakeWebSocketTransport.Setup<Task>("OpenWebSocket", () =>
            {
                throw expectedException;
            });

            Assert.Same(expectedException,
                await Assert.ThrowsAsync<Exception>(
                    async () => await fakeWebSocketTransport.Start(fakeConnection, null, CancellationToken.None)));

            Assert.Equal(1, fakeWebSocketTransport.GetInvocations("OnStartFailed").Count());
        }
        public async Task ReconnectDoesNotStartNewWebSocketIfDisconnectTokenTripped()
        {
            var fakeConnection = new FakeConnection
            {
                LastActiveAt = DateTime.UtcNow,
                ReconnectWindow = new TimeSpan(0, 0, 15),
                Url = "http://fakeserver/",
                State = ConnectionState.Reconnecting
            };

            var fakeWebSocketTransport = new FakeWebSocketTransport();

            // this is called just to initialize the disconnect token
            var _ = fakeWebSocketTransport.Start(new FakeConnection(), string.Empty, new CancellationToken(true));

            await fakeWebSocketTransport.Reconnect(fakeConnection, null);

            Assert.Equal(0, fakeWebSocketTransport.GetInvocations("OpenWebSocket").Count());
            Assert.Equal(0, fakeConnection.GetInvocations("Stop").Count());
        }
        public async Task StartInvokesOnFailureAndThrowsIfOpenWebSocketCancelled()
        {
            var fakeConnection = new FakeConnection { TotalTransportConnectTimeout = new TimeSpan(0, 0, 10) };
            var fakeWebSocketTransport = new FakeWebSocketTransport();

            fakeWebSocketTransport.Setup<Task>("OpenWebSocket", () =>
            {
                var tcs = new TaskCompletionSource<object>();
                tcs.SetCanceled();
                return tcs.Task;
            });

            Assert.Equal(
                ResourceUtil.GetResource("Error_TransportFailedToConnect"),
                (await Assert.ThrowsAsync<InvalidOperationException>(
                    async () => await fakeWebSocketTransport.Start(fakeConnection, null, CancellationToken.None))).Message);

            Assert.Equal(1, fakeWebSocketTransport.GetInvocations("OnStartFailed").Count());
        }