summaryrefslogtreecommitdiff
path: root/test/DHTGetPeersReplyMessageTest.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2010-08-07 14:15:21 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2010-08-07 14:15:21 +0000
commit26d66923767581d63fdfc303525cddebf9125bde (patch)
tree97eb6054d697b53c7296adfaeaa43fb8013de3f2 /test/DHTGetPeersReplyMessageTest.cc
parentbe7012272dbd029a7843df43466f4cd83e6fb9e3 (diff)
2010-08-07 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Added IPv6 DHT. Added --dht-entry-porint6, --dht-file-path6, --dht-listen-addr6 and --enable-dht6 option. IPv6 DHT is disabled by default. To use IPv6 DHT, you need to use --enable-dht6 and specify a global unicast address to --dht-listen-addr6. IPv6 DHT is highly experimental. * src/BtSetup.cc * src/DHTAutoSaveCommand.cc * src/DHTAutoSaveCommand.h * src/DHTConnectionImpl.cc * src/DHTConnectionImpl.h * src/DHTEntryPointNameResolveCommand.cc * src/DHTFindNodeReplyMessage.cc * src/DHTFindNodeReplyMessage.h * src/DHTGetPeersMessage.cc * src/DHTGetPeersReplyMessage.cc * src/DHTGetPeersReplyMessage.h * src/DHTMessageFactory.h * src/DHTMessageFactoryImpl.cc * src/DHTMessageFactoryImpl.h * src/DHTMessageTracker.cc * src/DHTRegistry.cc * src/DHTRegistry.h * src/DHTRoutingTableDeserializer.cc * src/DHTRoutingTableDeserializer.h * src/DHTRoutingTableSerializer.cc * src/DHTRoutingTableSerializer.h * src/DHTSetup.cc * src/DHTSetup.h * src/FtpConnection.cc * src/LpdMessageReceiver.cc * src/OptionHandlerFactory.cc * src/OptionHandlerImpl.h * src/PeerInteractionCommand.cc * src/RequestGroup.cc * src/SocketCore.cc * src/SocketCore.h * src/bittorrent_helper.cc * src/bittorrent_helper.h * src/prefs.cc * src/prefs.h * src/usage_text.h * test/DHTConnectionImplTest.cc * test/DHTFindNodeReplyMessageTest.cc * test/DHTGetPeersMessageTest.cc * test/DHTGetPeersReplyMessageTest.cc * test/DHTMessageFactoryImplTest.cc * test/DHTRoutingTableDeserializerTest.cc * test/DHTRoutingTableSerializerTest.cc * test/LpdMessageDispatcherTest.cc * test/MockDHTMessageFactory.h
Diffstat (limited to 'test/DHTGetPeersReplyMessageTest.cc')
-rw-r--r--test/DHTGetPeersReplyMessageTest.cc89
1 files changed, 76 insertions, 13 deletions
diff --git a/test/DHTGetPeersReplyMessageTest.cc b/test/DHTGetPeersReplyMessageTest.cc
index 1eff779e..064a2bd5 100644
--- a/test/DHTGetPeersReplyMessageTest.cc
+++ b/test/DHTGetPeersReplyMessageTest.cc
@@ -16,6 +16,7 @@ class DHTGetPeersReplyMessageTest:public CppUnit::TestFixture {
CPPUNIT_TEST_SUITE(DHTGetPeersReplyMessageTest);
CPPUNIT_TEST(testGetBencodedMessage);
+ CPPUNIT_TEST(testGetBencodedMessage6);
CPPUNIT_TEST_SUITE_END();
public:
void setUp() {}
@@ -23,6 +24,8 @@ public:
void tearDown() {}
void testGetBencodedMessage();
+
+ void testGetBencodedMessage6();
};
@@ -39,7 +42,8 @@ void DHTGetPeersReplyMessageTest::testGetBencodedMessage()
std::string token = "token";
- DHTGetPeersReplyMessage msg(localNode, remoteNode, token, transactionID);
+ DHTGetPeersReplyMessage msg
+ (AF_INET, localNode, remoteNode, token, transactionID);
msg.setVersion("A200");
Dict dict;
dict.put("t", transactionID);
@@ -58,38 +62,97 @@ void DHTGetPeersReplyMessageTest::testGetBencodedMessage()
nodes[i]->setPort(6881+i);
unsigned char buf[COMPACT_LEN_IPV6];
- bittorrent::packcompact
- (buf, nodes[i]->getIPAddress(), nodes[i]->getPort());
+ CPPUNIT_ASSERT_EQUAL
+ (COMPACT_LEN_IPV4,
+ 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[COMPACT_LEN_IPV4]);
}
msg.setClosestKNodes
(std::vector<SharedHandle<DHTNode> >(&nodes[0], &nodes[DHTBucket::K]));
-
- std::string msgbody = msg.getBencodedMessage();
-
rDict->put("nodes", compactNodeInfo);
- CPPUNIT_ASSERT_EQUAL(util::percentEncode(bencode2::encode(&dict)),
- util::percentEncode(msgbody));
- }
- rDict->removeKey("nodes");
- {
std::vector<SharedHandle<Peer> > peers;
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[COMPACT_LEN_IPV6];
- bittorrent::packcompact(buffer, peer->getIPAddress(), peer->getPort());
+ CPPUNIT_ASSERT_EQUAL
+ (COMPACT_LEN_IPV4,
+ bittorrent::packcompact
+ (buffer, peer->getIPAddress(), peer->getPort()));
valuesList->append(String::g(buffer, COMPACT_LEN_IPV4));
peers.push_back(peer);
}
+ msg.setValues(peers);
rDict->put("values", valuesList);
+ std::string msgbody = msg.getBencodedMessage();
+ CPPUNIT_ASSERT_EQUAL(util::percentEncode(bencode2::encode(&dict)),
+ util::percentEncode(msgbody));
+ }
+}
+
+void DHTGetPeersReplyMessageTest::testGetBencodedMessage6()
+{
+ SharedHandle<DHTNode> localNode(new DHTNode());
+ SharedHandle<DHTNode> remoteNode(new DHTNode());
+
+ unsigned char tid[DHT_TRANSACTION_ID_LENGTH];
+ util::generateRandomData(tid, DHT_TRANSACTION_ID_LENGTH);
+ std::string transactionID(&tid[0], &tid[DHT_TRANSACTION_ID_LENGTH]);
+
+ std::string token = "token";
+
+ DHTGetPeersReplyMessage msg
+ (AF_INET6, localNode, remoteNode, token, transactionID);
+ msg.setVersion("A200");
+ Dict dict;
+ dict.put("t", transactionID);
+ dict.put("v", "A200");
+ dict.put("y", "r");
+ SharedHandle<Dict> rDict = Dict::g();
+ rDict->put("id", String::g(localNode->getID(), DHT_ID_LENGTH));
+ rDict->put("token", token);
+ dict.put("r", rDict);
+ {
+ std::string compactNodeInfo;
+ SharedHandle<DHTNode> nodes[8];
+ for(size_t i = 0; i < DHTBucket::K; ++i) {
+ nodes[i].reset(new DHTNode());
+ nodes[i]->setIPAddress("2001::000"+util::uitos(i+1));
+ nodes[i]->setPort(6881+i);
+
+ unsigned char buf[COMPACT_LEN_IPV6];
+ CPPUNIT_ASSERT_EQUAL
+ (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[COMPACT_LEN_IPV6]);
+ }
+ msg.setClosestKNodes
+ (std::vector<SharedHandle<DHTNode> >(&nodes[0], &nodes[DHTBucket::K]));
+ rDict->put("nodes6", compactNodeInfo);
+
+ std::vector<SharedHandle<Peer> > peers;
+ SharedHandle<List> valuesList = List::g();
+ for(size_t i = 0; i < 4; ++i) {
+ SharedHandle<Peer> peer(new Peer("2001::100"+util::uitos(i+1), 6881+i));
+ unsigned char buffer[COMPACT_LEN_IPV6];
+ CPPUNIT_ASSERT_EQUAL
+ (COMPACT_LEN_IPV6,
+ bittorrent::packcompact
+ (buffer, peer->getIPAddress(), peer->getPort()));
+ valuesList->append(String::g(buffer, COMPACT_LEN_IPV6));
+ peers.push_back(peer);
+ }
msg.setValues(peers);
- std::string msgbody = msg.getBencodedMessage();
+ rDict->put("values", valuesList);
+ std::string msgbody = msg.getBencodedMessage();
CPPUNIT_ASSERT_EQUAL(util::percentEncode(bencode2::encode(&dict)),
util::percentEncode(msgbody));
}