Skip to content

Commit 21bf3d2

Browse files
committed
Add tests for BoostAsioToCNetAddr
1 parent fdbd707 commit 21bf3d2

File tree

3 files changed

+21
-2
lines changed

3 files changed

+21
-2
lines changed

src/rpcserver.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -359,8 +359,7 @@ void ErrorReply(std::ostream& stream, const Object& objError, const Value& id)
359359
stream << HTTPReply(nStatus, strReply, false) << std::flush;
360360
}
361361

362-
// Convert boost::asio address to CNetAddr
363-
static CNetAddr BoostAsioToCNetAddr(boost::asio::ip::address address)
362+
CNetAddr BoostAsioToCNetAddr(boost::asio::ip::address address)
364363
{
365364
CNetAddr netaddr;
366365
// Make sure that IPv4-compatible and IPv4-mapped IPv6 addresses are treated as IPv4 addresses

src/rpcserver.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include "json/json_spirit_writer_template.h"
2020

2121
class CBlockIndex;
22+
class CNetAddr;
2223

2324
/* Start RPC threads */
2425
void StartRPCThreads();
@@ -50,6 +51,9 @@ void RPCTypeCheck(const json_spirit::Object& o,
5051
*/
5152
void RPCRunLater(const std::string& name, boost::function<void(void)> func, int64_t nSeconds);
5253

54+
//! Convert boost::asio address to CNetAddr
55+
extern CNetAddr BoostAsioToCNetAddr(boost::asio::ip::address address);
56+
5357
typedef json_spirit::Value(*rpcfn_type)(const json_spirit::Array& params, bool fHelp);
5458

5559
class CRPCCommand

src/test/rpc_tests.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include "rpcclient.h"
77

88
#include "base58.h"
9+
#include "netbase.h"
910

1011
#include <boost/algorithm/string.hpp>
1112
#include <boost/test/unit_test.hpp>
@@ -138,4 +139,19 @@ BOOST_AUTO_TEST_CASE(rpc_parse_monetary_values)
138139
BOOST_CHECK(AmountFromValue(ValueFromString("20999999.99999999")) == 2099999999999999LL);
139140
}
140141

142+
BOOST_AUTO_TEST_CASE(rpc_boostasiotocnetaddr)
143+
{
144+
// Check IPv4 addresses
145+
BOOST_CHECK_EQUAL(BoostAsioToCNetAddr(boost::asio::ip::address::from_string("1.2.3.4")).ToString(), "1.2.3.4");
146+
BOOST_CHECK_EQUAL(BoostAsioToCNetAddr(boost::asio::ip::address::from_string("127.0.0.1")).ToString(), "127.0.0.1");
147+
// Check IPv6 addresses
148+
BOOST_CHECK_EQUAL(BoostAsioToCNetAddr(boost::asio::ip::address::from_string("::1")).ToString(), "::1");
149+
BOOST_CHECK_EQUAL(BoostAsioToCNetAddr(boost::asio::ip::address::from_string("123:4567:89ab:cdef:123:4567:89ab:cdef")).ToString(),
150+
"123:4567:89ab:cdef:123:4567:89ab:cdef");
151+
// v4 compatible must be interpreted as IPv4
152+
BOOST_CHECK_EQUAL(BoostAsioToCNetAddr(boost::asio::ip::address::from_string("::0:127.0.0.1")).ToString(), "127.0.0.1");
153+
// v4 mapped must be interpreted as IPv4
154+
BOOST_CHECK_EQUAL(BoostAsioToCNetAddr(boost::asio::ip::address::from_string("::ffff:127.0.0.1")).ToString(), "127.0.0.1");
155+
}
156+
141157
BOOST_AUTO_TEST_SUITE_END()

0 commit comments

Comments
 (0)