summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2010-08-03 11:44:24 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2010-08-03 11:44:24 +0000
commit2bd5020f81bc8c9995590209d0bf024147c8a51a (patch)
tree3cc93c71179570c7a4889a25f64f56d3c8820c84 /test
parent939a372727b2f27e683a23ac38928b82de550376 (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.cc87
-rw-r--r--test/DHTFindNodeReplyMessageTest.cc8
-rw-r--r--test/DHTGetPeersReplyMessageTest.cc15
-rw-r--r--test/DHTMessageFactoryImplTest.cc24
-rw-r--r--test/DHTRoutingTableSerializerTest.cc6
-rw-r--r--test/DefaultExtensionMessageFactoryTest.cc16
-rw-r--r--test/UTPexExtensionMessageTest.cc34
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 };