mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-30 05:30:51 +00:00
Add a test and fix the code
This commit is contained in:
parent
b553c5a117
commit
87a7133659
@ -1,6 +1,7 @@
|
|||||||
#include <Common/isLocalAddress.h>
|
#include <Common/isLocalAddress.h>
|
||||||
|
|
||||||
#include <ifaddrs.h>
|
#include <ifaddrs.h>
|
||||||
|
#include <array>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <optional>
|
#include <optional>
|
||||||
#include <common/types.h>
|
#include <common/types.h>
|
||||||
@ -95,17 +96,13 @@ bool isLocalAddress(const Poco::Net::IPAddress & address)
|
|||||||
{
|
{
|
||||||
if (address.family() == Poco::Net::AddressFamily::IPv4)
|
if (address.family() == Poco::Net::AddressFamily::IPv4)
|
||||||
{
|
{
|
||||||
union
|
using Digits = std::array<UInt8, 4>;
|
||||||
{
|
Digits digits = unalignedLoad<Digits>(address.addr()); /// The address is located in memory in big endian form.
|
||||||
UInt32 word;
|
|
||||||
unsigned char digits[4];
|
|
||||||
} digits_union;
|
|
||||||
|
|
||||||
digits_union.word = ntohl(unalignedLoad<UInt32>(address.addr()));
|
if (digits[0] == 127
|
||||||
if (digits_union.digits[0] == 127
|
&& digits[1] <= 1
|
||||||
&& digits_union.digits[1] <= 1
|
&& digits[2] <= 1
|
||||||
&& digits_union.digits[2] <= 1
|
&& digits[3] <= 1)
|
||||||
&& digits_union.digits[3] <= 1)
|
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -11,9 +11,30 @@ TEST(LocalAddress, SmokeTest)
|
|||||||
std::string address_str;
|
std::string address_str;
|
||||||
DB::readString(address_str, cmd->out);
|
DB::readString(address_str, cmd->out);
|
||||||
cmd->wait();
|
cmd->wait();
|
||||||
std::cerr << "Got Address:" << address_str << std::endl;
|
std::cerr << "Got Address: " << address_str << std::endl;
|
||||||
|
|
||||||
Poco::Net::IPAddress address(address_str);
|
Poco::Net::IPAddress address(address_str);
|
||||||
|
|
||||||
EXPECT_TRUE(DB::isLocalAddress(address));
|
EXPECT_TRUE(DB::isLocalAddress(address));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(LocalAddress, Localhost)
|
||||||
|
{
|
||||||
|
EXPECT_TRUE(DB::isLocalAddress(Poco::Net::IPAddress{"127.0.0.1"}));
|
||||||
|
EXPECT_TRUE(DB::isLocalAddress(Poco::Net::IPAddress{"127.0.1.1"}));
|
||||||
|
EXPECT_TRUE(DB::isLocalAddress(Poco::Net::IPAddress{"127.1.1.1"}));
|
||||||
|
EXPECT_TRUE(DB::isLocalAddress(Poco::Net::IPAddress{"127.1.0.1"}));
|
||||||
|
EXPECT_TRUE(DB::isLocalAddress(Poco::Net::IPAddress{"127.1.0.0"}));
|
||||||
|
EXPECT_TRUE(DB::isLocalAddress(Poco::Net::IPAddress{"::1"}));
|
||||||
|
|
||||||
|
/// Make sure we don't mess with the byte order.
|
||||||
|
EXPECT_FALSE(DB::isLocalAddress(Poco::Net::IPAddress{"1.0.0.127"}));
|
||||||
|
EXPECT_FALSE(DB::isLocalAddress(Poco::Net::IPAddress{"1.1.1.127"}));
|
||||||
|
|
||||||
|
EXPECT_FALSE(DB::isLocalAddress(Poco::Net::IPAddress{"0.0.0.0"}));
|
||||||
|
EXPECT_FALSE(DB::isLocalAddress(Poco::Net::IPAddress{"::"}));
|
||||||
|
EXPECT_FALSE(DB::isLocalAddress(Poco::Net::IPAddress{"::2"}));
|
||||||
|
|
||||||
|
/// The the comment in the implementation of isLocalAddress.
|
||||||
|
EXPECT_FALSE(DB::isLocalAddress(Poco::Net::IPAddress{"127.0.0.2"}));
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user