示例#1
0
        public virtual void testForNodeInsertion()
        {
            Channel ch = null;
            try
            {
                ch = new Channel("null", new Options(null),
                    null, null, LogEventArgs.LogLevel.LOW);
            }
            catch(YAMIIOException)
            {
                Assert.Fail("should never reach this point");
            }
            catch(SocketException)
            {
                Assert.Fail("should never reach this point");
            }

            Assert.IsTrue(ch.OutgoingFrames.Count == 0);

            // first node

            byte[] buf = new byte[123];
            List<byte[]> buffers = new List<byte[]>();
            buffers.Add(buf);

            ch.post(0, 0, buffers, 0, null);

            IList<OutgoingFrame> frames = ch.OutgoingFrames;
            Assert.IsTrue(frames.Count == 1);
            Assert.IsTrue(frames[0].payload.Length == 123);

            // second node, added after 1st

            buf = new byte[456];
            buffers.Clear();
            buffers.Add(buf);

            ch.post(1, 0, buffers, 0, null);

            frames = ch.OutgoingFrames;
            Assert.IsTrue(frames.Count == 2);
            Assert.IsTrue(frames[0].payload.Length == 123);
            Assert.IsTrue(frames[1].payload.Length == 456);

            // third node, at the end

            buf = new byte[789];
            buffers.Clear();
            buffers.Add(buf);

            ch.post(2, 0, buffers, 0, null);

            frames = ch.OutgoingFrames;
            Assert.IsTrue(frames.Count == 3);
            Assert.IsTrue(frames[0].payload.Length == 123);
            Assert.IsTrue(frames[1].payload.Length == 456);
            Assert.IsTrue(frames[2].payload.Length == 789);

            // three buffers inserted after first node

            buffers.Clear();
            buffers.Add(new byte[1]);
            buffers.Add(new byte[2]);
            buffers.Add(new byte[3]);

            ch.post(3, 3, buffers, 0, null);

            frames = ch.OutgoingFrames;
            Assert.IsTrue(frames.Count == 6);
            Assert.IsTrue(frames[0].payload.Length == 123);
            Assert.IsTrue(frames[1].payload.Length == 1);
            Assert.IsTrue(frames[2].payload.Length == 2);
            Assert.IsTrue(frames[3].payload.Length == 3);
            Assert.IsTrue(frames[4].payload.Length == 456);
            Assert.IsTrue(frames[5].payload.Length == 789);

            // two new nodes after the previous three

            buffers.Clear();
            buffers.Add(new byte[4]);
            buffers.Add(new byte[5]);

            ch.post(4, 1, buffers, 0, null);

            frames = ch.OutgoingFrames;
            Assert.IsTrue(frames.Count == 8);
            Assert.IsTrue(frames[0].payload.Length == 123);
            Assert.IsTrue(frames[1].payload.Length == 1);
            Assert.IsTrue(frames[2].payload.Length == 2);
            Assert.IsTrue(frames[3].payload.Length == 3);
            Assert.IsTrue(frames[4].payload.Length == 4);
            Assert.IsTrue(frames[5].payload.Length == 5);
            Assert.IsTrue(frames[6].payload.Length == 456);
            Assert.IsTrue(frames[7].payload.Length == 789);

            // poison pill added between 3 and 4

            bool closeMe = ch.postClose(2);
            Assert.IsFalse(closeMe);

            frames = ch.OutgoingFrames;
            Assert.AreEqual(5, frames.Count);
            Assert.IsTrue(frames[0].payload.Length == 123);
            Assert.IsTrue(frames[1].payload.Length == 1);
            Assert.IsTrue(frames[2].payload.Length == 2);
            Assert.IsTrue(frames[3].payload.Length == 3);
            Assert.IsTrue(frames[4].closeFlag);
        }
示例#2
0
        public virtual void testForImmediateClose()
        {
            Channel ch = null;
            try
            {
                ch = new Channel("null", new Options(null),
                    null, null, LogEventArgs.LogLevel.LOW);
            }
            catch(YAMIIOException)
            {
                Assert.Fail("should never reach this point");
            }
            catch(SocketException)
            {
                Assert.Fail("should never reach this point");
            }

            Assert.IsTrue(ch.OutgoingFrames.Count == 0);

            bool closeMe = ch.postClose(0);
            Assert.IsTrue(closeMe);
            Assert.IsTrue(ch.OutgoingFrames.Count == 0);
        }