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

Side by Side Diff: chrome/test/chromedriver/capabilities_parser_unittest.cc

Issue 13185004: [chromedriver] Implement proxy capability. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Check unexpected capabilities failed java tests. Created 7 years, 8 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) 2013 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 "chrome/test/chromedriver/capabilities_parser.h"
6
7 #include "base/bind.h"
8 #include "base/values.h"
9 #include "chrome/test/chromedriver/chrome/status.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11
12 namespace {
13
14 bool FileAlwaysExists(const base::FilePath& file) {
15 return true;
16 }
17
18 bool FileNotExists(const base::FilePath& file) {
19 return false;
20 }
21
22 } // namespace
23
24 TEST(ParseCapabilities, WithAndroidPackage) {
25 Capabilities capabilities;
26 base::DictionaryValue caps;
27 caps.SetString("chromeOptions.android_package", "abc");
28 Status status = capabilities.Parse(caps, base::Bind(&FileAlwaysExists));
29 ASSERT_TRUE(status.IsOk());
30 ASSERT_TRUE(capabilities.IsAndroid());
31 ASSERT_EQ("abc", capabilities.android_package);
32 }
33
34 TEST(ParseCapabilities, EmptyAndroidPackage) {
35 Capabilities capabilities;
36 base::DictionaryValue caps;
37 caps.SetString("chromeOptions.android_package", "");
38 Status status = capabilities.Parse(caps, base::Bind(&FileAlwaysExists));
39 ASSERT_FALSE(status.IsOk());
40 }
41
42 TEST(ParseCapabilities, IllegalAndroidPackage) {
43 Capabilities capabilities;
44 base::DictionaryValue caps;
45 caps.SetInteger("chromeOptions.android_package", 123);
46 Status status = capabilities.Parse(caps, base::Bind(&FileAlwaysExists));
47 ASSERT_FALSE(status.IsOk());
48 }
49
50 TEST(ParseCapabilities, ChromeBinaryExists) {
51 Capabilities capabilities;
52 base::DictionaryValue caps;
53 caps.SetString("chromeOptions.binary", "exist/binary");
54 Status status = capabilities.Parse(caps, base::Bind(&FileAlwaysExists));
55 ASSERT_TRUE(status.IsOk());
56 ASSERT_EQ(FILE_PATH_LITERAL("exist/binary"),
57 capabilities.command.GetProgram().value());
58 }
59
60 TEST(ParseCapabilities, ChromeBinaryNotExists) {
61 Capabilities capabilities;
62 base::DictionaryValue caps;
63 caps.SetString("chromeOptions.binary", "not/exist/binary");
64 Status status = capabilities.Parse(caps, base::Bind(&FileNotExists));
65 ASSERT_FALSE(status.IsOk());
66 }
67
68 TEST(ParseCapabilities, LogPath) {
69 Capabilities capabilities;
70 base::DictionaryValue caps;
71 caps.SetString("chromeOptions.logPath", "path/to/logfile");
72 Status status = capabilities.Parse(caps, base::Bind(&FileAlwaysExists));
73 ASSERT_TRUE(status.IsOk());
74 ASSERT_STREQ("path/to/logfile", capabilities.log_path.c_str());
75 }
76
77 TEST(ParseCapabilities, NoArgs) {
78 Capabilities capabilities;
79 base::ListValue args;
80 ASSERT_TRUE(args.empty());
81 base::DictionaryValue caps;
82 caps.Set("chromeOptions.args", args.DeepCopy());
83 Status status = capabilities.Parse(caps, base::Bind(&FileAlwaysExists));
84 ASSERT_TRUE(status.IsOk());
85 ASSERT_TRUE(capabilities.command.GetSwitches().empty());
86 }
87
88 TEST(ParseCapabilities, SingleArgWithoutValue) {
89 Capabilities capabilities;
90 base::ListValue args;
91 args.AppendString("enable-nacl");
92 ASSERT_EQ(1u, args.GetSize());
93 base::DictionaryValue caps;
94 caps.Set("chromeOptions.args", args.DeepCopy());
95 Status status = capabilities.Parse(caps, base::Bind(&FileAlwaysExists));
96 ASSERT_TRUE(status.IsOk());
97 ASSERT_EQ(1u, capabilities.command.GetSwitches().size());
98 ASSERT_TRUE(capabilities.command.HasSwitch("enable-nacl"));
99 }
100
101 TEST(ParseCapabilities, SingleArgWithValue) {
102 Capabilities capabilities;
103 base::ListValue args;
104 args.AppendString("load-extension=/test/extension");
105 ASSERT_EQ(1u, args.GetSize());
106 base::DictionaryValue caps;
107 caps.Set("chromeOptions.args", args.DeepCopy());
108 Status status = capabilities.Parse(caps, base::Bind(&FileAlwaysExists));
109 ASSERT_TRUE(status.IsOk());
110 ASSERT_EQ(1u, capabilities.command.GetSwitches().size());
111 ASSERT_TRUE(capabilities.command.HasSwitch("load-extension"));
112 ASSERT_STREQ(
113 "/test/extension",
114 capabilities.command.GetSwitchValueASCII("load-extension").c_str());
115 }
116
117 TEST(ParseCapabilities, MultipleArgs) {
118 Capabilities capabilities;
119 base::ListValue args;
120 args.AppendString("arg1");
121 args.AppendString("arg2=val");
122 args.AppendString("arg3='a space'");
123 ASSERT_EQ(3u, args.GetSize());
124 base::DictionaryValue caps;
125 caps.Set("chromeOptions.args", args.DeepCopy());
126 Status status = capabilities.Parse(caps, base::Bind(&FileAlwaysExists));
127 ASSERT_TRUE(status.IsOk());
128 ASSERT_EQ(3u, capabilities.command.GetSwitches().size());
129 ASSERT_TRUE(capabilities.command.HasSwitch("arg1"));
130 ASSERT_TRUE(capabilities.command.HasSwitch("arg2"));
131 ASSERT_STREQ("val", capabilities.command.GetSwitchValueASCII("arg2").c_str());
132 ASSERT_TRUE(capabilities.command.HasSwitch("arg3"));
133 ASSERT_STREQ("'a space'",
134 capabilities.command.GetSwitchValueASCII("arg3").c_str());
135 }
136
137 TEST(ParseCapabilities, Prefs) {
138 Capabilities capabilities;
139 base::DictionaryValue prefs;
140 prefs.SetString("key1", "value1");
141 prefs.SetString("key2.k", "value2");
142 base::DictionaryValue caps;
143 caps.Set("chromeOptions.prefs", prefs.DeepCopy());
144 Status status = capabilities.Parse(caps, base::Bind(&FileAlwaysExists));
145 ASSERT_TRUE(status.IsOk());
146 ASSERT_TRUE(capabilities.prefs->Equals(&prefs));
147 }
148
149 TEST(ParseCapabilities, LocalState) {
150 Capabilities capabilities;
151 base::DictionaryValue local_state;
152 local_state.SetString("s1", "v1");
153 local_state.SetString("s2.s", "v2");
154 base::DictionaryValue caps;
155 caps.Set("chromeOptions.localState", local_state.DeepCopy());
156 Status status = capabilities.Parse(caps, base::Bind(&FileAlwaysExists));
157 ASSERT_TRUE(status.IsOk());
158 ASSERT_TRUE(capabilities.local_state->Equals(&local_state));
159 }
160
161 TEST(ParseCapabilities, Extensions) {
162 Capabilities capabilities;
163 base::ListValue extensions;
164 extensions.AppendString("ext1");
165 extensions.AppendString("ext2");
166 base::DictionaryValue caps;
167 caps.Set("chromeOptions.extensions", extensions.DeepCopy());
168 Status status = capabilities.Parse(caps, base::Bind(&FileAlwaysExists));
169 ASSERT_TRUE(status.IsOk());
170 ASSERT_EQ(2u, capabilities.extensions.size());
171 ASSERT_EQ("ext1", capabilities.extensions[0]);
172 ASSERT_EQ("ext2", capabilities.extensions[1]);
173 }
174
175 TEST(ParseCapabilities, UnrecognizedProxyType) {
176 Capabilities capabilities;
177 base::DictionaryValue proxy;
178 proxy.SetString("proxyType", "unknown proxy type");
179 base::DictionaryValue caps;
180 caps.Set("proxy", proxy.DeepCopy());
181 Status status = capabilities.Parse(caps, base::Bind(&FileAlwaysExists));
182 ASSERT_FALSE(status.IsOk());
183 }
184
185 TEST(ParseCapabilities, IllegalProxyType) {
186 Capabilities capabilities;
187 base::DictionaryValue proxy;
188 proxy.SetInteger("proxyType", 123);
189 base::DictionaryValue caps;
190 caps.Set("proxy", proxy.DeepCopy());
191 Status status = capabilities.Parse(caps, base::Bind(&FileAlwaysExists));
192 ASSERT_FALSE(status.IsOk());
193 }
194
195 TEST(ParseCapabilities, DirectProxy) {
196 Capabilities capabilities;
197 base::DictionaryValue proxy;
198 proxy.SetString("proxyType", "DIRECT");
199 base::DictionaryValue caps;
200 caps.Set("proxy", proxy.DeepCopy());
201 Status status = capabilities.Parse(caps, base::Bind(&FileAlwaysExists));
202 ASSERT_TRUE(status.IsOk());
203 ASSERT_EQ(1u, capabilities.command.GetSwitches().size());
204 ASSERT_TRUE(capabilities.command.HasSwitch("no-proxy-server"));
205 }
206
207 TEST(ParseCapabilities, SystemProxy) {
208 Capabilities capabilities;
209 base::DictionaryValue proxy;
210 proxy.SetString("proxyType", "system");
211 base::DictionaryValue caps;
212 caps.Set("proxy", proxy.DeepCopy());
213 Status status = capabilities.Parse(caps, base::Bind(&FileAlwaysExists));
214 ASSERT_TRUE(status.IsOk());
215 ASSERT_TRUE(capabilities.command.GetSwitches().empty());
216 }
217
218 TEST(ParseCapabilities, PacProxy) {
219 Capabilities capabilities;
220 base::DictionaryValue proxy;
221 proxy.SetString("proxyType", "PAC");
222 proxy.SetString("proxyAutoconfigUrl", "test.wpad");
223 base::DictionaryValue caps;
224 caps.Set("proxy", proxy.DeepCopy());
225 Status status = capabilities.Parse(caps, base::Bind(&FileAlwaysExists));
226 ASSERT_TRUE(status.IsOk());
227 ASSERT_EQ(1u, capabilities.command.GetSwitches().size());
228 ASSERT_STREQ(
229 "test.wpad",
230 capabilities.command.GetSwitchValueASCII("proxy-pac-url").c_str());
231 }
232
233 TEST(ParseCapabilities, MissingProxyAutoconfigUrl) {
234 Capabilities capabilities;
235 base::DictionaryValue proxy;
236 proxy.SetString("proxyType", "PAC");
237 proxy.SetString("httpProxy", "http://localhost:8001");
238 base::DictionaryValue caps;
239 caps.Set("proxy", proxy.DeepCopy());
240 Status status = capabilities.Parse(caps, base::Bind(&FileAlwaysExists));
241 ASSERT_FALSE(status.IsOk());
242 }
243
244 TEST(ParseCapabilities, AutodetectProxy) {
245 Capabilities capabilities;
246 base::DictionaryValue proxy;
247 proxy.SetString("proxyType", "autodetect");
248 base::DictionaryValue caps;
249 caps.Set("proxy", proxy.DeepCopy());
250 Status status = capabilities.Parse(caps, base::Bind(&FileAlwaysExists));
251 ASSERT_TRUE(status.IsOk());
252 ASSERT_EQ(1u, capabilities.command.GetSwitches().size());
253 ASSERT_TRUE(capabilities.command.HasSwitch("proxy-auto-detect"));
254 }
255
256 TEST(ParseCapabilities, ManualProxy) {
257 Capabilities capabilities;
258 base::DictionaryValue proxy;
259 proxy.SetString("proxyType", "manual");
260 proxy.SetString("ftpProxy", "localhost:9001");
261 proxy.SetString("httpProxy", "localhost:8001");
262 proxy.SetString("sslProxy", "localhost:10001");
263 proxy.SetString("noProxy", "google.com, youtube.com");
264 base::DictionaryValue caps;
265 caps.Set("proxy", proxy.DeepCopy());
266 Status status = capabilities.Parse(caps, base::Bind(&FileAlwaysExists));
267 ASSERT_TRUE(status.IsOk());
268 ASSERT_EQ(2u, capabilities.command.GetSwitches().size());
269 ASSERT_STREQ(
270 "ftp=localhost:9001;http=localhost:8001;https=localhost:10001",
271 capabilities.command.GetSwitchValueASCII("proxy-server").c_str());
272 ASSERT_STREQ(
273 "google.com, youtube.com",
274 capabilities.command.GetSwitchValueASCII("proxy-bypass-list").c_str());
275 }
276
277 TEST(ParseCapabilities, MissingSettingForManualProxy) {
278 Capabilities capabilities;
279 base::DictionaryValue proxy;
280 proxy.SetString("proxyType", "manual");
281 base::DictionaryValue caps;
282 caps.Set("proxy", proxy.DeepCopy());
283 Status status = capabilities.Parse(caps, base::Bind(&FileAlwaysExists));
284 ASSERT_FALSE(status.IsOk());
285 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698