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); }
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 async void StartConnection() { if (_useHttp20 && !_socket.IsClosed && !_isDisposed) { await _clientSession.Start(); } else if (_socket.IsClosed || _isDisposed) { Http2Logger.LogError("Connection was aborted by the remote side. Check your session header."); Dispose(true); } }
private async void OpenHttp2Session(SecureSocket incomingClient, IDictionary <string, object> handshakeResult) { Http2Logger.LogDebug("Handshake successful"); _session = new Http2Session(incomingClient, ConnectionEnd.Server, _usePriorities, _useFlowControl, handshakeResult); _session.OnFrameReceived += FrameReceivedHandler; try { await _session.Start(); } catch (Exception) { Http2Logger.LogError("Client was disconnected"); } }
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); }
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); }