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

Side by Side Diff: common/extra_args_parser_unittest.cc

Issue 624713003: Keep only base/extractor.[cc|h]. (Closed) Base URL: https://chromium.googlesource.com/external/omaha.git@master
Patch Set: Created 6 years, 2 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
« no previous file with comments | « common/extra_args_parser.cc ('k') | common/goopdate_command_line_validator.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2008-2009 Google Inc.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 // ========================================================================
15
16 #include "omaha/base/string.h"
17 #include "omaha/base/utils.h"
18 #include "omaha/common/command_line.h"
19 #include "omaha/common/extra_args_parser.h"
20 #include "omaha/testing/resource.h"
21 #include "omaha/testing/unit_test.h"
22
23 namespace omaha {
24
25 extern void VerifyCommandLineArgs(const CommandLineArgs& expected,
26 const CommandLineArgs& actual);
27
28 extern void VerifyCommandLineExtraArgs(const CommandLineExtraArgs& expected,
29 const CommandLineExtraArgs& actual);
30
31 void VerifyBrowserType(const CommandLineExtraArgs& args,
32 const CString& app_guid,
33 BrowserType type) {
34 CommandLineAppArgs app_args;
35 app_args.app_guid = StringToGuid(app_guid);
36
37 CommandLineExtraArgs expected;
38 expected.browser_type = type;
39 expected.apps.push_back(app_args);
40
41 VerifyCommandLineExtraArgs(expected, args);
42 }
43
44 // TODO(omaha): Consider eliminating most uses of this method. The tests will
45 // actually be less lines now that the parameters have grown so much.
46 void VerifyExtraArgsHaveSpecificValues(
47 const CommandLineExtraArgs& args,
48 const CString& expected_app_guid,
49 const CString& expected_app_name,
50 const CString& expected_app_experiment_labels,
51 NeedsAdmin expected_needs_admin,
52 Tristate expected_usage_stats_enable,
53 bool expected_runtime_only,
54 const CString& expected_bundle_name,
55 const GUID& expected_installation_id,
56 const CString& expected_brand_code,
57 const CString& expected_client_id,
58 const CString& expected_omaha_experiment_labels,
59 const CString& expected_referral_id,
60 const CString& expected_ap,
61 const CString& expected_tt,
62 const CString& expected_encoded_installer_data,
63 const CString& expected_install_data_index) {
64 CommandLineAppArgs app_args;
65 app_args.app_guid = StringToGuid(expected_app_guid);
66 app_args.app_name = expected_app_name;
67 app_args.needs_admin = expected_needs_admin;
68 app_args.ap = expected_ap;
69 app_args.tt_token = expected_tt;
70 app_args.encoded_installer_data = expected_encoded_installer_data;
71 app_args.install_data_index = expected_install_data_index;
72 app_args.experiment_labels = expected_app_experiment_labels;
73
74 CommandLineExtraArgs expected;
75 expected.apps.push_back(app_args);
76 expected.bundle_name = expected_bundle_name;
77 expected.installation_id = expected_installation_id;
78 expected.brand_code = expected_brand_code;
79 expected.client_id = expected_client_id;
80 expected.experiment_labels = expected_omaha_experiment_labels;
81 expected.referral_id = expected_referral_id;
82 expected.usage_stats_enable = expected_usage_stats_enable;
83 expected.runtime_only = expected_runtime_only;
84
85 VerifyCommandLineExtraArgs(expected, args);
86 }
87
88 TEST(ExtraArgsParserTest, ExtraArgumentsInvalidValueNameIsSupersetOfValidName) {
89 CommandLineExtraArgs args;
90 ExtraArgsParser parser;
91 CString extra_args = _T("appguid={D0324988-DA8A-49e5-BCE5-925FCD04EAB7}&")
92 _T("appname1=Hello");
93 EXPECT_FAILED(parser.Parse(extra_args, NULL, &args));
94 }
95
96 TEST(ExtraArgsParserTest, ExtraArgumentsAppNameSpaceForValue) {
97 CommandLineExtraArgs args;
98 ExtraArgsParser parser;
99 CString extra_args = _T("appguid={D0324988-DA8A-49e5-BCE5-925FCD04EAB7}&")
100 _T("appname= ");
101 EXPECT_FAILED(parser.Parse(extra_args, NULL, &args));
102 }
103
104 TEST(ExtraArgsParserTest, ExtraArgumentsAppNameValid) {
105 CommandLineExtraArgs args;
106 ExtraArgsParser parser;
107
108 CString app_guid = _T("{D0324988-DA8A-49e5-BCE5-925FCD04EAB7}");
109 CString extra_args = _T("appguid={D0324988-DA8A-49e5-BCE5-925FCD04EAB7}&")
110 _T("appname=Test");
111 EXPECT_SUCCEEDED(parser.Parse(extra_args, NULL, &args));
112
113 CommandLineAppArgs app_args;
114
115 app_args.app_name = _T("Test");
116 app_args.app_guid = StringToGuid(app_guid);
117 CommandLineExtraArgs expected;
118 expected.apps.push_back(app_args);
119 expected.bundle_name = _T("Test");
120
121 VerifyCommandLineExtraArgs(expected, args);
122 }
123
124 // This must work because the enterprise MSI code assumes spaces are allowed.
125 TEST(ExtraArgsParserTest, ExtraArgumentsAppNameWithSpace) {
126 CommandLineExtraArgs args;
127 ExtraArgsParser parser;
128 CString extra_args = _T("appguid={D0324988-DA8A-49e5-BCE5-925FCD04EAB7}&")
129 _T("appname=Test App");
130 EXPECT_SUCCEEDED(parser.Parse(extra_args, NULL, &args));
131
132 CommandLineAppArgs app_args;
133 app_args.app_guid =
134 StringToGuid(_T("{D0324988-DA8A-49e5-BCE5-925FCD04EAB7}"));
135 app_args.app_name = _T("Test App");
136
137 CommandLineExtraArgs expected;
138 expected.apps.push_back(app_args);
139 expected.bundle_name = _T("Test App");
140
141 VerifyCommandLineExtraArgs(expected, args);
142 }
143
144 TEST(ExtraArgsParserTest, ExtraArgumentsAppNameWithSpaceAtEnd) {
145 CommandLineExtraArgs args;
146 ExtraArgsParser parser;
147 CString extra_args = _T("appguid={D0324988-DA8A-49e5-BCE5-925FCD04EAB7}&")
148 _T("appname= T Ap p ");
149 EXPECT_SUCCEEDED(parser.Parse(extra_args, NULL, &args));
150
151 CommandLineAppArgs app_args;
152 app_args.app_guid =
153 StringToGuid(_T("{D0324988-DA8A-49e5-BCE5-925FCD04EAB7}"));
154 app_args.app_name = _T("T Ap p");
155
156 CommandLineExtraArgs expected;
157 expected.apps.push_back(app_args);
158 expected.bundle_name = _T("T Ap p");
159
160 VerifyCommandLineExtraArgs(expected, args);
161 }
162
163 TEST(ExtraArgsParserTest, ExtraArgumentsAppNameWithMultipleSpaces) {
164 CommandLineExtraArgs args;
165 ExtraArgsParser parser;
166 CString extra_args = _T("appguid={D0324988-DA8A-49e5-BCE5-925FCD04EAB7}&")
167 _T("appname= T Ap p");
168 EXPECT_SUCCEEDED(parser.Parse(extra_args, NULL, &args));
169
170 CommandLineAppArgs app_args;
171 app_args.app_guid =
172 StringToGuid(_T("{D0324988-DA8A-49e5-BCE5-925FCD04EAB7}"));
173 app_args.app_name = _T("T Ap p");
174
175 CommandLineExtraArgs expected;
176 expected.apps.push_back(app_args);
177 expected.bundle_name = _T("T Ap p");
178
179 VerifyCommandLineExtraArgs(expected, args);
180 }
181
182 // The size of the application name is limited to 512 wide chars.
183 TEST(ExtraArgsParserTest, ExtraArgumentsAppNameTooLong) {
184 CommandLineExtraArgs args;
185 ExtraArgsParser parser;
186 CString str(_T('a'), 513);
187 CString extra_args;
188 extra_args.Format(_T("appguid={D0324988-DA8A-49e5-BCE5-925FCD04EAB7}&")
189 _T("appname=%s"), str);
190 EXPECT_FAILED(parser.Parse(extra_args, NULL, &args));
191 }
192
193 TEST(ExtraArgsParserTest, ExtraArgumentsAppNameUnicode) {
194 // Read the non-ascii string from the resources, and convert
195 // it into a utf8 encoded, url escaped string.
196 CString non_ascii_name;
197 ASSERT_TRUE(non_ascii_name.LoadString(IDS_ESCAPE_TEST));
198
199 CString wide_tag;
200 ASSERT_HRESULT_SUCCEEDED(WideStringToUtf8UrlEncodedString(non_ascii_name,
201 &wide_tag));
202
203 ExtraArgsParser parser;
204 CommandLineExtraArgs args;
205 CString extra_args;
206 extra_args.Format(_T("appguid={D0324988-DA8A-49e5-BCE5-925FCD04EAB7}&")
207 _T("appname=%s"), wide_tag);
208 EXPECT_SUCCEEDED(parser.Parse(extra_args, NULL, &args));
209
210 CommandLineAppArgs app_args;
211 app_args.app_name = non_ascii_name;
212 app_args.app_guid =
213 StringToGuid(_T("{D0324988-DA8A-49e5-BCE5-925FCD04EAB7}"));
214
215 CommandLineExtraArgs expected;
216 expected.apps.push_back(app_args);
217 expected.bundle_name = non_ascii_name;
218
219 VerifyCommandLineExtraArgs(expected, args);
220 }
221
222 TEST(ExtraArgsParserTest, ExtraArgumentsAppNameUnicode2) {
223 // Read the non-ascii string from the resources, and convert
224 // it into a utf8 encoded, url escaped string.
225 CString non_ascii_name;
226 ASSERT_TRUE(non_ascii_name.LoadString(IDS_ESCAPE_TEST1));
227
228 CString escaped(_T("%E0%A4%B8%E0%A5%8D%E0%A4%A5%E0%A4%BE%E0%A4%AA%E0%A4%BF")
229 _T("%E0%A4%A4%20%E0%A4%95%E0%A4%B0%20%E0%A4%B0%E0%A4%B9%E0")
230 _T("%A4%BE%20%E0%A4%B9%E0%A5%88%E0%A5%A4"));
231
232 CommandLineExtraArgs args;
233 ExtraArgsParser parser;
234
235 CString extra_args;
236 extra_args.Format(_T("appguid={D0324988-DA8A-49e5-BCE5-925FCD04EAB7}&")
237 _T("appname=%s"), escaped);
238 EXPECT_SUCCEEDED(parser.Parse(extra_args, NULL, &args));
239
240 CommandLineAppArgs app_args;
241 app_args.app_name = non_ascii_name;
242 app_args.app_guid =
243 StringToGuid(_T("{D0324988-DA8A-49e5-BCE5-925FCD04EAB7}"));
244
245 CommandLineExtraArgs expected;
246 expected.apps.push_back(app_args);
247 expected.bundle_name = non_ascii_name;
248
249 VerifyCommandLineExtraArgs(expected, args);
250 }
251
252 TEST(ExtraArgsParserTest, ExtraArgumentsAppGuidValid) {
253 CommandLineExtraArgs args;
254 ExtraArgsParser parser;
255 CString extra_args = _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}");
256 EXPECT_SUCCEEDED(parser.Parse(extra_args, NULL, &args));
257
258 CommandLineAppArgs app_args;
259 const GUID guid = {0x8617EE50, 0xF91C, 0x4DC1,
260 {0xB9, 0x37, 0x09, 0x69, 0xEE, 0xF5, 0x9B, 0x0B}};
261 app_args.app_guid = guid;
262
263 CommandLineExtraArgs expected;
264 expected.apps.push_back(app_args);
265
266 VerifyCommandLineExtraArgs(expected, args);
267 }
268
269 TEST(ExtraArgsParserTest, ExtraArgumentsAppGuidNotAValidGuid) {
270 CommandLineExtraArgs args;
271 ExtraArgsParser parser;
272 CString extra_args = _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0}");
273 EXPECT_EQ(E_INVALIDARG, parser.Parse(extra_args, NULL, &args));
274 }
275
276 TEST(ExtraArgsParserTest, ExtraArgumentsAppGuidNotAGuid) {
277 CommandLineExtraArgs args;
278 ExtraArgsParser parser;
279 CString extra_args = _T("appguid=myguid");
280 EXPECT_EQ(E_INVALIDARG, parser.Parse(extra_args, NULL, &args));
281 }
282
283 TEST(ExtraArgsParserTest, ExtraArgumentsNeedsAdminInvalid) {
284 CommandLineExtraArgs args;
285 ExtraArgsParser parser;
286 CString extra_args = _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
287 _T("needsadmin=Hello");
288 EXPECT_FAILED(parser.Parse(extra_args, NULL, &args));
289 }
290
291 TEST(ExtraArgsParserTest, ExtraArgumentsNeedsAdminSpaceForValue) {
292 CommandLineExtraArgs args;
293 ExtraArgsParser parser;
294 CString extra_args = _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
295 _T("needsadmin= ");
296 EXPECT_FAILED(parser.Parse(extra_args, NULL, &args));
297 }
298
299 TEST(ExtraArgsParserTest, ExtraArgumentsNeedsAdminTrueUpperCaseT) {
300 CommandLineExtraArgs args;
301 ExtraArgsParser parser;
302 CString extra_args = _T("")
303 _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
304 _T("needsadmin=True");
305 EXPECT_SUCCEEDED(parser.Parse(extra_args, NULL, &args));
306
307 CommandLineAppArgs app_args;
308 app_args.needs_admin = NEEDS_ADMIN_YES;
309 app_args.app_guid =
310 StringToGuid(_T("{8617EE50-F91C-4DC1-B937-0969EEF59B0B}"));
311
312 CommandLineExtraArgs expected;
313 expected.apps.push_back(app_args);
314
315 VerifyCommandLineExtraArgs(expected, args);
316 }
317
318 TEST(ExtraArgsParserTest, ExtraArgumentsNeedsAdminTrueLowerCaseT) {
319 CommandLineExtraArgs args;
320 ExtraArgsParser parser;
321 CString extra_args = _T("")
322 _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
323 _T("needsadmin=true");
324 EXPECT_SUCCEEDED(parser.Parse(extra_args, NULL, &args));
325
326 CommandLineAppArgs app_args;
327 app_args.needs_admin = NEEDS_ADMIN_YES;
328 app_args.app_guid =
329 StringToGuid(_T("{8617EE50-F91C-4DC1-B937-0969EEF59B0B}"));
330
331 CommandLineExtraArgs expected;
332 expected.apps.push_back(app_args);
333
334 VerifyCommandLineExtraArgs(expected, args);
335 }
336
337 TEST(ExtraArgsParserTest, ExtraArgumentsNeedsFalseUpperCaseF) {
338 CommandLineExtraArgs args;
339 ExtraArgsParser parser;
340 CString extra_args = _T("")
341 _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
342 _T("needsadmin=False");
343 EXPECT_SUCCEEDED(parser.Parse(extra_args, NULL, &args));
344
345 CommandLineAppArgs app_args;
346 app_args.needs_admin = NEEDS_ADMIN_NO;
347 app_args.app_guid =
348 StringToGuid(_T("{8617EE50-F91C-4DC1-B937-0969EEF59B0B}"));
349
350 CommandLineExtraArgs expected;
351 expected.apps.push_back(app_args);
352
353 VerifyCommandLineExtraArgs(expected, args);
354 }
355
356 TEST(ExtraArgsParserTest, ExtraArgumentsNeedsAdminFalseLowerCaseF) {
357 CommandLineExtraArgs args;
358 ExtraArgsParser parser;
359 CString extra_args = _T("")
360 _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
361 _T("needsadmin=false");
362 EXPECT_SUCCEEDED(parser.Parse(extra_args, NULL, &args));
363
364 CommandLineAppArgs app_args;
365 app_args.needs_admin = NEEDS_ADMIN_NO;
366 app_args.app_guid =
367 StringToGuid(_T("{8617EE50-F91C-4DC1-B937-0969EEF59B0B}"));
368
369 CommandLineExtraArgs expected;
370 expected.apps.push_back(app_args);
371
372 VerifyCommandLineExtraArgs(expected, args);
373 }
374
375 //
376 // Test the handling of the contents of the extra arguments.
377 //
378
379 TEST(ExtraArgsParserTest, ExtraArgumentsAssignmentOnly) {
380 CommandLineExtraArgs args;
381 ExtraArgsParser parser;
382 CString extra_args = _T("=");
383 EXPECT_FAILED(parser.Parse(extra_args, NULL, &args));
384 }
385
386 TEST(ExtraArgsParserTest, ExtraArgumentsExtraAssignment1) {
387 CommandLineExtraArgs args;
388 ExtraArgsParser parser;
389 CString extra_args = _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
390 _T("usagestats=1=");
391 EXPECT_FAILED(parser.Parse(extra_args, NULL, &args));
392 }
393
394 TEST(ExtraArgsParserTest, ExtraArgumentsExtraAssignment2) {
395 CommandLineExtraArgs args;
396 ExtraArgsParser parser;
397 CString extra_args = _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
398 _T("=usagestats=1");
399 EXPECT_FAILED(parser.Parse(extra_args, NULL, &args));
400 }
401
402 TEST(ExtraArgsParserTest, ExtraArgumentsExtraAssignment3) {
403 CommandLineExtraArgs args;
404 ExtraArgsParser parser;
405 CString extra_args = _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
406 _T("usagestats=1&=");
407 EXPECT_FAILED(parser.Parse(extra_args, NULL, &args));
408 }
409
410 TEST(ExtraArgsParserTest, ExtraArgumentsExtraAssignment4) {
411 CommandLineExtraArgs args;
412 ExtraArgsParser parser;
413 CString extra_args = _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
414 _T("=&usagestats=1");
415 EXPECT_FAILED(parser.Parse(extra_args, NULL, &args));
416 }
417
418 TEST(ExtraArgsParserTest, ExtraArgumentsValueWithoutName) {
419 CommandLineExtraArgs args;
420 ExtraArgsParser parser;
421 CString extra_args = _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
422 _T("=hello");
423 EXPECT_FAILED(parser.Parse(extra_args, NULL, &args));
424 }
425
426
427 // Also tests ending extra arguments with '='.
428 TEST(ExtraArgsParserTest, ExtraArgumentsNameWithoutValue) {
429 CommandLineExtraArgs args;
430 ExtraArgsParser parser;
431 CString extra_args = _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
432 _T("usagestats=");
433 EXPECT_FAILED(parser.Parse(extra_args, NULL, &args));
434 }
435
436 TEST(ExtraArgsParserTest, ExtraArgumentsNameWithoutValueBeforeNextArgument) {
437 CommandLineExtraArgs args;
438 ExtraArgsParser parser;
439 CString extra_args = _T("")
440 _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
441 _T("usagestats=&client=hello");
442 EXPECT_FAILED(parser.Parse(extra_args, NULL, &args));
443 }
444
445 TEST(ExtraArgsParserTest,
446 ExtraArgumentsNameWithoutArgumentSeparatorAfterIntValue) {
447 CommandLineExtraArgs args;
448 ExtraArgsParser parser;
449 CString extra_args = _T("")
450 _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
451 _T("usagestats=1client=hello");
452 EXPECT_FAILED(parser.Parse(extra_args, NULL, &args));
453 }
454
455 TEST(ExtraArgsParserTest,
456 ExtraArgumentsNameWithoutArgumentSeparatorAfterStringValue) {
457 CommandLineExtraArgs args;
458 ExtraArgsParser parser;
459 CString extra_args = _T("")
460 _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
461 _T("usagestats=yesclient=hello");
462 EXPECT_FAILED(parser.Parse(extra_args, NULL, &args));
463 }
464
465 TEST(ExtraArgsParserTest, ExtraArgumentsHaveDoubleAmpersand) {
466 CommandLineExtraArgs args;
467 ExtraArgsParser parser;
468 CString extra_args = _T("")
469 _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
470 _T("usagestats=1&&client=hello");
471
472 CString app_args = _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
473 _T("installerdata=foobar");
474
475 // Ideally, this would flag an error.
476 EXPECT_SUCCEEDED(parser.Parse(extra_args, app_args, &args));
477 VerifyExtraArgsHaveSpecificValues(
478 args,
479 _T("{8617EE50-F91C-4DC1-B937-0969EEF59B0B}"),
480 _T(""),
481 _T(""),
482 NEEDS_ADMIN_NO,
483 TRISTATE_TRUE,
484 false,
485 _T(""),
486 GUID_NULL,
487 _T(""),
488 _T("hello"),
489 _T(""),
490 _T(""),
491 _T(""),
492 _T(""),
493 _T("foobar"),
494 _T(""));
495 }
496
497 TEST(ExtraArgsParserTest, ExtraArgumentsAmpersandOnly) {
498 CommandLineExtraArgs args;
499 ExtraArgsParser parser;
500 CString extra_args = _T("&");
501
502 // Ideally, this would flag an error.
503 EXPECT_SUCCEEDED(parser.Parse(extra_args, NULL, &args));
504 VerifyExtraArgsHaveSpecificValues(
505 args,
506 _T("{00000000-0000-0000-0000-000000000000}"),
507 _T(""),
508 _T(""),
509 NEEDS_ADMIN_NO,
510 TRISTATE_NONE,
511 false,
512 _T(""),
513 GUID_NULL,
514 _T(""),
515 _T(""),
516 _T(""),
517 _T(""),
518 _T(""),
519 _T(""),
520 _T(""),
521 _T(""));
522 }
523
524 TEST(ExtraArgsParserTest, ExtraArgumentsBeginInAmpersand) {
525 CommandLineExtraArgs args;
526 ExtraArgsParser parser;
527 CString extra_args = _T("&appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
528 _T("usagestats=1");
529
530 // Ideally, this would flag an error.
531 EXPECT_SUCCEEDED(parser.Parse(extra_args, NULL, &args));
532 VerifyExtraArgsHaveSpecificValues(
533 args,
534 _T("{8617EE50-F91C-4DC1-B937-0969EEF59B0B}"),
535 _T(""),
536 _T(""),
537 NEEDS_ADMIN_NO,
538 TRISTATE_TRUE,
539 false,
540 _T(""),
541 GUID_NULL,
542 _T(""),
543 _T(""),
544 _T(""),
545 _T(""),
546 _T(""),
547 _T(""),
548 _T(""),
549 _T(""));
550 }
551
552 TEST(ExtraArgsParserTest, ExtraArgumentsEndInAmpersand) {
553 CommandLineExtraArgs args;
554 ExtraArgsParser parser;
555 CString extra_args = _T("&appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
556 _T("usagestats=1&");
557
558 // Ideally, this would flag an error.
559 EXPECT_SUCCEEDED(parser.Parse(extra_args, NULL, &args));
560 VerifyExtraArgsHaveSpecificValues(
561 args,
562 _T("{8617EE50-F91C-4DC1-B937-0969EEF59B0B}"),
563 _T(""),
564 _T(""),
565 NEEDS_ADMIN_NO,
566 TRISTATE_TRUE,
567 false,
568 _T(""),
569 GUID_NULL,
570 _T(""),
571 _T(""),
572 _T(""),
573 _T(""),
574 _T(""),
575 _T(""),
576 _T(""),
577 _T(""));
578 }
579
580 TEST(ExtraArgsParserTest, ExtraArgumentsEmptyString) {
581 CommandLineExtraArgs args;
582 ExtraArgsParser parser;
583 CString extra_args = _T("");
584 EXPECT_FAILED(parser.Parse(extra_args, NULL, &args));
585 }
586
587 TEST(ExtraArgsParserTest, ExtraArgumentsWhiteSpaceOnly1) {
588 CommandLineExtraArgs args;
589 ExtraArgsParser parser;
590 CString extra_args = _T(" ");
591 EXPECT_FAILED(parser.Parse(extra_args, NULL, &args));
592 }
593
594 TEST(ExtraArgsParserTest, ExtraArgumentsWhiteSpaceOnly2) {
595 CommandLineExtraArgs args;
596 ExtraArgsParser parser;
597 CString extra_args = _T("\t");
598 EXPECT_FAILED(parser.Parse(extra_args, NULL, &args));
599 }
600
601 TEST(ExtraArgsParserTest, ExtraArgumentsWhiteSpaceOnly3) {
602 CommandLineExtraArgs args;
603 ExtraArgsParser parser;
604 CString extra_args = _T("\r");
605 EXPECT_FAILED(parser.Parse(extra_args, NULL, &args));
606 }
607
608 TEST(ExtraArgsParserTest, ExtraArgumentsWhiteSpaceOnly4) {
609 CommandLineExtraArgs args;
610 ExtraArgsParser parser;
611 CString extra_args = _T("\n");
612 EXPECT_FAILED(parser.Parse(extra_args, NULL, &args));
613 }
614
615 TEST(ExtraArgsParserTest, ExtraArgumentsWhiteSpaceOnly5) {
616 CommandLineExtraArgs args;
617 ExtraArgsParser parser;
618 CString extra_args = _T("\r\n");
619 EXPECT_FAILED(parser.Parse(extra_args, NULL, &args));
620 }
621
622
623 //
624 // Test the parsing of the extra command and its arguments into a string.
625 //
626
627 TEST(ExtraArgsParserTest, ExtraArgumentsOneValid) {
628 CommandLineExtraArgs args;
629 ExtraArgsParser parser;
630 CString extra_args = _T("&appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
631 _T("usagestats=1");
632
633 EXPECT_SUCCEEDED(parser.Parse(extra_args, NULL, &args));
634 VerifyExtraArgsHaveSpecificValues(
635 args,
636 _T("{8617EE50-F91C-4DC1-B937-0969EEF59B0B}"),
637 _T(""),
638 _T(""),
639 NEEDS_ADMIN_NO,
640 TRISTATE_TRUE,
641 false,
642 _T(""),
643 GUID_NULL,
644 _T(""),
645 _T(""),
646 _T(""),
647 _T(""),
648 _T(""),
649 _T(""),
650 _T(""),
651 _T(""));
652 }
653
654 TEST(ExtraArgsParserTest, ExtraArgumentsTwoValid) {
655 CommandLineExtraArgs args;
656 ExtraArgsParser parser;
657 CString extra_args = _T("&appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
658 _T("usagestats=1&client=hello");
659
660 EXPECT_SUCCEEDED(parser.Parse(extra_args, NULL, &args));
661 VerifyExtraArgsHaveSpecificValues(
662 args,
663 _T("{8617EE50-F91C-4DC1-B937-0969EEF59B0B}"),
664 _T(""),
665 _T(""),
666 NEEDS_ADMIN_NO,
667 TRISTATE_TRUE,
668 false,
669 _T(""),
670 GUID_NULL,
671 _T(""),
672 _T("hello"),
673 _T(""),
674 _T(""),
675 _T(""),
676 _T(""),
677 _T(""),
678 _T(""));
679 }
680
681 TEST(ExtraArgsParserTest, ExtraArgumentsHaveSwitchInTheMiddle) {
682 CommandLineExtraArgs args;
683 ExtraArgsParser parser;
684 CString extra_args = _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
685 _T("usagestats=1/other_value=9");
686 EXPECT_FAILED(parser.Parse(extra_args, NULL, &args));
687 }
688
689 TEST(ExtraArgsParserTest, ExtraArgumentsHaveDoubleQuoteInTheMiddle) {
690 CommandLineExtraArgs args;
691 ExtraArgsParser parser;
692 CString extra_args = _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
693 _T("usagestats=1\"/other_value=9");
694 EXPECT_FAILED(parser.Parse(extra_args, NULL, &args));
695 }
696
697 TEST(ExtraArgsParserTest,
698 ExtraArgumentsHaveDoubleQuoteInTheMiddleAndNoForwardSlash) {
699 CommandLineExtraArgs args;
700 ExtraArgsParser parser;
701 CString extra_args = _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
702 _T("usagestats=1\"other_value=9");
703 EXPECT_FAILED(parser.Parse(extra_args, NULL, &args));
704 }
705
706 TEST(ExtraArgsParserTest, ExtraArgumentsHaveSpaceAndForwardSlashBeforeQuote) {
707 CommandLineExtraArgs args;
708 ExtraArgsParser parser;
709 CString extra_args = _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
710 _T("usagestats=1 /other_value=9");
711 EXPECT_FAILED(parser.Parse(extra_args, NULL, &args));
712 }
713
714 TEST(ExtraArgsParserTest, ExtraArgumentsHaveForwardSlashBeforeQuote) {
715 CommandLineExtraArgs args;
716 ExtraArgsParser parser;
717 CString extra_args = _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
718 _T("usagestats=1/other_value=9");
719 EXPECT_FAILED(parser.Parse(extra_args, NULL, &args));
720 }
721
722 TEST(ExtraArgsParserTest, ExtraArgumentsSpecifiedTwice) {
723 CommandLineExtraArgs args;
724 ExtraArgsParser parser;
725 CString extra_args = _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
726 _T("usagestats=1\" \"client=10");
727 EXPECT_FAILED(parser.Parse(extra_args, NULL, &args));
728 }
729
730 TEST(ExtraArgsParserTest, ExtraArgumentsWhiteSpaceBeforeArgs1) {
731 CommandLineExtraArgs args;
732 // TODO(omaha): This one passes now due to different whitespace
733 // handling. Remove it? Is this really a problem to have?
734 CString extra_args = _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
735 _T(" usagestats=1");
736 ExtraArgsParser parser;
737 EXPECT_FAILED(parser.Parse(extra_args, NULL, &args));
738 }
739
740 TEST(ExtraArgsParserTest, ExtraArgumentsWhiteSpaceBeforeArgs2) {
741 CommandLineExtraArgs args;
742 ExtraArgsParser parser;
743 CString extra_args = _T("\tappguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
744 _T("usagestats=1");
745 EXPECT_FAILED(parser.Parse(extra_args, NULL, &args));
746 }
747
748 TEST(ExtraArgsParserTest, ExtraArgumentsWhiteSpaceBeforeArgs3) {
749 CommandLineExtraArgs args;
750 ExtraArgsParser parser;
751 CString extra_args = _T("\rappguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
752 _T("usagestats=1");
753 EXPECT_FAILED(parser.Parse(extra_args, NULL, &args));
754 }
755
756 TEST(ExtraArgsParserTest, ExtraArgumentsWhiteSpaceBeforeArgs4) {
757 CommandLineExtraArgs args;
758 ExtraArgsParser parser;
759 CString extra_args = _T("\nappguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}")
760 _T("&usagestats=1");
761 EXPECT_FAILED(parser.Parse(extra_args, NULL, &args));
762 }
763
764 TEST(ExtraArgsParserTest, ExtraArgumentsWhiteSpaceBeforeArgs5) {
765 CommandLineExtraArgs args;
766 ExtraArgsParser parser;
767 CString extra_args = _T("\r\nusagestats=1");
768 EXPECT_FAILED(parser.Parse(extra_args, NULL, &args));
769 }
770
771 TEST(ExtraArgsParserTest, ExtraArgumentsForwardSlash1) {
772 CommandLineExtraArgs args;
773 ExtraArgsParser parser;
774 CString extra_args = _T("/");
775 EXPECT_FAILED(parser.Parse(extra_args, NULL, &args));
776 }
777
778 TEST(ExtraArgsParserTest, ExtraArgumentsForwardSlash2) {
779 CommandLineExtraArgs args;
780 ExtraArgsParser parser;
781 CString extra_args = _T("/ appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}");
782 EXPECT_FAILED(parser.Parse(extra_args, NULL, &args));
783 }
784
785 TEST(ExtraArgsParserTest, ExtraArgumentsBackwardSlash1) {
786 CommandLineExtraArgs args;
787 ExtraArgsParser parser;
788 CString extra_args = _T("\\");
789 EXPECT_FAILED(parser.Parse(extra_args, NULL, &args));
790 }
791
792 TEST(ExtraArgsParserTest, ExtraArgumentsBackwardSlash2) {
793 CommandLineExtraArgs args;
794 ExtraArgsParser parser;
795 CString extra_args = _T("\\appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}");
796 EXPECT_FAILED(parser.Parse(extra_args, NULL, &args));
797 }
798
799 TEST(ExtraArgsParserTest, ExtraArgumentsBackwardSlash3) {
800 CommandLineExtraArgs args;
801 ExtraArgsParser parser;
802 CString extra_args = _T("\\ appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}");
803 EXPECT_FAILED(parser.Parse(extra_args, NULL, &args));
804 }
805
806 //
807 // Test specific extra commands.
808 //
809
810 TEST(ExtraArgsParserTest, UsageStatsOutsideExtraCommand) {
811 CommandLineExtraArgs args;
812 ExtraArgsParser parser;
813 CString extra_args = _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
814 _T("/usagestats");
815 EXPECT_FAILED(parser.Parse(extra_args, NULL, &args));
816 }
817
818 TEST(ExtraArgsParserTest, UsageStatsOn) {
819 CommandLineExtraArgs args;
820 ExtraArgsParser parser;
821 CString extra_args = _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
822 _T("usagestats=1");
823
824 EXPECT_SUCCEEDED(parser.Parse(extra_args, NULL, &args));
825 VerifyExtraArgsHaveSpecificValues(
826 args,
827 _T("{8617EE50-F91C-4DC1-B937-0969EEF59B0B}"),
828 _T(""),
829 _T(""),
830 NEEDS_ADMIN_NO,
831 TRISTATE_TRUE,
832 false,
833 _T(""),
834 GUID_NULL,
835 _T(""),
836 _T(""),
837 _T(""),
838 _T(""),
839 _T(""),
840 _T(""),
841 _T(""),
842 _T(""));
843 }
844
845 TEST(ExtraArgsParserTest, UsageStatsOff) {
846 CommandLineExtraArgs args;
847 ExtraArgsParser parser;
848 CString extra_args = _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
849 _T("usagestats=0");
850
851 EXPECT_SUCCEEDED(parser.Parse(extra_args, NULL, &args));
852 VerifyExtraArgsHaveSpecificValues(
853 args,
854 _T("{8617EE50-F91C-4DC1-B937-0969EEF59B0B}"),
855 _T(""),
856 _T(""),
857 NEEDS_ADMIN_NO,
858 TRISTATE_FALSE,
859 false,
860 _T(""),
861 GUID_NULL,
862 _T(""),
863 _T(""),
864 _T(""),
865 _T(""),
866 _T(""),
867 _T(""),
868 _T(""),
869 _T(""));
870 }
871
872 // This commandline has no effect, but it's permitted.
873 TEST(ExtraArgsParserTest, UsageStatsNone) {
874 CommandLineExtraArgs args;
875 ExtraArgsParser parser;
876 CString extra_args = _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
877 _T("usagestats=2");
878
879 EXPECT_SUCCEEDED(parser.Parse(extra_args, NULL, &args));
880 VerifyExtraArgsHaveSpecificValues(
881 args,
882 _T("{8617EE50-F91C-4DC1-B937-0969EEF59B0B}"),
883 _T(""),
884 _T(""),
885 NEEDS_ADMIN_NO,
886 TRISTATE_NONE,
887 false,
888 _T(""),
889 GUID_NULL,
890 _T(""),
891 _T(""),
892 _T(""),
893 _T(""),
894 _T(""),
895 _T(""),
896 _T(""),
897 _T(""));
898 }
899
900 TEST(ExtraArgsParserTest, UsageStatsInvalidPositiveValue) {
901 CommandLineExtraArgs args;
902 ExtraArgsParser parser;
903 CString extra_args = _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
904 _T("usagestats=3");
905 EXPECT_FAILED(parser.Parse(extra_args, NULL, &args));
906 }
907
908 TEST(ExtraArgsParserTest, UsageStatsInvalidNegativeValue) {
909 CommandLineExtraArgs args;
910 ExtraArgsParser parser;
911 CString extra_args = _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
912 _T("usagestats=-1");
913 EXPECT_FAILED(parser.Parse(extra_args, NULL, &args));
914 }
915
916 TEST(ExtraArgsParserTest, UsageStatsValueIsString) {
917 CommandLineExtraArgs args;
918 ExtraArgsParser parser;
919 CString extra_args = _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
920 _T("usagestats=true");
921 EXPECT_FAILED(parser.Parse(extra_args, NULL, &args));
922 }
923
924 TEST(ExtraArgsParserTest, BundleNameValid) {
925 CommandLineExtraArgs args;
926 ExtraArgsParser parser;
927 CString extra_args = _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
928 _T("bundlename=Google%20Bundle");
929
930 EXPECT_SUCCEEDED(parser.Parse(extra_args, NULL, &args));
931 VerifyExtraArgsHaveSpecificValues(
932 args,
933 _T("{8617EE50-F91C-4DC1-B937-0969EEF59B0B}"),
934 _T(""),
935 _T(""),
936 NEEDS_ADMIN_NO,
937 TRISTATE_NONE,
938 false,
939 _T("Google Bundle"),
940 GUID_NULL,
941 _T(""),
942 _T(""),
943 _T(""),
944 _T(""),
945 _T(""),
946 _T(""),
947 _T(""),
948 _T(""));
949 }
950
951 TEST(ExtraArgsParserTest, BundleNameNotPresentButAppNameIs) {
952 CommandLineExtraArgs args;
953 ExtraArgsParser parser;
954 CString extra_args = _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
955 _T("appname=Google%20Chrome");
956
957 EXPECT_SUCCEEDED(parser.Parse(extra_args, NULL, &args));
958 VerifyExtraArgsHaveSpecificValues(
959 args,
960 _T("{8617EE50-F91C-4DC1-B937-0969EEF59B0B}"),
961 _T("Google Chrome"),
962 _T(""),
963 NEEDS_ADMIN_NO,
964 TRISTATE_NONE,
965 false,
966 _T("Google Chrome"),
967 GUID_NULL,
968 _T(""),
969 _T(""),
970 _T(""),
971 _T(""),
972 _T(""),
973 _T(""),
974 _T(""),
975 _T(""));
976 }
977 TEST(ExtraArgsParserTest, BundleNameNorAppNamePresent) {
978 CommandLineExtraArgs args;
979 ExtraArgsParser parser;
980 CString extra_args = _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&");
981
982 EXPECT_SUCCEEDED(parser.Parse(extra_args, NULL, &args));
983 VerifyExtraArgsHaveSpecificValues(
984 args,
985 _T("{8617EE50-F91C-4DC1-B937-0969EEF59B0B}"),
986 _T(""),
987 _T(""),
988 NEEDS_ADMIN_NO,
989 TRISTATE_NONE,
990 false,
991 _T(""),
992 GUID_NULL,
993 _T(""),
994 _T(""),
995 _T(""),
996 _T(""),
997 _T(""),
998 _T(""),
999 _T(""),
1000 _T(""));
1001 }
1002
1003 TEST(ExtraArgsParserTest, BundleNameNotPresentAndNoApp) {
1004 CommandLineExtraArgs args;
1005 ExtraArgsParser parser;
1006 CString extra_args = _T("browser=0");
1007
1008 EXPECT_SUCCEEDED(parser.Parse(extra_args, NULL, &args));
1009 VerifyExtraArgsHaveSpecificValues(
1010 args,
1011 _T("{00000000-0000-0000-0000-000000000000}"),
1012 _T(""),
1013 _T(""),
1014 NEEDS_ADMIN_NO,
1015 TRISTATE_NONE,
1016 false,
1017 _T(""),
1018 GUID_NULL,
1019 _T(""),
1020 _T(""),
1021 _T(""),
1022 _T(""),
1023 _T(""),
1024 _T(""),
1025 _T(""),
1026 _T(""));
1027 }
1028
1029 TEST(ExtraArgsParserTest, InstallationGuidValid) {
1030 CommandLineExtraArgs args;
1031 ExtraArgsParser parser;
1032 CString extra_args = _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
1033 _T("iid={98CEC468-9429-4984-AEDE-4F53C6A14869}");
1034 const GUID expected_guid = {0x98CEC468, 0x9429, 0x4984,
1035 {0xAE, 0xDE, 0x4F, 0x53, 0xC6, 0xA1, 0x48, 0x69}};
1036
1037 EXPECT_SUCCEEDED(parser.Parse(extra_args, NULL, &args));
1038 VerifyExtraArgsHaveSpecificValues(
1039 args,
1040 _T("{8617EE50-F91C-4DC1-B937-0969EEF59B0B}"),
1041 _T(""),
1042 _T(""),
1043 NEEDS_ADMIN_NO,
1044 TRISTATE_NONE,
1045 false,
1046 _T(""),
1047 expected_guid,
1048 _T(""),
1049 _T(""),
1050 _T(""),
1051 _T(""),
1052 _T(""),
1053 _T(""),
1054 _T(""),
1055 _T(""));
1056 }
1057
1058 TEST(ExtraArgsParserTest, InstallationGuidMissingBraces) {
1059 CommandLineExtraArgs args;
1060 ExtraArgsParser parser;
1061 CString extra_args = _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
1062 _T("iid=98CEC468-9429-4984-AEDE-4F53C6A14869");
1063 EXPECT_FAILED(parser.Parse(extra_args, NULL, &args));
1064 }
1065
1066 TEST(ExtraArgsParserTest, InstallationGuidMissingDashes) {
1067 CommandLineExtraArgs args;
1068 ExtraArgsParser parser;
1069 CString extra_args = _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
1070 _T("iid=98CEC46894294984AEDE4F53C6A14869");
1071 EXPECT_FAILED(parser.Parse(extra_args, NULL, &args));
1072 }
1073
1074 TEST(ExtraArgsParserTest, InstallationGuidMissingCharacter) {
1075 CommandLineExtraArgs args;
1076 ExtraArgsParser parser;
1077 CString extra_args = _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
1078 _T("iid=98CEC468-9429-4984-AEDE-4F53C6A1486");
1079 EXPECT_FAILED(parser.Parse(extra_args, NULL, &args));
1080 }
1081
1082 TEST(ExtraArgsParserTest, InstallationGuidIsString) {
1083 CommandLineExtraArgs args;
1084 ExtraArgsParser parser;
1085 CString extra_args = _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
1086 _T("iid=hello");
1087 EXPECT_FAILED(parser.Parse(extra_args, NULL, &args));
1088 }
1089
1090 TEST(ExtraArgsParserTest, BrandCodeValid) {
1091 CommandLineExtraArgs args;
1092 ExtraArgsParser parser;
1093 CString extra_args = _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
1094 _T("brand=GOOG");
1095
1096 EXPECT_SUCCEEDED(parser.Parse(extra_args, NULL, &args));
1097 VerifyExtraArgsHaveSpecificValues(
1098 args,
1099 _T("{8617EE50-F91C-4DC1-B937-0969EEF59B0B}"),
1100 _T(""),
1101 _T(""),
1102 NEEDS_ADMIN_NO,
1103 TRISTATE_NONE,
1104 false,
1105 _T(""),
1106 GUID_NULL,
1107 _T("GOOG"),
1108 _T(""),
1109 _T(""),
1110 _T(""),
1111 _T(""),
1112 _T(""),
1113 _T(""),
1114 _T(""));
1115 }
1116
1117 TEST(ExtraArgsParserTest, BrandCodeTooLong) {
1118 CommandLineExtraArgs args;
1119 ExtraArgsParser parser;
1120 CString extra_args = _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
1121 _T("brand=CHMI\xe3\x83\xbb");
1122
1123 EXPECT_FAILED(parser.Parse(extra_args, NULL, &args));
1124 }
1125
1126 TEST(ExtraArgsParserTest, ClientIdValid) {
1127 CommandLineExtraArgs args;
1128 ExtraArgsParser parser;
1129 CString extra_args = _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
1130 _T("client=some_partner");
1131
1132 EXPECT_SUCCEEDED(parser.Parse(extra_args, NULL, &args));
1133 VerifyExtraArgsHaveSpecificValues(
1134 args,
1135 _T("{8617EE50-F91C-4DC1-B937-0969EEF59B0B}"),
1136 _T(""),
1137 _T(""),
1138 NEEDS_ADMIN_NO,
1139 TRISTATE_NONE,
1140 false,
1141 _T(""),
1142 GUID_NULL,
1143 _T(""),
1144 _T("some_partner"),
1145 _T(""),
1146 _T(""),
1147 _T(""),
1148 _T(""),
1149 _T(""),
1150 _T(""));
1151 }
1152
1153 TEST(ExtraArgsParserTest, OmahaExperimentIdValid) {
1154 CommandLineExtraArgs args;
1155 ExtraArgsParser parser;
1156 CString extra_args = _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
1157 _T("omahaexperiments=experiment%3DgroupA%7Cexpir");
1158
1159 EXPECT_SUCCEEDED(parser.Parse(extra_args, NULL, &args));
1160 VerifyExtraArgsHaveSpecificValues(
1161 args,
1162 _T("{8617EE50-F91C-4DC1-B937-0969EEF59B0B}"),
1163 _T(""),
1164 _T(""),
1165 NEEDS_ADMIN_NO,
1166 TRISTATE_NONE,
1167 false,
1168 _T(""),
1169 GUID_NULL,
1170 _T(""),
1171 _T(""),
1172 _T("experiment=groupA|expir"),
1173 _T(""),
1174 _T(""),
1175 _T(""),
1176 _T(""),
1177 _T(""));
1178 }
1179
1180 TEST(ExtraArgsParserTest, AppExperimentIdValid) {
1181 CommandLineExtraArgs args;
1182 ExtraArgsParser parser;
1183 CString extra_args = _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
1184 _T("experiments=experiment%3DgroupA%7Cexpir");
1185
1186 EXPECT_SUCCEEDED(parser.Parse(extra_args, NULL, &args));
1187 VerifyExtraArgsHaveSpecificValues(
1188 args,
1189 _T("{8617EE50-F91C-4DC1-B937-0969EEF59B0B}"),
1190 _T(""),
1191 _T("experiment=groupA|expir"),
1192 NEEDS_ADMIN_NO,
1193 TRISTATE_NONE,
1194 false,
1195 _T(""),
1196 GUID_NULL,
1197 _T(""),
1198 _T(""),
1199 _T(""),
1200 _T(""),
1201 _T(""),
1202 _T(""),
1203 _T(""),
1204 _T(""));
1205 }
1206
1207 TEST(ExtraArgsParserTest, ReferralIdValid) {
1208 CommandLineExtraArgs args;
1209 ExtraArgsParser parser;
1210 CString extra_args = _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
1211 _T("referral=ABCD123");
1212
1213 EXPECT_SUCCEEDED(parser.Parse(extra_args, NULL, &args));
1214 VerifyExtraArgsHaveSpecificValues(
1215 args,
1216 _T("{8617EE50-F91C-4DC1-B937-0969EEF59B0B}"),
1217 _T(""),
1218 _T(""),
1219 NEEDS_ADMIN_NO,
1220 TRISTATE_NONE,
1221 false,
1222 _T(""),
1223 GUID_NULL,
1224 _T(""),
1225 _T(""),
1226 _T(""),
1227 _T("ABCD123"),
1228 _T(""),
1229 _T(""),
1230 _T(""),
1231 _T(""));
1232 }
1233
1234 TEST(ExtraArgsParserTest, ApValid) {
1235 CommandLineExtraArgs args;
1236 ExtraArgsParser parser;
1237 CString extra_args = _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
1238 _T("ap=developer");
1239
1240 EXPECT_SUCCEEDED(parser.Parse(extra_args, NULL, &args));
1241 VerifyExtraArgsHaveSpecificValues(
1242 args,
1243 _T("{8617EE50-F91C-4DC1-B937-0969EEF59B0B}"),
1244 _T(""),
1245 _T(""),
1246 NEEDS_ADMIN_NO,
1247 TRISTATE_NONE,
1248 false,
1249 _T(""),
1250 GUID_NULL,
1251 _T(""),
1252 _T(""),
1253 _T(""),
1254 _T(""),
1255 _T("developer"),
1256 _T(""),
1257 _T(""),
1258 _T(""));
1259 }
1260
1261 TEST(ExtraArgsParserTest, TTValid) {
1262 CommandLineExtraArgs args;
1263 ExtraArgsParser parser;
1264 CString extra_args = _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
1265 _T("tttoken=7839g93");
1266
1267 EXPECT_SUCCEEDED(parser.Parse(extra_args, NULL, &args));
1268 VerifyExtraArgsHaveSpecificValues(
1269 args,
1270 _T("{8617EE50-F91C-4DC1-B937-0969EEF59B0B}"),
1271 _T(""),
1272 _T(""),
1273 NEEDS_ADMIN_NO,
1274 TRISTATE_NONE,
1275 false,
1276 _T(""),
1277 GUID_NULL,
1278 _T(""),
1279 _T(""),
1280 _T(""),
1281 _T(""),
1282 _T(""),
1283 _T("7839g93"),
1284 _T(""),
1285 _T(""));
1286 }
1287
1288 TEST(ExtraArgsParserTest, AppArgsValid) {
1289 CommandLineExtraArgs args;
1290 ExtraArgsParser parser;
1291 CString extra_args = _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
1292 _T("tttoken=7839g93");
1293
1294 CString app_args = _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
1295 _T("installerdata=%E0%A4foobar");
1296
1297 EXPECT_SUCCEEDED(parser.Parse(extra_args, app_args, &args));
1298 VerifyExtraArgsHaveSpecificValues(
1299 args,
1300 _T("{8617EE50-F91C-4DC1-B937-0969EEF59B0B}"),
1301 _T(""),
1302 _T(""),
1303 NEEDS_ADMIN_NO,
1304 TRISTATE_NONE,
1305 false,
1306 _T(""),
1307 GUID_NULL,
1308 _T(""),
1309 _T(""),
1310 _T(""),
1311 _T(""),
1312 _T(""),
1313 _T("7839g93"),
1314 _T("%E0%A4foobar"),
1315 _T(""));
1316 }
1317
1318 TEST(ExtraArgsParserTest, AppArgsInvalidAppGuid) {
1319 CommandLineExtraArgs args;
1320 ExtraArgsParser parser;
1321 CString extra_args = _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
1322 _T("tttoken=7839g93");
1323
1324 CString app_args = _T("appguid={E135384F-85A2-4328-B07D-2CF70313D505}&")
1325 _T("installerdata=%E0%A4foobar");
1326
1327 EXPECT_EQ(E_INVALIDARG, parser.Parse(extra_args, app_args, &args));
1328 }
1329
1330 TEST(ExtraArgsParserTest, AppArgsInvalidAttribute) {
1331 CommandLineExtraArgs args;
1332 ExtraArgsParser parser;
1333 CString extra_args = _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
1334 _T("tttoken=7839g93");
1335
1336 CString app_args = _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
1337 _T("tttoken=foobar");
1338
1339 EXPECT_EQ(E_INVALIDARG, parser.Parse(extra_args, app_args, &args));
1340 }
1341
1342 TEST(ExtraArgsParserTest, InstallerDataNotAllowedInExtraArgs) {
1343 CommandLineExtraArgs args;
1344 ExtraArgsParser parser;
1345 CString extra_args = _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
1346 _T("appname=TestApp2&")
1347 _T("needsadmin=true&")
1348 _T("installerdata=Hello%20World");
1349
1350 EXPECT_EQ(E_INVALIDARG, parser.Parse(extra_args, NULL, &args));
1351 }
1352
1353 TEST(ExtraArgsParserTest, InstallDataIndexValid) {
1354 CommandLineExtraArgs args;
1355 ExtraArgsParser parser;
1356 CString extra_args = _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
1357 _T("installdataindex=foobar");
1358
1359 EXPECT_SUCCEEDED(parser.Parse(extra_args, NULL, &args));
1360 VerifyExtraArgsHaveSpecificValues(
1361 args,
1362 _T("{8617EE50-F91C-4DC1-B937-0969EEF59B0B}"),
1363 _T(""),
1364 _T(""),
1365 NEEDS_ADMIN_NO,
1366 TRISTATE_NONE,
1367 false,
1368 _T(""),
1369 GUID_NULL,
1370 _T(""),
1371 _T(""),
1372 _T(""),
1373 _T(""),
1374 _T(""),
1375 _T(""),
1376 _T(""),
1377 _T("foobar"));
1378 }
1379
1380 TEST(ExtraArgsParserTest, BrowserTypeValid_0) {
1381 CommandLineExtraArgs args;
1382 ExtraArgsParser parser;
1383 CString extra_args = _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
1384 _T("browser=0");
1385
1386 EXPECT_SUCCEEDED(parser.Parse(extra_args, NULL, &args));
1387 VerifyBrowserType(args,
1388 _T("{8617EE50-F91C-4DC1-B937-0969EEF59B0B}"),
1389 BROWSER_UNKNOWN);
1390 }
1391
1392 TEST(ExtraArgsParserTest, BrowserTypeValid_1) {
1393 CommandLineExtraArgs args;
1394 ExtraArgsParser parser;
1395 CString extra_args = _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
1396 _T("browser=1");
1397
1398 EXPECT_SUCCEEDED(parser.Parse(extra_args, NULL, &args));
1399 VerifyBrowserType(args,
1400 _T("{8617EE50-F91C-4DC1-B937-0969EEF59B0B}"),
1401 BROWSER_DEFAULT);
1402 }
1403
1404 TEST(ExtraArgsParserTest, BrowserTypeValid_2) {
1405 CommandLineExtraArgs args;
1406 ExtraArgsParser parser;
1407 CString extra_args = _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
1408 _T("browser=2");
1409
1410 EXPECT_SUCCEEDED(parser.Parse(extra_args, NULL, &args));
1411 VerifyBrowserType(args,
1412 _T("{8617EE50-F91C-4DC1-B937-0969EEF59B0B}"),
1413 BROWSER_IE);
1414 }
1415
1416 TEST(ExtraArgsParserTest, BrowserTypeValid_3) {
1417 CommandLineExtraArgs args;
1418 ExtraArgsParser parser;
1419 CString extra_args = _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
1420 _T("browser=3");
1421
1422 EXPECT_SUCCEEDED(parser.Parse(extra_args, NULL, &args));
1423 VerifyBrowserType(args,
1424 _T("{8617EE50-F91C-4DC1-B937-0969EEF59B0B}"),
1425 BROWSER_FIREFOX);
1426 }
1427
1428 TEST(ExtraArgsParserTest, BrowserTypeValid_4) {
1429 CommandLineExtraArgs args;
1430 ExtraArgsParser parser;
1431 CString extra_args = _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
1432 _T("browser=4");
1433
1434 EXPECT_SUCCEEDED(parser.Parse(extra_args, NULL, &args));
1435 VerifyBrowserType(args,
1436 _T("{8617EE50-F91C-4DC1-B937-0969EEF59B0B}"),
1437 BROWSER_CHROME);
1438 }
1439
1440 TEST(ExtraArgsParserTest, BrowserTypeInvalid) {
1441 EXPECT_EQ(5, BROWSER_MAX) <<
1442 _T("Browser type may have been added. Add new Valid_n test and change ")
1443 _T("browser values in extra args strings below.");
1444
1445 CommandLineExtraArgs args1;
1446 ExtraArgsParser parser1;
1447 CString extra_args = _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
1448 _T("browser=5");
1449
1450 EXPECT_SUCCEEDED(parser1.Parse(extra_args, NULL, &args1));
1451 VerifyBrowserType(args1,
1452 _T("{8617EE50-F91C-4DC1-B937-0969EEF59B0B}"),
1453 BROWSER_UNKNOWN);
1454
1455 CommandLineExtraArgs args2;
1456 ExtraArgsParser parser2;
1457 extra_args = _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
1458 _T("browser=9");
1459
1460 EXPECT_SUCCEEDED(parser2.Parse(extra_args, NULL, &args2));
1461 VerifyBrowserType(args2,
1462 _T("{8617EE50-F91C-4DC1-B937-0969EEF59B0B}"),
1463 BROWSER_UNKNOWN);
1464 }
1465
1466 TEST(ExtraArgsParserTest, ValidLang) {
1467 CommandLineExtraArgs args;
1468 ExtraArgsParser parser;
1469 CString extra_args = _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
1470 _T("lang=en");
1471 EXPECT_SUCCEEDED(parser.Parse(extra_args, NULL, &args));
1472 EXPECT_STREQ(_T("en"), args.language);
1473 }
1474
1475 // Language must be passed even if not supported. See http://b/1336966.
1476 TEST(ExtraArgsParserTest, UnsupportedLang) {
1477 CommandLineExtraArgs args;
1478 ExtraArgsParser parser;
1479 CString extra_args = _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
1480 _T("lang=foobar");
1481 EXPECT_SUCCEEDED(parser.Parse(extra_args, NULL, &args));
1482 EXPECT_STREQ(_T("foobar"), args.language);
1483 }
1484
1485 TEST(ExtraArgsParserTest, LangTooLong) {
1486 CommandLineExtraArgs args;
1487 ExtraArgsParser parser;
1488 CString extra_args = _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
1489 _T("lang=morethan10chars");
1490 EXPECT_FAILED(parser.Parse(extra_args, NULL, &args));
1491 }
1492
1493 TEST(ExtraArgsParserTest, RuntimeValid) {
1494 CommandLineExtraArgs args;
1495 ExtraArgsParser parser;
1496 CString extra_args = _T("runtime=true");
1497
1498 EXPECT_SUCCEEDED(parser.Parse(extra_args, NULL, &args));
1499 VerifyExtraArgsHaveSpecificValues(
1500 args,
1501 _T("{00000000-0000-0000-0000-000000000000}"),
1502 _T(""),
1503 _T(""),
1504 NEEDS_ADMIN_NO,
1505 TRISTATE_NONE,
1506 true,
1507 _T(""),
1508 GUID_NULL,
1509 _T(""),
1510 _T(""),
1511 _T(""),
1512 _T(""),
1513 _T(""),
1514 _T(""),
1515 _T(""),
1516 _T(""));
1517 }
1518
1519 TEST(ExtraArgsParserTest, RuntimeWithExtraArgs) {
1520 CommandLineExtraArgs args;
1521 ExtraArgsParser parser;
1522 CString extra_args = _T("runtime=true&")
1523 _T("bundlename=Google%20Bundle&")
1524 _T("brand=GOOG&")
1525 _T("usagestats=1");
1526
1527 EXPECT_SUCCEEDED(parser.Parse(extra_args, NULL, &args));
1528 VerifyExtraArgsHaveSpecificValues(
1529 args,
1530 _T("{00000000-0000-0000-0000-000000000000}"),
1531 _T(""),
1532 _T(""),
1533 NEEDS_ADMIN_NO,
1534 TRISTATE_TRUE,
1535 true,
1536 _T("Google Bundle"),
1537 GUID_NULL,
1538 _T("GOOG"),
1539 _T(""),
1540 _T(""),
1541 _T(""),
1542 _T(""),
1543 _T(""),
1544 _T(""),
1545 _T(""));
1546 }
1547
1548
1549 TEST(ExtraArgsParserTest, RuntimeBeforeAppGuid) {
1550 CommandLineExtraArgs args;
1551 ExtraArgsParser parser;
1552 CString extra_args = _T("runtime=true&")
1553 _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}");
1554
1555 EXPECT_EQ(E_INVALIDARG, parser.Parse(extra_args, NULL, &args));
1556 }
1557
1558 TEST(ExtraArgsParserTest, RuntimeAfterAppGuid) {
1559 CommandLineExtraArgs args;
1560 ExtraArgsParser parser;
1561 CString extra_args = _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
1562 _T("runtime=true");
1563
1564 EXPECT_EQ(E_INVALIDARG, parser.Parse(extra_args, NULL, &args));
1565 }
1566
1567 //
1568 // Test multiple applications in the extra arguments
1569 //
1570 TEST(ExtraArgsParserTestMultipleEntries, TestNotStartingWithAppGuid) {
1571 CommandLineExtraArgs args;
1572 ExtraArgsParser parser;
1573 CString extra_args = _T("appname=TestApp&")
1574 _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
1575 _T("appname=TestApp&")
1576 _T("appname=false&")
1577 _T("iid={98CEC468-9429-4984-AEDE-4F53C6A14869}&")
1578 _T("ap=test_ap&")
1579 _T("tttoken=foobar&")
1580 _T("usagestats=1&")
1581 _T("browser=2&");
1582 EXPECT_HRESULT_SUCCEEDED(parser.Parse(extra_args, NULL, &args));
1583 }
1584
1585 // This also tests that the last occurrence of a global extra arg is the one
1586 // that is saved.
1587 TEST(ExtraArgsParserTestMultipleEntries, ThreeApplications) {
1588 CommandLineExtraArgs args;
1589 ExtraArgsParser parser;
1590 CString extra_args = _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
1591 _T("appname=TestApp&")
1592 _T("needsadmin=false&")
1593 _T("iid={98CEC468-9429-4984-AEDE-4F53C6A14869}&")
1594 _T("ap=test_ap&")
1595 _T("tttoken=foobar&")
1596 _T("usagestats=1&")
1597 _T("browser=2&")
1598 _T("brand=GOOG&")
1599 _T("client=_some_client&")
1600 _T("experiments=_experiment_a&")
1601 _T("referral=A123456789&")
1602 _T("appguid={5E46DE36-737D-4271-91C1-C062F9FE21D9}&")
1603 _T("appname=TestApp2&")
1604 _T("needsadmin=true&")
1605 _T("experiments=_experiment_b&")
1606 _T("iid={98CEC468-9429-4984-AEDE-4F53C6A14869}&")
1607 _T("ap=test_ap2&")
1608 _T("tttoken=foobar2&")
1609 _T("usagestats=0&")
1610 _T("browser=3&")
1611 _T("brand=g00g&")
1612 _T("client=_different_client&")
1613 _T("appguid={5F46DE36-737D-4271-91C1-C062F9FE21D9}&")
1614 _T("appname=TestApp3&")
1615 _T("needsadmin=prefers&");
1616
1617 CString app_args = _T("appguid={5F46DE36-737D-4271-91C1-C062F9FE21D9}&")
1618 _T("installerdata=installerdata_app3&")
1619 _T("appguid={8617EE50-F91C-4DC1-B937-0969EEF59B0B}&")
1620 _T("installerdata=installerdata_app1");
1621
1622 EXPECT_HRESULT_SUCCEEDED(parser.Parse(extra_args, app_args, &args));
1623
1624 CommandLineAppArgs input1;
1625 input1.app_guid = StringToGuid(_T("{8617EE50-F91C-4DC1-B937-0969EEF59B0B}"));
1626 input1.app_name = _T("TestApp");
1627 input1.needs_admin = NEEDS_ADMIN_NO;
1628 input1.ap = _T("test_ap");
1629 input1.tt_token = _T("foobar");
1630 input1.encoded_installer_data = _T("installerdata_app1");
1631 input1.experiment_labels = _T("_experiment_a");
1632
1633 CommandLineAppArgs input2;
1634 input2.app_guid = StringToGuid(_T("{5E46DE36-737D-4271-91C1-C062F9FE21D9}"));
1635 input2.app_name = _T("TestApp2");
1636 input2.needs_admin = NEEDS_ADMIN_YES;
1637 input2.ap = _T("test_ap2");
1638 input2.tt_token = _T("foobar2");
1639 input2.experiment_labels = _T("_experiment_b");
1640
1641 CommandLineAppArgs input3;
1642 input3.app_guid = StringToGuid(_T("{5F46DE36-737D-4271-91C1-C062F9FE21D9}"));
1643 input3.app_name = _T("TestApp3");
1644 input3.encoded_installer_data = _T("installerdata_app3");
1645 input3.needs_admin = NEEDS_ADMIN_PREFERS;
1646
1647 CommandLineExtraArgs expected;
1648 expected.apps.push_back(input1);
1649 expected.apps.push_back(input2);
1650 expected.apps.push_back(input3);
1651 expected.bundle_name = _T("TestApp");
1652 expected.installation_id = StringToGuid(
1653 _T("{98CEC468-9429-4984-AEDE-4F53C6A14869}"));
1654 expected.brand_code = _T("g00g");
1655 expected.client_id = _T("_different_client");
1656 expected.referral_id = _T("A123456789");
1657 expected.browser_type = BROWSER_FIREFOX;
1658 expected.usage_stats_enable = TRISTATE_FALSE;
1659
1660 VerifyCommandLineExtraArgs(expected, args);
1661 }
1662
1663 } // namespace omaha
OLDNEW
« no previous file with comments | « common/extra_args_parser.cc ('k') | common/goopdate_command_line_validator.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698