package com.limegroup.gnutella.rudp.messages; import junit.framework.Test; import org.limewire.gnutella.tests.LimeTestUtils; import org.limewire.rudp.RUDPContext; import org.limewire.rudp.messages.AckMessage; import org.limewire.rudp.messages.DataMessage; import org.limewire.rudp.messages.FinMessage; import org.limewire.rudp.messages.KeepAliveMessage; import org.limewire.rudp.messages.RUDPMessage; import org.limewire.rudp.messages.RUDPMessageFactory; import org.limewire.rudp.messages.SynMessage; import org.limewire.rudp.messages.RUDPMessage.OpCode; import org.limewire.rudp.messages.SynMessage.Role; import org.limewire.rudp.messages.impl.DefaultMessageFactory; import org.limewire.util.BaseTestCase; import com.limegroup.gnutella.messages.Message; public class LimeRUDPMessageFactoryTest extends BaseTestCase { public LimeRUDPMessageFactoryTest(String name) { super(name); } public static Test suite() { return buildTestSuite(LimeRUDPMessageFactoryTest.class); } public static void main(String[] args) { junit.textui.TestRunner.run(suite()); } // TODO move this somewhere else, integration test public void testContextUsesCorrectFactoryAndDelegate() { RUDPMessageFactory f = LimeTestUtils.createInjectorNonEagerly().getInstance(RUDPContext.class).getMessageFactory(); assertEquals(LimeRUDPMessageFactory.class, f.getClass()); assertEquals(DefaultMessageFactory.class, ((LimeRUDPMessageFactory)f).getDelegate().getClass()); } public void testCreateLocalMessages() { LimeRUDPMessageFactory f = new LimeRUDPMessageFactory(new StubRUDPMessageFactory()); checkMessage(f.createAckMessage((byte)1, 1, 1, 1), LimeAckMessageImpl.class); checkMessage(f.createDataMessage((byte)1, 1, null), LimeDataMessageImpl.class); checkMessage(f.createFinMessage((byte)1, 1, (byte)1), LimeFinMessageImpl.class); checkMessage(f.createKeepAliveMessage((byte)1, 1, 1), LimeKeepAliveMessageImpl.class); checkMessage(f.createSynMessage((byte)1, Role.REQUESTOR), LimeSynMessageImpl.class); checkMessage(f.createSynMessage((byte)1, (byte)1, Role.ACCEPTOR), LimeSynMessageImpl.class); } public void testCreateNetworkMessages() throws Exception { StubRUDPMessageFactory s = new StubRUDPMessageFactory(); LimeRUDPMessageFactory f = new LimeRUDPMessageFactory(s); s.setNextMessageToCreate(OpCode.OP_ACK); checkMessage(f.createMessage(), LimeAckMessageImpl.class, AckMessage.class); s.setNextMessageToCreate(OpCode.OP_DATA); checkMessage(f.createMessage(), LimeDataMessageImpl.class, DataMessage.class); s.setNextMessageToCreate(OpCode.OP_FIN); checkMessage(f.createMessage(), LimeFinMessageImpl.class, FinMessage.class); s.setNextMessageToCreate(OpCode.OP_KEEPALIVE); checkMessage(f.createMessage(), LimeKeepAliveMessageImpl.class, KeepAliveMessage.class); s.setNextMessageToCreate(OpCode.OP_SYN); checkMessage(f.createMessage(), LimeSynMessageImpl.class, SynMessage.class); s.setNextMessageToCreate(null); try { f.createMessage(); fail("expected exception"); } catch(IllegalArgumentException iae) { assertEquals(StubRUDPMessage.class + " is unhandled", iae.getMessage()); } } private RUDPMessage checkMessage(RUDPMessage m, Class... clazz) { assertInstanceof(Message.class, m); assertInstanceof(AbstractLimeRUDPMessage.class, m); for(int i = 0; i < clazz.length; i++) assertInstanceof(clazz[i], m); return m; } }