summaryrefslogtreecommitdiff
path: root/test/DHTFindNodeReplyMessageTest.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/DHTFindNodeReplyMessageTest.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/DHTFindNodeReplyMessageTest.cc')
-rw-r--r--test/DHTFindNodeReplyMessageTest.cc51
1 files changed, 48 insertions, 3 deletions
diff --git a/test/DHTFindNodeReplyMessageTest.cc b/test/DHTFindNodeReplyMessageTest.cc
index 1191e279..7a15b445 100644
--- a/test/DHTFindNodeReplyMessageTest.cc
+++ b/test/DHTFindNodeReplyMessageTest.cc
@@ -15,6 +15,7 @@ class DHTFindNodeReplyMessageTest:public CppUnit::TestFixture {
CPPUNIT_TEST_SUITE(DHTFindNodeReplyMessageTest);
CPPUNIT_TEST(testGetBencodedMessage);
+ CPPUNIT_TEST(testGetBencodedMessage6);
CPPUNIT_TEST_SUITE_END();
public:
void setUp() {}
@@ -22,6 +23,8 @@ public:
void tearDown() {}
void testGetBencodedMessage();
+
+ void testGetBencodedMessage6();
};
@@ -36,7 +39,7 @@ void DHTFindNodeReplyMessageTest::testGetBencodedMessage()
util::generateRandomData(tid, DHT_TRANSACTION_ID_LENGTH);
std::string transactionID(&tid[0], &tid[DHT_TRANSACTION_ID_LENGTH]);
- DHTFindNodeReplyMessage msg(localNode, remoteNode, transactionID);
+ DHTFindNodeReplyMessage msg(AF_INET, localNode, remoteNode, transactionID);
msg.setVersion("A200");
std::string compactNodeInfo;
SharedHandle<DHTNode> nodes[8];
@@ -46,8 +49,8 @@ void DHTFindNodeReplyMessageTest::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]);
@@ -69,4 +72,46 @@ void DHTFindNodeReplyMessageTest::testGetBencodedMessage()
CPPUNIT_ASSERT_EQUAL(bencode2::encode(&dict), msgbody);
}
+void DHTFindNodeReplyMessageTest::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]);
+
+ DHTFindNodeReplyMessage msg(AF_INET6, localNode, remoteNode, transactionID);
+ msg.setVersion("A200");
+ 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]));
+
+ std::string msgbody = msg.getBencodedMessage();
+
+ 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("nodes6", compactNodeInfo);
+ dict.put("r", rDict);
+
+ CPPUNIT_ASSERT_EQUAL(bencode2::encode(&dict), msgbody);
+}
+
} // namespace aria2