improve test_tracker

This commit is contained in:
Arvid Norberg 2015-06-03 02:37:59 +00:00
parent d8c0632c78
commit 5cc701df54
2 changed files with 52 additions and 51 deletions

View File

@ -44,7 +44,18 @@ POSSIBILITY OF SUCH DAMAGE.
using namespace libtorrent;
namespace lt = libtorrent;
void test_parse_hostname_peers()
// TODO: test parse peers6
// TODO: test parse tracker-id
// TODO: test parse failure-reason
// TODO: test all failure paths, including
// invalid bencoding
// not a dictionary
// no files entry in scrape response
// no info-hash entry in scrape response
// malformed peers in peer list of dictionaries
// uneven number of bytes in peers and peers6 string responses
TORRENT_TEST(parse_hostname_peers)
{
char const response[] = "d5:peersld7:peer id20:aaaaaaaaaaaaaaaaaaaa2:ip13:test_hostname4:porti1000eed7:peer id20:bbbbabaababababababa2:ip12:another_host4:porti1001eeee";
error_code ec;
@ -67,7 +78,7 @@ void test_parse_hostname_peers()
}
}
void test_parse_peers4()
TORRENT_TEST(parse_peers4)
{
char const response[] = "d5:peers12:\x01\x02\x03\x04\x30\x10"
"\x09\x08\x07\x06\x20\x10" "e";
@ -89,7 +100,7 @@ void test_parse_peers4()
}
}
void test_parse_interval()
TORRENT_TEST(parse_interval)
{
char const response[] = "d8:intervali1042e12:min intervali10e5:peers0:e";
error_code ec;
@ -103,7 +114,7 @@ void test_parse_interval()
TEST_EQUAL(resp.min_interval, 10);
}
void test_parse_warning()
TORRENT_TEST(parse_warning)
{
char const response[] = "d5:peers0:15:warning message12:test messagee";
error_code ec;
@ -115,7 +126,7 @@ void test_parse_warning()
TEST_EQUAL(resp.warning_message, "test message");
}
void test_parse_failure_reason()
TORRENT_TEST(parse_failure_reason)
{
char const response[] = "d5:peers0:14:failure reason12:test messagee";
error_code ec;
@ -127,7 +138,7 @@ void test_parse_failure_reason()
TEST_EQUAL(resp.failure_reason, "test message");
}
void test_parse_scrape_response()
TORRENT_TEST(parse_scrape_response)
{
char const response[] = "d5:filesd20:aaaaaaaaaaaaaaaaaaaad8:completei1e10:incompletei2e10:downloadedi3e11:downloadersi6eeee";
error_code ec;
@ -141,7 +152,7 @@ void test_parse_scrape_response()
TEST_EQUAL(resp.downloaders, 6);
}
void test_parse_scrape_response_with_zero()
TORRENT_TEST(parse_scrape_response_with_zero)
{
char const response[] = "d5:filesd20:aaa\0aaaaaaaaaaaaaaaad8:completei4e10:incompletei5e10:downloadedi6eeee";
error_code ec;
@ -155,7 +166,7 @@ void test_parse_scrape_response_with_zero()
TEST_EQUAL(resp.downloaders, -1);
}
void test_parse_external_ip()
TORRENT_TEST(parse_external_ip)
{
char const response[] = "d5:peers0:11:external ip4:\x01\x02\x03\x04" "e";
error_code ec;
@ -168,7 +179,7 @@ void test_parse_external_ip()
}
#if TORRENT_USE_IPV6
void test_parse_external_ip6()
TORRENT_TEST(parse_external_ip6)
{
char const response[] = "d5:peers0:11:external ip16:\xf1\x02\x03\x04\0\0\0\0\0\0\0\0\0\0\xff\xff" "e";
error_code ec;
@ -195,7 +206,7 @@ peer_entry extract_peer(char const* peer_field, error_code expected_ec, bool exp
return result;
}
void test_extract_peer()
TORRENT_TEST(extract_peer)
{
{
peer_entry result = extract_peer("d7:peer id20:abababababababababab2:ip4:abcd4:porti1337ee"
@ -234,42 +245,20 @@ void test_extract_peer()
}
}
TORRENT_TEST(traccker)
int const alert_mask = alert::all_categories
& ~alert::progress_notification
& ~alert::stats_notification;
TORRENT_TEST(udp_tracker)
{
test_extract_peer();
test_parse_hostname_peers();
test_parse_peers4();
test_parse_interval();
test_parse_warning();
test_parse_failure_reason();
test_parse_scrape_response();
test_parse_scrape_response_with_zero();
test_parse_external_ip();
#if TORRENT_USE_IPV6
test_parse_external_ip6();
#endif
// TODO: test parse peers6
// TODO: test parse tracker-id
// TODO: test parse failure-reason
// TODO: test all failure paths, including
// invalid bencoding
// not a dictionary
// no files entry in scrape response
// no info-hash entry in scrape response
// malformed peers in peer list of dictionaries
// uneven number of bytes in peers and peers6 string responses
int http_port = start_web_server();
int udp_port = start_udp_tracker();
int prev_udp_announces = num_udp_announces();
int const alert_mask = alert::all_categories
& ~alert::progress_notification
& ~alert::stats_notification;
lt::session* s = new lt::session(fingerprint("LT", 0, 1, 0, 0), std::make_pair(48875, 49800), "0.0.0.0", 0, alert_mask);
boost::scoped_ptr<lt::session> s(new lt::session(
fingerprint("LT", 0, 1, 0, 0)
, std::make_pair(48875, 49800), "0.0.0.0", 0, alert_mask));
settings_pack pack;
#ifndef TORRENT_NO_DEPRECATE
@ -316,19 +305,28 @@ TORRENT_TEST(traccker)
TEST_EQUAL(num_udp_announces(), prev_udp_announces + 1);
fprintf(stderr, "destructing session\n");
delete s;
s.reset();
fprintf(stderr, "done\n");
// we should have announced the stopped event now
TEST_EQUAL(num_udp_announces(), prev_udp_announces + 2);
}
// ========================================
// test that we move on to try the next tier if the first one fails
// ========================================
// ========================================
// test that we move on to try the next tier if the first one fails
// ========================================
s = new lt::session(fingerprint("LT", 0, 1, 0, 0), std::make_pair(39775, 39800), "0.0.0.0", 0, alert_mask);
TORRENT_TEST(try_next)
{
int http_port = start_web_server();
int udp_port = start_udp_tracker();
pack.clear();
int prev_udp_announces = num_udp_announces();
boost::scoped_ptr<lt::session> s(
new lt::session(fingerprint("LT", 0, 1, 0, 0)
, std::make_pair(39775, 39800), "0.0.0.0", 0, alert_mask));
settings_pack pack;
#ifndef TORRENT_NO_DEPRECATE
pack.set_int(settings_pack::half_open_limit, 1);
#endif
@ -338,13 +336,15 @@ TORRENT_TEST(traccker)
pack.set_int(settings_pack::tracker_receive_timeout, 1);
s->apply_settings(pack);
error_code ec;
remove_all("tmp2_tracker", ec);
create_directory("tmp2_tracker", ec);
file.open(combine_path("tmp2_tracker", "temporary").c_str());
t = ::create_torrent(&file, 16 * 1024, 13, false);
std::ofstream file(combine_path("tmp2_tracker", "temporary").c_str());
boost::shared_ptr<torrent_info> t = ::create_torrent(&file, 16 * 1024, 13, false);
file.close();
// this should fail
char tracker_url[200];
snprintf(tracker_url, sizeof(tracker_url), "udp://www1.non-existent.com:80/announce");
t->add_tracker(tracker_url, 0);
@ -364,12 +364,13 @@ TORRENT_TEST(traccker)
prev_udp_announces = num_udp_announces();
add_torrent_params addp;
addp.flags &= ~add_torrent_params::flag_paused;
addp.flags &= ~add_torrent_params::flag_auto_managed;
addp.flags |= add_torrent_params::flag_seed_mode;
addp.ti = t;
addp.save_path = "tmp2_tracker";
h = s->add_torrent(addp);
torrent_handle h = s->add_torrent(addp);
for (int i = 0; i < 50; ++i)
{
@ -386,7 +387,7 @@ TORRENT_TEST(traccker)
TEST_EQUAL(num_udp_announces(), prev_udp_announces + 1);
fprintf(stderr, "destructing session\n");
delete s;
s.reset();
fprintf(stderr, "done\n");
fprintf(stderr, "stop_tracker\n");

View File

@ -188,7 +188,7 @@ struct udp_tracker
void thread_fun()
{
char buffer[2000];
error_code ec;
udp::endpoint from;
m_socket.async_receive_from(