示例#1
0
        public void StartAndSuddenlyCloseSessionSuccessful()
        {
            string requestStr = GetAddress() + ConfigurationManager.AppSettings["smallTestFile"];
            Uri    uri;

            Uri.TryCreate(requestStr, UriKind.Absolute, out uri);

            bool gotException = false;

            var socketClosedRaisedEvent = new ManualResetEvent(false);
            var socket = GetHandshakedSocket(uri);

            socket.OnClose += (sender, args) => socketClosedRaisedEvent.Set();

            try
            {
                var session = new Http2Session(socket, ConnectionEnd.Client, true, true, _handshakeResult);
                session.Start();
                session.Dispose();
            }
            catch (Exception)
            {
                gotException = true;
            }

            Assert.Equal(gotException, false);
        }
示例#2
0
        public void StartMultipleStreamsInOneSessionSuccessful(bool usePriorities, bool useFlowControl)
        {
            string requestStr = GetAddress() + ConfigurationManager.AppSettings["smallTestFile"];
            Uri    uri;

            Uri.TryCreate(requestStr, UriKind.Absolute, out uri);
            int finalFramesCounter = 0;

            const int streamsQuantity = 100;

            bool wasAllResourcesDownloaded = false;
            bool wasSocketClosed           = false;

            var allResourcesDowloadedRaisedEvent = new ManualResetEvent(false);
            var socketClosedRaisedEvent          = new ManualResetEvent(false);

            var socket = GetHandshakedSocket(uri);

            socket.OnClose += (sender, args) =>
            {
                wasSocketClosed = true;
                socketClosedRaisedEvent.Set();
            };

            var session = new Http2Session(socket, ConnectionEnd.Client, usePriorities, useFlowControl, _handshakeResult);

            session.OnFrameReceived += (sender, args) =>
            {
                if (args.Frame is IEndStreamFrame && ((IEndStreamFrame)args.Frame).IsEndStream)
                {
                    finalFramesCounter++;
                    if (finalFramesCounter == streamsQuantity)
                    {
                        allResourcesDowloadedRaisedEvent.Set();
                        wasAllResourcesDownloaded = true;
                    }
                }
            };

            session.Start();

            for (int i = 0; i < streamsQuantity; i++)
            {
                SubmitRequest(session, uri);
            }

            allResourcesDowloadedRaisedEvent.WaitOne(120000);

            Assert.Equal(session.ActiveStreams.Count, streamsQuantity);

            session.Dispose();

            socketClosedRaisedEvent.WaitOne(60000);

            Assert.Equal(wasAllResourcesDownloaded, true);
            Assert.Equal(wasSocketClosed, true);
        }
        public void Dispose()
        {
            if (_session != null)
            {
                _session.Dispose();
            }

            _fileHelper.Dispose();
        }
示例#4
0
        public void StartSessionAndGet10MbDataSuccessful()
        {
            string requestStr = GetAddress() + ConfigurationManager.AppSettings["10mbTestFile"];
            Uri    uri;

            Uri.TryCreate(requestStr, UriKind.Absolute, out uri);

            bool wasSocketClosed       = false;
            bool wasFinalFrameReceived = false;

            var socketClosedRaisedEvent       = new ManualResetEvent(false);
            var finalFrameReceivedRaisedEvent = new ManualResetEvent(false);

            var socket = GetHandshakedSocket(uri);

            socket.OnClose += (sender, args) =>
            {
                socketClosedRaisedEvent.Set();
                wasSocketClosed = true;
            };

            var session = new Http2Session(socket, ConnectionEnd.Client, true, true, _handshakeResult);

            session.OnFrameReceived += (sender, args) =>
            {
                if (args.Frame is IEndStreamFrame && ((IEndStreamFrame)args.Frame).IsEndStream)
                {
                    finalFrameReceivedRaisedEvent.Set();
                    wasFinalFrameReceived = true;
                }
            };

            session.Start();

            SubmitRequest(session, uri);

            finalFrameReceivedRaisedEvent.WaitOne(60000);

            session.Dispose();

            socketClosedRaisedEvent.WaitOne(60000);

            Assert.Equal(wasFinalFrameReceived, true);
            Assert.Equal(wasSocketClosed, true);
        }
示例#5
0
        public void Dispose()
        {
            if (_isDisposed)
            {
                return;
            }

            if (_clientSession != null)
            {
                _clientSession.Dispose();
            }
            if (_socket != null && !_socket.IsClosed)
            {
                _socket.Close();
            }
            if (_fileHelper != null)
            {
                _fileHelper.Dispose();
            }

            _isDisposed = true;
        }
示例#6
0
        public void StartSessionAndSendRequestSuccessful()
        {
            string requestStr = GetAddress() + ConfigurationManager.AppSettings["smallTestFile"];
            Uri    uri;

            Uri.TryCreate(requestStr, UriKind.Absolute, out uri);

            bool wasSettingsSent = false;
            bool wasHeadersSent  = false;
            bool wasSocketClosed = false;

            var settingsSentRaisedEventArgs   = new ManualResetEvent(false);
            var headersPlusPriSentRaisedEvent = new ManualResetEvent(false);
            var socketClosedRaisedEvent       = new ManualResetEvent(false);

            var socket = GetHandshakedSocket(uri);

            socket.OnClose += (sender, args) =>
            {
                socketClosedRaisedEvent.Set();
                wasSocketClosed = true;
            };

            var session = new Http2Session(socket, ConnectionEnd.Client, true, true, _handshakeResult);

            session.OnSettingsSent += (o, args) =>
            {
                wasSettingsSent = true;

                Assert.Equal(args.SettingsFrame.StreamId, 0);

                settingsSentRaisedEventArgs.Set();
            };

            session.OnFrameSent += (sender, args) =>
            {
                if (wasHeadersSent == false)
                {
                    wasHeadersSent = args.Frame is HeadersFrame;

                    headersPlusPriSentRaisedEvent.Set();
                }
            };

            session.Start();

            settingsSentRaisedEventArgs.WaitOne(60000);

            var stream = SubmitRequest(session, uri);

            headersPlusPriSentRaisedEvent.WaitOne(60000);

            //Settings frame does not contain flow control settings in this test.
            Assert.Equal(session.ActiveStreams.Count, 1);
            Assert.Equal(session.ActiveStreams.FlowControlledStreams.Count, 1);
            Assert.Equal(stream.IsFlowControlBlocked, false);
            Assert.Equal(stream.Id, 1);
            Assert.Equal(stream.IsFlowControlEnabled, true);
            Assert.Equal(stream.EndStreamSent, false);
            Assert.Equal(stream.Disposed, false);
            Assert.Equal(wasHeadersSent, true);
            Assert.Equal(wasSettingsSent, true);

            headersPlusPriSentRaisedEvent.Dispose();
            settingsSentRaisedEventArgs.Dispose();
            session.Dispose();

            socketClosedRaisedEvent.WaitOne(60000);

            Assert.Equal(wasSocketClosed, true);
        }