OLD | NEW |
| (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 | |
OLD | NEW |