clean up error_code use, and use error_condition to test for errors in test_http_connection

This commit is contained in:
arvidn 2015-11-22 13:12:11 -05:00
parent fa3215f8c7
commit 92236a9923
3 changed files with 28 additions and 39 deletions

View File

@ -482,28 +482,11 @@ namespace libtorrent
TORRENT_EXPORT boost::system::error_category& get_http_category(); TORRENT_EXPORT boost::system::error_category& get_http_category();
using boost::system::error_code; using boost::system::error_code;
using boost::system::error_condition;
// hidden
inline boost::system::error_category const& system_category()
#if BOOST_VERSION < 104400
{ return boost::system::get_system_category(); }
#else
{ return boost::system::system_category(); }
#endif
// hidden
inline boost::system::error_category const& get_posix_category()
#if BOOST_VERSION < 103600
{ return boost::system::get_posix_category(); }
#elif BOOST_VERSION < 104400
{ return boost::system::get_generic_category(); }
#else
{ return boost::system::generic_category(); }
#endif // BOOST_VERSION < 103600
// internal // internal
inline boost::system::error_category const& generic_category() using boost::system::generic_category;
{ return get_posix_category(); } using boost::system::system_category;
#ifndef BOOST_NO_EXCEPTIONS #ifndef BOOST_NO_EXCEPTIONS
struct TORRENT_EXPORT libtorrent_exception: std::exception struct TORRENT_EXPORT libtorrent_exception: std::exception

View File

