package freenet.node; import junit.framework.TestCase; public class MessageWrapperTest extends TestCase { public void testGetFragment() { MessageItem item = new MessageItem(new byte[1024], null, false, null, (short) 0, false, false); MessageWrapper wrapper = new MessageWrapper(item, 0); MessageFragment frag = wrapper.getMessageFragment(128); assertNotNull(frag); assertTrue(frag.firstFragment); assertEquals(0, frag.fragmentOffset); assertTrue(frag.fragmentLength == 121); assertTrue(frag.isFragmented); assertEquals(0, frag.messageID); assertEquals(1024, frag.messageLength); assertFalse(frag.shortMessage); assertSame(wrapper, frag.wrapper); frag = wrapper.getMessageFragment(128); assertNotNull(frag); assertFalse(frag.firstFragment); assertEquals(121, frag.fragmentOffset); assertEquals(121, frag.fragmentLength); assertTrue(frag.isFragmented); assertEquals(0, frag.messageID); assertEquals(1024, frag.messageLength); assertFalse(frag.shortMessage); assertSame(wrapper, frag.wrapper); // All the fragments in between should be the same as the above, so // we just get a big one to skip to the end frag = wrapper.getMessageFragment(782); assertNotNull(frag); assertEquals(775, frag.fragmentLength); assertEquals(242, frag.fragmentOffset); frag = wrapper.getMessageFragment(128); assertNotNull(frag); assertFalse(frag.firstFragment); assertEquals(1017, frag.fragmentOffset); assertEquals(7, frag.fragmentLength); assertTrue(frag.isFragmented); assertEquals(0, frag.messageID); assertEquals(1024, frag.messageLength); assertFalse(frag.shortMessage); assertSame(wrapper, frag.wrapper); } public void testGetFragmentWithLoss() { MessageItem item = new MessageItem(new byte[363], null, false, null, (short) 0, false, false); MessageWrapper wrapper = new MessageWrapper(item, 0); MessageFragment frag1 = wrapper.getMessageFragment(128); assertNotNull(frag1); assertTrue(frag1.firstFragment); assertEquals(0, frag1.fragmentOffset); assertTrue(frag1.fragmentLength == 121); assertTrue(frag1.isFragmented); assertEquals(0, frag1.messageID); assertEquals(363, frag1.messageLength); assertFalse(frag1.shortMessage); assertSame(wrapper, frag1.wrapper); MessageFragment frag2 = wrapper.getMessageFragment(128); assertNotNull(frag2); assertFalse(frag2.firstFragment); assertEquals(121, frag2.fragmentOffset); assertTrue(frag2.fragmentLength == 121); assertTrue(frag2.isFragmented); assertEquals(0, frag2.messageID); assertEquals(363, frag2.messageLength); assertFalse(frag2.shortMessage); assertSame(wrapper, frag2.wrapper); MessageFragment frag3 = wrapper.getMessageFragment(128); assertNotNull(frag3); assertFalse(frag3.firstFragment); assertEquals(242, frag3.fragmentOffset); assertTrue(frag3.fragmentLength == 121); assertTrue(frag3.isFragmented); assertEquals(0, frag3.messageID); assertEquals(363, frag3.messageLength); assertFalse(frag3.shortMessage); assertSame(wrapper, frag3.wrapper); wrapper.ack(0, 120); // frag1 wrapper.ack(242, 262); // frag3 wrapper.lost(121, 241); // frag 2 MessageFragment frag = wrapper.getMessageFragment(128); assertNotNull(frag); assertFalse(frag.firstFragment); assertEquals(121, frag.fragmentOffset); assertEquals(121, frag.fragmentLength); assertTrue(frag.isFragmented); assertEquals(0, frag.messageID); assertEquals(363, frag.messageLength); assertFalse(frag.shortMessage); assertSame(wrapper, frag.wrapper); } public void testLost() { MessageItem item = new MessageItem(new byte[363], null, false, null, (short) 0, false, false); MessageWrapper wrapper = new MessageWrapper(item, 0); MessageFragment frag = wrapper.getMessageFragment(128); assertNotNull(frag); assertEquals(121, frag.fragmentLength); wrapper.ack(frag.fragmentOffset, frag.fragmentOffset + frag.fragmentLength - 1); frag = wrapper.getMessageFragment(128); assertNotNull(frag); assertEquals(121, frag.fragmentLength); assertEquals(121, wrapper.lost(frag.fragmentOffset, frag.fragmentOffset + frag.fragmentLength - 1)); // 0->120 should still be sent and acked, 121->241 should not for(int[] range : wrapper.getSent()) { if(range[0] >= 121 || range[1] >= 121) { fail("Expected 0->120, but got " + wrapper.getSent()); } } for(int[] range : wrapper.getAcks()) { if(range[0] >= 121 || range[1] >= 121) { fail("Expected 0->120, but got " + wrapper.getSent()); } } } }