Ejemplo n.º 1
0
        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;
 }
Ejemplo n.º 3
0
 /// <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;
 }
Ejemplo n.º 4
0
        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();
        }
Ejemplo n.º 5
0
        /// <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();
            };
        }