@ -105,7 +105,7 @@ boost::shared_ptr<http_connection> test_request(io_service& ios
, char const* expected_data , char const* expected_data
, int expected_size , int expected_size
, int expected_status , int expected_status
, error_code expected_ec , error_condition expected_error
, lt::aux::proxy_settings const& ps , lt::aux::proxy_settings const& ps
, int* connect_handler_called , int* connect_handler_called
, int* handler_called , int* handler_called
@ -121,11 +121,11 @@ boost::shared_ptr<http_connection> test_request(io_service& ios
printf("RESPONSE: %s\n", url.c_str()); printf("RESPONSE: %s\n", url.c_str());
++*handler_called; ++*handler_called;
if (ec != expected_ec) if (ec != expected_error)
{ {
printf("ERROR: %s (expected: %s)\n" printf("ERROR: %s (expected: %s)\n"
, ec.message().c_str() , ec.message().c_str()
, expected_ec.message().c_str()); , expected_error.message().c_str());
} }
const int http_status = parser.status_code(); const int http_status = parser.status_code();
@ -133,7 +133,7 @@ boost::shared_ptr<http_connection> test_request(io_service& ios
{ {
TEST_EQUAL(size, expected_size); TEST_EQUAL(size, expected_size);
} }
TEST_EQUAL(ec, expected_ec); TEST_EQUAL(ec, expected_error);
if (expected_status != -1) if (expected_status != -1)
{ {
TEST_EQUAL(http_status, expected_status); TEST_EQUAL(http_status, expected_status);
@ -168,7 +168,7 @@ void print_http_header(std::map<std::string, std::string> const& headers)
} }
void run_test(settings_pack::proxy_type_t proxy_type, std::string url, int expect_size, int expect_status void run_test(settings_pack::proxy_type_t proxy_type, std::string url, int expect_size, int expect_status
, boost::system::error_code expect_error, std::vector<int> expect_counters); , boost::system::error_condition expect_error, std::vector<int> expect_counters);
enum expect_counters enum expect_counters
{ {
@ -188,13 +188,16 @@ void run_suite(settings_pack::proxy_type_t proxy_type)
{ {
std::string url_base = "http://10.0.0.2:8080"; std::string url_base = "http://10.0.0.2:8080";
run_test(proxy_type, url_base + "/test_file", 1337, 200, error_code(), { 1, 1, 1}); run_test(proxy_type, url_base + "/test_file", 1337, 200, error_condition(), { 1, 1, 1});
run_test(proxy_type, url_base + "/non-existent", 0, 404, error_code(), { 1, 1 }); run_test(proxy_type, url_base + "/non-existent", 0, 404, error_condition(), { 1, 1 });
run_test(proxy_type, url_base + "/redirect", 1337, 200, error_code(), { 2, 1, 1, 1 }); run_test(proxy_type, url_base + "/redirect", 1337, 200, error_condition(), { 2, 1, 1, 1 });
run_test(proxy_type, url_base + "/relative/redirect", 1337, 200, error_code(), {2, 1, 1, 0, 1}); run_test(proxy_type, url_base + "/relative/redirect", 1337, 200, error_condition(), {2, 1, 1, 0, 1});
run_test(proxy_type, url_base + "/infinite/redirect", 0, 301, error_code(asio::error::eof), {6, 1, 0, 0, 0, 6});
run_test(proxy_type, url_base + "/chunked_encoding", 1337, 200, error_code(), { 1, 1, 0, 0, 0, 0, 1}); run_test(proxy_type, url_base + "/infinite/redirect", 0, 301
, error_condition(asio::error::eof, asio::error::get_misc_category()), {6, 1, 0, 0, 0, 6});
run_test(proxy_type, url_base + "/chunked_encoding", 1337, 200, error_condition(), { 1, 1, 0, 0, 0, 0, 1});
// we are on an IPv4 host, we can't connect to IPv6 addresses, make sure that // we are on an IPv4 host, we can't connect to IPv6 addresses, make sure that
// error is correctly propagated // error is correctly propagated
@ -203,26 +206,29 @@ void run_suite(settings_pack::proxy_type_t proxy_type)
// not support IPv6 // not support IPv6
if (proxy_type != settings_pack::socks5) if (proxy_type != settings_pack::socks5)
{ {
run_test(proxy_type, "http://[ff::dead:beef]:8080/test_file", 0, -1, error_code(asio::error::address_family_not_supported) run_test(proxy_type, "http://[ff::dead:beef]:8080/test_file", 0, -1
, error_condition(boost::system::errc::address_family_not_supported, generic_category())
, {0,1}); , {0,1});
} }
// there is no node at 10.0.0.10, this should fail with connection refused // there is no node at 10.0.0.10, this should fail with connection refused
run_test(proxy_type, "http://10.0.0.10:8080/test_file", 0, -1, run_test(proxy_type, "http://10.0.0.10:8080/test_file", 0, -1,
error_code(boost::system::errc::connection_refused, boost::system::system_category()) error_condition(boost::system::errc::connection_refused, generic_category())
, {0,1}); , {0,1});
// this hostname will resolve to multiple IPs, all but one that we cannot // this hostname will resolve to multiple IPs, all but one that we cannot
// connect to and the second one where we'll get the test file response. Make // connect to and the second one where we'll get the test file response. Make
// sure the http_connection correcly tries the second IP if the first one // sure the http_connection correcly tries the second IP if the first one
// fails. // fails.
run_test(proxy_type, "http://try-next.com:8080/test_file", 1337, 200, error_code(), { 1, 1, 1}); run_test(proxy_type, "http://try-next.com:8080/test_file", 1337, 200
, error_condition(), { 1, 1, 1});
// make sure hostname lookup failures are passed through correctly // make sure hostname lookup failures are passed through correctly
run_test(proxy_type, "http://non-existent.com/test_file", 0, -1, asio::error::host_not_found, { 0, 1}); run_test(proxy_type, "http://non-existent.com/test_file", 0, -1
, error_condition(asio::error::host_not_found, boost::asio::error::get_netdb_category()), { 0, 1});
// make sure we handle gzipped content correctly // make sure we handle gzipped content correctly
run_test(proxy_type, url_base + "/test_file.gz", 1337, 200, error_code(), { 1, 1, 0, 0, 0, 0, 0, 1}); run_test(proxy_type, url_base + "/test_file.gz", 1337, 200, error_condition(), { 1, 1, 0, 0, 0, 0, 0, 1});
// TODO: 2 test basic-auth // TODO: 2 test basic-auth
// TODO: 2 test https // TODO: 2 test https
@ -230,7 +236,7 @@ void run_suite(settings_pack::proxy_type_t proxy_type)
} }
void run_test(settings_pack::proxy_type_t proxy_type, std::string url, int expect_size, int expect_status void run_test(settings_pack::proxy_type_t proxy_type, std::string url, int expect_size, int expect_status
, boost::system::error_code expect_error, std::vector<int> expect_counters) , boost::system::error_condition expect_error, std::vector<int> expect_counters)
{ {
using sim::asio::ip::address_v4; using sim::asio::ip::address_v4;
sim_config network_cfg; sim_config network_cfg;
@ -422,7 +428,7 @@ TORRENT_TEST(http_connection_socks_error)
int handler_counter = 0; int handler_counter = 0;
auto c = test_request(ios, res, "http://10.0.0.2:8080/test_file" auto c = test_request(ios, res, "http://10.0.0.2:8080/test_file"
, data_buffer, -1, -1 , data_buffer, -1, -1
, error_code(boost::system::errc::connection_refused, boost::system::system_category()) , error_condition(boost::system::errc::connection_refused, boost::system::generic_category())
, ps, &connect_counter, &handler_counter); , ps, &connect_counter, &handler_counter);
error_code e; error_code e;

View File

@ -201,7 +201,7 @@ namespace libtorrent
e.file_ptr = boost::make_shared<file>(); e.file_ptr = boost::make_shared<file>();
if (!e.file_ptr) if (!e.file_ptr)
{ {
ec = error_code(ENOMEM, get_posix_category()); ec = error_code(boost::system::errc::not_enough_memory, generic_category());
return e.file_ptr; return e.file_ptr;
} }
std::string full_path = fs.file_path(file_index, p); std::string full_path = fs.file_path(file_index, p);