1 // Copyright 2019 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "discovery/dnssd/public/dns_sd_instance_endpoint.h"
6 
7 #include "discovery/dnssd/public/dns_sd_instance.h"
8 #include "gmock/gmock.h"
9 #include "gtest/gtest.h"
10 
11 namespace openscreen {
12 namespace discovery {
13 
TEST(DnsSdInstanceEndpointTests,ComparisonTests)14 TEST(DnsSdInstanceEndpointTests, ComparisonTests) {
15   constexpr NetworkInterfaceIndex kIndex0 = 0;
16   constexpr NetworkInterfaceIndex kIndex1 = 1;
17   DnsSdInstance instance("instance", "_test._tcp", "local", {}, 80);
18   DnsSdInstance instance2("instance", "_test._tcp", "local", {}, 79);
19   IPEndpoint ep1{{192, 168, 80, 32}, 80};
20   IPEndpoint ep2{{192, 168, 80, 32}, 79};
21   IPEndpoint ep3{{192, 168, 80, 33}, 79};
22   DnsSdInstanceEndpoint endpoint1(instance, kIndex1, ep1);
23   DnsSdInstanceEndpoint endpoint2("instance", "_test._tcp", "local", {},
24                                   kIndex1, ep1);
25   DnsSdInstanceEndpoint endpoint3(instance2, kIndex1, ep2);
26   DnsSdInstanceEndpoint endpoint4(instance2, kIndex0, ep2);
27   DnsSdInstanceEndpoint endpoint5(instance2, kIndex1, ep3);
28   DnsSdInstanceEndpoint endpoint6("instance", "_test._tcp", "local", {},
29                                   kIndex1, ep1, "foo", "bar");
30   DnsSdInstanceEndpoint endpoint7("instance", "_test._tcp", "local", {},
31                                   kIndex1, ep1, "foo", "foobar");
32   DnsSdInstanceEndpoint endpoint8("instance", "_test._tcp", "local", {},
33                                   kIndex1, ep1, "foobar");
34 
35   EXPECT_EQ(static_cast<DnsSdInstance>(endpoint1),
36             static_cast<DnsSdInstance>(endpoint2));
37   EXPECT_EQ(endpoint1, endpoint2);
38   EXPECT_GE(endpoint1, endpoint3);
39   EXPECT_GE(endpoint1, endpoint4);
40   EXPECT_LE(endpoint1, endpoint5);
41   EXPECT_LE(endpoint1, endpoint6);
42   EXPECT_LE(endpoint1, endpoint7);
43   EXPECT_LE(endpoint1, endpoint8);
44 
45   EXPECT_GE(endpoint3, endpoint4);
46   EXPECT_LE(endpoint3, endpoint5);
47 
48   EXPECT_LE(endpoint4, endpoint5);
49 
50   EXPECT_LE(endpoint6, endpoint7);
51   EXPECT_GE(endpoint6, endpoint8);
52   EXPECT_GE(endpoint7, endpoint8);
53 }
54 
TEST(DnsSdInstanceEndpointTests,Constructors)55 TEST(DnsSdInstanceEndpointTests, Constructors) {
56   constexpr NetworkInterfaceIndex kIndex = 0;
57   std::vector<std::string> subtypes{"foo", "bar", "foobar"};
58   IPEndpoint endpoint1{{192, 168, 12, 21}, 80};
59   IPEndpoint endpoint2{{227, 0, 0, 1}, 80};
60   DnsSdInstance instance("instance", "_test._tcp", "local", {}, 80, subtypes);
61 
62   DnsSdInstanceEndpoint ep1(instance, kIndex, endpoint1, endpoint2);
63   DnsSdInstanceEndpoint ep2(instance, kIndex,
64                             std::vector<IPEndpoint>{endpoint1, endpoint2});
65   DnsSdInstanceEndpoint ep3("instance", "_test._tcp", "local", {}, kIndex,
66                             endpoint1, endpoint2, "foo", "bar", "foobar");
67   DnsSdInstanceEndpoint ep4("instance", "_test._tcp", "local", {}, kIndex,
68                             std::vector<IPEndpoint>{endpoint1, endpoint2},
69                             subtypes);
70 
71   EXPECT_EQ(ep1, ep2);
72   EXPECT_EQ(ep1, ep3);
73   EXPECT_EQ(ep1, ep4);
74 }
75 
76 }  // namespace discovery
77 }  // namespace openscreen
78