add DNSName::isPartOf() + tests
This commit is contained in:
parent
7a91009a32
commit
a214e5cf04
@ -21,6 +21,27 @@ bool DNSName::makeRelative(const DNSName& root)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//! Checks is this DNSName is part of root
|
||||||
|
bool DNSName::isPartOf(const DNSName& root) const
|
||||||
|
{
|
||||||
|
auto them = root.d_name.crbegin(), us = d_name.crbegin();
|
||||||
|
for(;;) {
|
||||||
|
if(them == root.d_name.crend())
|
||||||
|
return true;
|
||||||
|
if(us == d_name.crend())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if(*them == *us) {
|
||||||
|
++them;
|
||||||
|
++us;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//! Append two DNSNames
|
//! Append two DNSNames
|
||||||
DNSName operator+(const DNSName& a, const DNSName& b)
|
DNSName operator+(const DNSName& a, const DNSName& b)
|
||||||
{
|
{
|
||||||
|
@ -146,6 +146,7 @@ struct DNSName
|
|||||||
auto size() { return d_name.size(); }
|
auto size() { return d_name.size(); }
|
||||||
void clear() { d_name.clear(); }
|
void clear() { d_name.clear(); }
|
||||||
bool makeRelative(const DNSName& root);
|
bool makeRelative(const DNSName& root);
|
||||||
|
bool isPartOf(const DNSName& root) const;
|
||||||
std::string toString() const;
|
std::string toString() const;
|
||||||
bool operator==(const DNSName& rhs) const
|
bool operator==(const DNSName& rhs) const
|
||||||
{
|
{
|
||||||
|
@ -39,6 +39,18 @@ TEST_CASE("DNSName operations", "[dnsname]") {
|
|||||||
|
|
||||||
REQUIRE(test2.makeRelative({"org"}));
|
REQUIRE(test2.makeRelative({"org"}));
|
||||||
REQUIRE(test2 == DNSName({"www", "powerdns"}));
|
REQUIRE(test2 == DNSName({"www", "powerdns"}));
|
||||||
|
|
||||||
|
DNSName parent({"powerdns", "com"}), root({}), child({"www", "powerdns", "com"});
|
||||||
|
DNSName unrelated({"www", "isc", "org"});
|
||||||
|
DNSName Org({"Org"});
|
||||||
|
REQUIRE(parent.isPartOf(root));
|
||||||
|
REQUIRE(child.isPartOf(parent));
|
||||||
|
REQUIRE(child.isPartOf(root));
|
||||||
|
REQUIRE(!root.isPartOf(parent));
|
||||||
|
REQUIRE(!parent.isPartOf(child));
|
||||||
|
REQUIRE(!unrelated.isPartOf(child));
|
||||||
|
REQUIRE(!child.isPartOf(unrelated));
|
||||||
|
REQUIRE(unrelated.isPartOf(Org));
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("DNS Messages", "[dnsmessage]") {
|
TEST_CASE("DNS Messages", "[dnsmessage]") {
|
||||||
|
Loading…
Reference in New Issue
Block a user