| 95 | } |
| 96 | |
| 97 | void DHTRoutingTableSerializerTest::testSerialize() |
| 98 | { |
| 99 | std::shared_ptr<DHTNode> localNode(new DHTNode()); |
| 100 | |
| 101 | std::vector<std::shared_ptr<DHTNode>> nodes(3); |
| 102 | for (size_t i = 0; i < nodes.size(); ++i) { |
| 103 | nodes[i].reset(new DHTNode()); |
| 104 | nodes[i]->setIPAddress("192.168.0." + util::uitos(i + 1)); |
| 105 | nodes[i]->setPort(6881 + i); |
| 106 | } |
| 107 | nodes[1]->setIPAddress("non-numerical-name"); |
| 108 | |
| 109 | DHTRoutingTableSerializer s(AF_INET); |
| 110 | s.setLocalNode(localNode); |
| 111 | s.setNodes(nodes); |
| 112 | |
| 113 | std::string filename = |
| 114 | A2_TEST_OUT_DIR "/aria2_DHTRoutingTableSerializerTest_testSerialize"; |
| 115 | s.serialize(filename); |
| 116 | |
| 117 | std::ifstream ss(filename.c_str(), std::ios::binary); |
| 118 | |
| 119 | checkToLocalnode(ss, localNode); |
| 120 | size_t numNodes = 3; |
| 121 | checkNumNodes(ss, numNodes); |
| 122 | |
| 123 | // 4bytes reserved |
| 124 | ss.read(buf, 4); |
| 125 | CPPUNIT_ASSERT(memcmp(zero, buf, 4) == 0); |
| 126 | |
| 127 | // node[0] |
| 128 | // 1byte compatc peer format length |
| 129 | { |
| 130 | uint8_t len; |
| 131 | ss >> len; |
| 132 | CPPUNIT_ASSERT_EQUAL((uint8_t)6, len); |
| 133 | } |
| 134 | // 7bytes reserved |
| 135 | ss.read(buf, 7); |
| 136 | CPPUNIT_ASSERT(memcmp(zero, buf, 7) == 0); |
| 137 | // 6bytes compact peer info |
| 138 | ss.read(buf, 6); |
| 139 | { |
| 140 | std::pair<std::string, uint16_t> peer = bittorrent::unpackcompact( |
| 141 | reinterpret_cast<const unsigned char*>(buf), AF_INET); |
| 142 | CPPUNIT_ASSERT_EQUAL(std::string("192.168.0.1"), peer.first); |
| 143 | CPPUNIT_ASSERT_EQUAL((uint16_t)6881, peer.second); |
| 144 | } |
| 145 | // 2bytes reserved |
| 146 | ss.read(buf, 2); |
| 147 | CPPUNIT_ASSERT(memcmp(zero, buf, 2) == 0); |
| 148 | // 16bytes reserved |
| 149 | ss.read(buf, 16); |
| 150 | CPPUNIT_ASSERT(memcmp(zero, buf, 16) == 0); |
| 151 | // localnode ID |
| 152 | ss.read(buf, DHT_ID_LENGTH); |
| 153 | CPPUNIT_ASSERT(memcmp(nodes[0]->getID(), buf, DHT_ID_LENGTH) == 0); |
| 154 | // 4bytes reserved |
nothing calls this directly
no test coverage detected