DefaultExtensionMessageFactoryTest.cc 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. #include "DefaultExtensionMessageFactory.h"
  2. #include "Peer.h"
  3. #include "MockBtContext.h"
  4. #include "PeerMessageUtil.h"
  5. #include "HandshakeExtensionMessage.h"
  6. #include "UTPexExtensionMessage.h"
  7. #include "Exception.h"
  8. #include "BtRegistry.h"
  9. #include "BtRuntime.h"
  10. #include <cppunit/extensions/HelperMacros.h>
  11. class DefaultExtensionMessageFactoryTest:public CppUnit::TestFixture {
  12. CPPUNIT_TEST_SUITE(DefaultExtensionMessageFactoryTest);
  13. CPPUNIT_TEST(testCreateMessage_unknown);
  14. CPPUNIT_TEST(testCreateMessage_Handshake);
  15. CPPUNIT_TEST(testCreateMessage_UTPex);
  16. CPPUNIT_TEST_SUITE_END();
  17. private:
  18. MockBtContextHandle _btContext;
  19. PeerHandle _peer;
  20. public:
  21. DefaultExtensionMessageFactoryTest():_btContext(0), _peer(0) {}
  22. void setUp()
  23. {
  24. BtRegistry::unregisterAll();
  25. MockBtContextHandle btContext = new MockBtContext();
  26. unsigned char infohash[20];
  27. memset(infohash, 0, sizeof(infohash));
  28. btContext->setInfoHash(infohash);
  29. _btContext = btContext;
  30. BtRuntimeHandle btRuntime = new BtRuntime();
  31. BtRegistry::registerBtRuntime(_btContext->getInfoHashAsString(),
  32. btRuntime);
  33. _peer = new Peer("192.168.0.1", 6969);
  34. _peer->setExtension("ut_pex", 1);
  35. }
  36. void tearDown()
  37. {
  38. BtRegistry::unregisterAll();
  39. }
  40. void testCreateMessage_unknown();
  41. void testCreateMessage_Handshake();
  42. void testCreateMessage_UTPex();
  43. };
  44. CPPUNIT_TEST_SUITE_REGISTRATION(DefaultExtensionMessageFactoryTest);
  45. void DefaultExtensionMessageFactoryTest::testCreateMessage_unknown()
  46. {
  47. DefaultExtensionMessageFactory factory;
  48. factory.setBtContext(_btContext);
  49. factory.setPeer(_peer);
  50. _peer->setExtension("foo", 255);
  51. char id[1] = { 255 };
  52. string data = string(&id[0], &id[1]);
  53. try {
  54. factory.createMessage(data.c_str(), data.size());
  55. CPPUNIT_FAIL("exception must be thrown.");
  56. } catch(Exception* e) {
  57. cerr << *e << endl;
  58. delete e;
  59. }
  60. }
  61. void DefaultExtensionMessageFactoryTest::testCreateMessage_Handshake()
  62. {
  63. DefaultExtensionMessageFactory factory;
  64. factory.setBtContext(_btContext);
  65. factory.setPeer(_peer);
  66. char id[1] = { 0 };
  67. string data = string(&id[0], &id[1])+"d1:v5:aria2e";
  68. HandshakeExtensionMessageHandle m = factory.createMessage(data.c_str(), data.size());
  69. CPPUNIT_ASSERT_EQUAL(string("aria2"), m->getClientVersion());
  70. }
  71. void DefaultExtensionMessageFactoryTest::testCreateMessage_UTPex()
  72. {
  73. DefaultExtensionMessageFactory factory;
  74. factory.setBtContext(_btContext);
  75. factory.setPeer(_peer);
  76. char c1[6];
  77. char c2[6];
  78. char c3[6];
  79. char c4[6];
  80. PeerMessageUtil::createcompact(c1, "192.168.0.1", 6881);
  81. PeerMessageUtil::createcompact(c2, "10.1.1.2", 9999);
  82. PeerMessageUtil::createcompact(c3, "192.168.0.2", 6882);
  83. PeerMessageUtil::createcompact(c4, "10.1.1.3",10000);
  84. char id[1] = { BT_RUNTIME(_btContext)->getExtensionMessageID("ut_pex") };
  85. string data = string(&id[0], &id[1])+"d5:added12:"+
  86. string(&c1[0], &c1[6])+string(&c2[0], &c2[6])+
  87. "7:added.f2:207:dropped12:"+
  88. string(&c3[0], &c3[6])+string(&c4[0], &c4[6])+
  89. "e";
  90. UTPexExtensionMessageHandle m = factory.createMessage(data.c_str(), data.size());
  91. CPPUNIT_ASSERT_EQUAL(BT_RUNTIME(_btContext)->getExtensionMessageID("ut_pex"),
  92. m->getExtensionMessageID());
  93. }