TestNetworkLinkIdHashingDarwin.cpp (2709B)
1 #include <arpa/inet.h> 2 3 #include "gtest/gtest.h" 4 #include "mozilla/SHA1.h" 5 #include "nsString.h" 6 #include "nsPrintfCString.h" 7 #include "mozilla/Logging.h" 8 #include "nsNetworkLinkService.h" 9 10 using namespace mozilla; 11 12 in6_addr StringToSockAddr(const std::string& str) { 13 sockaddr_in6 ip; 14 inet_pton(AF_INET6, str.c_str(), &(ip.sin6_addr)); 15 return ip.sin6_addr; 16 } 17 18 TEST(TestNetworkLinkIdHashingDarwin, Single) 19 { 20 // Setup 21 SHA1Sum expected_sha1; 22 SHA1Sum::Hash expected_digest; 23 24 in6_addr a1 = StringToSockAddr("2001:db8:8714:3a91::1"); 25 26 // Prefix 27 expected_sha1.update(&a1, sizeof(in6_addr)); 28 // Netmask 29 expected_sha1.update(&a1, sizeof(in6_addr)); 30 expected_sha1.finish(expected_digest); 31 32 std::vector<prefix_and_netmask> prefixNetmaskStore; 33 prefixNetmaskStore.push_back(std::make_pair(a1, a1)); 34 SHA1Sum actual_sha1; 35 // Run 36 nsNetworkLinkService::HashSortedPrefixesAndNetmasks(prefixNetmaskStore, 37 &actual_sha1); 38 SHA1Sum::Hash actual_digest; 39 actual_sha1.finish(actual_digest); 40 41 // Assert 42 ASSERT_EQ(0, memcmp(&expected_digest, &actual_digest, sizeof(SHA1Sum::Hash))); 43 } 44 45 TEST(TestNetworkLinkIdHashingDarwin, Multiple) 46 { 47 // Setup 48 SHA1Sum expected_sha1; 49 SHA1Sum::Hash expected_digest; 50 51 std::vector<in6_addr> addresses; 52 addresses.push_back(StringToSockAddr("2001:db8:8714:3a91::1")); 53 addresses.push_back(StringToSockAddr("2001:db8:8714:3a91::2")); 54 addresses.push_back(StringToSockAddr("2001:db8:8714:3a91::3")); 55 addresses.push_back(StringToSockAddr("2001:db8:8714:3a91::4")); 56 57 for (const auto& address : addresses) { 58 // Prefix 59 expected_sha1.update(&address, sizeof(in6_addr)); 60 // Netmask 61 expected_sha1.update(&address, sizeof(in6_addr)); 62 } 63 expected_sha1.finish(expected_digest); 64 65 // Ordered 66 std::vector<prefix_and_netmask> ordered; 67 for (const auto& address : addresses) { 68 ordered.push_back(std::make_pair(address, address)); 69 } 70 SHA1Sum ordered_sha1; 71 72 // Unordered 73 std::vector<prefix_and_netmask> reversed; 74 for (auto it = addresses.rbegin(); it != addresses.rend(); ++it) { 75 reversed.push_back(std::make_pair(*it, *it)); 76 } 77 SHA1Sum reversed_sha1; 78 79 // Run 80 nsNetworkLinkService::HashSortedPrefixesAndNetmasks(ordered, &ordered_sha1); 81 SHA1Sum::Hash ordered_digest; 82 ordered_sha1.finish(ordered_digest); 83 84 nsNetworkLinkService::HashSortedPrefixesAndNetmasks(reversed, &reversed_sha1); 85 SHA1Sum::Hash reversed_digest; 86 reversed_sha1.finish(reversed_digest); 87 88 // Assert 89 ASSERT_EQ(0, 90 memcmp(&expected_digest, &ordered_digest, sizeof(SHA1Sum::Hash))); 91 ASSERT_EQ(0, 92 memcmp(&expected_digest, &reversed_digest, sizeof(SHA1Sum::Hash))); 93 }