Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(159)

Side by Side Diff: net/base/ip_pattern_unittest.cc

Issue 156963003: Support replacement of IP address resolutions via command line flag (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: remove use of back() and front() string methods Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2014 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 "net/base/ip_pattern.h"
6
7 #include "testing/gtest/include/gtest/gtest.h"
8
9 namespace net {
10
11 namespace {
12
13 bool IsValidPattern(const std::string& pattern_text) {
14 IPPattern pattern;
15 return pattern.ParsePattern(pattern_text);
16 }
17
18 bool CheckForMatch(const IPPattern& pattern, std::string address_text) {
19 IPAddressNumber address;
20 EXPECT_TRUE(ParseIPLiteralToNumber(address_text, &address));
21 return pattern.Match(address);
22 }
23
24 TEST(IPPatternTest, EmptyPattern) {
25 IPPattern pattern;
26 IPAddressNumber ipv4_address1;
27 EXPECT_TRUE(ParseIPLiteralToNumber("1.2.3.4", &ipv4_address1));
28 IPAddressNumber ipv6_address1;
29 EXPECT_TRUE(ParseIPLiteralToNumber("1:2:3:4:5:6:7:8", &ipv6_address1));
30
31 EXPECT_FALSE(pattern.Match(ipv4_address1));
32 EXPECT_FALSE(pattern.Match(ipv6_address1));
33 }
34
35 TEST(IPPatternTest, PerfectMatchPattern) {
36 IPPattern pattern_v4;
37 std::string ipv4_text1("1.2.3.4");
38 EXPECT_TRUE(pattern_v4.ParsePattern(ipv4_text1));
39 EXPECT_TRUE(pattern_v4.is_ipv4());
40 EXPECT_TRUE(CheckForMatch(pattern_v4, ipv4_text1));
41
42 IPPattern pattern_v6;
43 std::string ipv6_text1("1:2:3:4:5:6:7:8");
44 EXPECT_TRUE(pattern_v6.ParsePattern(ipv6_text1));
45 EXPECT_FALSE(pattern_v6.is_ipv4());
46 EXPECT_TRUE(CheckForMatch(pattern_v6, ipv6_text1));
47
48 // Also check that there is no confusion betwene v6 and v4, despite having
49 // similar values in some sense.
50 EXPECT_FALSE(CheckForMatch(pattern_v4, ipv6_text1));
51 EXPECT_FALSE(CheckForMatch(pattern_v6, ipv4_text1));
52 }
53
54 TEST(IPPatternTest, AlternativeMatchPattern) {
55 IPPattern pattern_v4;
56 EXPECT_TRUE(pattern_v4.ParsePattern("1.2.[3,5].4"));
57 EXPECT_TRUE(pattern_v4.is_ipv4());
58 EXPECT_FALSE(CheckForMatch(pattern_v4, "1.2.2.4"));
59 EXPECT_TRUE(CheckForMatch(pattern_v4, "1.2.3.4"));
60 EXPECT_FALSE(CheckForMatch(pattern_v4, "1.2.4.4"));
61 EXPECT_TRUE(CheckForMatch(pattern_v4, "1.2.5.4"));
62 EXPECT_FALSE(CheckForMatch(pattern_v4, "1.2.6.4"));
63
64 IPPattern pattern_v6;
65 EXPECT_TRUE(pattern_v6.ParsePattern("1:2fab:3:4:5:[6,8]:7:8"));
66 EXPECT_FALSE(pattern_v6.is_ipv4());
67 EXPECT_FALSE(CheckForMatch(pattern_v6, "1:2fab:3:4:5:5:7:8"));
68 EXPECT_TRUE(CheckForMatch(pattern_v6, "1:2fab:3:4:5:6:7:8"));
69 EXPECT_FALSE(CheckForMatch(pattern_v6, "1:2fab:3:4:5:7:7:8"));
70 EXPECT_TRUE(CheckForMatch(pattern_v6, "1:2fab:3:4:5:8:7:8"));
71 EXPECT_FALSE(CheckForMatch(pattern_v6, "1:2fab:3:4:5:9:7:8"));
72 }
73
74 TEST(IPPatternTest, RangeMatchPattern) {
75 IPPattern pattern_v4;
76 EXPECT_TRUE(pattern_v4.ParsePattern("1.2.[3-5].4"));
77 EXPECT_TRUE(pattern_v4.is_ipv4());
78 EXPECT_FALSE(CheckForMatch(pattern_v4, "1.2.2.4"));
79 EXPECT_TRUE(CheckForMatch(pattern_v4, "1.2.3.4"));
80 EXPECT_TRUE(CheckForMatch(pattern_v4, "1.2.4.4"));
81 EXPECT_TRUE(CheckForMatch(pattern_v4, "1.2.5.4"));
82 EXPECT_FALSE(CheckForMatch(pattern_v4, "1.2.6.4"));
83
84 IPPattern pattern_v6;
85 EXPECT_TRUE(pattern_v6.ParsePattern("1:2fab:3:4:5:[6-8]:7:8"));
86 EXPECT_FALSE(pattern_v6.is_ipv4());
87 EXPECT_FALSE(CheckForMatch(pattern_v6, "1:2fab:3:4:5:5:7:8"));
88 EXPECT_TRUE(CheckForMatch(pattern_v6, "1:2fab:3:4:5:6:7:8"));
89 EXPECT_TRUE(CheckForMatch(pattern_v6, "1:2fab:3:4:5:7:7:8"));
90 EXPECT_TRUE(CheckForMatch(pattern_v6, "1:2fab:3:4:5:8:7:8"));
91 EXPECT_FALSE(CheckForMatch(pattern_v6, "1:2fab:3:4:5:9:7:8"));
92 }
93
94 TEST(IPPatternTest, WildCardMatchPattern) {
95 // Use two ranges, and check that only getting both right is a match.
96 IPPattern pattern_v4;
97 EXPECT_TRUE(pattern_v4.ParsePattern("1.2.*.4"));
98 EXPECT_TRUE(pattern_v4.is_ipv4());
99 EXPECT_FALSE(CheckForMatch(pattern_v4, "1.2.2.255"));
100 EXPECT_TRUE(CheckForMatch(pattern_v4, "1.2.255.4"));
101 EXPECT_TRUE(CheckForMatch(pattern_v4, "1.2.0.4"));
102
103 IPPattern pattern_v6;
104 EXPECT_TRUE(pattern_v6.ParsePattern("1:2fab:3:4:5:*:7:8"));
105 EXPECT_FALSE(pattern_v6.is_ipv4());
106 EXPECT_FALSE(CheckForMatch(pattern_v6, "1:2fab:3:4:5:5:7:8888"));
107 EXPECT_TRUE(CheckForMatch(pattern_v6, "1:2fab:3:4:5:FFFF:7:8"));
108 EXPECT_TRUE(CheckForMatch(pattern_v6, "1:2fab:3:4:5:9999:7:8"));
109 }
110
111 TEST(IPPatternTest, MultiRangeMatchPattern) {
112 // Use two ranges, and check that only getting both right is a match.
113 // This ensures that the right component range is matched against the desired
114 // component.
115 IPPattern pattern_v4;
116 EXPECT_TRUE(pattern_v4.ParsePattern("1.[2-3].3.[4-5]"));
117 EXPECT_TRUE(pattern_v4.is_ipv4());
118 EXPECT_FALSE(CheckForMatch(pattern_v4, "1.4.3.6"));
119 EXPECT_FALSE(CheckForMatch(pattern_v4, "1.2.3.6"));
120 EXPECT_FALSE(CheckForMatch(pattern_v4, "1.4.3.4"));
121 EXPECT_TRUE(CheckForMatch(pattern_v4, "1.2.3.4"));
122
123 IPPattern pattern_v6;
124 EXPECT_TRUE(pattern_v6.ParsePattern("1:2fab:3:4:[5-7]:6:7:[8-A]"));
125 EXPECT_FALSE(pattern_v6.is_ipv4());
126 EXPECT_FALSE(CheckForMatch(pattern_v6, "1:2fab:3:4:4:5:7:F"));
127 EXPECT_FALSE(CheckForMatch(pattern_v6, "1:2fab:3:4:5:5:7:F"));
128 EXPECT_FALSE(CheckForMatch(pattern_v6, "1:2fab:3:4:4:6:7:A"));
129 EXPECT_TRUE(CheckForMatch(pattern_v6, "1:2fab:3:4:5:6:7:A"));
130 }
131
132 TEST(IPPatternTest, BytoOrderInIPv6Ranges) {
133 IPPattern pattern_v6_low_byte;
134 EXPECT_TRUE(pattern_v6_low_byte.ParsePattern("1:2:3:4:5:6:7:[0-FF]"));
135 EXPECT_TRUE(CheckForMatch(pattern_v6_low_byte, "1:2:3:4:5:6:7:0088"));
136 EXPECT_FALSE(CheckForMatch(pattern_v6_low_byte, "1:2:3:4:5:6:7:8800"));
137
138 IPPattern pattern_v6_high_byte;
139 EXPECT_TRUE(pattern_v6_high_byte.ParsePattern("1:2:3:4:5:6:7:[0-FF00]"));
140 EXPECT_TRUE(CheckForMatch(pattern_v6_high_byte, "1:2:3:4:5:6:7:0088"));
141 EXPECT_TRUE(CheckForMatch(pattern_v6_high_byte, "1:2:3:4:5:6:7:FF00"));
142 EXPECT_FALSE(CheckForMatch(pattern_v6_high_byte, "1:2:3:4:5:6:7:FF01"));
143 }
144
145 TEST(IPPatternTest, InvalidPatterns) {
146 EXPECT_FALSE(IsValidPattern("1:2:3:4:5:6:7:8:9")); // Too long.
147 EXPECT_FALSE(IsValidPattern("1:2:3:4:5:6:7")); // Too Short
148 EXPECT_FALSE(IsValidPattern("1:2:3:4:5:6:7:H")); // Non-hex.
149 EXPECT_FALSE(IsValidPattern("1:G:3:4:5:6:7:8")); // Non-hex.
150
151 EXPECT_FALSE(IsValidPattern("1.2.3.4.5")); // Too long
152 EXPECT_FALSE(IsValidPattern("1.2.3")); // Too short
153 EXPECT_FALSE(IsValidPattern("1.2.3.A")); // Non-decimal.
154 EXPECT_FALSE(IsValidPattern("1.A.3.4")); // Non-decimal
155 EXPECT_FALSE(IsValidPattern("1.256.3.4")); // Out of range
156 }
157
158 } // namespace
159
160 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698