aboutsummaryrefslogtreecommitdiff
path: root/discovery/mdns
diff options
context:
space:
mode:
authorRyan Keane <rwkeane@google.com>2020-06-10 10:03:39 -0700
committerCommit Bot <commit-bot@chromium.org>2020-06-10 17:37:15 +0000
commit492f486ddb403fcbae8d6d488e5507854edd6031 (patch)
treefb0591c3f6b1e1865f304395959b8f0f4187b6a9 /discovery/mdns
parent586eee4d1066f20fa1ca1f59546ad31bfb1b3d3e (diff)
downloadopenscreen-492f486ddb403fcbae8d6d488e5507854edd6031.tar.gz
mDNS: Add Hashing Tests
Found while writing another patch that there were bugs in the existing hash functions. This CL should fix them and add UTs for validation Change-Id: Ifb0efd09a2bc3de7d206924e9755bafdfe887509 Reviewed-on: https://chromium-review.googlesource.com/c/openscreen/+/2233371 Commit-Queue: Ryan Keane <rwkeane@google.com> Reviewed-by: Jordan Bayles <jophba@chromium.org>
Diffstat (limited to 'discovery/mdns')
-rw-r--r--discovery/mdns/mdns_records.h17
-rw-r--r--discovery/mdns/mdns_records_unittest.cc35
2 files changed, 47 insertions, 5 deletions
diff --git a/discovery/mdns/mdns_records.h b/discovery/mdns/mdns_records.h
index b797f329..8e9ac244 100644
--- a/discovery/mdns/mdns_records.h
+++ b/discovery/mdns/mdns_records.h
@@ -13,6 +13,7 @@
#include <utility>
#include <vector>
+#include "absl/strings/ascii.h"
#include "absl/strings/string_view.h"
#include "absl/types/variant.h"
#include "discovery/mdns/public/mdns_constants.h"
@@ -86,7 +87,11 @@ class DomainName {
template <typename H>
friend H AbslHashValue(H h, const DomainName& domain_name) {
- return H::combine(std::move(h), domain_name.labels_);
+ std::vector<std::string> labels_clone = domain_name.labels_;
+ for (auto& label : labels_clone) {
+ absl::AsciiStrToLower(&label);
+ }
+ return H::combine(std::move(h), std::move(labels_clone));
}
private:
@@ -188,7 +193,8 @@ class ARecordRdata {
template <typename H>
friend H AbslHashValue(H h, const ARecordRdata& rdata) {
- return H::combine(std::move(h), rdata.ipv4_address_.bytes());
+ const auto& bytes = rdata.ipv4_address_.bytes();
+ return H::combine_contiguous(std::move(h), bytes, 4);
}
private:
@@ -217,7 +223,8 @@ class AAAARecordRdata {
template <typename H>
friend H AbslHashValue(H h, const AAAARecordRdata& rdata) {
- return H::combine(std::move(h), rdata.ipv6_address_.bytes());
+ const auto& bytes = rdata.ipv6_address_.bytes();
+ return H::combine_contiguous(std::move(h), bytes, 16);
}
private:
@@ -408,8 +415,8 @@ class MdnsRecord {
template <typename H>
friend H AbslHashValue(H h, const MdnsRecord& record) {
return H::combine(std::move(h), record.name_, record.dns_type_,
- record.dns_class_, record.record_type_, record.ttl_,
- record.rdata_);
+ record.dns_class_, record.record_type_,
+ record.ttl_.count(), record.rdata_);
}
private:
diff --git a/discovery/mdns/mdns_records_unittest.cc b/discovery/mdns/mdns_records_unittest.cc
index 0fab37de..6531697f 100644
--- a/discovery/mdns/mdns_records_unittest.cc
+++ b/discovery/mdns/mdns_records_unittest.cc
@@ -4,6 +4,7 @@
#include "discovery/mdns/mdns_records.h"
+#include "absl/hash/hash_testing.h"
#include "discovery/mdns/mdns_reader.h"
#include "discovery/mdns/mdns_writer.h"
#include "discovery/mdns/testing/mdns_test_util.h"
@@ -102,6 +103,9 @@ TEST(MdnsDomainNameTest, Compare) {
EXPECT_FALSE(fourth < fifth);
EXPECT_FALSE(fifth < fourth);
+
+ EXPECT_TRUE(absl::VerifyTypeImplementsAbslHashCorrectly(
+ {first, second, third, fourth, fifth}));
}
TEST(MdnsDomainNameTest, CopyAndMove) {
@@ -147,6 +151,9 @@ TEST(MdnsRawRecordRdataTest, Compare) {
EXPECT_EQ(rdata1, rdata2);
EXPECT_NE(rdata1, rdata3);
+
+ EXPECT_TRUE(
+ absl::VerifyTypeImplementsAbslHashCorrectly({rdata1, rdata2, rdata3}));
}
TEST(MdnsRawRecordRdataTest, CopyAndMove) {
@@ -185,6 +192,9 @@ TEST(MdnsSrvRecordRdataTest, Compare) {
EXPECT_NE(rdata1, rdata4);
EXPECT_NE(rdata1, rdata5);
EXPECT_NE(rdata1, rdata6);
+
+ EXPECT_TRUE(absl::VerifyTypeImplementsAbslHashCorrectly(
+ {rdata1, rdata2, rdata3, rdata4, rdata5, rdata6}));
}
TEST(MdnsSrvRecordRdataTest, CopyAndMove) {
@@ -208,6 +218,9 @@ TEST(MdnsARecordRdataTest, Compare) {
EXPECT_EQ(rdata1, rdata2);
EXPECT_NE(rdata1, rdata3);
+
+ EXPECT_TRUE(
+ absl::VerifyTypeImplementsAbslHashCorrectly({rdata1, rdata2, rdata3}));
}
TEST(MdnsARecordRdataTest, CopyAndMove) {
@@ -249,6 +262,9 @@ TEST(MdnsAAAARecordRdataTest, Compare) {
EXPECT_EQ(rdata1, rdata2);
EXPECT_NE(rdata1, rdata3);
+
+ EXPECT_TRUE(
+ absl::VerifyTypeImplementsAbslHashCorrectly({rdata1, rdata2, rdata3}));
}
TEST(MdnsAAAARecordRdataTest, CopyAndMove) {
@@ -275,6 +291,9 @@ TEST(MdnsPtrRecordRdataTest, Compare) {
EXPECT_EQ(rdata1, rdata2);
EXPECT_NE(rdata1, rdata3);
+
+ EXPECT_TRUE(
+ absl::VerifyTypeImplementsAbslHashCorrectly({rdata1, rdata2, rdata3}));
}
TEST(MdnsPtrRecordRdataTest, CopyAndMove) {
@@ -300,6 +319,9 @@ TEST(MdnsTxtRecordRdataTest, Compare) {
EXPECT_EQ(rdata1, rdata2);
EXPECT_NE(rdata1, rdata3);
EXPECT_NE(rdata1, rdata4);
+
+ EXPECT_TRUE(absl::VerifyTypeImplementsAbslHashCorrectly(
+ {rdata1, rdata2, rdata3, rdata4}));
}
TEST(MdnsTxtRecordRdataTest, CopyAndMove) {
@@ -428,6 +450,9 @@ TEST(MdnsNsecRecordRdataTest, Compare) {
EXPECT_NE(rdata1, rdata3);
EXPECT_NE(rdata1, rdata4);
EXPECT_NE(rdata3, rdata4);
+
+ EXPECT_TRUE(absl::VerifyTypeImplementsAbslHashCorrectly(
+ {rdata1, rdata2, rdata3, rdata4}));
}
TEST(MdnsNsecRecordRdataTest, CopyAndMove) {
@@ -489,6 +514,9 @@ TEST(MdnsRecordTest, Compare) {
EXPECT_NE(record1, record5);
EXPECT_NE(record1, record6);
EXPECT_NE(record1, record7);
+
+ EXPECT_TRUE(absl::VerifyTypeImplementsAbslHashCorrectly(
+ {record1, record2, record3, record4, record5, record6, record7}));
}
TEST(MdnsRecordTest, CopyAndMove) {
@@ -531,6 +559,9 @@ TEST(MdnsQuestionTest, Compare) {
EXPECT_NE(question1, question3);
EXPECT_NE(question1, question4);
EXPECT_NE(question1, question5);
+
+ EXPECT_TRUE(absl::VerifyTypeImplementsAbslHashCorrectly(
+ {question1, question2, question3, question4, question5}));
}
TEST(MdnsQuestionTest, CopyAndMove) {
@@ -656,6 +687,10 @@ TEST(MdnsMessageTest, Compare) {
EXPECT_NE(message1, message6);
EXPECT_NE(message1, message7);
EXPECT_NE(message1, message8);
+
+ EXPECT_TRUE(absl::VerifyTypeImplementsAbslHashCorrectly(
+ {message1, message2, message3, message4, message5, message6, message7,
+ message8}));
}
TEST(MdnsMessageTest, CopyAndMove) {