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/DHTGetPeersReplyMessageTest.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/DHTGetPeersReplyMessageTest.cc')
| -rw-r--r-- | test/DHTGetPeersReplyMessageTest.cc | 89 |
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)); } |
