diff options
author | Ryan Keane <rwkeane@google.com> | 2020-06-10 10:03:39 -0700 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-06-10 17:37:15 +0000 |
commit | 492f486ddb403fcbae8d6d488e5507854edd6031 (patch) | |
tree | fb0591c3f6b1e1865f304395959b8f0f4187b6a9 /discovery/mdns | |
parent | 586eee4d1066f20fa1ca1f59546ad31bfb1b3d3e (diff) | |
download | openscreen-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.h | 17 | ||||
-rw-r--r-- | discovery/mdns/mdns_records_unittest.cc | 35 |
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) { |