public void SerialPortStream_ReadTo_Overflow()
        {
            using (SerialPortStream src = new SerialPortStream(c_SourcePort, 115200, 8, Parity.None, StopBits.One))
                using (SerialPortStream dst = new SerialPortStream(c_DestPort, 115200, 8, Parity.None, StopBits.One)) {
                    src.WriteTimeout = c_Timeout; src.ReadTimeout = c_Timeout;
                    dst.WriteTimeout = c_Timeout; dst.ReadTimeout = c_Timeout;
                    src.Open(); Assert.IsTrue(src.IsOpen);
                    dst.Open(); Assert.IsTrue(dst.IsOpen);

                    // Send 2048 ASCII characters
                    Random r     = new Random();
                    byte[] sdata = new byte[2048];
                    for (int i = 0; i < sdata.Length; i++)
                    {
                        sdata[i] = (byte)r.Next(65, 65 + 26);
                    }

                    // Wait for the data to be received
                    src.Write(sdata, 0, sdata.Length);
                    src.Write("EOF");
                    while (dst.BytesToRead < sdata.Length)
                    {
                        System.Threading.Thread.Sleep(100);
                    }

                    string result = dst.ReadTo("EOF");
                    Assert.AreEqual(0, dst.BytesToRead);
                    Assert.AreEqual(1024 - 3, result.Length);
                    int offset = sdata.Length - result.Length;
                    for (int i = 0; i < result.Length; i++)
                    {
                        Assert.AreEqual((int)sdata[offset + i], (int)result[i]);
                    }
                }
        }
        public void ReadToOverflow()
        {
            using (SerialPortStream src = new SerialPortStream(SourcePort, 115200, 8, Parity.None, StopBits.One))
                using (SerialPortStream dst = new SerialPortStream(DestPort, 115200, 8, Parity.None, StopBits.One)) {
                    src.WriteTimeout = TimeOut; src.ReadTimeout = TimeOut;
                    dst.WriteTimeout = TimeOut; dst.ReadTimeout = TimeOut;
                    src.Open(); Assert.That(src.IsOpen, Is.True);
                    dst.Open(); Assert.That(dst.IsOpen, Is.True);

                    // Send 2048 ASCII characters
                    Random r     = new Random();
                    byte[] sdata = new byte[2048];
                    for (int i = 0; i < sdata.Length; i++)
                    {
                        sdata[i] = (byte)r.Next(65, 65 + 26);
                    }

                    // Wait for the data to be received
                    src.Write(sdata, 0, sdata.Length);
                    src.Write("EOF");
                    while (dst.BytesToRead < sdata.Length)
                    {
                        Thread.Sleep(100);
                    }

                    string result = dst.ReadTo("EOF");
                    Assert.That(dst.BytesToRead, Is.EqualTo(0));
                    Assert.That(result.Length, Is.EqualTo(1024 - 3));
                    int offset = sdata.Length - result.Length;
                    for (int i = 0; i < result.Length; i++)
                    {
                        Assert.That((int)result[i], Is.EqualTo(sdata[offset + i]));
                    }
                }
        }
