HandshakeExtensionMessageTest.cc 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. #include "HandshakeExtensionMessage.h"
  2. #include "Peer.h"
  3. #include "MockBtContext.h"
  4. #include "Exception.h"
  5. #include <cppunit/extensions/HelperMacros.h>
  6. class HandshakeExtensionMessageTest:public CppUnit::TestFixture {
  7. CPPUNIT_TEST_SUITE(HandshakeExtensionMessageTest);
  8. CPPUNIT_TEST(testGetExtensionMessageID);
  9. CPPUNIT_TEST(testGetExtensionName);
  10. CPPUNIT_TEST(testGetBencodedData);
  11. CPPUNIT_TEST(testToString);
  12. CPPUNIT_TEST(testDoReceivedAction);
  13. CPPUNIT_TEST(testCreate);
  14. CPPUNIT_TEST(testCreate_stringnum);
  15. CPPUNIT_TEST_SUITE_END();
  16. private:
  17. BtContextHandle _btContext;
  18. public:
  19. HandshakeExtensionMessageTest():_btContext(0) {}
  20. void setUp() {}
  21. void tearDown() {}
  22. void testGetExtensionMessageID();
  23. void testGetExtensionName();
  24. void testGetBencodedData();
  25. void testToString();
  26. void testDoReceivedAction();
  27. void testCreate();
  28. void testCreate_stringnum();
  29. };
  30. CPPUNIT_TEST_SUITE_REGISTRATION(HandshakeExtensionMessageTest);
  31. void HandshakeExtensionMessageTest::testGetExtensionMessageID()
  32. {
  33. HandshakeExtensionMessage msg;
  34. CPPUNIT_ASSERT_EQUAL((uint8_t)0, msg.getExtensionMessageID());
  35. }
  36. void HandshakeExtensionMessageTest::testGetExtensionName()
  37. {
  38. HandshakeExtensionMessage msg;
  39. CPPUNIT_ASSERT_EQUAL(string("handshake"), msg.getExtensionName());
  40. }
  41. void HandshakeExtensionMessageTest::testGetBencodedData()
  42. {
  43. HandshakeExtensionMessage msg;
  44. msg.setClientVersion("aria2");
  45. msg.setTCPPort(6889);
  46. msg.setExtension("ut_pex", 1);
  47. msg.setExtension("a2_dht", 2);
  48. CPPUNIT_ASSERT_EQUAL(string("d1:v5:aria21:pi6889e1:md6:a2_dhti2e6:ut_pexi1eee"), msg.getBencodedData());
  49. }
  50. void HandshakeExtensionMessageTest::testToString()
  51. {
  52. HandshakeExtensionMessage msg;
  53. msg.setClientVersion("aria2");
  54. msg.setTCPPort(6889);
  55. msg.setExtension("ut_pex", 1);
  56. msg.setExtension("a2_dht", 2);
  57. CPPUNIT_ASSERT_EQUAL(string("handshake client=aria2, tcpPort=6889, a2_dht=2, ut_pex=1"), msg.toString());
  58. }
  59. void HandshakeExtensionMessageTest::testDoReceivedAction()
  60. {
  61. PeerHandle peer = new Peer("192.168.0.1", 0);
  62. HandshakeExtensionMessage msg;
  63. msg.setClientVersion("aria2");
  64. msg.setTCPPort(6889);
  65. msg.setExtension("ut_pex", 1);
  66. msg.setExtension("a2_dht", 2);
  67. msg.setPeer(peer);
  68. msg.setBtContext(_btContext);
  69. msg.doReceivedAction();
  70. CPPUNIT_ASSERT_EQUAL((uint16_t)6889, peer->port);
  71. CPPUNIT_ASSERT_EQUAL((uint8_t)1, peer->getExtensionMessageID("ut_pex"));
  72. CPPUNIT_ASSERT_EQUAL((uint8_t)2, peer->getExtensionMessageID("a2_dht"));
  73. }
  74. void HandshakeExtensionMessageTest::testCreate()
  75. {
  76. string in = "0d1:pi6881e1:v5:aria21:md6:ut_pexi1eee";
  77. HandshakeExtensionMessageHandle m =
  78. HandshakeExtensionMessage::create(in.c_str(), in.size());
  79. CPPUNIT_ASSERT_EQUAL(string("aria2"), m->getClientVersion());
  80. CPPUNIT_ASSERT_EQUAL((uint16_t)6881, m->getTCPPort());
  81. CPPUNIT_ASSERT_EQUAL((uint8_t)1, m->getExtensionMessageID("ut_pex"));
  82. try {
  83. // bad payload format
  84. string in = "011:hello world";
  85. HandshakeExtensionMessage::create(in.c_str(), in.size());
  86. CPPUNIT_FAIL("exception must be thrown.");
  87. } catch(Exception* e) {
  88. cerr << *e << endl;
  89. delete e;
  90. }
  91. try {
  92. // malformed dencoded message
  93. string in = "011:hello";
  94. HandshakeExtensionMessage::create(in.c_str(), in.size());
  95. CPPUNIT_FAIL("exception must be thrown.");
  96. } catch(Exception* e) {
  97. cerr << *e << endl;
  98. delete e;
  99. }
  100. try {
  101. // 0 length data
  102. string in = "";
  103. HandshakeExtensionMessage::create(in.c_str(), in.size());
  104. CPPUNIT_FAIL("exception must be thrown.");
  105. } catch(Exception* e) {
  106. cerr << *e << endl;
  107. delete e;
  108. }
  109. }
  110. void HandshakeExtensionMessageTest::testCreate_stringnum()
  111. {
  112. string in = "0d1:p4:68811:v5:aria21:md6:ut_pex1:1ee";
  113. HandshakeExtensionMessageHandle m =
  114. HandshakeExtensionMessage::create(in.c_str(), in.size());
  115. CPPUNIT_ASSERT_EQUAL(string("aria2"), m->getClientVersion());
  116. CPPUNIT_ASSERT_EQUAL((uint16_t)6881, m->getTCPPort());
  117. CPPUNIT_ASSERT_EQUAL((uint8_t)1, m->getExtensionMessageID("ut_pex"));
  118. }