forked from premiere/premiere-libtorrent
Merge pull request #148 from thomas-yuan/invalid_node_id_test
Add unit test for invalid node-id. (shouldn't be added to routing table)
This commit is contained in:
commit
4b36900e8b
|
@ -724,32 +724,11 @@ TORRENT_TEST(dht)
|
||||||
// http://libtorrent.org/dht_sec.html
|
// http://libtorrent.org/dht_sec.html
|
||||||
source = udp::endpoint(address::from_string("124.31.75.21"), 1);
|
source = udp::endpoint(address::from_string("124.31.75.21"), 1);
|
||||||
node_id nid = to_hash("5fbfbff10c5d6a4ec8a88e4c6ab4c28b95eee401");
|
node_id nid = to_hash("5fbfbff10c5d6a4ec8a88e4c6ab4c28b95eee401");
|
||||||
send_dht_request(node, "find_node", source, &response, "10", 0, 0, std::string()
|
|
||||||
, 0, "0101010101010101010101010101010101010101", 0, false, false, std::string(), std::string(), -1, 0, &nid);
|
|
||||||
|
|
||||||
dht::key_desc_t nodes_desc[] = {
|
|
||||||
{"y", bdecode_node::string_t, 1, 0},
|
|
||||||
{"r", bdecode_node::dict_t, 0, key_desc_t::parse_children},
|
|
||||||
{"id", bdecode_node::string_t, 20, key_desc_t::last_child},
|
|
||||||
};
|
|
||||||
|
|
||||||
fprintf(stderr, "msg: %s\n", print_entry(response).c_str());
|
|
||||||
ret = dht::verify_message(response, nodes_desc, parsed, 3, error_string
|
|
||||||
, sizeof(error_string));
|
|
||||||
TEST_CHECK(ret);
|
|
||||||
if (ret)
|
|
||||||
{
|
|
||||||
TEST_CHECK(parsed[0].string_value() == "r");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
fprintf(stderr, "msg: %s\n", print_entry(response).c_str());
|
|
||||||
fprintf(stderr, " invalid error response: %s\n", error_string);
|
|
||||||
}
|
|
||||||
|
|
||||||
// verify that we reject invalid node IDs
|
// verify that we reject invalid node IDs
|
||||||
// this is now an invalid node-id for 'source'
|
// this is now an invalid node-id for 'source'
|
||||||
nid[0] = 0x18;
|
nid[0] = 0x18;
|
||||||
|
int nodes_num = node.size().get<0>();
|
||||||
send_dht_request(node, "find_node", source, &response, "10", 0, 0, std::string()
|
send_dht_request(node, "find_node", source, &response, "10", 0, 0, std::string()
|
||||||
, 0, "0101010101010101010101010101010101010101", 0, false, false, std::string(), std::string(), -1, 0, &nid);
|
, 0, "0101010101010101010101010101010101010101", 0, false, false, std::string(), std::string(), -1, 0, &nid);
|
||||||
|
|
||||||
|
@ -776,6 +755,36 @@ TORRENT_TEST(dht)
|
||||||
fprintf(stderr, " invalid error response: %s\n", error_string);
|
fprintf(stderr, " invalid error response: %s\n", error_string);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// a node with invalid node-id shouldn't be added to routing table.
|
||||||
|
TEST_EQUAL(node.size().get<0>(), nodes_num);
|
||||||
|
|
||||||
|
// now the node-id is valid.
|
||||||
|
nid[0] = 0x5f;
|
||||||
|
send_dht_request(node, "find_node", source, &response, "10", 0, 0, std::string()
|
||||||
|
, 0, "0101010101010101010101010101010101010101", 0, false, false, std::string(), std::string(), -1, 0, &nid);
|
||||||
|
|
||||||
|
dht::key_desc_t nodes_desc[] = {
|
||||||
|
{"y", bdecode_node::string_t, 1, 0},
|
||||||
|
{"r", bdecode_node::dict_t, 0, key_desc_t::parse_children},
|
||||||
|
{"id", bdecode_node::string_t, 20, key_desc_t::last_child},
|
||||||
|
};
|
||||||
|
|
||||||
|
fprintf(stderr, "msg: %s\n", print_entry(response).c_str());
|
||||||
|
ret = dht::verify_message(response, nodes_desc, parsed, 3, error_string
|
||||||
|
, sizeof(error_string));
|
||||||
|
TEST_CHECK(ret);
|
||||||
|
if (ret)
|
||||||
|
{
|
||||||
|
TEST_CHECK(parsed[0].string_value() == "r");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fprintf(stderr, "msg: %s\n", print_entry(response).c_str());
|
||||||
|
fprintf(stderr, " invalid error response: %s\n", error_string);
|
||||||
|
}
|
||||||
|
// node with valid node-id should be added to routing table.
|
||||||
|
TEST_EQUAL(node.size().get<0>(), nodes_num + 1);
|
||||||
|
|
||||||
sett.enforce_node_id = false;
|
sett.enforce_node_id = false;
|
||||||
|
|
||||||
// ===========================
|
// ===========================
|
||||||
|
@ -2143,10 +2152,7 @@ TORRENT_TEST(read_only_node)
|
||||||
TEST_EQUAL(response.type(), bdecode_node::none_t);
|
TEST_EQUAL(response.type(), bdecode_node::none_t);
|
||||||
|
|
||||||
// also, the sender shouldn't be added to routing table.
|
// also, the sender shouldn't be added to routing table.
|
||||||
boost::tuple<int, int, int> nums = node.size();
|
TEST_EQUAL(node.size().get<0>(), 0);
|
||||||
TEST_EQUAL(nums.get<0>(), 0);
|
|
||||||
TEST_EQUAL(nums.get<1>(), 0);
|
|
||||||
TEST_EQUAL(nums.get<2>(), 0);
|
|
||||||
|
|
||||||
// for outgoing requests, read_only node will add 'ro' key (value == 1)
|
// for outgoing requests, read_only node will add 'ro' key (value == 1)
|
||||||
// in top-level of request.
|
// in top-level of request.
|
||||||
|
@ -2179,23 +2185,16 @@ TORRENT_TEST(read_only_node)
|
||||||
TEST_EQUAL(parsed[3].int_value(), 1);
|
TEST_EQUAL(parsed[3].int_value(), 1);
|
||||||
|
|
||||||
// should have one node now, whichi is 4.4.4.4:1234
|
// should have one node now, whichi is 4.4.4.4:1234
|
||||||
nums = node.size();
|
TEST_EQUAL(node.size().get<0>(), 1);
|
||||||
TEST_EQUAL(nums.get<0>(), 1);
|
|
||||||
TEST_EQUAL(nums.get<1>(), 0);
|
|
||||||
TEST_EQUAL(nums.get<2>(), 0);
|
|
||||||
|
|
||||||
// now, disable read_only, try again.
|
// now, disable read_only, try again.
|
||||||
g_sent_packets.clear();
|
g_sent_packets.clear();
|
||||||
sett.read_only = false;
|
sett.read_only = false;
|
||||||
|
|
||||||
send_simple_dht_request(node, "get", source, &response, args, "10", true);
|
send_simple_dht_request(node, "get", source, &response, args, "10", true);
|
||||||
// sender should be added to routing table
|
// sender should be added to routing table, there are 2 nodes now.
|
||||||
nums = node.size();
|
TEST_EQUAL(node.size().get<0>(), 2);
|
||||||
TEST_EQUAL(nums.get<0>(), 2);
|
|
||||||
TEST_EQUAL(nums.get<1>(), 0);
|
|
||||||
TEST_EQUAL(nums.get<2>(), 0);
|
|
||||||
|
|
||||||
// now, request shouldn't have 'ro' key anymore
|
|
||||||
g_sent_packets.clear();
|
g_sent_packets.clear();
|
||||||
target = generate_next();
|
target = generate_next();
|
||||||
node.get_item(target, get_item_cb);
|
node.get_item(target, get_item_cb);
|
||||||
|
@ -2203,7 +2202,7 @@ TORRENT_TEST(read_only_node)
|
||||||
// since we have 2 nodes, we should have two packets.
|
// since we have 2 nodes, we should have two packets.
|
||||||
TEST_EQUAL(g_sent_packets.size(), 2);
|
TEST_EQUAL(g_sent_packets.size(), 2);
|
||||||
|
|
||||||
// both of them shouldn't a 'ro' key.
|
// both of them shouldn't have a 'ro' key.
|
||||||
lazy_from_entry(g_sent_packets.front().second, request);
|
lazy_from_entry(g_sent_packets.front().second, request);
|
||||||
ret = verify_message(request, get_item_desc, parsed, 7, error_string
|
ret = verify_message(request, get_item_desc, parsed, 7, error_string
|
||||||
, sizeof(error_string));
|
, sizeof(error_string));
|
||||||
|
|
Loading…
Reference in New Issue