blob: b6247636caa9e1a5b79f3488935a87151452621a [file] [log] [blame]
battre4cdaa7c2016-01-07 11:30:271// Copyright 2015 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 "components/feedback/anonymizer_tool.h"
6
7#include <gtest/gtest.h>
8
battre03910b42016-01-11 13:42:349#include "base/strings/string_util.h"
10
battre4cdaa7c2016-01-07 11:30:2711namespace feedback {
12
13class AnonymizerToolTest : public testing::Test {
14 protected:
15 std::string AnonymizeMACAddresses(const std::string& input) {
16 return anonymizer_.AnonymizeMACAddresses(input);
17 }
18
19 std::string AnonymizeCustomPatterns(const std::string& input) {
20 return anonymizer_.AnonymizeCustomPatterns(input);
21 }
22
battre03910b42016-01-11 13:42:3423 std::string AnonymizeCustomPatternWithContext(
battre4cdaa7c2016-01-07 11:30:2724 const std::string& input,
25 const std::string& pattern,
26 std::map<std::string, std::string>* space) {
battre03910b42016-01-11 13:42:3427 return anonymizer_.AnonymizeCustomPatternWithContext(input, pattern, space);
28 }
29
30 std::string AnonymizeCustomPatternWithoutContext(
31 const std::string& input,
32 const CustomPatternWithoutContext& pattern,
33 std::map<std::string, std::string>* space) {
34 return anonymizer_.AnonymizeCustomPatternWithoutContext(input, pattern,
35 space);
battre4cdaa7c2016-01-07 11:30:2736 }
37
38 AnonymizerTool anonymizer_;
39};
40
41TEST_F(AnonymizerToolTest, Anonymize) {
42 EXPECT_EQ("", anonymizer_.Anonymize(""));
43 EXPECT_EQ("foo\nbar\n", anonymizer_.Anonymize("foo\nbar\n"));
44
45 // Make sure MAC address anonymization is invoked.
46 EXPECT_EQ("02:46:8a:00:00:01", anonymizer_.Anonymize("02:46:8a:ce:13:57"));
47
48 // Make sure custom pattern anonymization is invoked.
49 EXPECT_EQ("Cell ID: '1'", AnonymizeCustomPatterns("Cell ID: 'A1B2'"));
50}
51
52TEST_F(AnonymizerToolTest, AnonymizeMACAddresses) {
53 EXPECT_EQ("", AnonymizeMACAddresses(""));
54 EXPECT_EQ("foo\nbar\n", AnonymizeMACAddresses("foo\nbar\n"));
55 EXPECT_EQ("11:22:33:44:55", AnonymizeMACAddresses("11:22:33:44:55"));
56 EXPECT_EQ("aa:bb:cc:00:00:01", AnonymizeMACAddresses("aa:bb:cc:dd:ee:ff"));
57 EXPECT_EQ(
58 "BSSID: aa:bb:cc:00:00:01 in the middle\n"
59 "bb:cc:dd:00:00:02 start of line\n"
60 "end of line aa:bb:cc:00:00:01\n"
61 "no match across lines aa:bb:cc:\n"
62 "dd:ee:ff two on the same line:\n"
63 "x bb:cc:dd:00:00:02 cc:dd:ee:00:00:03 x\n",
64 AnonymizeMACAddresses("BSSID: aa:bb:cc:dd:ee:ff in the middle\n"
65 "bb:cc:dd:ee:ff:00 start of line\n"
66 "end of line aa:bb:cc:dd:ee:ff\n"
67 "no match across lines aa:bb:cc:\n"
68 "dd:ee:ff two on the same line:\n"
69 "x bb:cc:dd:ee:ff:00 cc:dd:ee:ff:00:11 x\n"));
70 EXPECT_EQ("Remember bb:cc:dd:00:00:02?",
71 AnonymizeMACAddresses("Remember bB:Cc:DD:ee:ff:00?"));
72}
73
74TEST_F(AnonymizerToolTest, AnonymizeCustomPatterns) {
75 EXPECT_EQ("", AnonymizeCustomPatterns(""));
76
77 EXPECT_EQ("Cell ID: '1'", AnonymizeCustomPatterns("Cell ID: 'A1B2'"));
78 EXPECT_EQ("Cell ID: '2'", AnonymizeCustomPatterns("Cell ID: 'C1D2'"));
79 EXPECT_EQ("foo Cell ID: '1' bar",
80 AnonymizeCustomPatterns("foo Cell ID: 'A1B2' bar"));
81
82 EXPECT_EQ("foo Location area code: '1' bar",
83 AnonymizeCustomPatterns("foo Location area code: 'A1B2' bar"));
84
85 EXPECT_EQ("foo\na SSID='1' b\n'",
86 AnonymizeCustomPatterns("foo\na SSID='Joe's' b\n'"));
87 EXPECT_EQ("ssid '2'", AnonymizeCustomPatterns("ssid 'My AP'"));
88 EXPECT_EQ("bssid 'aa:bb'", AnonymizeCustomPatterns("bssid 'aa:bb'"));
89
90 EXPECT_EQ("Scan SSID - hexdump(len=6): 1\nfoo",
91 AnonymizeCustomPatterns(
92 "Scan SSID - hexdump(len=6): 47 6f 6f 67 6c 65\nfoo"));
93
94 EXPECT_EQ(
95 "a\nb [SSID=1] [SSID=2] [SSID=foo\nbar] b",
96 AnonymizeCustomPatterns("a\nb [SSID=foo] [SSID=bar] [SSID=foo\nbar] b"));
battre03910b42016-01-11 13:42:3497
afakhry85eea802017-05-01 17:04:1098 EXPECT_EQ("SerialNumber: 1",
99 AnonymizeCustomPatterns("SerialNumber: 1217D7EF"));
100 EXPECT_EQ("serial number: 2",
101 AnonymizeCustomPatterns("serial number: 50C971FEE7F3x010900"));
102 EXPECT_EQ("SerialNumber: 3",
103 AnonymizeCustomPatterns("SerialNumber: EVT23-17BA01-004"));
104
battre03910b42016-01-11 13:42:34105 EXPECT_EQ("<email: 1>",
106 AnonymizeCustomPatterns("[email protected]"));
107 EXPECT_EQ("Email: <email: 1>.",
108 AnonymizeCustomPatterns("Email: [email protected]."));
109 EXPECT_EQ("Email:\n<email: 2>\n",
110 AnonymizeCustomPatterns("Email:\[email protected]\n"));
111
112 EXPECT_EQ("[<IPv6: 1>]", AnonymizeCustomPatterns(
113 "[2001:0db8:0000:0000:0000:ff00:0042:8329]"));
114 EXPECT_EQ("[<IPv6: 2>]",
115 AnonymizeCustomPatterns("[2001:db8:0:0:0:ff00:42:8329]"));
116 EXPECT_EQ("[<IPv6: 3>]", AnonymizeCustomPatterns("[2001:db8::ff00:42:8329]"));
117 EXPECT_EQ("[<IPv6: 4>]", AnonymizeCustomPatterns("[::1]"));
118 EXPECT_EQ("<IPv4: 1>", AnonymizeCustomPatterns("192.168.0.1"));
119
120 EXPECT_EQ("<URL: 1>",
121 AnonymizeCustomPatterns("http://example.com/foo?test=1"));
122 EXPECT_EQ("Foo <URL: 2> Bar",
123 AnonymizeCustomPatterns("Foo http://192.168.0.1/foo?test=1#123 Bar"));
124 const char* kURLs[] = {
125 "http://example.com/foo?test=1",
126 "http://userid:[email protected]:8080",
127 "http://userid:[email protected]:8080/",
128 "http://@example.com",
129 "http://192.168.0.1",
130 "http://192.168.0.1/",
131 "http://اختبار.com",
132 "http://test.com/foo(bar)baz.html",
133 "http://test.com/foo%20bar",
134 "ftp://test:[email protected]",
135 "chrome://extensions/",
136 "chrome-extension://aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/options.html",
137 "http://example.com/[email protected]",
pbond4104d692016-02-10 09:41:07138 "rtsp://[email protected]/",
139 "https://aaaaaaaaaaaaaaaa.com",
battre03910b42016-01-11 13:42:34140 };
141 for (size_t i = 0; i < arraysize(kURLs); ++i) {
142 SCOPED_TRACE(kURLs[i]);
143 std::string got = AnonymizeCustomPatterns(kURLs[i]);
144 EXPECT_TRUE(
145 base::StartsWith(got, "<URL: ", base::CompareCase::INSENSITIVE_ASCII));
146 EXPECT_TRUE(base::EndsWith(got, ">", base::CompareCase::INSENSITIVE_ASCII));
147 }
148 // Test that "Android:" is not considered a schema with empty hier part.
149 EXPECT_EQ("The following applies to Android:",
150 AnonymizeCustomPatterns("The following applies to Android:"));
battre4cdaa7c2016-01-07 11:30:27151}
152
battre03910b42016-01-11 13:42:34153TEST_F(AnonymizerToolTest, AnonymizeCustomPatternWithContext) {
battre4cdaa7c2016-01-07 11:30:27154 const char kPattern[] = "(\\b(?i)id:? ')(\\d+)(')";
155 std::map<std::string, std::string> space;
battre03910b42016-01-11 13:42:34156 EXPECT_EQ("", AnonymizeCustomPatternWithContext("", kPattern, &space));
battre4cdaa7c2016-01-07 11:30:27157 EXPECT_EQ("foo\nbar\n",
battre03910b42016-01-11 13:42:34158 AnonymizeCustomPatternWithContext("foo\nbar\n", kPattern, &space));
159 EXPECT_EQ("id '1'",
160 AnonymizeCustomPatternWithContext("id '2345'", kPattern, &space));
161 EXPECT_EQ("id '2'",
162 AnonymizeCustomPatternWithContext("id '1234'", kPattern, &space));
163 EXPECT_EQ("id: '2'",
164 AnonymizeCustomPatternWithContext("id: '1234'", kPattern, &space));
165 EXPECT_EQ("ID: '1'",
166 AnonymizeCustomPatternWithContext("ID: '2345'", kPattern, &space));
battre4cdaa7c2016-01-07 11:30:27167 EXPECT_EQ("x1 id '1' 1x id '2'\nid '1'\n",
battre03910b42016-01-11 13:42:34168 AnonymizeCustomPatternWithContext(
169 "x1 id '2345' 1x id '1234'\nid '2345'\n", kPattern, &space));
battre4cdaa7c2016-01-07 11:30:27170 space.clear();
battre03910b42016-01-11 13:42:34171 EXPECT_EQ("id '1'",
172 AnonymizeCustomPatternWithContext("id '1234'", kPattern, &space));
battre4cdaa7c2016-01-07 11:30:27173
174 space.clear();
battre03910b42016-01-11 13:42:34175 EXPECT_EQ("x1z",
176 AnonymizeCustomPatternWithContext("xyz", "()(y+)()", &space));
177}
178
179TEST_F(AnonymizerToolTest, AnonymizeCustomPatternWithoutContext) {
180 CustomPatternWithoutContext kPattern = {"pattern", "(o+)"};
181 std::map<std::string, std::string> space;
182 EXPECT_EQ("", AnonymizeCustomPatternWithoutContext("", kPattern, &space));
183 EXPECT_EQ("f<pattern: 1>\nf<pattern: 2>z\nf<pattern: 1>l\n",
184 AnonymizeCustomPatternWithoutContext("fo\nfooz\nfol\n", kPattern,
185 &space));
battre4cdaa7c2016-01-07 11:30:27186}
187
188} // namespace feedback