diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2010-08-03 11:44:24 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2010-08-03 11:44:24 +0000 |
| commit | 2bd5020f81bc8c9995590209d0bf024147c8a51a (patch) | |
| tree | 3cc93c71179570c7a4889a25f64f56d3c8820c84 /test | |
| parent | 939a372727b2f27e683a23ac38928b82de550376 (diff) | |
2010-08-03 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Added bittorrent::packcompact() which replaces
bittorrent::createcompact() and supports IPv6 addresses. Rewritten
bittorrent::unpackcompact() and bittorrent::extractPeer() to
support IPv6 addresses. Fixed added.f flags in ut_pex.
* src/BtConstants.h
* src/DHTFindNodeReplyMessage.cc
* src/DHTGetPeersReplyMessage.cc
* src/DHTMessageFactoryImpl.cc
* src/DHTRoutingTableDeserializer.cc
* src/DHTRoutingTableSerializer.cc
* src/DHTTokenTracker.cc
* src/DefaultBtAnnounce.cc
* src/UTPexExtensionMessage.cc
* src/bittorrent_helper.cc
* src/bittorrent_helper.h
* test/BittorrentHelperTest.cc
* test/DHTFindNodeReplyMessageTest.cc
* test/DHTGetPeersReplyMessageTest.cc
* test/DHTMessageFactoryImplTest.cc
* test/DHTRoutingTableSerializerTest.cc
* test/DefaultExtensionMessageFactoryTest.cc
* test/UTPexExtensionMessageTest.cc
Diffstat (limited to 'test')
| -rw-r--r-- | test/BittorrentHelperTest.cc | 87 | ||||
| -rw-r--r-- | test/DHTFindNodeReplyMessageTest.cc | 8 | ||||
| -rw-r--r-- | test/DHTGetPeersReplyMessageTest.cc | 15 | ||||
| -rw-r--r-- | test/DHTMessageFactoryImplTest.cc | 24 | ||||
| -rw-r--r-- | test/DHTRoutingTableSerializerTest.cc | 6 | ||||
| -rw-r--r-- | test/DefaultExtensionMessageFactoryTest.cc | 16 | ||||
| -rw-r--r-- | test/UTPexExtensionMessageTest.cc | 34 |
7 files changed, 123 insertions, 67 deletions
diff --git a/test/BittorrentHelperTest.cc b/test/BittorrentHelperTest.cc index b8724970..669c42ec 100644 --- a/test/BittorrentHelperTest.cc +++ b/test/BittorrentHelperTest.cc @@ -56,15 +56,17 @@ class BittorrentHelperTest:public CppUnit::TestFixture { CPPUNIT_TEST(testSetFileFilter_multi); CPPUNIT_TEST(testUTF8Torrent); CPPUNIT_TEST(testEtc); - CPPUNIT_TEST(testCreatecompact); CPPUNIT_TEST(testCheckBitfield); CPPUNIT_TEST(testMetadata); CPPUNIT_TEST(testParseMagnet); CPPUNIT_TEST(testParseMagnet_base32); CPPUNIT_TEST(testMetadata2Torrent); CPPUNIT_TEST(testTorrent2Magnet); + CPPUNIT_TEST(testExtractPeerFromString); CPPUNIT_TEST(testExtractPeerFromList); CPPUNIT_TEST(testExtract2PeersFromList); + CPPUNIT_TEST(testPackcompact); + CPPUNIT_TEST(testUnpackcompact); CPPUNIT_TEST_SUITE_END(); public: void setUp() { @@ -101,15 +103,17 @@ public: void testSetFileFilter_multi(); void testUTF8Torrent(); void testEtc(); - void testCreatecompact(); void testCheckBitfield(); void testMetadata(); void testParseMagnet(); void testParseMagnet_base32(); void testMetadata2Torrent(); void testTorrent2Magnet(); + void testExtractPeerFromString(); void testExtractPeerFromList(); void testExtract2PeersFromList(); + void testPackcompact(); + void testUnpackcompact(); }; @@ -645,18 +649,6 @@ void BittorrentHelperTest::testEtc() getTorrentAttrs(dctx)->creationDate); } -void BittorrentHelperTest::testCreatecompact() -{ - unsigned char compact[6]; - // Note: bittorrent::createcompact() on linux can handle IPv4-mapped - // addresses like `ffff::127.0.0.1', but on cygwin, it doesn't. - CPPUNIT_ASSERT(createcompact(compact, "127.0.0.1", 6881)); - - std::pair<std::string, uint16_t> p = unpackcompact(compact); - CPPUNIT_ASSERT_EQUAL(std::string("127.0.0.1"), p.first); - CPPUNIT_ASSERT_EQUAL((uint16_t)6881, p.second); -} - void BittorrentHelperTest::testCheckBitfield() { unsigned char bitfield[] = { 0xff, 0xe0 }; @@ -760,6 +752,35 @@ void BittorrentHelperTest::testTorrent2Magnet() torrent2Magnet(getTorrentAttrs(dctx))); } +void BittorrentHelperTest::testExtractPeerFromString() +{ + std::string hextext = "100210354527354678541237324732171ae1"; + hextext += "20010db8bd0501d2288a1fc0000110ee1ae2"; + std::string peersstr = "36:"+util::fromHex(hextext); + SharedHandle<ValueBase> str = bencode2::decode(peersstr); + std::deque<SharedHandle<Peer> > peers; + extractPeer(str, AF_INET6, std::back_inserter(peers)); + CPPUNIT_ASSERT_EQUAL((size_t)2, peers.size()); + CPPUNIT_ASSERT_EQUAL(std::string("1002:1035:4527:3546:7854:1237:3247:3217"), + peers[0]->getIPAddress()); + CPPUNIT_ASSERT_EQUAL((uint16_t)6881, peers[0]->getPort()); + CPPUNIT_ASSERT_EQUAL(std::string("2001:db8:bd05:1d2:288a:1fc0:1:10ee"), + peers[1]->getIPAddress()); + CPPUNIT_ASSERT_EQUAL((uint16_t)6882, peers[1]->getPort()); + + hextext = "c0a800011ae1"; + hextext += "c0a800021ae2"; + peersstr = "12:"+util::fromHex(hextext); + str = bencode2::decode(peersstr); + peers.clear(); + extractPeer(str, AF_INET, std::back_inserter(peers)); + CPPUNIT_ASSERT_EQUAL((size_t)2, peers.size()); + CPPUNIT_ASSERT_EQUAL(std::string("192.168.0.1"), peers[0]->getIPAddress()); + CPPUNIT_ASSERT_EQUAL((uint16_t)6881, peers[0]->getPort()); + CPPUNIT_ASSERT_EQUAL(std::string("192.168.0.2"), peers[1]->getIPAddress()); + CPPUNIT_ASSERT_EQUAL((uint16_t)6882, peers[1]->getPort()); +} + void BittorrentHelperTest::testExtractPeerFromList() { std::string peersString = @@ -769,7 +790,7 @@ void BittorrentHelperTest::testExtractPeerFromList() SharedHandle<ValueBase> dict = bencode2::decode(peersString); std::deque<SharedHandle<Peer> > peers; - extractPeer(asDict(dict)->get("peers"), std::back_inserter(peers)); + extractPeer(asDict(dict)->get("peers"), AF_INET, std::back_inserter(peers)); CPPUNIT_ASSERT_EQUAL((size_t)1, peers.size()); SharedHandle<Peer> peer = *peers.begin(); CPPUNIT_ASSERT_EQUAL(std::string("192.168.0.1"), peer->getIPAddress()); @@ -786,7 +807,7 @@ void BittorrentHelperTest::testExtract2PeersFromList() SharedHandle<ValueBase> dict = bencode2::decode(peersString); std::deque<SharedHandle<Peer> > peers; - extractPeer(asDict(dict)->get("peers"), std::back_inserter(peers)); + extractPeer(asDict(dict)->get("peers"), AF_INET, std::back_inserter(peers)); CPPUNIT_ASSERT_EQUAL((size_t)2, peers.size()); SharedHandle<Peer> peer = *peers.begin(); CPPUNIT_ASSERT_EQUAL(std::string("192.168.0.1"), peer->getIPAddress()); @@ -797,6 +818,40 @@ void BittorrentHelperTest::testExtract2PeersFromList() CPPUNIT_ASSERT_EQUAL((uint16_t)2007, peer->getPort()); } +void BittorrentHelperTest::testPackcompact() +{ + unsigned char compact[COMPACT_LEN_IPV6]; + CPPUNIT_ASSERT_EQUAL(18, + packcompact(compact, + "1002:1035:4527:3546:7854:1237:3247:3217", + 6881)); + CPPUNIT_ASSERT_EQUAL(std::string("100210354527354678541237324732171ae1"), + util::toHex(compact, 18)); + + CPPUNIT_ASSERT_EQUAL(6, packcompact(compact, "192.168.0.1", 6881)); + CPPUNIT_ASSERT_EQUAL(std::string("c0a800011ae1"), util::toHex(compact, 6)); + + CPPUNIT_ASSERT_EQUAL(0, packcompact(compact, "badaddr", 6881)); +} + +void BittorrentHelperTest::testUnpackcompact() +{ + unsigned char compact6[] = { + 0x10, 0x02, 0x10, 0x35, 0x45, 0x27, 0x35, 0x46, + 0x78, 0x54, 0x12, 0x37, 0x32, 0x47, 0x32, 0x17, + 0x1A, 0xE1 }; + std::pair<std::string, uint16_t> p = + unpackcompact(compact6, AF_INET6); + CPPUNIT_ASSERT_EQUAL(std::string("1002:1035:4527:3546:7854:1237:3247:3217"), + p.first); + CPPUNIT_ASSERT_EQUAL((uint16_t)6881, p.second); + + unsigned char compact[] = { 0xC0, 0xa8, 0x00, 0x01, 0x1A, 0xE1 }; + p = unpackcompact(compact, AF_INET); + CPPUNIT_ASSERT_EQUAL(std::string("192.168.0.1"), p.first); + CPPUNIT_ASSERT_EQUAL((uint16_t)6881, p.second); +} + } // namespace bittorrent } // namespace aria2 diff --git a/test/DHTFindNodeReplyMessageTest.cc b/test/DHTFindNodeReplyMessageTest.cc index a0c8923e..1191e279 100644 --- a/test/DHTFindNodeReplyMessageTest.cc +++ b/test/DHTFindNodeReplyMessageTest.cc @@ -45,12 +45,12 @@ void DHTFindNodeReplyMessageTest::testGetBencodedMessage() nodes[i]->setIPAddress("192.168.0."+util::uitos(i+1)); nodes[i]->setPort(6881+i); - unsigned char buf[6]; - CPPUNIT_ASSERT(bittorrent::createcompact - (buf, nodes[i]->getIPAddress(), nodes[i]->getPort())); + unsigned char buf[COMPACT_LEN_IPV6]; + bittorrent::packcompact + (buf, nodes[i]->getIPAddress(), nodes[i]->getPort()); compactNodeInfo += std::string(&nodes[i]->getID()[0], &nodes[i]->getID()[DHT_ID_LENGTH])+ - std::string(&buf[0], &buf[sizeof(buf)]); + std::string(&buf[0], &buf[COMPACT_LEN_IPV4]); } msg.setClosestKNodes (std::vector<SharedHandle<DHTNode> >(&nodes[0], &nodes[DHTBucket::K])); diff --git a/test/DHTGetPeersReplyMessageTest.cc b/test/DHTGetPeersReplyMessageTest.cc index b85a9611..1eff779e 100644 --- a/test/DHTGetPeersReplyMessageTest.cc +++ b/test/DHTGetPeersReplyMessageTest.cc @@ -57,12 +57,12 @@ void DHTGetPeersReplyMessageTest::testGetBencodedMessage() nodes[i]->setIPAddress("192.168.0."+util::uitos(i+1)); nodes[i]->setPort(6881+i); - unsigned char buf[6]; - CPPUNIT_ASSERT(bittorrent::createcompact - (buf, nodes[i]->getIPAddress(), nodes[i]->getPort())); + unsigned char buf[COMPACT_LEN_IPV6]; + bittorrent::packcompact + (buf, nodes[i]->getIPAddress(), nodes[i]->getPort()); compactNodeInfo += std::string(&nodes[i]->getID()[0], &nodes[i]->getID()[DHT_ID_LENGTH])+ - std::string(&buf[0], &buf[sizeof(buf)]); + std::string(&buf[0], &buf[COMPACT_LEN_IPV4]); } msg.setClosestKNodes (std::vector<SharedHandle<DHTNode> >(&nodes[0], &nodes[DHTBucket::K])); @@ -80,10 +80,9 @@ void DHTGetPeersReplyMessageTest::testGetBencodedMessage() SharedHandle<List> valuesList = List::g(); for(size_t i = 0; i < 4; ++i) { SharedHandle<Peer> peer(new Peer("192.168.0."+util::uitos(i+1), 6881+i)); - unsigned char buffer[6]; - CPPUNIT_ASSERT(bittorrent::createcompact - (buffer, peer->getIPAddress(), peer->getPort())); - valuesList->append(String::g(buffer, sizeof(buffer))); + unsigned char buffer[COMPACT_LEN_IPV6]; + bittorrent::packcompact(buffer, peer->getIPAddress(), peer->getPort()); + valuesList->append(String::g(buffer, COMPACT_LEN_IPV4)); peers.push_back(peer); } rDict->put("values", valuesList); diff --git a/test/DHTMessageFactoryImplTest.cc b/test/DHTMessageFactoryImplTest.cc index 272c2d14..6210c27a 100644 --- a/test/DHTMessageFactoryImplTest.cc +++ b/test/DHTMessageFactoryImplTest.cc @@ -168,12 +168,12 @@ void DHTMessageFactoryImplTest::testCreateFindNodeReplyMessage() nodes[i]->setIPAddress("192.168.0."+util::uitos(i+1)); nodes[i]->setPort(6881+i); - unsigned char buf[6]; - CPPUNIT_ASSERT(bittorrent::createcompact - (buf, nodes[i]->getIPAddress(), nodes[i]->getPort())); + unsigned char buf[COMPACT_LEN_IPV6]; + bittorrent::packcompact + (buf, nodes[i]->getIPAddress(), nodes[i]->getPort()); compactNodeInfo += std::string(&nodes[i]->getID()[0], &nodes[i]->getID()[DHT_ID_LENGTH])+ - std::string(&buf[0], &buf[sizeof(buf)]); + std::string(&buf[0], &buf[COMPACT_LEN_IPV4]); } rDict->put("nodes", compactNodeInfo); dict.put("r", rDict); @@ -243,12 +243,12 @@ void DHTMessageFactoryImplTest::testCreateGetPeersReplyMessage_nodes() nodes[i]->setIPAddress("192.168.0."+util::uitos(i+1)); nodes[i]->setPort(6881+i); - unsigned char buf[6]; - CPPUNIT_ASSERT(bittorrent::createcompact - (buf, nodes[i]->getIPAddress(), nodes[i]->getPort())); + unsigned char buf[COMPACT_LEN_IPV6]; + bittorrent::packcompact + (buf, nodes[i]->getIPAddress(), nodes[i]->getPort()); compactNodeInfo += std::string(&nodes[i]->getID()[0], &nodes[i]->getID()[DHT_ID_LENGTH])+ - std::string(&buf[0], &buf[sizeof(buf)]); + std::string(&buf[0], &buf[COMPACT_LEN_IPV4]); } rDict->put("nodes", compactNodeInfo); rDict->put("token", "token"); @@ -290,10 +290,10 @@ void DHTMessageFactoryImplTest::testCreateGetPeersReplyMessage_values() SharedHandle<List> valuesList = List::g(); for(size_t i = 0; i < 4; ++i) { SharedHandle<Peer> peer(new Peer("192.168.0."+util::uitos(i+1), 6881+i)); - unsigned char buffer[6]; - CPPUNIT_ASSERT(bittorrent::createcompact - (buffer, peer->getIPAddress(), peer->getPort())); - valuesList->append(String::g(buffer, sizeof(buffer))); + unsigned char buffer[COMPACT_LEN_IPV6]; + bittorrent::packcompact + (buffer, peer->getIPAddress(), peer->getPort()); + valuesList->append(String::g(buffer, COMPACT_LEN_IPV4)); peers.push_back(peer); } rDict->put("values", valuesList); diff --git a/test/DHTRoutingTableSerializerTest.cc b/test/DHTRoutingTableSerializerTest.cc index 4b069819..81450a6b 100644 --- a/test/DHTRoutingTableSerializerTest.cc +++ b/test/DHTRoutingTableSerializerTest.cc @@ -115,7 +115,8 @@ void DHTRoutingTableSerializerTest::testSerialize() ss.read(buf, 6); { std::pair<std::string, uint16_t> peer = - bittorrent::unpackcompact(reinterpret_cast<const unsigned char*>(buf)); + bittorrent::unpackcompact(reinterpret_cast<const unsigned char*>(buf), + AF_INET); CPPUNIT_ASSERT_EQUAL(std::string("192.168.0.1"), peer.first); CPPUNIT_ASSERT_EQUAL((uint16_t)6881, peer.second); } @@ -174,7 +175,8 @@ void DHTRoutingTableSerializerTest::testSerialize() ss.read(buf, 6); { std::pair<std::string, uint16_t> peer = - bittorrent::unpackcompact(reinterpret_cast<const unsigned char*>(buf)); + bittorrent::unpackcompact(reinterpret_cast<const unsigned char*>(buf), + AF_INET); CPPUNIT_ASSERT_EQUAL(std::string("192.168.0.3"), peer.first); CPPUNIT_ASSERT_EQUAL((uint16_t)6883, peer.second); } diff --git a/test/DefaultExtensionMessageFactoryTest.cc b/test/DefaultExtensionMessageFactoryTest.cc index 0eb16520..e74edb29 100644 --- a/test/DefaultExtensionMessageFactoryTest.cc +++ b/test/DefaultExtensionMessageFactoryTest.cc @@ -131,14 +131,14 @@ void DefaultExtensionMessageFactoryTest::testCreateMessage_Handshake() void DefaultExtensionMessageFactoryTest::testCreateMessage_UTPex() { - unsigned char c1[6]; - unsigned char c2[6]; - unsigned char c3[6]; - unsigned char c4[6]; - bittorrent::createcompact(c1, "192.168.0.1", 6881); - bittorrent::createcompact(c2, "10.1.1.2", 9999); - bittorrent::createcompact(c3, "192.168.0.2", 6882); - bittorrent::createcompact(c4, "10.1.1.3",10000); + unsigned char c1[COMPACT_LEN_IPV6]; + unsigned char c2[COMPACT_LEN_IPV6]; + unsigned char c3[COMPACT_LEN_IPV6]; + unsigned char c4[COMPACT_LEN_IPV6]; + bittorrent::packcompact(c1, "192.168.0.1", 6881); + bittorrent::packcompact(c2, "10.1.1.2", 9999); + bittorrent::packcompact(c3, "192.168.0.2", 6882); + bittorrent::packcompact(c4, "10.1.1.3",10000); std::string data = getExtensionMessageID("ut_pex")+"d5:added12:"+ std::string(&c1[0], &c1[6])+std::string(&c2[0], &c2[6])+ diff --git a/test/UTPexExtensionMessageTest.cc b/test/UTPexExtensionMessageTest.cc index c2afa55a..0aa700ea 100644 --- a/test/UTPexExtensionMessageTest.cc +++ b/test/UTPexExtensionMessageTest.cc @@ -81,18 +81,18 @@ void UTPexExtensionMessageTest::testGetBencodedData() p4->startBadCondition(); CPPUNIT_ASSERT(msg.addDroppedPeer(p4)); - unsigned char c1[6]; - unsigned char c2[6]; - unsigned char c3[6]; - unsigned char c4[6]; - bittorrent::createcompact(c1, p1->getIPAddress(), p1->getPort()); - bittorrent::createcompact(c2, p2->getIPAddress(), p2->getPort()); - bittorrent::createcompact(c3, p3->getIPAddress(), p3->getPort()); - bittorrent::createcompact(c4, p4->getIPAddress(), p4->getPort()); + unsigned char c1[COMPACT_LEN_IPV6]; + unsigned char c2[COMPACT_LEN_IPV6]; + unsigned char c3[COMPACT_LEN_IPV6]; + unsigned char c4[COMPACT_LEN_IPV6]; + bittorrent::packcompact(c1, p1->getIPAddress(), p1->getPort()); + bittorrent::packcompact(c2, p2->getIPAddress(), p2->getPort()); + bittorrent::packcompact(c3, p3->getIPAddress(), p3->getPort()); + bittorrent::packcompact(c4, p4->getIPAddress(), p4->getPort()); std::string expected = "d5:added12:"+ std::string(&c1[0], &c1[6])+std::string(&c2[0], &c2[6])+ - "7:added.f2:207:dropped12:"+ + "7:added.f2:"+util::fromHex("0200")+"7:dropped12:"+ std::string(&c3[0], &c3[6])+std::string(&c4[0], &c4[6])+ "e"; std::string bd = msg.getPayload(); @@ -152,14 +152,14 @@ void UTPexExtensionMessageTest::testDoReceivedAction() void UTPexExtensionMessageTest::testCreate() { - unsigned char c1[6]; - unsigned char c2[6]; - unsigned char c3[6]; - unsigned char c4[6]; - bittorrent::createcompact(c1, "192.168.0.1", 6881); - bittorrent::createcompact(c2, "10.1.1.2", 9999); - bittorrent::createcompact(c3, "192.168.0.2", 6882); - bittorrent::createcompact(c4, "10.1.1.3",10000); + unsigned char c1[COMPACT_LEN_IPV6]; + unsigned char c2[COMPACT_LEN_IPV6]; + unsigned char c3[COMPACT_LEN_IPV6]; + unsigned char c4[COMPACT_LEN_IPV6]; + bittorrent::packcompact(c1, "192.168.0.1", 6881); + bittorrent::packcompact(c2, "10.1.1.2", 9999); + bittorrent::packcompact(c3, "192.168.0.2", 6882); + bittorrent::packcompact(c4, "10.1.1.3",10000); char id[1] = { 1 }; |
