public void IncorrectPortFailure() { Reset(); Random rand = new Random(DateTime.Now.Millisecond); int random = rand.Next() % 1000; Uri uri; Uri.TryCreate(Host + random, UriKind.Absolute, out uri); _session = new SMSession(uri, false, _options); AttachSessionEvents(_session); SMProtocol smProtocol = _session.Protocol; smProtocol.OnError += (s, e) => { _isError = true; _eventRaisedStream.Set(); }; _session.Open(); _eventRaisedSession.WaitOne(); Assert.IsTrue(_isError); }
/// <summary> /// Initializes a new instance of the <see cref="SMStream"/> class. /// </summary> /// <param name="id">The stream id.</param> /// <param name="session">The stream session.</param> public SMStream(int id, SMSession session) { this.StreamId = id; this.Session = session; this.Headers = new SMHeaders(); this.protocol = session.Protocol; this.protocol.OnStreamFrame += this.OnProtocolData; this.protocol.OnStreamError += this.OnStreamError; this.protocol.OnSessionFrame += this.OnSessionFrame; }
public void ConnectionOpenAndCheckControlFrameSuccessful() { Reset(); Uri uri; Uri.TryCreate(Host + Port, UriKind.Absolute, out uri); CreateSession(uri); AttachSessionEvents(_session); _eventRaisedSession.WaitOne(); _eventRaisedSession.Reset(); Check(CheckModes.session); SMProtocol smProtocol = _session.Protocol; AttachProtocolEvents(smProtocol); string fileName = FileName; bool isFin = true; SMStream stream = DownloadPath(fileName, isFin); _eventRaisedStream.WaitOne(); _eventRaisedStream.Reset(); Check(CheckModes.stream); if ((stream.State == SMStreamState.HalfClosed) ^ isFin) { Assert.Fail("Incorrect SMStreamState."); } AttachStreamEvents(stream); _eventRaisedStream.WaitOne(); _eventRaisedStream.Reset(); Check(CheckModes.fin); if ((stream.State == SMStreamState.Closed) ^ isFin) { Assert.Fail("Incorrect value Stream.State."); } _eventRaisedSmProtocol.WaitOne(); Assert.Pass(); }
/// <summary> /// Attached to events on protocol. /// </summary> /// <param name="smProtocol">Protocol.</param> private static void AttachProtocolEvents(SMProtocol smProtocol) { smProtocol.OnError += (s, e) => { _eventRaisedSmProtocol.Reset(); _isError = true; _eventRaisedSmProtocol.Set(); _eventRaisedStream.Set(); }; /* smProtocol.OnSessionFrame += (Object s, ControlFrameEventArgs e) => * { * eventRaisedSMProtocol.Reset(); * ControlFrame frame = e.Frame; * // isFinal and (State == HalfClose) MUST take the same values * if (frame.IsFinal ^ * (_session.GetStreamById(frame.StreamId).State == SMStreamState.HalfClosed)) * { * isError = true; * errorMessage = "Incorrect value Stream.State."; * * eventRaised.Set(); * } * eventRaisedSMProtocol.Set(); * };*/ smProtocol.OnStreamError += (s, e) => { _eventRaisedSmProtocol.Reset(); _isError = true; _errorMessage = "Internal stream error."; _eventRaisedSmProtocol.Set(); _eventRaisedStream.Set(); }; smProtocol.OnStreamFrame += (s, e) => { _eventRaisedSmProtocol.Reset(); if (e is HeadersEventArgs) { HeadersEventArgs headersEventArgs = e as HeadersEventArgs; if (headersEventArgs.Headers.Count == 0) { _isError = true; _errorMessage = "Incorrect value Frame.Headers.Count."; _eventRaisedStream.Set(); } } else if (e is StreamDataEventArgs) { StreamDataEventArgs streamDataEventArgs = e as StreamDataEventArgs; if (streamDataEventArgs.Data.Data.Length == 0) { _isError = true; _errorMessage = "Incorrect Data.Length."; _eventRaisedStream.Set(); } } else if (e is RSTEventArgs) { RSTEventArgs rstEventArgs = e as RSTEventArgs; if (rstEventArgs.Reason != StatusCode.Cancel) { _isError = true; _errorMessage = "Incorrect reason in RST frame."; _eventRaisedStream.Set(); } } _eventRaisedSmProtocol.Set(); }; }