Esempio n. 3
0
        public string Recv()
        {
            _stream.ReadTimeout = 1000;
            var resp = _stream.ReadTo("\r");

            if (resp.Length < 1)
            {
                throw new FormatException($"Response too short to be valid ({resp.Length} < 1).");
            }
            return(resp);
        }
        public void SerialPortStream_ReadTo_Cached()
        {
            using (SerialPortStream src = new SerialPortStream(c_SourcePort, 115200, 8, Parity.None, StopBits.One))
                using (SerialPortStream dst = new SerialPortStream(c_DestPort, 115200, 8, Parity.None, StopBits.One)) {
                    src.WriteTimeout = c_Timeout; src.ReadTimeout = c_Timeout;
                    dst.WriteTimeout = c_Timeout; dst.ReadTimeout = c_Timeout;
                    src.Open(); Assert.IsTrue(src.IsOpen);
                    dst.Open(); Assert.IsTrue(dst.IsOpen);

                    bool   err = false;
                    string s;

                    src.Write("foobar");
                    try {
                        s = dst.ReadTo("baz");
                    } catch (System.Exception e) {
                        if (e is TimeoutException)
                        {
                            err = true;
                        }
                    }
                    Assert.IsTrue(err, "No timeout exception occurred when reading 'baz'");

                    s = dst.ReadTo("foo");
                    Assert.AreEqual("", s);

                    s = dst.ReadTo("bar");
                    Assert.AreEqual("", s);

                    try {
                        s = dst.ReadTo("baz");
                    } catch (System.Exception e) {
                        if (e is TimeoutException)
                        {
                            err = true;
                        }
                    }
                    Assert.IsTrue(err, "No timeout exception occurred when reading 'baz' when empty");
                }
        }
        public void ReadToCached()
        {
            using (SerialPortStream src = new SerialPortStream(SourcePort, 115200, 8, Parity.None, StopBits.One))
                using (SerialPortStream dst = new SerialPortStream(DestPort, 115200, 8, Parity.None, StopBits.One)) {
                    src.WriteTimeout = TimeOut; src.ReadTimeout = TimeOut;
                    dst.WriteTimeout = TimeOut; dst.ReadTimeout = TimeOut;
                    src.Open(); Assert.That(src.IsOpen, Is.True);
                    dst.Open(); Assert.That(dst.IsOpen, Is.True);

                    string s;

                    src.Write("foobar");
                    Assert.Throws <TimeoutException>(() => { s = dst.ReadTo("baz"); }, "No timeout exception occurred when reading 'baz'");

                    s = dst.ReadTo("foo");
                    Assert.That(s, Is.EqualTo(""));

                    s = dst.ReadTo("bar");
                    Assert.That(s, Is.EqualTo(""));

                    Assert.Throws <TimeoutException>(() => { s = dst.ReadTo("baz"); }, "No timeout exception occurred when reading 'baz' when empty");
                }
        }
        public void SerialPortStream_ReadTo_Normal()
        {
            using (SerialPortStream src = new SerialPortStream(c_SourcePort, 115200, 8, Parity.None, StopBits.One))
                using (SerialPortStream dst = new SerialPortStream(c_DestPort, 115200, 8, Parity.None, StopBits.One)) {
                    src.WriteTimeout = c_Timeout; src.ReadTimeout = c_Timeout;
                    dst.WriteTimeout = c_Timeout; dst.ReadTimeout = c_Timeout;
                    src.Open(); Assert.IsTrue(src.IsOpen);
                    dst.Open(); Assert.IsTrue(dst.IsOpen);

                    string s;

                    src.Write("superfoobar");
                    s = dst.ReadTo("foo");
                    Assert.AreEqual("super", s);

                    s = dst.ReadExisting();
                    Assert.AreEqual("bar", s);
                }
        }
        public void ReadToNormal()
        {
            using (SerialPortStream src = new SerialPortStream(SourcePort, 115200, 8, Parity.None, StopBits.One))
                using (SerialPortStream dst = new SerialPortStream(DestPort, 115200, 8, Parity.None, StopBits.One)) {
                    src.WriteTimeout = TimeOut; src.ReadTimeout = TimeOut;
                    dst.WriteTimeout = TimeOut; dst.ReadTimeout = TimeOut;
                    src.Open(); Assert.That(src.IsOpen, Is.True);
                    dst.Open(); Assert.That(dst.IsOpen, Is.True);

                    string s;

                    src.Write("superfoobar");
                    s = dst.ReadTo("foo");
                    Assert.That(s, Is.EqualTo("super"));

                    // Sleep for 100ms to allow all data to be sent and received. Else we might not receive the
                    // entire string, and sometimes only get it partially.
                    Thread.Sleep(100);
                    s = dst.ReadExisting();
                    Assert.That(s, Is.EqualTo("bar"));
                }
        }
        public void SerialPortStream_ReadTo_Overflow()
        {
            using (SerialPortStream src = new SerialPortStream(c_SourcePort, 115200, 8, Parity.None, StopBits.One))
            using (SerialPortStream dst = new SerialPortStream(c_DestPort, 115200, 8, Parity.None, StopBits.One)) {
                src.WriteTimeout = c_Timeout; src.ReadTimeout = c_Timeout;
                dst.WriteTimeout = c_Timeout; dst.ReadTimeout = c_Timeout;
                src.Open(); Assert.IsTrue(src.IsOpen);
                dst.Open(); Assert.IsTrue(dst.IsOpen);

                // Send 2048 ASCII characters
                Random r = new Random();
                byte[] sdata = new byte[2048];
                for (int i = 0; i < sdata.Length; i++) {
                    sdata[i] = (byte)r.Next(65, 65 + 26);
                }

                // Wait for the data to be received
                src.Write(sdata, 0, sdata.Length);
                src.Write("EOF");
                while (dst.BytesToRead < sdata.Length) {
                    System.Threading.Thread.Sleep(100);
                }

                string result = dst.ReadTo("EOF");
                Assert.AreEqual(0, dst.BytesToRead);
                Assert.AreEqual(1024 - 3, result.Length);
                int offset = sdata.Length - result.Length;
                for (int i = 0; i < result.Length; i++) {
                    Assert.AreEqual((int)sdata[offset + i], (int)result[i]);
                }
            }
        }
        public void SerialPortStream_ReadTo_Normal()
        {
            using (SerialPortStream src = new SerialPortStream(c_SourcePort, 115200, 8, Parity.None, StopBits.One))
            using (SerialPortStream dst = new SerialPortStream(c_DestPort, 115200, 8, Parity.None, StopBits.One)) {
                src.WriteTimeout = c_Timeout; src.ReadTimeout = c_Timeout;
                dst.WriteTimeout = c_Timeout; dst.ReadTimeout = c_Timeout;
                src.Open(); Assert.IsTrue(src.IsOpen);
                dst.Open(); Assert.IsTrue(dst.IsOpen);

                string s;

                src.Write("superfoobar");
                s = dst.ReadTo("foo");
                Assert.AreEqual("super", s);

                s = dst.ReadExisting();
                Assert.AreEqual("bar", s);
            }
        }
        public void SerialPortStream_ReadTo_Cached()
        {
            using (SerialPortStream src = new SerialPortStream(c_SourcePort, 115200, 8, Parity.None, StopBits.One))
            using (SerialPortStream dst = new SerialPortStream(c_DestPort, 115200, 8, Parity.None, StopBits.One)) {
                src.WriteTimeout = c_Timeout; src.ReadTimeout = c_Timeout;
                dst.WriteTimeout = c_Timeout; dst.ReadTimeout = c_Timeout;
                src.Open(); Assert.IsTrue(src.IsOpen);
                dst.Open(); Assert.IsTrue(dst.IsOpen);

                bool err = false;
                string s;

                src.Write("foobar");
                try {
                    s = dst.ReadTo("baz");
                } catch (System.Exception e) {
                    if (e is TimeoutException) err = true;
                }
                Assert.IsTrue(err, "No timeout exception occurred when reading 'baz'");

                s = dst.ReadTo("foo");
                Assert.AreEqual("", s);

                s = dst.ReadTo("bar");
                Assert.AreEqual("", s);

                try {
                    s = dst.ReadTo("baz");
                } catch (System.Exception e) {
                    if (e is TimeoutException) err = true;
                }
                Assert.IsTrue(err, "No timeout exception occurred when reading 'baz' when empty");
            }
        }