/components/gnutella-core/src/test/java/com/limegroup/gnutella/messages/vendor/MessagesSupportedVendorMessageTest.java

https://github.com/r3n/limewire5-ruby · Java · 203 lines · 169 code · 26 blank · 8 comment · 0 complexity · dc16c4194eba33a472f7357bfcb41ec6 MD5 · raw file

  1. package com.limegroup.gnutella.messages.vendor;
  2. import java.io.ByteArrayInputStream;
  3. import java.io.ByteArrayOutputStream;
  4. import junit.framework.Test;
  5. import org.limewire.gnutella.tests.LimeTestUtils;
  6. import org.limewire.io.GUID;
  7. import org.limewire.util.ByteUtils;
  8. import org.limewire.util.StringUtils;
  9. import com.google.inject.Injector;
  10. import com.limegroup.gnutella.messages.BadPacketException;
  11. import com.limegroup.gnutella.messages.MessageFactory;
  12. import com.limegroup.gnutella.messages.Message.Network;
  13. /** Tests the important MessagesSupportedVendorMessage.
  14. */
  15. public class MessagesSupportedVendorMessageTest extends org.limewire.gnutella.tests.LimeTestCase {
  16. private MessagesSupportedVendorMessage messagesSupportedVendorMessage;
  17. private MessageFactory messageFactory;
  18. public MessagesSupportedVendorMessageTest(String name) {
  19. super(name);
  20. }
  21. public static Test suite() {
  22. return buildTestSuite(MessagesSupportedVendorMessageTest.class);
  23. }
  24. public static void main(String[] args) {
  25. junit.textui.TestRunner.run(suite());
  26. }
  27. @Override
  28. protected void setUp() throws Exception {
  29. Injector injector = LimeTestUtils.createInjector();
  30. messagesSupportedVendorMessage = injector.getInstance(MessagesSupportedVendorMessage.class);
  31. messageFactory = injector.getInstance(MessageFactory.class);
  32. }
  33. public void testStaticConstructor() throws Exception {
  34. MessagesSupportedVendorMessage vmp =
  35. messagesSupportedVendorMessage;
  36. assertGreaterThan(0, vmp.supportsTCPConnectBack());
  37. assertGreaterThan(0, vmp.supportsUDPConnectBack());
  38. assertGreaterThan(0, vmp.supportsTCPConnectBackRedirect());
  39. assertGreaterThan(0, vmp.supportsUDPConnectBackRedirect());
  40. assertGreaterThan(0, vmp.supportsHopsFlow());
  41. assertGreaterThan(0, vmp.supportsPushProxy());
  42. assertGreaterThan(0, vmp.supportsLeafGuidance());
  43. assertGreaterThan(0, vmp.supportsMessage(StringUtils.toAsciiBytes("BEAR"),7));
  44. assertGreaterThan(0, vmp.supportsMessage(StringUtils.toAsciiBytes("BEAR"),4));
  45. assertGreaterThan(0, vmp.supportsMessage(StringUtils.toAsciiBytes("GTKG"),7));
  46. assertGreaterThan(0, vmp.supportsMessage(StringUtils.toAsciiBytes("BEAR"),11));
  47. assertGreaterThan(0, vmp.supportsMessage(StringUtils.toAsciiBytes("LIME"),21));
  48. assertGreaterThan(0, vmp.supportsMessage(StringUtils.toAsciiBytes("LIME"),7));
  49. assertGreaterThan(0, vmp.supportsMessage(StringUtils.toAsciiBytes("LIME"),8));
  50. assertGreaterThan(0, vmp.supportsMessage(StringUtils.toAsciiBytes("LIME"),30));
  51. ByteArrayOutputStream baos = new ByteArrayOutputStream();
  52. vmp.write(baos);
  53. ByteArrayInputStream bais =
  54. new ByteArrayInputStream(baos.toByteArray());
  55. MessagesSupportedVendorMessage vmpRead =
  56. (MessagesSupportedVendorMessage) messageFactory.read(bais, Network.TCP);
  57. assertEquals(vmp, vmpRead);
  58. assertGreaterThan(0, vmpRead.supportsTCPConnectBack());
  59. assertGreaterThan(0, vmpRead.supportsUDPConnectBack());
  60. assertGreaterThan(0, vmpRead.supportsTCPConnectBackRedirect());
  61. assertGreaterThan(0, vmpRead.supportsUDPConnectBackRedirect());
  62. assertGreaterThan(0, vmpRead.supportsHopsFlow());
  63. assertGreaterThan(0, vmp.supportsPushProxy());
  64. assertGreaterThan(0, vmp.supportsLeafGuidance());
  65. assertGreaterThan(0, vmp.supportsMessage(StringUtils.toAsciiBytes("BEAR"),7));
  66. assertGreaterThan(0, vmp.supportsMessage(StringUtils.toAsciiBytes("BEAR"),4));
  67. assertGreaterThan(0, vmp.supportsMessage(StringUtils.toAsciiBytes("GTKG"),7));
  68. assertGreaterThan(0, vmp.supportsMessage(StringUtils.toAsciiBytes("BEAR"),11));
  69. assertGreaterThan(0, vmp.supportsMessage(StringUtils.toAsciiBytes("LIME"),21));
  70. assertGreaterThan(0, vmp.supportsMessage(StringUtils.toAsciiBytes("LIME"),7));
  71. assertGreaterThan(0, vmp.supportsMessage(StringUtils.toAsciiBytes("LIME"),8));
  72. assertGreaterThan(0, vmp.supportsMessage(StringUtils.toAsciiBytes("LIME"),30));
  73. }
  74. public void testNetworkConstructor() throws Exception {
  75. MessagesSupportedVendorMessage.SupportedMessageBlock smp1 =
  76. new MessagesSupportedVendorMessage.SupportedMessageBlock(StringUtils.toAsciiBytes("SUSH"),
  77. 10, 10);
  78. MessagesSupportedVendorMessage.SupportedMessageBlock smp2 =
  79. new MessagesSupportedVendorMessage.SupportedMessageBlock(StringUtils.toAsciiBytes("NEIL"),
  80. 5, 5);
  81. MessagesSupportedVendorMessage.SupportedMessageBlock smp3 =
  82. new MessagesSupportedVendorMessage.SupportedMessageBlock(StringUtils.toAsciiBytes("DAWG"),
  83. 3, 3);
  84. ByteArrayOutputStream baos = new ByteArrayOutputStream();
  85. byte[] guid = GUID.makeGuid();
  86. byte ttl = 1, hops = 0;
  87. ByteUtils.short2leb((short)4, baos);
  88. smp1.encode(baos);
  89. smp2.encode(baos);
  90. smp3.encode(baos);
  91. smp3.encode(baos);
  92. VendorMessage vm = new MessagesSupportedVendorMessage(guid, ttl,
  93. hops, 0,
  94. baos.toByteArray(), Network.UNKNOWN);
  95. baos = new ByteArrayOutputStream();
  96. vm.write(baos);
  97. ByteArrayInputStream bais =
  98. new ByteArrayInputStream(baos.toByteArray());
  99. MessagesSupportedVendorMessage vmp =
  100. (MessagesSupportedVendorMessage) messageFactory.read(bais, Network.TCP);
  101. // make sure it supports everything we expect....
  102. assertEquals(10, vmp.supportsMessage(StringUtils.toAsciiBytes("SUSH"), 10));
  103. assertEquals(5, vmp.supportsMessage(StringUtils.toAsciiBytes("NEIL"), 5));
  104. assertEquals(3, vmp.supportsMessage(StringUtils.toAsciiBytes("DAWG"), 3));
  105. assertEquals(-1, vmp.supportsTCPConnectBack());
  106. assertEquals(-1, vmp.supportsUDPConnectBack());
  107. assertEquals(-1, vmp.supportsHopsFlow());
  108. // now creat another one, mix up the blocks that are supported, and
  109. // make sure they are equal....
  110. baos = new ByteArrayOutputStream();
  111. ByteUtils.short2leb((short)3, baos);
  112. smp2.encode(baos);
  113. smp3.encode(baos);
  114. smp1.encode(baos);
  115. MessagesSupportedVendorMessage vmpOther =
  116. new MessagesSupportedVendorMessage(guid, ttl, hops, 0,
  117. baos.toByteArray(), Network.UNKNOWN);
  118. assertEquals(vmp, vmpOther);
  119. }
  120. public void testBadCases() throws Exception {
  121. MessagesSupportedVendorMessage.SupportedMessageBlock smp1 =
  122. new MessagesSupportedVendorMessage.SupportedMessageBlock(StringUtils.toAsciiBytes("SUSH"),
  123. 10, 10);
  124. MessagesSupportedVendorMessage.SupportedMessageBlock smp2 =
  125. new MessagesSupportedVendorMessage.SupportedMessageBlock(StringUtils.toAsciiBytes("NEIL"),
  126. 5, 5);
  127. MessagesSupportedVendorMessage.SupportedMessageBlock smp3 =
  128. new MessagesSupportedVendorMessage.SupportedMessageBlock(StringUtils.toAsciiBytes("DAWG"),
  129. 3, 3);
  130. ByteArrayOutputStream baos = null;
  131. byte[] guid = GUID.makeGuid();
  132. byte ttl = 1, hops = 0;
  133. try {
  134. // test missing info....
  135. baos = new ByteArrayOutputStream();
  136. ByteUtils.short2leb((short)4, baos);
  137. smp2.encode(baos);
  138. smp3.encode(baos);
  139. smp1.encode(baos);
  140. new MessagesSupportedVendorMessage(guid, ttl, hops, 0,
  141. baos.toByteArray(), Network.UNKNOWN);
  142. fail("bpe should have been thrown.");
  143. } catch (BadPacketException expected) {
  144. }
  145. try {
  146. // test corrupt info....
  147. baos = new ByteArrayOutputStream();
  148. ByteUtils.short2leb((short)4, baos);
  149. smp2.encode(baos);
  150. smp3.encode(baos);
  151. smp1.encode(baos);
  152. baos.write(StringUtils.toAsciiBytes("crap"));
  153. new MessagesSupportedVendorMessage(guid, ttl, hops, 0,
  154. baos.toByteArray(), Network.UNKNOWN);
  155. fail("bpe should have been thrown.");
  156. } catch (BadPacketException expected) {
  157. }
  158. // test semantics....
  159. baos = new ByteArrayOutputStream();
  160. ByteUtils.short2leb((short)0, baos);
  161. smp2.encode(baos);
  162. smp3.encode(baos);
  163. smp1.encode(baos);
  164. MessagesSupportedVendorMessage vmpOther =
  165. new MessagesSupportedVendorMessage(guid, ttl, hops, 0,
  166. baos.toByteArray(), Network.UNKNOWN);
  167. baos = new ByteArrayOutputStream();
  168. ByteUtils.short2leb((short)3, baos);
  169. smp2.encode(baos);
  170. smp3.encode(baos);
  171. smp1.encode(baos);
  172. MessagesSupportedVendorMessage vmpOneOther =
  173. new MessagesSupportedVendorMessage(guid, ttl, hops, 0,
  174. baos.toByteArray(), Network.UNKNOWN);
  175. assertNotEquals(vmpOther,vmpOneOther);
  176. }
  177. }