123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 |
- #include "HandshakeExtensionMessage.h"
- #include <iostream>
- #include <cppunit/extensions/HelperMacros.h>
- #include "Peer.h"
- #include "Exception.h"
- #include "FileEntry.h"
- #include "DownloadContext.h"
- #include "bittorrent_helper.h"
- #include "Option.h"
- #include "RequestGroup.h"
- namespace aria2 {
- class HandshakeExtensionMessageTest:public CppUnit::TestFixture {
- CPPUNIT_TEST_SUITE(HandshakeExtensionMessageTest);
- CPPUNIT_TEST(testGetExtensionMessageID);
- CPPUNIT_TEST(testGetExtensionName);
- CPPUNIT_TEST(testGetBencodedData);
- CPPUNIT_TEST(testToString);
- CPPUNIT_TEST(testDoReceivedAction);
- CPPUNIT_TEST(testCreate);
- CPPUNIT_TEST(testCreate_stringnum);
- CPPUNIT_TEST_SUITE_END();
- public:
- void setUp() {}
- void tearDown() {}
- void testGetExtensionMessageID();
- void testGetExtensionName();
- void testGetBencodedData();
- void testToString();
- void testDoReceivedAction();
- void testCreate();
- void testCreate_stringnum();
- };
- CPPUNIT_TEST_SUITE_REGISTRATION(HandshakeExtensionMessageTest);
- void HandshakeExtensionMessageTest::testGetExtensionMessageID()
- {
- HandshakeExtensionMessage msg;
- CPPUNIT_ASSERT_EQUAL((uint8_t)0, msg.getExtensionMessageID());
- }
- void HandshakeExtensionMessageTest::testGetExtensionName()
- {
- HandshakeExtensionMessage msg;
- CPPUNIT_ASSERT_EQUAL(std::string("handshake"), msg.getExtensionName());
- }
- void HandshakeExtensionMessageTest::testGetBencodedData()
- {
- HandshakeExtensionMessage msg;
- msg.setClientVersion("aria2");
- msg.setTCPPort(6889);
- msg.setExtension("ut_pex", 1);
- msg.setExtension("a2_dht", 2);
- msg.setMetadataSize(1024);
- CPPUNIT_ASSERT_EQUAL
- (std::string("d"
- "1:md6:a2_dhti2e6:ut_pexi1ee"
- "13:metadata_sizei1024e"
- "1:pi6889e"
- "1:v5:aria2"
- "e"), msg.getPayload());
- msg.setMetadataSize(0);
- CPPUNIT_ASSERT
- (msg.getPayload().find("metadata_size") == std::string::npos);
- }
- void HandshakeExtensionMessageTest::testToString()
- {
- HandshakeExtensionMessage msg;
- msg.setClientVersion("aria2");
- msg.setTCPPort(6889);
- msg.setExtension("ut_pex", 1);
- msg.setExtension("a2_dht", 2);
- msg.setMetadataSize(1024);
- CPPUNIT_ASSERT_EQUAL
- (std::string("handshake client=aria2, tcpPort=6889, metadataSize=1024,"
- " a2_dht=2, ut_pex=1"), msg.toString());
- }
- void HandshakeExtensionMessageTest::testDoReceivedAction()
- {
- SharedHandle<DownloadContext> dctx
- (new DownloadContext(METADATA_PIECE_SIZE, 0));
- SharedHandle<Option> op(new Option());
- RequestGroup rg(op);
- rg.setDownloadContext(dctx);
- SharedHandle<TorrentAttribute> attrs(new TorrentAttribute());
- dctx->setAttribute(bittorrent::BITTORRENT, attrs);
- dctx->markTotalLengthIsUnknown();
- SharedHandle<Peer> peer(new Peer("192.168.0.1", 0));
- peer->allocateSessionResource(1024, 1024*1024);
- HandshakeExtensionMessage msg;
- msg.setClientVersion("aria2");
- msg.setTCPPort(6889);
- msg.setExtension("ut_pex", 1);
- msg.setExtension("a2_dht", 2);
- msg.setExtension("ut_metadata", 3);
- msg.setMetadataSize(1024);
- msg.setPeer(peer);
- msg.setDownloadContext(dctx);
- msg.doReceivedAction();
- CPPUNIT_ASSERT_EQUAL((uint16_t)6889, peer->getPort());
- CPPUNIT_ASSERT_EQUAL((uint8_t)1, peer->getExtensionMessageID("ut_pex"));
- CPPUNIT_ASSERT_EQUAL((uint8_t)2, peer->getExtensionMessageID("a2_dht"));
- CPPUNIT_ASSERT(peer->isSeeder());
- CPPUNIT_ASSERT_EQUAL((size_t)1024, attrs->metadataSize);
- CPPUNIT_ASSERT_EQUAL((off_t)1024, dctx->getTotalLength());
- CPPUNIT_ASSERT(dctx->knowsTotalLength());
- // See Peer is not marked as seeder if !attrs->metadata.empty()
- peer->allocateSessionResource(1024, 1024*1024);
- attrs->metadataSize = 1024;
- attrs->metadata = std::string('0', attrs->metadataSize);
- msg.doReceivedAction();
- CPPUNIT_ASSERT(!peer->isSeeder());
- }
- void HandshakeExtensionMessageTest::testCreate()
- {
- std::string in =
- "0d1:pi6881e1:v5:aria21:md6:ut_pexi1ee13:metadata_sizei1024ee";
- SharedHandle<HandshakeExtensionMessage> m =
- HandshakeExtensionMessage::create(reinterpret_cast<const unsigned char*>(in.c_str()),
- in.size());
- CPPUNIT_ASSERT_EQUAL(std::string("aria2"), m->getClientVersion());
- CPPUNIT_ASSERT_EQUAL((uint16_t)6881, m->getTCPPort());
- CPPUNIT_ASSERT_EQUAL((uint8_t)1, m->getExtensionMessageID("ut_pex"));
- CPPUNIT_ASSERT_EQUAL((size_t)1024, m->getMetadataSize());
- try {
- // bad payload format
- std::string in = "011:hello world";
- HandshakeExtensionMessage::create(reinterpret_cast<const unsigned char*>(in.c_str()),
- in.size());
- CPPUNIT_FAIL("exception must be thrown.");
- } catch(Exception& e) {
- std::cerr << e.stackTrace() << std::endl;
- }
- try {
- // malformed dencoded message
- std::string in = "011:hello";
- HandshakeExtensionMessage::create(reinterpret_cast<const unsigned char*>(in.c_str()),
- in.size());
- CPPUNIT_FAIL("exception must be thrown.");
- } catch(Exception& e) {
- std::cerr << e.stackTrace() << std::endl;
- }
- try {
- // 0 length data
- std::string in = "";
- HandshakeExtensionMessage::create(reinterpret_cast<const unsigned char*>(in.c_str()),
- in.size());
- CPPUNIT_FAIL("exception must be thrown.");
- } catch(Exception& e) {
- std::cerr << e.stackTrace() << std::endl;
- }
- }
- void HandshakeExtensionMessageTest::testCreate_stringnum()
- {
- std::string in = "0d1:p4:68811:v5:aria21:md6:ut_pex1:1ee";
- SharedHandle<HandshakeExtensionMessage> m =
- HandshakeExtensionMessage::create
- (reinterpret_cast<const unsigned char*>(in.c_str()),
- in.size());
- CPPUNIT_ASSERT_EQUAL(std::string("aria2"), m->getClientVersion());
- // port number in string is not allowed
- CPPUNIT_ASSERT_EQUAL((uint16_t)0, m->getTCPPort());
- // extension ID in string is not allowed
- CPPUNIT_ASSERT_EQUAL((uint8_t)0, m->getExtensionMessageID("ut_pex"));
- }
- } // namespace aria2
|