// Copyright 2019 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "discovery/dnssd/impl/instance_key.h" #include #include "absl/hash/hash.h" #include "discovery/dnssd/impl/service_key.h" #include "discovery/dnssd/testing/fake_dns_record_factory.h" #include "gtest/gtest.h" namespace openscreen { namespace discovery { TEST(DnsSdInstanceKeyTest, TestInstanceKeyEquals) { InstanceKey key1("instance", "_service._udp", "domain"); InstanceKey key2("instance", "_service._udp", "domain"); EXPECT_TRUE(key1 == key2); EXPECT_FALSE(key1 != key2); key1 = InstanceKey("instance", "_service2._udp", "domain"); EXPECT_FALSE(key1 == key2); EXPECT_TRUE(key1 != key2); key2 = InstanceKey("instance", "_service2._udp", "domain"); EXPECT_TRUE(key1 == key2); EXPECT_FALSE(key1 != key2); key1 = InstanceKey("instance", "_service2._udp", "domain2"); EXPECT_FALSE(key1 == key2); EXPECT_TRUE(key1 != key2); key2 = InstanceKey("instance", "_service2._udp", "domain2"); EXPECT_TRUE(key1 == key2); EXPECT_FALSE(key1 != key2); key1 = InstanceKey("instance2", "_service2._udp", "domain2"); EXPECT_FALSE(key1 == key2); EXPECT_TRUE(key1 != key2); key2 = InstanceKey("instance2", "_service2._udp", "domain2"); EXPECT_TRUE(key1 == key2); EXPECT_FALSE(key1 != key2); } TEST(DnsSdInstanceKeyTest, TestIsInstanceOf) { ServiceKey ptr("_service._udp", "domain"); InstanceKey svc("instance", "_service._udp", "domain"); EXPECT_EQ(svc, ptr); svc = InstanceKey("other id", "_service._udp", "domain"); EXPECT_EQ(svc, ptr); svc = InstanceKey("instance", "_service._udp", "domain2"); EXPECT_FALSE(svc == ptr); ptr = ServiceKey("_service._udp", "domain2"); EXPECT_EQ(svc, ptr); svc = InstanceKey("instance", "_service2._udp", "domain"); EXPECT_NE(svc, ptr); ptr = ServiceKey("_service2._udp", "domain"); EXPECT_EQ(svc, ptr); } TEST(DnsSdInstanceKeyTest, InstanceKeyInMap) { InstanceKey key{"instance", "_service._udp", "domain"}; InstanceKey key2{"instance", "_service._udp", "domain"}; InstanceKey key3{"instance2", "_service._udp", "domain"}; InstanceKey key4{"instance", "_service2._udp", "domain"}; InstanceKey key5{"instance", "_service2._udp", "domain2"}; std::unordered_map> map; map[key] = 1; map[key2] = 2; EXPECT_EQ(map[key], 2); map[key3] = 3; EXPECT_EQ(map[key], 2); EXPECT_EQ(map[key3], 3); map[key4] = 4; EXPECT_EQ(map[key], 2); EXPECT_EQ(map[key3], 3); EXPECT_EQ(map[key4], 4); map[key5] = 5; EXPECT_EQ(map[key], 2); EXPECT_EQ(map[key3], 3); EXPECT_EQ(map[key4], 4); EXPECT_EQ(map[key5], 5); } TEST(DnsSdInstanceKeyTest, CreateFromRecordTest) { MdnsRecord record = FakeDnsRecordFactory::CreateFullyPopulatedSrvRecord(); InstanceKey key(record); EXPECT_EQ(key.instance_id(), FakeDnsRecordFactory::kInstanceName); EXPECT_EQ(key.service_id(), FakeDnsRecordFactory::kServiceName); EXPECT_EQ(key.domain_id(), FakeDnsRecordFactory::kDomainName); } TEST(DnsSdInstanceKeyTest, GetNameTest) { InstanceKey key("instance", "_service._udp", "domain"); DomainName expected{"instance", "_service", "_udp", "domain"}; EXPECT_EQ(expected, key.GetName()); key = InstanceKey("foo", "_bar._tcp", "local"); expected = DomainName{"foo", "_bar", "_tcp", "local"}; EXPECT_EQ(expected, key.GetName()); } } // namespace discovery } // namespace openscreen