Testing ipv6 shenanigans.

This commit is contained in:
clemahieu 2014-10-27 23:09:33 -05:00
commit 953bc460f4

View file

@ -1084,4 +1084,47 @@ TEST (network, ipv6_from_ipv4)
ASSERT_TRUE (endpoint1.address ().is_v4 ());
boost::asio::ip::udp::endpoint endpoint2 (boost::asio::ip::address_v6::v4_mapped (endpoint1.address ().to_v4 ()), 16000);
ASSERT_TRUE (endpoint2.address ().is_v6 ());
}
TEST (network, ipv6_bind_send_ipv4)
{
boost::asio::io_service service;
boost::asio::ip::udp::endpoint endpoint1 (boost::asio::ip::address_v6::any (), 24000);
boost::asio::ip::udp::endpoint endpoint2 (boost::asio::ip::address_v4::any (), 24001);
std::array <uint8_t, 16> bytes1;
auto finish1 (false);
boost::asio::ip::udp::endpoint endpoint3;
boost::asio::ip::udp::socket socket1 (service, endpoint1);
socket1.async_receive_from (boost::asio::buffer (bytes1.data (), bytes1.size ()), endpoint3, [&finish1] (boost::system::error_code const & error, size_t size_a)
{
ASSERT_FALSE (error);
ASSERT_EQ (16, size_a);
finish1 = true;
});
boost::asio::ip::udp::socket socket2 (service, endpoint2);
boost::asio::ip::udp::endpoint endpoint5 (boost::asio::ip::address_v4::loopback (), 24000);
boost::asio::ip::udp::endpoint endpoint6 (boost::asio::ip::address_v6::v4_mapped (boost::asio::ip::address_v4::loopback ()), 24001);
socket2.async_send_to (boost::asio::buffer (std::array <uint8_t, 16> {}, 16), endpoint5, [] (boost::system::error_code const & error, size_t size_a)
{
ASSERT_FALSE (error);
ASSERT_EQ (16, size_a);
});
while (!finish1)
{
service.poll_one ();
}
ASSERT_EQ (endpoint6, endpoint3);
std::array <uint8_t, 16> bytes2;
auto finish2 (false);
boost::asio::ip::udp::endpoint endpoint4;
socket2.async_receive_from (boost::asio::buffer (bytes2.data (), bytes2.size ()), endpoint4, [&finish2] (boost::system::error_code const & error, size_t size_a)
{
ASSERT_FALSE (!error);
ASSERT_EQ (16, size_a);
});
socket1.async_send_to (boost::asio::buffer (std::array <uint8_t, 16> {}, 16), endpoint6, [] (boost::system::error_code const & error, size_t size_a)
{
ASSERT_FALSE (error);
ASSERT_EQ (16, size_a);
});
}