1 // Copyright 2014 The Chromium Authors
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 "net/quic/quic_address_mismatch.h"
6
7 #include "testing/gtest/include/gtest/gtest.h"
8
9 namespace net::test {
10
11 // Test all cases of the GetAddressMismatch function.
TEST(QuicAddressMismatchTest,GetAddressMismatch)12 TEST(QuicAddressMismatchTest, GetAddressMismatch) {
13 IPAddress ip4_1;
14 IPAddress ip4_2;
15 IPAddress ip6_1;
16 IPAddress ip6_2;
17 IPAddress ip4_mapped_1;
18 IPAddress ip4_mapped_2;
19 ASSERT_TRUE(ip4_1.AssignFromIPLiteral("1.2.3.4"));
20 ASSERT_TRUE(ip4_2.AssignFromIPLiteral("5.6.7.8"));
21 ASSERT_TRUE(ip6_1.AssignFromIPLiteral("1234::1"));
22 ASSERT_TRUE(ip6_2.AssignFromIPLiteral("1234::2"));
23 ip4_mapped_1 = ConvertIPv4ToIPv4MappedIPv6(ip4_1);
24 ip4_mapped_2 = ConvertIPv4ToIPv4MappedIPv6(ip4_2);
25 ASSERT_NE(ip4_1, ip4_2);
26 ASSERT_NE(ip6_1, ip6_2);
27 ASSERT_NE(ip4_mapped_1, ip4_mapped_2);
28
29 EXPECT_EQ(-1, GetAddressMismatch(IPEndPoint(), IPEndPoint()));
30 EXPECT_EQ(-1, GetAddressMismatch(IPEndPoint(), IPEndPoint(ip4_1, 443)));
31 EXPECT_EQ(-1, GetAddressMismatch(IPEndPoint(ip4_1, 443), IPEndPoint()));
32
33 EXPECT_EQ(QUIC_ADDRESS_AND_PORT_MATCH_V4_V4,
34 GetAddressMismatch(IPEndPoint(ip4_1, 443), IPEndPoint(ip4_1, 443)));
35 EXPECT_EQ(QUIC_ADDRESS_AND_PORT_MATCH_V4_V4,
36 GetAddressMismatch(IPEndPoint(ip4_1, 443),
37 IPEndPoint(ip4_mapped_1, 443)));
38 EXPECT_EQ(QUIC_ADDRESS_AND_PORT_MATCH_V4_V4,
39 GetAddressMismatch(IPEndPoint(ip4_mapped_1, 443),
40 IPEndPoint(ip4_mapped_1, 443)));
41 EXPECT_EQ(QUIC_ADDRESS_AND_PORT_MATCH_V6_V6,
42 GetAddressMismatch(IPEndPoint(ip6_1, 443), IPEndPoint(ip6_1, 443)));
43
44 EXPECT_EQ(QUIC_PORT_MISMATCH_V4_V4,
45 GetAddressMismatch(IPEndPoint(ip4_1, 80), IPEndPoint(ip4_1, 443)));
46 EXPECT_EQ(
47 QUIC_PORT_MISMATCH_V4_V4,
48 GetAddressMismatch(IPEndPoint(ip4_1, 80), IPEndPoint(ip4_mapped_1, 443)));
49 EXPECT_EQ(QUIC_PORT_MISMATCH_V4_V4,
50 GetAddressMismatch(IPEndPoint(ip4_mapped_1, 80),
51 IPEndPoint(ip4_mapped_1, 443)));
52 EXPECT_EQ(QUIC_PORT_MISMATCH_V6_V6,
53 GetAddressMismatch(IPEndPoint(ip6_1, 80), IPEndPoint(ip6_1, 443)));
54
55 EXPECT_EQ(QUIC_ADDRESS_MISMATCH_V4_V4,
56 GetAddressMismatch(IPEndPoint(ip4_1, 443), IPEndPoint(ip4_2, 443)));
57 EXPECT_EQ(QUIC_ADDRESS_MISMATCH_V4_V4,
58 GetAddressMismatch(IPEndPoint(ip4_1, 443),
59 IPEndPoint(ip4_mapped_2, 443)));
60 EXPECT_EQ(QUIC_ADDRESS_MISMATCH_V4_V4,
61 GetAddressMismatch(IPEndPoint(ip4_mapped_1, 443),
62 IPEndPoint(ip4_mapped_2, 443)));
63 EXPECT_EQ(QUIC_ADDRESS_MISMATCH_V4_V4,
64 GetAddressMismatch(IPEndPoint(ip4_1, 80), IPEndPoint(ip4_2, 443)));
65 EXPECT_EQ(
66 QUIC_ADDRESS_MISMATCH_V4_V4,
67 GetAddressMismatch(IPEndPoint(ip4_1, 80), IPEndPoint(ip4_mapped_2, 443)));
68 EXPECT_EQ(QUIC_ADDRESS_MISMATCH_V4_V4,
69 GetAddressMismatch(IPEndPoint(ip4_mapped_1, 80),
70 IPEndPoint(ip4_mapped_2, 443)));
71 EXPECT_EQ(QUIC_ADDRESS_MISMATCH_V6_V6,
72 GetAddressMismatch(IPEndPoint(ip6_1, 443), IPEndPoint(ip6_2, 443)));
73 EXPECT_EQ(QUIC_ADDRESS_MISMATCH_V6_V6,
74 GetAddressMismatch(IPEndPoint(ip6_1, 80), IPEndPoint(ip6_2, 443)));
75 EXPECT_EQ(QUIC_ADDRESS_MISMATCH_V4_V6,
76 GetAddressMismatch(IPEndPoint(ip4_1, 443), IPEndPoint(ip6_1, 443)));
77 EXPECT_EQ(QUIC_ADDRESS_MISMATCH_V4_V6,
78 GetAddressMismatch(IPEndPoint(ip4_mapped_1, 443),
79 IPEndPoint(ip6_1, 443)));
80 EXPECT_EQ(QUIC_ADDRESS_MISMATCH_V4_V6,
81 GetAddressMismatch(IPEndPoint(ip4_1, 80), IPEndPoint(ip6_1, 443)));
82 EXPECT_EQ(
83 QUIC_ADDRESS_MISMATCH_V4_V6,
84 GetAddressMismatch(IPEndPoint(ip4_mapped_1, 80), IPEndPoint(ip6_1, 443)));
85 EXPECT_EQ(QUIC_ADDRESS_MISMATCH_V6_V4,
86 GetAddressMismatch(IPEndPoint(ip6_1, 443), IPEndPoint(ip4_1, 443)));
87 EXPECT_EQ(QUIC_ADDRESS_MISMATCH_V6_V4,
88 GetAddressMismatch(IPEndPoint(ip6_1, 443),
89 IPEndPoint(ip4_mapped_1, 443)));
90 EXPECT_EQ(QUIC_ADDRESS_MISMATCH_V6_V4,
91 GetAddressMismatch(IPEndPoint(ip6_1, 80), IPEndPoint(ip4_1, 443)));
92 EXPECT_EQ(
93 QUIC_ADDRESS_MISMATCH_V6_V4,
94 GetAddressMismatch(IPEndPoint(ip6_1, 80), IPEndPoint(ip4_mapped_1, 443)));
95 }
96
97 } // namespace net::test
98