1 #include "DHTAnnouncePeerReplyMessage.h"
2 
3 #include <cppunit/extensions/HelperMacros.h>
4 
5 #include "DHTNode.h"
6 #include "Exception.h"
7 #include "util.h"
8 #include "bencode2.h"
9 
10 namespace aria2 {
11 
12 class DHTAnnouncePeerReplyMessageTest : public CppUnit::TestFixture {
13 
14   CPPUNIT_TEST_SUITE(DHTAnnouncePeerReplyMessageTest);
15   CPPUNIT_TEST(testGetBencodedMessage);
16   CPPUNIT_TEST_SUITE_END();
17 
18 public:
setUp()19   void setUp() {}
20 
tearDown()21   void tearDown() {}
22 
23   void testGetBencodedMessage();
24 };
25 
26 CPPUNIT_TEST_SUITE_REGISTRATION(DHTAnnouncePeerReplyMessageTest);
27 
testGetBencodedMessage()28 void DHTAnnouncePeerReplyMessageTest::testGetBencodedMessage()
29 {
30   std::shared_ptr<DHTNode> localNode(new DHTNode());
31   std::shared_ptr<DHTNode> remoteNode(new DHTNode());
32 
33   unsigned char tid[DHT_TRANSACTION_ID_LENGTH];
34   util::generateRandomData(tid, DHT_TRANSACTION_ID_LENGTH);
35   std::string transactionID(&tid[0], &tid[DHT_TRANSACTION_ID_LENGTH]);
36 
37   DHTAnnouncePeerReplyMessage msg(localNode, remoteNode, transactionID);
38   msg.setVersion("A200");
39   std::string msgbody = msg.getBencodedMessage();
40 
41   Dict dict;
42   dict.put("t", transactionID);
43   dict.put("v", "A200");
44   dict.put("y", "r");
45   auto rDict = Dict::g();
46   rDict->put("id", String::g(localNode->getID(), DHT_ID_LENGTH));
47   dict.put("r", std::move(rDict));
48 
49   CPPUNIT_ASSERT_EQUAL(bencode2::encode(&dict), msgbody);
50 }
51 
52 } // namespace aria2
53