HandshakeExtensionMessageTest.cc 4.4 KB

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