diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2010-08-07 14:15:21 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2010-08-07 14:15:21 +0000 |
| commit | 26d66923767581d63fdfc303525cddebf9125bde (patch) | |
| tree | 97eb6054d697b53c7296adfaeaa43fb8013de3f2 /test/DHTMessageFactoryImplTest.cc | |
| parent | be7012272dbd029a7843df43466f4cd83e6fb9e3 (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/DHTMessageFactoryImplTest.cc')
| -rw-r--r-- | test/DHTMessageFactoryImplTest.cc | 134 |
1 files changed, 118 insertions, 16 deletions
diff --git a/test/DHTMessageFactoryImplTest.cc b/test/DHTMessageFactoryImplTest.cc index 6210c27a..04bd2ff5 100644 --- a/test/DHTMessageFactoryImplTest.cc +++ b/test/DHTMessageFactoryImplTest.cc @@ -31,9 +31,10 @@ class DHTMessageFactoryImplTest:public CppUnit::TestFixture { CPPUNIT_TEST(testCreatePingReplyMessage); CPPUNIT_TEST(testCreateFindNodeMessage); CPPUNIT_TEST(testCreateFindNodeReplyMessage); + CPPUNIT_TEST(testCreateFindNodeReplyMessage6); CPPUNIT_TEST(testCreateGetPeersMessage); - CPPUNIT_TEST(testCreateGetPeersReplyMessage_nodes); - CPPUNIT_TEST(testCreateGetPeersReplyMessage_values); + CPPUNIT_TEST(testCreateGetPeersReplyMessage); + CPPUNIT_TEST(testCreateGetPeersReplyMessage6); CPPUNIT_TEST(testCreateAnnouncePeerMessage); CPPUNIT_TEST(testCreateAnnouncePeerReplyMessage); CPPUNIT_TEST(testReceivedErrorMessage); @@ -52,7 +53,7 @@ public: void setUp() { localNode.reset(new DHTNode()); - factory.reset(new DHTMessageFactoryImpl()); + factory.reset(new DHTMessageFactoryImpl(AF_INET)); factory->setLocalNode(localNode); memset(transactionID, 0xff, DHT_TRANSACTION_ID_LENGTH); memset(remoteNodeID, 0x0f, DHT_ID_LENGTH); @@ -66,9 +67,10 @@ public: void testCreatePingReplyMessage(); void testCreateFindNodeMessage(); void testCreateFindNodeReplyMessage(); + void testCreateFindNodeReplyMessage6(); void testCreateGetPeersMessage(); - void testCreateGetPeersReplyMessage_nodes(); - void testCreateGetPeersReplyMessage_values(); + void testCreateGetPeersReplyMessage(); + void testCreateGetPeersReplyMessage6(); void testCreateAnnouncePeerMessage(); void testCreateAnnouncePeerReplyMessage(); void testReceivedErrorMessage(); @@ -169,8 +171,10 @@ void DHTMessageFactoryImplTest::testCreateFindNodeReplyMessage() 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]); @@ -200,6 +204,58 @@ void DHTMessageFactoryImplTest::testCreateFindNodeReplyMessage() } } +void DHTMessageFactoryImplTest::testCreateFindNodeReplyMessage6() +{ + factory.reset(new DHTMessageFactoryImpl(AF_INET6)); + factory->setLocalNode(localNode); + factory->setRoutingTable(routingTable); + try { + Dict dict; + dict.put("t", String::g(transactionID, DHT_TRANSACTION_ID_LENGTH)); + dict.put("y", "r"); + SharedHandle<Dict> rDict = Dict::g(); + rDict->put("id", String::g(remoteNodeID, DHT_ID_LENGTH)); + 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]); + } + rDict->put("nodes6", compactNodeInfo); + dict.put("r", rDict); + + SharedHandle<DHTNode> remoteNode(new DHTNode(remoteNodeID)); + remoteNode->setIPAddress("2001::2001"); + remoteNode->setPort(6881); + + SharedHandle<DHTFindNodeReplyMessage> m + (dynamic_pointer_cast<DHTFindNodeReplyMessage> + (factory->createResponseMessage("find_node", &dict, + remoteNode->getIPAddress(), + remoteNode->getPort()))); + + CPPUNIT_ASSERT(localNode == m->getLocalNode()); + CPPUNIT_ASSERT(remoteNode == m->getRemoteNode()); + CPPUNIT_ASSERT_EQUAL((size_t)DHTBucket::K, m->getClosestKNodes().size()); + CPPUNIT_ASSERT(nodes[0] == m->getClosestKNodes()[0]); + CPPUNIT_ASSERT(nodes[7] == m->getClosestKNodes()[7]); + CPPUNIT_ASSERT_EQUAL(util::toHex(transactionID, DHT_TRANSACTION_ID_LENGTH), + util::toHex(m->getTransactionID())); + } catch(Exception& e) { + CPPUNIT_FAIL(e.stackTrace()); + } +} + void DHTMessageFactoryImplTest::testCreateGetPeersMessage() { Dict dict; @@ -228,7 +284,7 @@ void DHTMessageFactoryImplTest::testCreateGetPeersMessage() util::toHex(m->getInfoHash(), DHT_ID_LENGTH)); } -void DHTMessageFactoryImplTest::testCreateGetPeersReplyMessage_nodes() +void DHTMessageFactoryImplTest::testCreateGetPeersReplyMessage() { try { Dict dict; @@ -244,13 +300,30 @@ void DHTMessageFactoryImplTest::testCreateGetPeersReplyMessage_nodes() 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]); } rDict->put("nodes", compactNodeInfo); + + std::deque<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]; + 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); + } + rDict->put("values", valuesList); + rDict->put("token", "token"); dict.put("r", rDict); @@ -270,6 +343,9 @@ void DHTMessageFactoryImplTest::testCreateGetPeersReplyMessage_nodes() CPPUNIT_ASSERT_EQUAL((size_t)DHTBucket::K, m->getClosestKNodes().size()); CPPUNIT_ASSERT(nodes[0] == m->getClosestKNodes()[0]); CPPUNIT_ASSERT(nodes[7] == m->getClosestKNodes()[7]); + CPPUNIT_ASSERT_EQUAL((size_t)4, m->getValues().size()); + CPPUNIT_ASSERT(peers[0] == m->getValues()[0]); + CPPUNIT_ASSERT(peers[3] == m->getValues()[3]); CPPUNIT_ASSERT_EQUAL(util::toHex(transactionID, DHT_TRANSACTION_ID_LENGTH), util::toHex(m->getTransactionID())); } catch(Exception& e) { @@ -277,31 +353,54 @@ void DHTMessageFactoryImplTest::testCreateGetPeersReplyMessage_nodes() } } -void DHTMessageFactoryImplTest::testCreateGetPeersReplyMessage_values() +void DHTMessageFactoryImplTest::testCreateGetPeersReplyMessage6() { + factory.reset(new DHTMessageFactoryImpl(AF_INET6)); + factory->setLocalNode(localNode); + factory->setRoutingTable(routingTable); try { Dict dict; dict.put("t", String::g(transactionID, DHT_TRANSACTION_ID_LENGTH)); dict.put("y", "r"); SharedHandle<Dict> rDict = Dict::g(); rDict->put("id", String::g(remoteNodeID, DHT_ID_LENGTH)); + 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]); + } + rDict->put("nodes6", compactNodeInfo); std::deque<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)); + SharedHandle<Peer> peer(new Peer("2001::100"+util::uitos(i+1), 6881+i)); unsigned char buffer[COMPACT_LEN_IPV6]; - bittorrent::packcompact - (buffer, peer->getIPAddress(), peer->getPort()); - valuesList->append(String::g(buffer, COMPACT_LEN_IPV4)); + 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); } rDict->put("values", valuesList); + rDict->put("token", "token"); dict.put("r", rDict); SharedHandle<DHTNode> remoteNode(new DHTNode(remoteNodeID)); - remoteNode->setIPAddress("192.168.0.1"); + remoteNode->setIPAddress("2001::2001"); remoteNode->setPort(6881); SharedHandle<DHTGetPeersReplyMessage> m @@ -313,6 +412,9 @@ void DHTMessageFactoryImplTest::testCreateGetPeersReplyMessage_values() CPPUNIT_ASSERT(localNode == m->getLocalNode()); CPPUNIT_ASSERT(remoteNode == m->getRemoteNode()); CPPUNIT_ASSERT_EQUAL(std::string("token"), m->getToken()); + CPPUNIT_ASSERT_EQUAL((size_t)DHTBucket::K, m->getClosestKNodes().size()); + CPPUNIT_ASSERT(nodes[0] == m->getClosestKNodes()[0]); + CPPUNIT_ASSERT(nodes[7] == m->getClosestKNodes()[7]); CPPUNIT_ASSERT_EQUAL((size_t)4, m->getValues().size()); CPPUNIT_ASSERT(peers[0] == m->getValues()[0]); CPPUNIT_ASSERT(peers[3] == m->getValues()[3]); |
