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); }
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); }