OLD | NEW |
| (Empty) |
1 // Copyright 2009-2010 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 <atlsecurity.h> | |
17 #include "omaha/base/app_util.h" | |
18 #include "omaha/base/error.h" | |
19 #include "omaha/base/reg_key.h" | |
20 #include "omaha/base/scoped_ptr_address.h" | |
21 #include "omaha/base/thread_pool.h" | |
22 #include "omaha/base/utils.h" | |
23 #include "omaha/common/lang.h" | |
24 #include "omaha/goopdate/app_bundle_state_busy.h" | |
25 #include "omaha/goopdate/app_bundle_state_initialized.h" | |
26 #include "omaha/goopdate/app_bundle_state_paused.h" | |
27 #include "omaha/goopdate/app_bundle_state_ready.h" | |
28 #include "omaha/goopdate/app_bundle_state_stopped.h" | |
29 #include "omaha/goopdate/app_manager.h" | |
30 #include "omaha/goopdate/model.h" | |
31 #include "omaha/goopdate/resource_manager.h" | |
32 #include "omaha/goopdate/worker.h" | |
33 #include "omaha/goopdate/worker_mock.h" | |
34 #include "omaha/testing/unit_test.h" | |
35 | |
36 namespace omaha { | |
37 | |
38 const int kKnownError = 0x87658765; | |
39 | |
40 const TCHAR* const kDefaultAppName = _T("Google Application"); | |
41 | |
42 const uint32 kInitialInstallTimeDiff = static_cast<uint32>(-1 * kSecondsPerDay); | |
43 | |
44 // TODO(omaha): there is a problem with this unit test. The model is built | |
45 // bottom up. This makes it impossible to set the references to parents. Will | |
46 // have to fix the code, eventually using Builder DP to create a bunch of | |
47 // models containing bundles, apps, and such. | |
48 | |
49 | |
50 // Helper functions. | |
51 // TODO(omaha): helper functions need to go into their own compilation unit to | |
52 // avoid dependencies between unit test modules. | |
53 | |
54 void ValidateFreshInstallDefaultValues(const App& app) { | |
55 EXPECT_FALSE(::IsEqualGUID(GUID_NULL, app.app_guid())); | |
56 EXPECT_TRUE(app.language().IsEmpty()); | |
57 EXPECT_TRUE(app.ap().IsEmpty()); | |
58 EXPECT_TRUE(app.tt_token().IsEmpty()); | |
59 EXPECT_TRUE(::IsEqualGUID(GUID_NULL, app.iid())); | |
60 EXPECT_TRUE(app.brand_code().IsEmpty()); | |
61 EXPECT_TRUE(app.client_id().IsEmpty()); | |
62 EXPECT_TRUE(app.GetExperimentLabels().IsEmpty()); | |
63 EXPECT_TRUE(app.referral_id().IsEmpty()); | |
64 EXPECT_EQ(kInitialInstallTimeDiff, app.install_time_diff_sec()); | |
65 EXPECT_FALSE(app.is_eula_accepted()); | |
66 EXPECT_TRUE(app.display_name().IsEmpty()); | |
67 EXPECT_EQ(BROWSER_UNKNOWN, app.browser_type()); | |
68 EXPECT_TRUE(app.server_install_data_index().IsEmpty()); | |
69 EXPECT_EQ(TRISTATE_NONE, app.usage_stats_enable()); | |
70 EXPECT_TRUE(app.client_install_data().IsEmpty()); | |
71 EXPECT_TRUE(app.server_install_data().IsEmpty()); | |
72 EXPECT_EQ(ACTIVE_UNKNOWN, app.did_run()); | |
73 EXPECT_EQ(0, app.days_since_last_active_ping()); | |
74 EXPECT_EQ(0, app.days_since_last_roll_call()); | |
75 | |
76 EXPECT_TRUE(app.current_version()->version().IsEmpty()); | |
77 EXPECT_TRUE(app.next_version()->version().IsEmpty()); | |
78 // TODO(omaha3): Add all the new values (state_, etc.). | |
79 } | |
80 | |
81 void PopulateDataAndRegistryForRegisteredAndUnInstalledAppsTests( | |
82 bool is_machine, | |
83 App* expected_app0, | |
84 App* expected_app1, | |
85 App* expected_app2, | |
86 App* opposite_hive_app1, | |
87 App* opposite_hive_app2); | |
88 | |
89 void SetDisplayName(const CString& name, App* app); | |
90 | |
91 void ValidateExpectedValues(const App& expected, const App& actual) { | |
92 EXPECT_STREQ(GuidToString(expected.app_guid()), | |
93 GuidToString(actual.app_guid())); | |
94 EXPECT_STREQ(expected.language(), actual.language()); | |
95 EXPECT_STREQ(expected.ap(), actual.ap()); | |
96 EXPECT_STREQ(expected.tt_token(), actual.tt_token()); | |
97 EXPECT_STREQ(GuidToString(expected.iid()), GuidToString(actual.iid())); | |
98 EXPECT_STREQ(expected.brand_code(), actual.brand_code()); | |
99 EXPECT_STREQ(expected.client_id(), actual.client_id()); | |
100 EXPECT_STREQ(expected.GetExperimentLabels(), actual.GetExperimentLabels()); | |
101 EXPECT_STREQ(expected.referral_id(), actual.referral_id()); | |
102 EXPECT_EQ(expected.install_time_diff_sec(), actual.install_time_diff_sec()); | |
103 EXPECT_EQ(expected.is_eula_accepted(), actual.is_eula_accepted()); | |
104 EXPECT_STREQ(expected.display_name(), actual.display_name()); | |
105 EXPECT_EQ(expected.browser_type(), actual.browser_type()); | |
106 EXPECT_STREQ(expected.server_install_data_index(), | |
107 actual.server_install_data_index()); | |
108 EXPECT_EQ(expected.usage_stats_enable(), actual.usage_stats_enable()); | |
109 EXPECT_STREQ(expected.client_install_data(), actual.client_install_data()); | |
110 EXPECT_STREQ(expected.server_install_data(), actual.server_install_data()); | |
111 EXPECT_EQ(expected.did_run(), actual.did_run()); | |
112 | |
113 EXPECT_STREQ(expected.current_version()->version(), | |
114 actual.current_version()->version()); | |
115 EXPECT_STREQ(expected.next_version()->version(), | |
116 actual.next_version()->version()); | |
117 | |
118 // TODO(omaha3): Add all the new values (state(), etc.)? | |
119 } | |
120 | |
121 using ::testing::_; | |
122 using ::testing::Return; | |
123 | |
124 namespace { | |
125 | |
126 // TODO(omaha): At least some of these and where they are used have to be kept | |
127 // in sync with app_manager_unittest.cc because the constants are hard-coded in | |
128 // functions used by these tests. Break this coupling. | |
129 const TCHAR* const kGuid1 = _T("{21CD0965-0B0E-47cf-B421-2D191C16C0E2}"); | |
130 const TCHAR* const kGuid2 = _T("{A979ACBD-1F55-4b12-A35F-4DBCA5A7CCB8}"); | |
131 const TCHAR* const kGuid3 = _T("{661045C5-4429-4140-BC48-8CEA241D1DEF}"); | |
132 const TCHAR* const kGuid4 = _T("{AAFA1CF9-E94F-42e6-A899-4CD27F37D5A7}"); | |
133 const TCHAR* const kGuid5 = _T("{3B1A3CCA-0525-4418-93E6-A0DB3398EC9B}"); | |
134 const TCHAR* const kGuid6 = _T("{F3F2CFD4-5F98-4bf0-ABB0-BEEEA46C62B4}"); | |
135 const TCHAR* const kGuid7 = _T("{6FD2272F-8583-4bbd-895A-E65F8003FC7B}"); | |
136 | |
137 | |
138 class DummyUserWorkItem : public UserWorkItem { | |
139 private: | |
140 virtual void DoProcess() {} | |
141 }; | |
142 | |
143 ACTION_P(SetWorkItem, work_item) { | |
144 UNREFERENCED_ACTION_PARAMETERS; | |
145 arg0->set_user_work_item(work_item); | |
146 return 0; | |
147 } | |
148 | |
149 } // namespace | |
150 | |
151 class AppBundleNoBundleTest : public testing::Test { | |
152 protected: | |
153 explicit AppBundleNoBundleTest(bool is_machine) | |
154 : is_machine_(is_machine) {} | |
155 | |
156 virtual void SetUp() { | |
157 EXPECT_SUCCEEDED(AppManager::CreateInstance(is_machine_)); | |
158 | |
159 // By default, no Worker methods should be called, so use StrictMock. | |
160 // Override this behavior for specific methods in the individual test cases. | |
161 worker_.reset(new testing::StrictMock<MockWorker>); | |
162 model_.reset(new Model(worker_.get())); | |
163 | |
164 EXPECT_CALL(*worker_, Lock()).WillRepeatedly(Return(2)); | |
165 EXPECT_CALL(*worker_, Unlock()).WillRepeatedly(Return(1)); | |
166 } | |
167 | |
168 virtual void TearDown() { | |
169 AppManager::DeleteInstance(); | |
170 } | |
171 | |
172 const bool is_machine_; | |
173 scoped_ptr<MockWorker> worker_; | |
174 scoped_ptr<Model> model_; | |
175 | |
176 private: | |
177 DISALLOW_IMPLICIT_CONSTRUCTORS(AppBundleNoBundleTest); | |
178 }; | |
179 | |
180 class AppBundleTest : public AppBundleNoBundleTest { | |
181 protected: | |
182 explicit AppBundleTest(bool is_machine) : AppBundleNoBundleTest(is_machine) {} | |
183 | |
184 static void SetUpTestCase() { | |
185 EXPECT_EQ(STATE_INIT, fsm::AppBundleState::STATE_INIT); | |
186 EXPECT_EQ(STATE_INITIALIZED, fsm::AppBundleState::STATE_INITIALIZED); | |
187 EXPECT_EQ(STATE_BUSY, fsm::AppBundleState::STATE_BUSY); | |
188 EXPECT_EQ(STATE_READY, fsm::AppBundleState::STATE_READY); | |
189 EXPECT_EQ(STATE_PAUSED, fsm::AppBundleState::STATE_PAUSED); | |
190 EXPECT_EQ(STATE_STOPPED, fsm::AppBundleState::STATE_STOPPED); | |
191 } | |
192 | |
193 virtual void SetUp() { | |
194 AppBundleNoBundleTest::SetUp(); | |
195 app_bundle_ = model_->CreateAppBundle(is_machine_); | |
196 ASSERT_TRUE(app_bundle_.get()); | |
197 } | |
198 | |
199 virtual void TearDown() { | |
200 app_bundle_.reset(); | |
201 AppBundleNoBundleTest::TearDown(); | |
202 } | |
203 | |
204 void TestPropertyReflexiveness() { | |
205 EXPECT_SUCCEEDED(app_bundle_->put_displayName(CComBSTR(_T("My Apps")))); | |
206 CComBSTR name(_T("")); | |
207 EXPECT_SUCCEEDED(app_bundle_->get_displayName(&name)); | |
208 EXPECT_STREQ(_T("My Apps"), name); | |
209 | |
210 EXPECT_SUCCEEDED(app_bundle_->put_displayLanguage(CComBSTR(_T("en")))); | |
211 CComBSTR lang(_T("")); | |
212 EXPECT_SUCCEEDED(app_bundle_->get_displayLanguage(&lang)); | |
213 EXPECT_STREQ(_T("en"), lang); | |
214 | |
215 EXPECT_SUCCEEDED(app_bundle_->put_installSource(CComBSTR(_T("unittest")))); | |
216 CComBSTR source(_T("")); | |
217 EXPECT_SUCCEEDED(app_bundle_->get_installSource(&source)); | |
218 EXPECT_STREQ(_T("unittest"), source); | |
219 | |
220 EXPECT_SUCCEEDED(app_bundle_->put_priority(INSTALL_PRIORITY_LOW)); | |
221 long priority = INSTALL_PRIORITY_HIGH; // NOLINT | |
222 EXPECT_SUCCEEDED(app_bundle_->get_priority(&priority)); | |
223 EXPECT_EQ(INSTALL_PRIORITY_LOW, priority); | |
224 } | |
225 | |
226 // A copy of the protected enum in AppBundleState, allowing the individual | |
227 // tests to use these values. | |
228 enum BundleState { | |
229 STATE_INIT, | |
230 STATE_INITIALIZED, | |
231 STATE_BUSY, | |
232 STATE_READY, | |
233 STATE_PAUSED, | |
234 STATE_STOPPED, | |
235 }; | |
236 | |
237 BundleState GetBundleState() { | |
238 return static_cast<BundleState>(app_bundle_->app_bundle_state_->state_); | |
239 } | |
240 | |
241 shared_ptr<AppBundle> app_bundle_; | |
242 | |
243 private: | |
244 DISALLOW_IMPLICIT_CONSTRUCTORS(AppBundleTest); | |
245 }; | |
246 | |
247 class AppBundleUninitializedTest : public AppBundleTest { | |
248 protected: | |
249 explicit AppBundleUninitializedTest(bool is_machine) | |
250 : AppBundleTest(is_machine) {} | |
251 | |
252 void TestPropertyDefaults() { | |
253 CComBSTR name; | |
254 EXPECT_SUCCEEDED(app_bundle_->get_displayName(&name)); | |
255 EXPECT_STREQ(_T(""), name); | |
256 | |
257 CComBSTR lang; | |
258 EXPECT_SUCCEEDED(app_bundle_->get_displayLanguage(&lang)); | |
259 EXPECT_STREQ(lang::GetDefaultLanguage(is_machine_), lang); | |
260 | |
261 CComBSTR install_source; | |
262 EXPECT_SUCCEEDED(app_bundle_->get_installSource(&install_source)); | |
263 EXPECT_STREQ(_T("unknown"), install_source); | |
264 | |
265 CComBSTR offline_dir; | |
266 EXPECT_SUCCEEDED(app_bundle_->get_offlineDirectory(&offline_dir)); | |
267 EXPECT_STREQ(_T(""), offline_dir); | |
268 | |
269 long priority; // NOLINT | |
270 EXPECT_SUCCEEDED(app_bundle_->get_priority(&priority)); | |
271 EXPECT_EQ(INSTALL_PRIORITY_HIGH, priority); | |
272 } | |
273 }; | |
274 | |
275 class AppBundleUninitializedMachineTest : public AppBundleUninitializedTest { | |
276 protected: | |
277 AppBundleUninitializedMachineTest() : AppBundleUninitializedTest(true) {} | |
278 }; | |
279 | |
280 class AppBundleUninitializedUserTest : public AppBundleUninitializedTest { | |
281 protected: | |
282 AppBundleUninitializedUserTest() : AppBundleUninitializedTest(false) {} | |
283 }; | |
284 | |
285 TEST_F(AppBundleUninitializedMachineTest, Properties) { | |
286 TestPropertyDefaults(); | |
287 TestPropertyReflexiveness(); | |
288 } | |
289 | |
290 TEST_F(AppBundleUninitializedUserTest, Properties) { | |
291 TestPropertyDefaults(); | |
292 TestPropertyReflexiveness(); | |
293 } | |
294 | |
295 class AppBundleInitializedTest : public AppBundleTest { | |
296 protected: | |
297 explicit AppBundleInitializedTest(bool is_machine) | |
298 : AppBundleTest(is_machine) {} | |
299 | |
300 virtual void SetUp() { | |
301 AppBundleTest::SetUp(); | |
302 // TODO(omaha): UserRights::GetCallerToken() fails with ERROR_NO_TOKEN | |
303 // when initialize() is called for a machine bundle during these tests. | |
304 // It might make sense to move theimpersonation stuff to the COM wrapper, | |
305 // but I am not sure how this would work with the AppBundleStates. | |
306 // If we can do something about this, call initialize() in all cases. | |
307 if (is_machine_) { | |
308 SetAppBundleStateForUnitTest(app_bundle_.get(), | |
309 new fsm::AppBundleStateInitialized); | |
310 } else { | |
311 EXPECT_SUCCEEDED(app_bundle_->put_displayName(CComBSTR(_T("My Bundle")))); | |
312 EXPECT_SUCCEEDED(app_bundle_->put_displayLanguage(CComBSTR(_T("en")))); | |
313 EXPECT_SUCCEEDED(app_bundle_->initialize()); | |
314 } | |
315 } | |
316 }; | |
317 | |
318 class AppBundleNoBundleMachineTest : public AppBundleNoBundleTest { | |
319 protected: | |
320 AppBundleNoBundleMachineTest() : AppBundleNoBundleTest(true) {} | |
321 }; | |
322 | |
323 class AppBundleNoBundleUserTest : public AppBundleNoBundleTest { | |
324 protected: | |
325 AppBundleNoBundleUserTest() : AppBundleNoBundleTest(false) {} | |
326 }; | |
327 | |
328 class AppBundleInitializedMachineTest : public AppBundleInitializedTest { | |
329 protected: | |
330 AppBundleInitializedMachineTest() : AppBundleInitializedTest(true) {} | |
331 }; | |
332 | |
333 class AppBundleInitializedUserTest : public AppBundleInitializedTest { | |
334 protected: | |
335 AppBundleInitializedUserTest() : AppBundleInitializedTest(false) {} | |
336 }; | |
337 | |
338 | |
339 // The creation of an app bundle inserts it in the model and increments | |
340 // the server module count. | |
341 TEST_F(AppBundleNoBundleUserTest, ConstructorAndDestructor) { | |
342 EXPECT_CALL(*worker_, Lock()).WillOnce(Return(2)); | |
343 EXPECT_CALL(*worker_, Unlock()).WillOnce(Return(1)); | |
344 | |
345 shared_ptr<AppBundle> app_bundle(model_->CreateAppBundle(is_machine_)); | |
346 EXPECT_TRUE(app_bundle.get()); | |
347 EXPECT_EQ(1, model_->GetNumberOfAppBundles()); | |
348 EXPECT_EQ(app_bundle.get(), model_->GetAppBundle(0).get()); | |
349 app_bundle.reset(); | |
350 EXPECT_EQ(0, model_->GetNumberOfAppBundles()); | |
351 } | |
352 | |
353 TEST_F(AppBundleNoBundleMachineTest, ConstructorAndDestructor) { | |
354 EXPECT_CALL(*worker_, Lock()).WillOnce(Return(2)); | |
355 EXPECT_CALL(*worker_, Unlock()).WillOnce(Return(1)); | |
356 | |
357 shared_ptr<AppBundle> app_bundle(model_->CreateAppBundle(is_machine_)); | |
358 EXPECT_TRUE(app_bundle.get()); | |
359 EXPECT_EQ(1, model_->GetNumberOfAppBundles()); | |
360 EXPECT_EQ(app_bundle.get(), model_->GetAppBundle(0).get()); | |
361 app_bundle.reset(); | |
362 EXPECT_EQ(0, model_->GetNumberOfAppBundles()); | |
363 } | |
364 | |
365 class AppBundlePopulatedRegistryTest : public AppBundleInitializedTest { | |
366 protected: | |
367 explicit AppBundlePopulatedRegistryTest(bool is_machine) | |
368 : AppBundleInitializedTest(is_machine), | |
369 hive_override_key_name_(kRegistryHiveOverrideRoot) {} | |
370 | |
371 virtual void SetUp() { | |
372 AppBundleInitializedTest::SetUp(); | |
373 | |
374 RegKey::DeleteKey(hive_override_key_name_); | |
375 OverrideRegistryHives(hive_override_key_name_); | |
376 | |
377 EXPECT_SUCCEEDED(ResourceManager::Create( | |
378 is_machine_, app_util::GetCurrentModuleDirectory(), _T("en"))); | |
379 | |
380 dummy_app_bundle_for_expected_apps_ = model_->CreateAppBundle(is_machine_); | |
381 ASSERT_TRUE(dummy_app_bundle_for_expected_apps_.get()); | |
382 // TODO(omaha): Address with the TODO in AppBundleInitializedTest::SetUp. | |
383 if (is_machine_) { | |
384 SetAppBundleStateForUnitTest(dummy_app_bundle_for_expected_apps_.get(), | |
385 new fsm::AppBundleStateInitialized); | |
386 } else { | |
387 EXPECT_SUCCEEDED(dummy_app_bundle_for_expected_apps_->put_displayName( | |
388 CComBSTR(_T("My Bundle")))); | |
389 EXPECT_SUCCEEDED(dummy_app_bundle_for_expected_apps_->put_displayLanguage( | |
390 CComBSTR(_T("en")))); | |
391 EXPECT_SUCCEEDED(dummy_app_bundle_for_expected_apps_->initialize()); | |
392 } | |
393 } | |
394 | |
395 virtual void TearDown() { | |
396 dummy_app_bundle_for_expected_apps_.reset(); | |
397 | |
398 ResourceManager::Delete(); | |
399 | |
400 RestoreRegistryHives(); | |
401 RegKey::DeleteKey(hive_override_key_name_); | |
402 | |
403 AppBundleInitializedTest::TearDown(); | |
404 } | |
405 | |
406 // App will be cleaned up when bundle is destroyed. | |
407 // This is a hack for creating registry data. Would be nice to have a | |
408 // different mechanism. | |
409 App* CreateExpectedApp(const TCHAR* app_id) { | |
410 App* app = NULL; | |
411 EXPECT_SUCCEEDED( | |
412 dummy_app_bundle_for_expected_apps_->createApp(CComBSTR(app_id), &app)); | |
413 ASSERT1(app); | |
414 return app; | |
415 } | |
416 | |
417 void PopulateDataAndRegistryForRegisteredAndUnInstalledAppsTests( | |
418 App** expected_app0, | |
419 App** expected_app1, | |
420 App** expected_app2) { | |
421 *expected_app0 = CreateExpectedApp(kGuid1); | |
422 *expected_app1 = CreateExpectedApp(kGuid2); | |
423 *expected_app2 = CreateExpectedApp(kGuid3); | |
424 App* opposite_hive_app1 = CreateExpectedApp(kGuid6); | |
425 App* opposite_hive_app2 = CreateExpectedApp(kGuid7); | |
426 omaha::PopulateDataAndRegistryForRegisteredAndUnInstalledAppsTests( | |
427 is_machine_, | |
428 *expected_app0, | |
429 *expected_app1, | |
430 *expected_app2, | |
431 opposite_hive_app1, | |
432 opposite_hive_app2); | |
433 | |
434 // Reload install age since registry has been changed. | |
435 AppManager::Instance()->ReadAppInstallTimeDiff(*expected_app0); | |
436 AppManager::Instance()->ReadAppInstallTimeDiff(*expected_app1); | |
437 AppManager::Instance()->ReadAppInstallTimeDiff(*expected_app2); | |
438 AppManager::Instance()->ReadAppInstallTimeDiff(opposite_hive_app1); | |
439 AppManager::Instance()->ReadAppInstallTimeDiff(opposite_hive_app2); | |
440 } | |
441 | |
442 CString hive_override_key_name_; | |
443 shared_ptr<AppBundle> dummy_app_bundle_for_expected_apps_; | |
444 LLock lock_; | |
445 | |
446 DISALLOW_IMPLICIT_CONSTRUCTORS(AppBundlePopulatedRegistryTest); | |
447 }; | |
448 | |
449 class AppBundlePopulatedRegistryMachineTest | |
450 : public AppBundlePopulatedRegistryTest { | |
451 protected: | |
452 AppBundlePopulatedRegistryMachineTest() | |
453 : AppBundlePopulatedRegistryTest(true) {} | |
454 }; | |
455 | |
456 class AppBundlePopulatedRegistryUserTest | |
457 : public AppBundlePopulatedRegistryTest { | |
458 protected: | |
459 AppBundlePopulatedRegistryUserTest() | |
460 : AppBundlePopulatedRegistryTest(false) {} | |
461 }; | |
462 | |
463 TEST_F(AppBundleInitializedUserTest, CountAndItem_NoApps) { | |
464 EXPECT_EQ(0, app_bundle_->GetNumberOfApps()); | |
465 long num_apps = 0; // NOLINT | |
466 EXPECT_SUCCEEDED(app_bundle_->get_Count(&num_apps)); | |
467 EXPECT_EQ(0, num_apps); | |
468 | |
469 { | |
470 ExpectAsserts expect_asserts; | |
471 EXPECT_FALSE(app_bundle_->GetApp(0)); | |
472 } | |
473 App* app0_obtained = NULL; | |
474 EXPECT_EQ(HRESULT_FROM_WIN32(ERROR_INVALID_INDEX), | |
475 app_bundle_->get_Item(0, &app0_obtained)); | |
476 EXPECT_FALSE(app0_obtained); | |
477 | |
478 { | |
479 ExpectAsserts expect_asserts; | |
480 EXPECT_FALSE(app_bundle_->GetApp(1)); | |
481 } | |
482 App* app1_obtained = NULL; | |
483 EXPECT_EQ(HRESULT_FROM_WIN32(ERROR_INVALID_INDEX), | |
484 app_bundle_->get_Item(1, &app1_obtained)); | |
485 EXPECT_FALSE(app1_obtained); | |
486 } | |
487 | |
488 TEST_F(AppBundleInitializedUserTest, CountAndItem_OneApp) { | |
489 App* app0_created = NULL; | |
490 EXPECT_SUCCEEDED(app_bundle_->createApp(CComBSTR(kGuid1), &app0_created)); | |
491 | |
492 EXPECT_EQ(1, app_bundle_->GetNumberOfApps()); | |
493 long num_apps = 0; // NOLINT | |
494 EXPECT_SUCCEEDED(app_bundle_->get_Count(&num_apps)); | |
495 EXPECT_EQ(1, num_apps); | |
496 | |
497 EXPECT_TRUE(app_bundle_->GetApp(0)); | |
498 App* app0_obtained = NULL; | |
499 EXPECT_SUCCEEDED(app_bundle_->get_Item(0, &app0_obtained)); | |
500 EXPECT_TRUE(app0_obtained); | |
501 | |
502 { | |
503 ExpectAsserts expect_asserts; | |
504 EXPECT_FALSE(app_bundle_->GetApp(1)); | |
505 } | |
506 App* app1_obtained = NULL; | |
507 EXPECT_EQ(HRESULT_FROM_WIN32(ERROR_INVALID_INDEX), | |
508 app_bundle_->get_Item(1, &app1_obtained)); | |
509 EXPECT_FALSE(app1_obtained); | |
510 } | |
511 | |
512 TEST_F(AppBundleInitializedUserTest, CountAndItem_TwoApp) { | |
513 App* app0_created = NULL; | |
514 EXPECT_SUCCEEDED(app_bundle_->createApp(CComBSTR(kGuid1), &app0_created)); | |
515 App* app1_created = NULL; | |
516 EXPECT_SUCCEEDED(app_bundle_->createApp(CComBSTR(kGuid2), &app1_created)); | |
517 | |
518 EXPECT_EQ(2, app_bundle_->GetNumberOfApps()); | |
519 long num_apps = 0; // NOLINT | |
520 EXPECT_SUCCEEDED(app_bundle_->get_Count(&num_apps)); | |
521 EXPECT_EQ(2, num_apps); | |
522 | |
523 EXPECT_TRUE(app_bundle_->GetApp(0)); | |
524 App* app0_obtained = NULL; | |
525 EXPECT_SUCCEEDED(app_bundle_->get_Item(0, &app0_obtained)); | |
526 EXPECT_TRUE(app0_obtained); | |
527 EXPECT_EQ(app0_created, app0_obtained); | |
528 | |
529 EXPECT_TRUE(app_bundle_->GetApp(1)); | |
530 App* app1_obtained = NULL; | |
531 EXPECT_SUCCEEDED(app_bundle_->get_Item(1, &app1_obtained)); | |
532 EXPECT_TRUE(app1_obtained); | |
533 | |
534 { | |
535 ExpectAsserts expect_asserts; | |
536 EXPECT_FALSE(app_bundle_->GetApp(2)); | |
537 } | |
538 App* app2_obtained = NULL; | |
539 EXPECT_EQ(HRESULT_FROM_WIN32(ERROR_INVALID_INDEX), | |
540 app_bundle_->get_Item(2, &app2_obtained)); | |
541 EXPECT_FALSE(app2_obtained); | |
542 } | |
543 | |
544 TEST_F(AppBundleInitializedUserTest, createApp) { | |
545 App* app0_created = NULL; | |
546 EXPECT_SUCCEEDED(app_bundle_->createApp(CComBSTR(kGuid1), &app0_created)); | |
547 EXPECT_TRUE(app0_created); | |
548 EXPECT_EQ(1, app_bundle_->GetNumberOfApps()); | |
549 | |
550 App* app0 = app_bundle_->GetApp(0); | |
551 EXPECT_EQ(app0_created, app0); | |
552 | |
553 EXPECT_STREQ(CString(kGuid1).MakeUpper(), app0->app_guid_string()); | |
554 ValidateFreshInstallDefaultValues(*app0); | |
555 } | |
556 | |
557 TEST_F(AppBundleInitializedUserTest, createApp_TwoApps) { | |
558 App* app0_created = NULL; | |
559 EXPECT_SUCCEEDED(app_bundle_->createApp(CComBSTR(kGuid1), &app0_created)); | |
560 EXPECT_TRUE(app0_created); | |
561 EXPECT_EQ(1, app_bundle_->GetNumberOfApps()); | |
562 | |
563 App* app0 = app_bundle_->GetApp(0); | |
564 EXPECT_EQ(app0_created, app0); | |
565 | |
566 EXPECT_STREQ(CString(kGuid1).MakeUpper(), app0->app_guid_string()); | |
567 ValidateFreshInstallDefaultValues(*app0); | |
568 | |
569 // Add a second app to the bundle. | |
570 | |
571 App* app1_created = NULL; | |
572 EXPECT_SUCCEEDED(app_bundle_->createApp(CComBSTR(kGuid2), &app1_created)); | |
573 EXPECT_TRUE(app1_created); | |
574 EXPECT_EQ(2, app_bundle_->GetNumberOfApps()); | |
575 | |
576 App* app1 = app_bundle_->GetApp(1); | |
577 EXPECT_EQ(app1_created, app1); | |
578 | |
579 EXPECT_STREQ(CString(kGuid2).MakeUpper(), app1->app_guid_string()); | |
580 ValidateFreshInstallDefaultValues(*app1); | |
581 } | |
582 | |
583 TEST_F(AppBundleInitializedUserTest, createApp_SameAppTwice) { | |
584 App* app0_created = NULL; | |
585 EXPECT_SUCCEEDED(app_bundle_->createApp(CComBSTR(kGuid1), &app0_created)); | |
586 EXPECT_TRUE(app0_created); | |
587 EXPECT_EQ(1, app_bundle_->GetNumberOfApps()); | |
588 | |
589 App* app0 = app_bundle_->GetApp(0); | |
590 EXPECT_EQ(app0_created, app0); | |
591 | |
592 EXPECT_STREQ(CString(kGuid1).MakeUpper(), app0->app_guid_string()); | |
593 ValidateFreshInstallDefaultValues(*app0); | |
594 | |
595 // Attempt to add the same app to the bundle again. | |
596 | |
597 App* app1_created = NULL; | |
598 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, | |
599 app_bundle_->createApp(CComBSTR(kGuid1), &app1_created)); | |
600 EXPECT_FALSE(app1_created); | |
601 EXPECT_EQ(1, app_bundle_->GetNumberOfApps()); | |
602 } | |
603 | |
604 TEST_F(AppBundleInitializedUserTest, createApp_AfterUpdateCheck) { | |
605 DummyUserWorkItem dummy_work_item; | |
606 EXPECT_CALL(*worker_, CheckForUpdateAsync(_)) | |
607 .WillOnce(SetWorkItem(&dummy_work_item)); | |
608 | |
609 App* app0_created = NULL; | |
610 EXPECT_SUCCEEDED(app_bundle_->createApp(CComBSTR(kGuid1), &app0_created)); | |
611 EXPECT_SUCCEEDED(app_bundle_->checkForUpdate()); | |
612 | |
613 App* app1_created = NULL; | |
614 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, | |
615 app_bundle_->createApp(CComBSTR(kGuid2), &app1_created)); | |
616 | |
617 app_bundle_->CompleteAsyncCall(); // Simulate thread completion. | |
618 } | |
619 | |
620 TEST_F(AppBundleInitializedMachineTest, createApp) { | |
621 App* app0_created = NULL; | |
622 EXPECT_SUCCEEDED(app_bundle_->createApp(CComBSTR(kGuid1), &app0_created)); | |
623 EXPECT_TRUE(app0_created); | |
624 EXPECT_EQ(1, app_bundle_->GetNumberOfApps()); | |
625 | |
626 App* app0 = app_bundle_->GetApp(0); | |
627 EXPECT_EQ(app0_created, app0); | |
628 | |
629 EXPECT_STREQ(CString(kGuid1).MakeUpper(), app0->app_guid_string()); | |
630 ValidateFreshInstallDefaultValues(*app0); | |
631 } | |
632 | |
633 TEST_F(AppBundleInitializedUserTest, checkForUpdate_NoApps) { | |
634 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, app_bundle_->checkForUpdate()); | |
635 } | |
636 | |
637 // Does not verify the update check occurs. | |
638 TEST_F(AppBundleInitializedUserTest, checkForUpdate_OneApp) { | |
639 DummyUserWorkItem dummy_work_item; | |
640 EXPECT_CALL(*worker_, CheckForUpdateAsync(_)) | |
641 .WillOnce(SetWorkItem(&dummy_work_item)); | |
642 | |
643 App* app = NULL; | |
644 EXPECT_SUCCEEDED(app_bundle_->createApp(CComBSTR(kGuid1), &app)); | |
645 | |
646 EXPECT_SUCCEEDED(app_bundle_->checkForUpdate()); | |
647 | |
648 app_bundle_->CompleteAsyncCall(); // Simulate thread completion. | |
649 } | |
650 | |
651 // Does not verify the update check occurs. | |
652 TEST_F(AppBundleInitializedUserTest, checkForUpdate_TwoApps) { | |
653 DummyUserWorkItem dummy_work_item; | |
654 EXPECT_CALL(*worker_, CheckForUpdateAsync(_)) | |
655 .WillOnce(SetWorkItem(&dummy_work_item)); | |
656 | |
657 App* app0 = NULL; | |
658 App* app1 = NULL; | |
659 EXPECT_SUCCEEDED(app_bundle_->createApp(CComBSTR(kGuid1), &app0)); | |
660 EXPECT_SUCCEEDED(app_bundle_->createApp(CComBSTR(kGuid2), &app1)); | |
661 | |
662 EXPECT_SUCCEEDED(app_bundle_->checkForUpdate()); | |
663 | |
664 app_bundle_->CompleteAsyncCall(); // Simulate thread completion. | |
665 } | |
666 | |
667 TEST_F(AppBundleInitializedUserTest, checkForUpdate_Twice) { | |
668 DummyUserWorkItem dummy_work_item; | |
669 EXPECT_CALL(*worker_, CheckForUpdateAsync(_)) | |
670 .WillOnce(SetWorkItem(&dummy_work_item)); | |
671 | |
672 App* app = NULL; | |
673 EXPECT_SUCCEEDED(app_bundle_->createApp(CComBSTR(kGuid1), &app)); | |
674 | |
675 EXPECT_SUCCEEDED(app_bundle_->checkForUpdate()); | |
676 app_bundle_->CompleteAsyncCall(); // Simulate thread completion. | |
677 | |
678 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, app_bundle_->checkForUpdate()); | |
679 } | |
680 | |
681 TEST_F(AppBundleInitializedUserTest, checkForUpdate_WhileBundleIsBusy) { | |
682 DummyUserWorkItem dummy_work_item; | |
683 EXPECT_CALL(*worker_, CheckForUpdateAsync(_)) | |
684 .WillOnce(SetWorkItem(&dummy_work_item)); | |
685 | |
686 App* app = NULL; | |
687 EXPECT_SUCCEEDED(app_bundle_->createApp(CComBSTR(kGuid1), &app)); | |
688 | |
689 EXPECT_SUCCEEDED(app_bundle_->checkForUpdate()); | |
690 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, app_bundle_->checkForUpdate()); | |
691 | |
692 app_bundle_->CompleteAsyncCall(); // Simulate thread completion. | |
693 } | |
694 | |
695 // Does not verify the update check occurs. | |
696 TEST_F(AppBundleInitializedMachineTest, checkForUpdate_OneApp) { | |
697 DummyUserWorkItem dummy_work_item; | |
698 EXPECT_CALL(*worker_, CheckForUpdateAsync(_)) | |
699 .WillOnce(SetWorkItem(&dummy_work_item)); | |
700 | |
701 App* app = NULL; | |
702 EXPECT_SUCCEEDED(app_bundle_->createApp(CComBSTR(kGuid1), &app)); | |
703 | |
704 EXPECT_SUCCEEDED(app_bundle_->checkForUpdate()); | |
705 | |
706 app_bundle_->CompleteAsyncCall(); // Simulate thread completion. | |
707 } | |
708 | |
709 TEST_F(AppBundleInitializedUserTest, download_WithoutUpdateCheck) { | |
710 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, app_bundle_->download()); | |
711 } | |
712 | |
713 // The AppBundle does not prevent this, but the apps may enter the error state. | |
714 TEST_F(AppBundleInitializedUserTest, download_AfterInstall) { | |
715 DummyUserWorkItem dummy_work_item; | |
716 { | |
717 ::testing::InSequence dummy; | |
718 EXPECT_CALL(*worker_, CheckForUpdateAsync(_)) | |
719 .WillOnce(SetWorkItem(&dummy_work_item)); | |
720 EXPECT_CALL(*worker_, DownloadAndInstallAsync(_)) | |
721 .WillOnce(SetWorkItem(&dummy_work_item)); | |
722 EXPECT_CALL(*worker_, DownloadAsync(_)) | |
723 .WillOnce(SetWorkItem(&dummy_work_item)); | |
724 } | |
725 | |
726 App* app = NULL; | |
727 EXPECT_SUCCEEDED(app_bundle_->createApp(CComBSTR(kGuid1), &app)); | |
728 | |
729 EXPECT_SUCCEEDED(app_bundle_->checkForUpdate()); | |
730 app_bundle_->CompleteAsyncCall(); // Simulate thread completion. | |
731 EXPECT_SUCCEEDED(app_bundle_->install()); | |
732 app_bundle_->CompleteAsyncCall(); // Simulate thread completion. | |
733 | |
734 EXPECT_SUCCEEDED(app_bundle_->download()); | |
735 | |
736 app_bundle_->CompleteAsyncCall(); // Simulate thread completion. | |
737 } | |
738 | |
739 // The AppBundle does not prevent this, but the apps may enter the error state. | |
740 TEST_F(AppBundleInitializedUserTest, download_Twice) { | |
741 DummyUserWorkItem dummy_work_item; | |
742 { | |
743 ::testing::InSequence dummy; | |
744 EXPECT_CALL(*worker_, CheckForUpdateAsync(_)) | |
745 .WillOnce(SetWorkItem(&dummy_work_item)); | |
746 EXPECT_CALL(*worker_, DownloadAsync(_)) | |
747 .Times(2) | |
748 .WillRepeatedly(SetWorkItem(&dummy_work_item)); | |
749 } | |
750 | |
751 App* app = NULL; | |
752 EXPECT_SUCCEEDED(app_bundle_->createApp(CComBSTR(kGuid1), &app)); | |
753 | |
754 EXPECT_SUCCEEDED(app_bundle_->checkForUpdate()); | |
755 app_bundle_->CompleteAsyncCall(); // Simulate thread completion. | |
756 EXPECT_SUCCEEDED(app_bundle_->download()); | |
757 app_bundle_->CompleteAsyncCall(); // Simulate thread completion. | |
758 | |
759 EXPECT_SUCCEEDED(app_bundle_->download()); | |
760 | |
761 app_bundle_->CompleteAsyncCall(); // Simulate thread completion. | |
762 } | |
763 | |
764 // Simulates the update check still in progress when download() is called. | |
765 TEST_F(AppBundleInitializedUserTest, download_WhileBundleIsBusy) { | |
766 DummyUserWorkItem dummy_work_item; | |
767 EXPECT_CALL(*worker_, CheckForUpdateAsync(_)) | |
768 .WillOnce(SetWorkItem(&dummy_work_item)); | |
769 | |
770 App* app = NULL; | |
771 EXPECT_SUCCEEDED(app_bundle_->createApp(CComBSTR(kGuid1), &app)); | |
772 | |
773 EXPECT_SUCCEEDED(app_bundle_->checkForUpdate()); | |
774 | |
775 EXPECT_EQ(GOOPDATE_E_NON_BLOCKING_CALL_PENDING, app_bundle_->download()); | |
776 | |
777 app_bundle_->CompleteAsyncCall(); // Simulate thread completion. | |
778 } | |
779 | |
780 // The AppBundle does not prevent this, but the apps may enter the error state. | |
781 TEST_F(AppBundleInitializedMachineTest, download_Twice) { | |
782 DummyUserWorkItem dummy_work_item; | |
783 { | |
784 ::testing::InSequence dummy; | |
785 EXPECT_CALL(*worker_, CheckForUpdateAsync(_)) | |
786 .WillOnce(SetWorkItem(&dummy_work_item)); | |
787 EXPECT_CALL(*worker_, DownloadAsync(_)) | |
788 .Times(2) | |
789 .WillRepeatedly(SetWorkItem(&dummy_work_item)); | |
790 } | |
791 | |
792 App* app = NULL; | |
793 EXPECT_SUCCEEDED(app_bundle_->createApp(CComBSTR(kGuid1), &app)); | |
794 | |
795 EXPECT_SUCCEEDED(app_bundle_->checkForUpdate()); | |
796 app_bundle_->CompleteAsyncCall(); // Simulate thread completion. | |
797 EXPECT_SUCCEEDED(app_bundle_->download()); | |
798 app_bundle_->CompleteAsyncCall(); // Simulate thread completion. | |
799 | |
800 EXPECT_SUCCEEDED(app_bundle_->download()); | |
801 | |
802 app_bundle_->CompleteAsyncCall(); // Simulate thread completion. | |
803 } | |
804 | |
805 TEST_F(AppBundleInitializedUserTest, install_WithoutUpdateCheck) { | |
806 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, app_bundle_->install()); | |
807 } | |
808 | |
809 TEST_F(AppBundleInitializedUserTest, install_WithoutDownload) { | |
810 DummyUserWorkItem dummy_work_item; | |
811 { | |
812 ::testing::InSequence dummy; | |
813 EXPECT_CALL(*worker_, CheckForUpdateAsync(_)) | |
814 .WillOnce(SetWorkItem(&dummy_work_item)); | |
815 EXPECT_CALL(*worker_, DownloadAndInstallAsync(_)) | |
816 .WillOnce(SetWorkItem(&dummy_work_item)); | |
817 } | |
818 | |
819 App* app = NULL; | |
820 EXPECT_SUCCEEDED(app_bundle_->createApp(CComBSTR(kGuid1), &app)); | |
821 | |
822 EXPECT_SUCCEEDED(app_bundle_->checkForUpdate()); | |
823 app_bundle_->CompleteAsyncCall(); // Simulate thread completion. | |
824 | |
825 EXPECT_SUCCEEDED(app_bundle_->install()); | |
826 | |
827 app_bundle_->CompleteAsyncCall(); // Simulate thread completion. | |
828 } | |
829 | |
830 TEST_F(AppBundleInitializedUserTest, install_AfterDownload) { | |
831 DummyUserWorkItem dummy_work_item; | |
832 { | |
833 ::testing::InSequence dummy; | |
834 EXPECT_CALL(*worker_, CheckForUpdateAsync(_)) | |
835 .WillOnce(SetWorkItem(&dummy_work_item)); | |
836 EXPECT_CALL(*worker_, DownloadAsync(_)) | |
837 .WillOnce(SetWorkItem(&dummy_work_item)); | |
838 EXPECT_CALL(*worker_, DownloadAndInstallAsync(_)) | |
839 .WillOnce(SetWorkItem(&dummy_work_item)); | |
840 } | |
841 | |
842 App* app = NULL; | |
843 EXPECT_SUCCEEDED(app_bundle_->createApp(CComBSTR(kGuid1), &app)); | |
844 | |
845 EXPECT_SUCCEEDED(app_bundle_->checkForUpdate()); | |
846 app_bundle_->CompleteAsyncCall(); // Simulate thread completion. | |
847 EXPECT_SUCCEEDED(app_bundle_->download()); | |
848 app_bundle_->CompleteAsyncCall(); // Simulate thread completion. | |
849 | |
850 EXPECT_SUCCEEDED(app_bundle_->install()); | |
851 | |
852 app_bundle_->CompleteAsyncCall(); // Simulate thread completion. | |
853 } | |
854 | |
855 // The AppBundle does not prevent this, but the apps may enter the error state. | |
856 TEST_F(AppBundleInitializedUserTest, install_Twice) { | |
857 DummyUserWorkItem dummy_work_item; | |
858 { | |
859 ::testing::InSequence dummy; | |
860 EXPECT_CALL(*worker_, CheckForUpdateAsync(_)) | |
861 .WillOnce(SetWorkItem(&dummy_work_item)); | |
862 EXPECT_CALL(*worker_, DownloadAndInstallAsync(_)) | |
863 .Times(2) | |
864 .WillRepeatedly(SetWorkItem(&dummy_work_item)); | |
865 } | |
866 | |
867 App* app = NULL; | |
868 EXPECT_SUCCEEDED(app_bundle_->createApp(CComBSTR(kGuid1), &app)); | |
869 | |
870 EXPECT_SUCCEEDED(app_bundle_->checkForUpdate()); | |
871 app_bundle_->CompleteAsyncCall(); // Simulate thread completion. | |
872 EXPECT_SUCCEEDED(app_bundle_->install()); | |
873 app_bundle_->CompleteAsyncCall(); // Simulate thread completion. | |
874 | |
875 EXPECT_SUCCEEDED(app_bundle_->install()); | |
876 | |
877 app_bundle_->CompleteAsyncCall(); // Simulate thread completion. | |
878 } | |
879 | |
880 // TODO(omaha): These tests are disabled because CaptureCallerPrimaryToken() | |
881 // fails. We could move this to AppBundleWrapper, but we would need to expose | |
882 // some functions to AppBundleWrapper. | |
883 TEST_F(AppBundleInitializedMachineTest, DISABLED_install_WithoutDownload) { | |
884 DummyUserWorkItem dummy_work_item; | |
885 { | |
886 ::testing::InSequence dummy; | |
887 EXPECT_CALL(*worker_, CheckForUpdateAsync(_)) | |
888 .WillOnce(SetWorkItem(&dummy_work_item)); | |
889 EXPECT_CALL(*worker_, DownloadAndInstallAsync(_)) | |
890 .WillOnce(SetWorkItem(&dummy_work_item)); | |
891 } | |
892 | |
893 App* app = NULL; | |
894 EXPECT_SUCCEEDED(app_bundle_->createApp(CComBSTR(kGuid1), &app)); | |
895 | |
896 EXPECT_SUCCEEDED(app_bundle_->checkForUpdate()); | |
897 app_bundle_->CompleteAsyncCall(); // Simulate thread completion. | |
898 | |
899 EXPECT_SUCCEEDED(app_bundle_->install()); | |
900 | |
901 app_bundle_->CompleteAsyncCall(); // Simulate thread completion. | |
902 } | |
903 | |
904 TEST_F(AppBundleInitializedMachineTest, DISABLED_install_AfterDownload) { | |
905 DummyUserWorkItem dummy_work_item; | |
906 { | |
907 ::testing::InSequence dummy; | |
908 EXPECT_CALL(*worker_, CheckForUpdateAsync(_)) | |
909 .WillOnce(SetWorkItem(&dummy_work_item)); | |
910 EXPECT_CALL(*worker_, DownloadAsync(_)) | |
911 .WillOnce(SetWorkItem(&dummy_work_item)); | |
912 EXPECT_CALL(*worker_, DownloadAndInstallAsync(_)) | |
913 .WillOnce(SetWorkItem(&dummy_work_item)); | |
914 } | |
915 | |
916 App* app = NULL; | |
917 EXPECT_SUCCEEDED(app_bundle_->createApp(CComBSTR(kGuid1), &app)); | |
918 | |
919 EXPECT_SUCCEEDED(app_bundle_->checkForUpdate()); | |
920 app_bundle_->CompleteAsyncCall(); // Simulate thread completion. | |
921 EXPECT_SUCCEEDED(app_bundle_->download()); | |
922 app_bundle_->CompleteAsyncCall(); // Simulate thread completion. | |
923 | |
924 EXPECT_SUCCEEDED(app_bundle_->install()); | |
925 | |
926 app_bundle_->CompleteAsyncCall(); // Simulate thread completion. | |
927 } | |
928 | |
929 // Simulates the update check still in progress when install is called. | |
930 TEST_F(AppBundleInitializedUserTest, install_WhileBundleIsBusy) { | |
931 DummyUserWorkItem dummy_work_item; | |
932 EXPECT_CALL(*worker_, CheckForUpdateAsync(_)) | |
933 .WillOnce(SetWorkItem(&dummy_work_item)); | |
934 | |
935 App* app = NULL; | |
936 EXPECT_SUCCEEDED(app_bundle_->createApp(CComBSTR(kGuid1), &app)); | |
937 | |
938 EXPECT_SUCCEEDED(app_bundle_->checkForUpdate()); | |
939 EXPECT_EQ(GOOPDATE_E_NON_BLOCKING_CALL_PENDING, app_bundle_->install()); | |
940 | |
941 app_bundle_->CompleteAsyncCall(); // Simulate thread completion. | |
942 } | |
943 | |
944 // Also tests adding another app via the same method. | |
945 TEST_F(AppBundlePopulatedRegistryUserTest, createInstalledApp_Present_TwoApps) { | |
946 App *expected_app0, *expected_app1, *expected_app2; | |
947 PopulateDataAndRegistryForRegisteredAndUnInstalledAppsTests(&expected_app0, | |
948 &expected_app1, | |
949 &expected_app2); | |
950 | |
951 App* app0_created = NULL; | |
952 EXPECT_SUCCEEDED(app_bundle_->createInstalledApp(CComBSTR(kGuid1), | |
953 &app0_created)); | |
954 EXPECT_TRUE(app0_created); | |
955 EXPECT_EQ(1, app_bundle_->GetNumberOfApps()); | |
956 | |
957 App* app0 = app_bundle_->GetApp(0); | |
958 EXPECT_EQ(app0_created, app0); | |
959 EXPECT_STREQ(CString(kGuid1).MakeUpper(), app0->app_guid_string()); | |
960 EXPECT_SUCCEEDED(expected_app0->put_isEulaAccepted(VARIANT_TRUE)); | |
961 ValidateExpectedValues(*expected_app0, *app0); | |
962 | |
963 // Add a second app to the bundle. | |
964 | |
965 App* app1_created = NULL; | |
966 EXPECT_SUCCEEDED(app_bundle_->createInstalledApp(CComBSTR(kGuid2), | |
967 &app1_created)); | |
968 EXPECT_TRUE(app1_created); | |
969 EXPECT_EQ(2, app_bundle_->GetNumberOfApps()); | |
970 | |
971 long num_apps = 0; // NOLINT | |
972 EXPECT_SUCCEEDED(app_bundle_->get_Count(&num_apps)); | |
973 EXPECT_EQ(2, num_apps); | |
974 | |
975 App* app1 = app_bundle_->GetApp(1); | |
976 EXPECT_EQ(app1_created, app1); | |
977 EXPECT_STREQ(CString(kGuid2).MakeUpper(), app1->app_guid_string()); | |
978 SetDisplayName(kDefaultAppName, expected_app1); | |
979 EXPECT_SUCCEEDED(expected_app1->put_isEulaAccepted(VARIANT_TRUE)); | |
980 ValidateExpectedValues(*expected_app1, *app1); | |
981 | |
982 // Verify COM methods return the same values as the C++ methods used above. | |
983 EXPECT_SUCCEEDED(app_bundle_->get_Count(&num_apps)); | |
984 EXPECT_EQ(2, num_apps); | |
985 App* app0_obtained = NULL; | |
986 EXPECT_SUCCEEDED(app_bundle_->get_Item(0, &app0_obtained)); | |
987 EXPECT_EQ(app0, app0_obtained); | |
988 App* app1_obtained = NULL; | |
989 EXPECT_SUCCEEDED(app_bundle_->get_Item(1, &app1_obtained)); | |
990 EXPECT_EQ(app1, app1_obtained); | |
991 } | |
992 | |
993 TEST_F(AppBundlePopulatedRegistryMachineTest, createInstalledApp_Present) { | |
994 App *expected_app0, *expected_app1, *expected_app2; | |
995 PopulateDataAndRegistryForRegisteredAndUnInstalledAppsTests(&expected_app0, | |
996 &expected_app1, | |
997 &expected_app2); | |
998 | |
999 App* app0_created = NULL; | |
1000 EXPECT_SUCCEEDED(app_bundle_->createInstalledApp(CComBSTR(kGuid1), | |
1001 &app0_created)); | |
1002 EXPECT_TRUE(app0_created); | |
1003 EXPECT_EQ(1, app_bundle_->GetNumberOfApps()); | |
1004 | |
1005 App* app0 = app_bundle_->GetApp(0); | |
1006 EXPECT_EQ(app0_created, app0); | |
1007 EXPECT_STREQ(CString(kGuid1).MakeUpper(), app0->app_guid_string()); | |
1008 EXPECT_SUCCEEDED(expected_app0->put_isEulaAccepted(VARIANT_TRUE)); | |
1009 ValidateExpectedValues(*expected_app0, *app0); | |
1010 | |
1011 long num_apps = 0; // NOLINT | |
1012 EXPECT_SUCCEEDED(app_bundle_->get_Count(&num_apps)); | |
1013 EXPECT_EQ(1, num_apps); | |
1014 } | |
1015 | |
1016 // TODO(omaha3): Test that the same app can be added to different bundles for | |
1017 // each of the create methods. | |
1018 TEST_F(AppBundlePopulatedRegistryUserTest, createInstalledApp_SameAppTwice) { | |
1019 App *expected_app0, *expected_app1, *expected_app2; | |
1020 PopulateDataAndRegistryForRegisteredAndUnInstalledAppsTests(&expected_app0, | |
1021 &expected_app1, | |
1022 &expected_app2); | |
1023 | |
1024 App* app0_created = NULL; | |
1025 EXPECT_SUCCEEDED(app_bundle_->createInstalledApp(CComBSTR(kGuid1), | |
1026 &app0_created)); | |
1027 EXPECT_TRUE(app0_created); | |
1028 EXPECT_EQ(1, app_bundle_->GetNumberOfApps()); | |
1029 | |
1030 App* app0 = app_bundle_->GetApp(0); | |
1031 EXPECT_EQ(app0_created, app0); | |
1032 EXPECT_STREQ(CString(kGuid1).MakeUpper(), app0->app_guid_string()); | |
1033 EXPECT_SUCCEEDED(expected_app0->put_isEulaAccepted(VARIANT_TRUE)); | |
1034 ValidateExpectedValues(*expected_app0, *app0); | |
1035 | |
1036 // Attempt to add the same app to the bundle again. | |
1037 | |
1038 App* app1_created = NULL; | |
1039 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, | |
1040 app_bundle_->createInstalledApp(CComBSTR(kGuid1), &app1_created)); | |
1041 EXPECT_FALSE(app1_created); | |
1042 EXPECT_EQ(1, app_bundle_->GetNumberOfApps()); | |
1043 } | |
1044 | |
1045 TEST_F(AppBundlePopulatedRegistryUserTest, createInstalledApp_NotPresent) { | |
1046 App *expected_app0, *expected_app1, *expected_app2; | |
1047 PopulateDataAndRegistryForRegisteredAndUnInstalledAppsTests(&expected_app0, | |
1048 &expected_app1, | |
1049 &expected_app2); | |
1050 | |
1051 App* app0_created = NULL; | |
1052 EXPECT_EQ(HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND), | |
1053 app_bundle_->createInstalledApp( | |
1054 CComBSTR(_T("{2D5F8E16-B56B-496a-BA8B-3A0B5EC17F4F}")), | |
1055 &app0_created)); | |
1056 EXPECT_FALSE(app0_created); | |
1057 EXPECT_EQ(0, app_bundle_->GetNumberOfApps()); | |
1058 } | |
1059 | |
1060 TEST_F(AppBundlePopulatedRegistryUserTest, | |
1061 createInstalledApp_NoAppsRegistered) { | |
1062 App* app0_created = NULL; | |
1063 EXPECT_EQ(HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND), | |
1064 app_bundle_->createInstalledApp(CComBSTR(kGuid1), &app0_created)); | |
1065 EXPECT_FALSE(app0_created); | |
1066 EXPECT_EQ(0, app_bundle_->GetNumberOfApps()); | |
1067 } | |
1068 | |
1069 TEST_F(AppBundlePopulatedRegistryUserTest, | |
1070 createInstalledApp_AfterUpdateCheck) { | |
1071 App *expected_app0, *expected_app1, *expected_app2; | |
1072 PopulateDataAndRegistryForRegisteredAndUnInstalledAppsTests(&expected_app0, | |
1073 &expected_app1, | |
1074 &expected_app2); | |
1075 | |
1076 DummyUserWorkItem dummy_work_item; | |
1077 EXPECT_CALL(*worker_, CheckForUpdateAsync(_)) | |
1078 .WillOnce(SetWorkItem(&dummy_work_item)); | |
1079 | |
1080 App* app0_created = NULL; | |
1081 EXPECT_SUCCEEDED(app_bundle_->createInstalledApp(CComBSTR(kGuid1), | |
1082 &app0_created)); | |
1083 | |
1084 EXPECT_SUCCEEDED(app_bundle_->checkForUpdate()); | |
1085 app_bundle_->CompleteAsyncCall(); // Simulate thread completion. | |
1086 | |
1087 App* app1_created = NULL; | |
1088 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, | |
1089 app_bundle_->createInstalledApp(CComBSTR(kGuid2), &app1_created)); | |
1090 } | |
1091 | |
1092 TEST_F(AppBundlePopulatedRegistryUserTest, createAllInstalledApps) { | |
1093 App *expected_app0, *expected_app1, *expected_app2; | |
1094 PopulateDataAndRegistryForRegisteredAndUnInstalledAppsTests(&expected_app0, | |
1095 &expected_app1, | |
1096 &expected_app2); | |
1097 EXPECT_HRESULT_SUCCEEDED(RegKey::CreateKey( | |
1098 AppendRegKeyPath(USER_REG_CLIENT_STATE, kGuid4))); // Avoid assert. | |
1099 | |
1100 // See comment in machine createAllInstalledApps test. | |
1101 const CString incomplete_clients_key = | |
1102 AppendRegKeyPath(USER_REG_CLIENTS, kGuid4); | |
1103 EXPECT_TRUE(RegKey::HasKey(incomplete_clients_key)); | |
1104 EXPECT_FALSE(RegKey::HasValue(incomplete_clients_key, | |
1105 kRegValueProductVersion)); | |
1106 | |
1107 EXPECT_SUCCEEDED(app_bundle_->createAllInstalledApps()); | |
1108 EXPECT_EQ(2, app_bundle_->GetNumberOfApps()); | |
1109 | |
1110 App* app0 = app_bundle_->GetApp(0); | |
1111 EXPECT_STREQ(CString(kGuid1).MakeUpper(), app0->app_guid_string()); | |
1112 EXPECT_SUCCEEDED(expected_app0->put_isEulaAccepted(VARIANT_TRUE)); | |
1113 ValidateExpectedValues(*expected_app0, *app0); | |
1114 | |
1115 App* app1 = app_bundle_->GetApp(1); | |
1116 EXPECT_STREQ(CString(kGuid2).MakeUpper(), app1->app_guid_string()); | |
1117 SetDisplayName(kDefaultAppName, expected_app1); | |
1118 EXPECT_SUCCEEDED(expected_app1->put_isEulaAccepted(VARIANT_TRUE)); | |
1119 ValidateExpectedValues(*expected_app1, *app1); | |
1120 | |
1121 // Verify COM methods return the same values as the C++ methods used above. | |
1122 long num_registered_apps = 0; // NOLINT | |
1123 EXPECT_SUCCEEDED(app_bundle_->get_Count(&num_registered_apps)); | |
1124 EXPECT_EQ(2, num_registered_apps); | |
1125 App* app0_obtained = NULL; | |
1126 EXPECT_SUCCEEDED(app_bundle_->get_Item(0, &app0_obtained)); | |
1127 EXPECT_EQ(app0, app0_obtained); | |
1128 App* app1_obtained = NULL; | |
1129 EXPECT_SUCCEEDED(app_bundle_->get_Item(1, &app1_obtained)); | |
1130 EXPECT_EQ(app1, app1_obtained); | |
1131 } | |
1132 | |
1133 TEST_F(AppBundlePopulatedRegistryMachineTest, createAllInstalledApps) { | |
1134 App *expected_app0, *expected_app1, *expected_app2; | |
1135 PopulateDataAndRegistryForRegisteredAndUnInstalledAppsTests(&expected_app0, | |
1136 &expected_app1, | |
1137 &expected_app2); | |
1138 EXPECT_HRESULT_SUCCEEDED(RegKey::CreateKey( | |
1139 AppendRegKeyPath(MACHINE_REG_CLIENT_STATE, kGuid4))); // Avoid assert. | |
1140 | |
1141 // An important part of this test is that processing continues and | |
1142 // even though there is a key for an app that is not properly | |
1143 // registered (e.g. it does not have a pv value or has an invalid pv value). | |
1144 // Since this is so important, explicitly check registry was set up correctly. | |
1145 // Invalid pv value type is checked in a separate test since it causes an | |
1146 // assert. | |
1147 // An app without a pv is not added to the bundle. | |
1148 const CString incomplete_clients_key = | |
1149 AppendRegKeyPath(MACHINE_REG_CLIENTS, kGuid4); | |
1150 EXPECT_TRUE(RegKey::HasKey(incomplete_clients_key)); | |
1151 EXPECT_FALSE(RegKey::HasValue(incomplete_clients_key, | |
1152 kRegValueProductVersion)); | |
1153 | |
1154 EXPECT_SUCCEEDED(app_bundle_->createAllInstalledApps()); | |
1155 EXPECT_EQ(2, app_bundle_->GetNumberOfApps()); | |
1156 | |
1157 App* app0 = app_bundle_->GetApp(0); | |
1158 EXPECT_STREQ(CString(kGuid1).MakeUpper(), app0->app_guid_string()); | |
1159 EXPECT_SUCCEEDED(expected_app0->put_isEulaAccepted(VARIANT_TRUE)); | |
1160 ValidateExpectedValues(*expected_app0, *app0); | |
1161 | |
1162 App* app1 = app_bundle_->GetApp(1); | |
1163 EXPECT_STREQ(CString(kGuid2).MakeUpper(), app1->app_guid_string()); | |
1164 SetDisplayName(kDefaultAppName, expected_app1); | |
1165 EXPECT_SUCCEEDED(expected_app1->put_isEulaAccepted(VARIANT_TRUE)); | |
1166 ValidateExpectedValues(*expected_app1, *app1); | |
1167 | |
1168 // Verify COM methods return the same values as the C++ methods used above. | |
1169 long num_registered_apps = 0; // NOLINT | |
1170 EXPECT_SUCCEEDED(app_bundle_->get_Count(&num_registered_apps)); | |
1171 EXPECT_EQ(2, num_registered_apps); | |
1172 App* app0_obtained = NULL; | |
1173 EXPECT_SUCCEEDED(app_bundle_->get_Item(0, &app0_obtained)); | |
1174 EXPECT_EQ(app0, app0_obtained); | |
1175 App* app1_obtained = NULL; | |
1176 EXPECT_SUCCEEDED(app_bundle_->get_Item(1, &app1_obtained)); | |
1177 EXPECT_EQ(app1, app1_obtained); | |
1178 } | |
1179 | |
1180 TEST_F(AppBundlePopulatedRegistryUserTest, | |
1181 createAllInstalledApps_InvalidPvValueType) { | |
1182 App *expected_app0, *expected_app1, *expected_app2; | |
1183 PopulateDataAndRegistryForRegisteredAndUnInstalledAppsTests(&expected_app0, | |
1184 &expected_app1, | |
1185 &expected_app2); | |
1186 | |
1187 // Incorrect data type for pv. See comment in machine createAllInstalledApps | |
1188 // test. | |
1189 // It is important that this value is alphabetically before the other AppIds. | |
1190 // This allows us to test that processing continues despite the bad pv. | |
1191 const TCHAR* const kInvalidPvTypeAppId = | |
1192 _T("{0150B619-867C-4985-B193-ED309A23EE36}"); | |
1193 const CString invalid_pv_type_clients_key = | |
1194 AppendRegKeyPath(USER_REG_CLIENTS, kInvalidPvTypeAppId); | |
1195 const DWORD kInvalidPvDword = 0x3039; | |
1196 const TCHAR* const kInvalidPvDwordAsString = _T("\x3039"); | |
1197 EXPECT_HRESULT_SUCCEEDED(RegKey::SetValue(invalid_pv_type_clients_key, | |
1198 kRegValueProductVersion, | |
1199 kInvalidPvDword)); | |
1200 EXPECT_TRUE(RegKey::HasValue(invalid_pv_type_clients_key, | |
1201 kRegValueProductVersion)); | |
1202 DWORD value_type = REG_SZ; | |
1203 EXPECT_SUCCEEDED(RegKey::GetValueType(invalid_pv_type_clients_key, | |
1204 kRegValueProductVersion, | |
1205 &value_type)); | |
1206 EXPECT_NE(REG_SZ, value_type); | |
1207 App* invalid_pv_app = CreateExpectedApp(kInvalidPvTypeAppId); | |
1208 invalid_pv_app->current_version()->set_version(kInvalidPvDwordAsString); | |
1209 invalid_pv_app->set_days_since_last_active_ping(-1); | |
1210 invalid_pv_app->set_days_since_last_roll_call(-1); | |
1211 SetDisplayName(kDefaultAppName, invalid_pv_app); | |
1212 | |
1213 { | |
1214 // An assert occurs when reading the wrong value type. | |
1215 ExpectAsserts expect_asserts; | |
1216 EXPECT_SUCCEEDED(app_bundle_->createAllInstalledApps()); | |
1217 } | |
1218 | |
1219 EXPECT_EQ(3, app_bundle_->GetNumberOfApps()); | |
1220 | |
1221 // The invalid pv app is added to the bundle with an unreadable pv. | |
1222 App* app0 = app_bundle_->GetApp(0); | |
1223 EXPECT_STREQ(kInvalidPvTypeAppId, app0->app_guid_string()); | |
1224 EXPECT_STREQ(kInvalidPvDwordAsString, app0->current_version()->version()); | |
1225 EXPECT_SUCCEEDED(invalid_pv_app->put_isEulaAccepted(VARIANT_TRUE)); | |
1226 ValidateExpectedValues(*invalid_pv_app, *app0); | |
1227 | |
1228 App* app1 = app_bundle_->GetApp(1); | |
1229 EXPECT_STREQ(CString(kGuid1).MakeUpper(), app1->app_guid_string()); | |
1230 EXPECT_SUCCEEDED(expected_app0->put_isEulaAccepted(VARIANT_TRUE)); | |
1231 ValidateExpectedValues(*expected_app0, *app1); | |
1232 | |
1233 App* app2 = app_bundle_->GetApp(2); | |
1234 EXPECT_STREQ(CString(kGuid2).MakeUpper(), app2->app_guid_string()); | |
1235 SetDisplayName(kDefaultAppName, expected_app1); | |
1236 EXPECT_SUCCEEDED(expected_app1->put_isEulaAccepted(VARIANT_TRUE)); | |
1237 ValidateExpectedValues(*expected_app1, *app2); | |
1238 } | |
1239 | |
1240 TEST_F(AppBundlePopulatedRegistryUserTest, | |
1241 createAllInstalledApps_NoAppsRegistered) { | |
1242 EXPECT_EQ(HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND), | |
1243 app_bundle_->createAllInstalledApps()); | |
1244 EXPECT_EQ(0, app_bundle_->GetNumberOfApps()); | |
1245 | |
1246 { | |
1247 ExpectAsserts expect_asserts; | |
1248 EXPECT_FALSE(app_bundle_->GetApp(0)); | |
1249 } | |
1250 } | |
1251 | |
1252 TEST_F(AppBundlePopulatedRegistryUserTest, | |
1253 createAllInstalledApps_OneAppRegistered) { | |
1254 CString clients_key_name = AppendRegKeyPath(USER_REG_CLIENTS, kGuid1); | |
1255 EXPECT_SUCCEEDED(RegKey::SetValue(clients_key_name, | |
1256 kRegValueProductVersion, | |
1257 _T("1.0.0.0"))); | |
1258 EXPECT_HRESULT_SUCCEEDED(RegKey::CreateKey( | |
1259 AppendRegKeyPath(USER_REG_CLIENT_STATE, kGuid1))); // Avoid assert. | |
1260 | |
1261 EXPECT_SUCCEEDED(app_bundle_->createAllInstalledApps()); | |
1262 EXPECT_EQ(1, app_bundle_->GetNumberOfApps()); | |
1263 | |
1264 App* app0 = app_bundle_->GetApp(0); | |
1265 EXPECT_STREQ(CString(kGuid1).MakeUpper(), app0->app_guid_string()); | |
1266 } | |
1267 | |
1268 TEST_F(AppBundlePopulatedRegistryUserTest, | |
1269 createAllInstalledApps_AfterUpdateCheck) { | |
1270 App *expected_app0, *expected_app1, *expected_app2; | |
1271 PopulateDataAndRegistryForRegisteredAndUnInstalledAppsTests(&expected_app0, | |
1272 &expected_app1, | |
1273 &expected_app2); | |
1274 EXPECT_HRESULT_SUCCEEDED(RegKey::CreateKey( | |
1275 AppendRegKeyPath(USER_REG_CLIENT_STATE, kGuid4))); // Avoid assert. | |
1276 | |
1277 DummyUserWorkItem dummy_work_item; | |
1278 EXPECT_CALL(*worker_, CheckForUpdateAsync(_)) | |
1279 .WillOnce(SetWorkItem(&dummy_work_item)); | |
1280 | |
1281 EXPECT_SUCCEEDED(app_bundle_->createAllInstalledApps()); | |
1282 | |
1283 EXPECT_SUCCEEDED(app_bundle_->checkForUpdate()); | |
1284 app_bundle_->CompleteAsyncCall(); // Simulate thread completion. | |
1285 | |
1286 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, app_bundle_->createAllInstalledApps()); | |
1287 } | |
1288 | |
1289 TEST_F(AppBundlePopulatedRegistryUserTest, createApp_After_createInstalledApp) { | |
1290 App *expected_app0, *expected_app1, *expected_app2; | |
1291 PopulateDataAndRegistryForRegisteredAndUnInstalledAppsTests(&expected_app0, | |
1292 &expected_app1, | |
1293 &expected_app2); | |
1294 | |
1295 App* app0_created = NULL; | |
1296 EXPECT_SUCCEEDED(app_bundle_->createInstalledApp(CComBSTR(kGuid1), | |
1297 &app0_created)); | |
1298 | |
1299 App* app1_created = NULL; | |
1300 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, | |
1301 app_bundle_->createApp(CComBSTR(kGuid2), &app1_created)); | |
1302 } | |
1303 | |
1304 TEST_F(AppBundlePopulatedRegistryUserTest, createApp_createAllInstalledApps) { | |
1305 App *expected_app0, *expected_app1, *expected_app2; | |
1306 PopulateDataAndRegistryForRegisteredAndUnInstalledAppsTests(&expected_app0, | |
1307 &expected_app1, | |
1308 &expected_app2); | |
1309 EXPECT_HRESULT_SUCCEEDED(RegKey::CreateKey( | |
1310 AppendRegKeyPath(USER_REG_CLIENT_STATE, kGuid4))); // Avoid assert. | |
1311 | |
1312 EXPECT_SUCCEEDED(app_bundle_->createAllInstalledApps()); | |
1313 | |
1314 App* app0_created = NULL; | |
1315 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, | |
1316 app_bundle_->createApp(CComBSTR(kGuid1), &app0_created)); | |
1317 } | |
1318 | |
1319 TEST_F(AppBundleInitializedUserTest, createInstalledApp_After_createApp) { | |
1320 App* app0_created = NULL; | |
1321 EXPECT_SUCCEEDED(app_bundle_->createApp(CComBSTR(kGuid1), &app0_created)); | |
1322 | |
1323 App* app1_created = NULL; | |
1324 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, | |
1325 app_bundle_->createInstalledApp(CComBSTR(kGuid2), &app1_created)); | |
1326 } | |
1327 | |
1328 TEST_F(AppBundlePopulatedRegistryUserTest, | |
1329 createInstalledApp_After_createAllInstalledApps) { | |
1330 App *expected_app0, *expected_app1, *expected_app2; | |
1331 PopulateDataAndRegistryForRegisteredAndUnInstalledAppsTests(&expected_app0, | |
1332 &expected_app1, | |
1333 &expected_app2); | |
1334 EXPECT_HRESULT_SUCCEEDED(RegKey::CreateKey( | |
1335 AppendRegKeyPath(USER_REG_CLIENT_STATE, kGuid4))); // Avoid assert. | |
1336 | |
1337 EXPECT_SUCCEEDED(app_bundle_->createAllInstalledApps()); | |
1338 | |
1339 App* app0_created = NULL; | |
1340 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, | |
1341 app_bundle_->createInstalledApp(CComBSTR(kGuid1), &app0_created)); | |
1342 } | |
1343 | |
1344 TEST_F(AppBundleInitializedUserTest, createAllInstalledApps_After_createApp) { | |
1345 App* app0_created = NULL; | |
1346 EXPECT_SUCCEEDED(app_bundle_->createApp(CComBSTR(kGuid1), &app0_created)); | |
1347 | |
1348 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, app_bundle_->createAllInstalledApps()); | |
1349 } | |
1350 | |
1351 TEST_F(AppBundlePopulatedRegistryUserTest, | |
1352 createAllInstalledApps_After_createInstalledApp) { | |
1353 App *expected_app0, *expected_app1, *expected_app2; | |
1354 PopulateDataAndRegistryForRegisteredAndUnInstalledAppsTests(&expected_app0, | |
1355 &expected_app1, | |
1356 &expected_app2); | |
1357 | |
1358 App* app0_created = NULL; | |
1359 EXPECT_SUCCEEDED(app_bundle_->createInstalledApp(CComBSTR(kGuid1), | |
1360 &app0_created)); | |
1361 | |
1362 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, app_bundle_->createAllInstalledApps()); | |
1363 } | |
1364 | |
1365 TEST_F(AppBundlePopulatedRegistryUserTest, | |
1366 createAllInstalledApps_Twice) { | |
1367 App *expected_app0, *expected_app1, *expected_app2; | |
1368 PopulateDataAndRegistryForRegisteredAndUnInstalledAppsTests(&expected_app0, | |
1369 &expected_app1, | |
1370 &expected_app2); | |
1371 | |
1372 App* app0_created = NULL; | |
1373 EXPECT_SUCCEEDED(app_bundle_->createInstalledApp(CComBSTR(kGuid1), | |
1374 &app0_created)); | |
1375 | |
1376 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, app_bundle_->createAllInstalledApps()); | |
1377 } | |
1378 | |
1379 // TODO(omaha): Enable if we end up needing such a function. | |
1380 #if 0 | |
1381 TEST_F(AppBundlePopulatedRegistryMachineTest, createUninstalledApps) { | |
1382 App *expected_app0, *expected_app1, *expected_app2; | |
1383 PopulateDataAndRegistryForRegisteredAndUnInstalledAppsTests(&expected_app0, | |
1384 &expected_app1, | |
1385 &expected_app2); | |
1386 | |
1387 EXPECT_SUCCEEDED(app_bundle_->createUninstalledApps()); | |
1388 EXPECT_EQ(1, app_bundle_->GetNumberOfApps()); | |
1389 | |
1390 App* app0 = app_bundle_->GetApp(0); | |
1391 EXPECT_STREQ(kGuid3, app0->app_guid_string()); | |
1392 ValidateExpectedValues(*expected_app2, *app0); | |
1393 } | |
1394 | |
1395 TEST_F(AppBundlePopulatedRegistryUserTest, createUninstalledApps) { | |
1396 App *expected_app0, *expected_app1, *expected_app2; | |
1397 PopulateDataAndRegistryForRegisteredAndUnInstalledAppsTests(&expected_app0, | |
1398 &expected_app1, | |
1399 &expected_app2); | |
1400 | |
1401 EXPECT_SUCCEEDED(app_bundle_->createUninstalledApps()); | |
1402 EXPECT_EQ(1, app_bundle_->GetNumberOfApps()); | |
1403 | |
1404 App* app0 = app_bundle_->GetApp(0); | |
1405 EXPECT_STREQ(kGuid3, app0->app_guid_string()); | |
1406 ValidateExpectedValues(*expected_app2, *app0); | |
1407 } | |
1408 #endif | |
1409 | |
1410 // | |
1411 // State tests. | |
1412 // | |
1413 | |
1414 class AppBundleStateUserTest : public AppBundleTest { | |
1415 protected: | |
1416 AppBundleStateUserTest() | |
1417 : AppBundleTest(false), | |
1418 hive_override_key_name_(kRegistryHiveOverrideRoot) {} | |
1419 | |
1420 virtual void SetUp() { | |
1421 AppBundleTest::SetUp(); | |
1422 | |
1423 RegKey::DeleteKey(hive_override_key_name_); | |
1424 OverrideRegistryHives(hive_override_key_name_); | |
1425 } | |
1426 | |
1427 virtual void TearDown() { | |
1428 RestoreRegistryHives(); | |
1429 RegKey::DeleteKey(hive_override_key_name_); | |
1430 | |
1431 AppBundleTest::TearDown(); | |
1432 } | |
1433 | |
1434 // Writing name avoids needing to create the ResourceManager. | |
1435 void CreateClientsKeyForApp1() { | |
1436 CString clients_key = AppendRegKeyPath(USER_REG_CLIENTS, kGuid1); | |
1437 EXPECT_SUCCEEDED(RegKey::SetValue(clients_key, | |
1438 kRegValueProductVersion, | |
1439 _T("1.2.3.4"))); | |
1440 EXPECT_SUCCEEDED(RegKey::SetValue(clients_key, | |
1441 kRegValueAppName, | |
1442 _T("Test App"))); | |
1443 } | |
1444 | |
1445 CString hive_override_key_name_; | |
1446 }; | |
1447 | |
1448 | |
1449 class AppBundleStateInitUserTest : public AppBundleStateUserTest { | |
1450 protected: | |
1451 AppBundleStateInitUserTest() : AppBundleStateUserTest() {} | |
1452 | |
1453 virtual void SetUp() { | |
1454 AppBundleStateUserTest::SetUp(); | |
1455 | |
1456 // Nothing to do since the budle starts in this state. | |
1457 } | |
1458 }; | |
1459 | |
1460 class AppBundleStateInitializedUserTest : public AppBundleStateUserTest { | |
1461 protected: | |
1462 AppBundleStateInitializedUserTest() : AppBundleStateUserTest() {} | |
1463 | |
1464 virtual void SetUp() { | |
1465 AppBundleStateUserTest::SetUp(); | |
1466 EXPECT_SUCCEEDED(app_bundle_->put_displayName(CComBSTR(_T("My Bundle")))); | |
1467 EXPECT_SUCCEEDED(app_bundle_->put_displayLanguage(CComBSTR(_T("en")))); | |
1468 EXPECT_SUCCEEDED(app_bundle_->initialize()); | |
1469 } | |
1470 }; | |
1471 | |
1472 class AppBundleStateBusyUserTest : public AppBundleStateUserTest { | |
1473 protected: | |
1474 AppBundleStateBusyUserTest() : AppBundleStateUserTest() {} | |
1475 | |
1476 virtual void SetUp() { | |
1477 AppBundleStateUserTest::SetUp(); | |
1478 | |
1479 DummyUserWorkItem dummy_work_item; | |
1480 app_bundle_->set_user_work_item(&dummy_work_item); | |
1481 | |
1482 SetAppBundleStateForUnitTest(app_bundle_.get(), | |
1483 new fsm::AppBundleStateBusy); | |
1484 } | |
1485 }; | |
1486 | |
1487 class AppBundleStateReadyUserTest : public AppBundleStateUserTest { | |
1488 protected: | |
1489 AppBundleStateReadyUserTest() : AppBundleStateUserTest() {} | |
1490 | |
1491 virtual void SetUp() { | |
1492 AppBundleStateUserTest::SetUp(); | |
1493 EXPECT_SUCCEEDED(app_bundle_->put_displayName(CComBSTR(_T("My Bundle")))); | |
1494 EXPECT_SUCCEEDED(app_bundle_->put_displayLanguage(CComBSTR(_T("en")))); | |
1495 EXPECT_SUCCEEDED(app_bundle_->initialize()); | |
1496 | |
1497 // In all cases, the bundle should have at least one app. | |
1498 // The downloadPackage test needs an installed app. | |
1499 CreateClientsKeyForApp1(); | |
1500 App* app = NULL; | |
1501 EXPECT_SUCCEEDED(app_bundle_->createInstalledApp(CComBSTR(kGuid1), &app)); | |
1502 | |
1503 SetAppBundleStateForUnitTest(app_bundle_.get(), | |
1504 new fsm::AppBundleStateReady); | |
1505 } | |
1506 }; | |
1507 | |
1508 class AppBundleStatePausedUserTest : public AppBundleStateUserTest { | |
1509 protected: | |
1510 AppBundleStatePausedUserTest() : AppBundleStateUserTest() {} | |
1511 | |
1512 virtual void SetUp() { | |
1513 AppBundleStateUserTest::SetUp(); | |
1514 SetAppBundleStateForUnitTest(app_bundle_.get(), | |
1515 new fsm::AppBundleStatePaused); | |
1516 } | |
1517 }; | |
1518 | |
1519 class AppBundleStateStoppedUserTest : public AppBundleStateUserTest { | |
1520 protected: | |
1521 AppBundleStateStoppedUserTest() : AppBundleStateUserTest() {} | |
1522 | |
1523 virtual void SetUp() { | |
1524 AppBundleStateUserTest::SetUp(); | |
1525 SetAppBundleStateForUnitTest(app_bundle_.get(), | |
1526 new fsm::AppBundleStateStopped); | |
1527 } | |
1528 }; | |
1529 | |
1530 // Init. | |
1531 | |
1532 TEST_F(AppBundleStateInitUserTest, Properties) { | |
1533 TestPropertyReflexiveness(); | |
1534 EXPECT_EQ(STATE_INIT, GetBundleState()); | |
1535 } | |
1536 | |
1537 TEST_F(AppBundleStateInitUserTest, CountAndItem) { | |
1538 long num_apps = 0; // NOLINT | |
1539 EXPECT_SUCCEEDED(app_bundle_->get_Count(&num_apps)); | |
1540 EXPECT_EQ(0, num_apps); | |
1541 | |
1542 App* app0_obtained = NULL; | |
1543 EXPECT_EQ(HRESULT_FROM_WIN32(ERROR_INVALID_INDEX), | |
1544 app_bundle_->get_Item(0, &app0_obtained)); | |
1545 EXPECT_FALSE(app0_obtained); | |
1546 | |
1547 EXPECT_EQ(STATE_INIT, GetBundleState()); | |
1548 } | |
1549 | |
1550 TEST_F(AppBundleStateInitUserTest, put_altTokens) { | |
1551 CAccessToken access_token; | |
1552 access_token.GetProcessToken(TOKEN_DUPLICATE); | |
1553 ULONG_PTR process_token = | |
1554 reinterpret_cast<ULONG_PTR>(access_token.GetHandle()); | |
1555 EXPECT_SUCCEEDED(app_bundle_->put_altTokens(process_token, | |
1556 process_token, | |
1557 ::GetCurrentProcessId())); | |
1558 EXPECT_EQ(STATE_INIT, GetBundleState()); | |
1559 } | |
1560 | |
1561 TEST_F(AppBundleStateInitUserTest, initialize) { | |
1562 EXPECT_SUCCEEDED(app_bundle_->put_displayName(CComBSTR(_T("My Bundle")))); | |
1563 EXPECT_SUCCEEDED(app_bundle_->put_displayLanguage(CComBSTR(_T("en")))); | |
1564 EXPECT_SUCCEEDED(app_bundle_->initialize()); | |
1565 EXPECT_EQ(STATE_INITIALIZED, GetBundleState()); | |
1566 } | |
1567 | |
1568 TEST_F(AppBundleStateInitUserTest, createApp) { | |
1569 App* app = NULL; | |
1570 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, | |
1571 app_bundle_->createApp(CComBSTR(kGuid1), &app)); | |
1572 EXPECT_EQ(STATE_INIT, GetBundleState()); | |
1573 } | |
1574 | |
1575 TEST_F(AppBundleStateInitUserTest, createInstalledApp) { | |
1576 CreateClientsKeyForApp1(); | |
1577 | |
1578 App* app = NULL; | |
1579 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, | |
1580 app_bundle_->createInstalledApp(CComBSTR(kGuid1), &app)); | |
1581 EXPECT_EQ(STATE_INIT, GetBundleState()); | |
1582 } | |
1583 | |
1584 TEST_F(AppBundleStateInitUserTest, createAllInstalledApps) { | |
1585 CreateClientsKeyForApp1(); | |
1586 | |
1587 App* app = NULL; | |
1588 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, | |
1589 app_bundle_->createAllInstalledApps()); | |
1590 EXPECT_EQ(STATE_INIT, GetBundleState()); | |
1591 } | |
1592 | |
1593 TEST_F(AppBundleStateInitUserTest, checkForUpdate) { | |
1594 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, app_bundle_->checkForUpdate()); | |
1595 EXPECT_EQ(STATE_INIT, GetBundleState()); | |
1596 } | |
1597 | |
1598 TEST_F(AppBundleStateInitUserTest, download) { | |
1599 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, app_bundle_->download()); | |
1600 EXPECT_EQ(STATE_INIT, GetBundleState()); | |
1601 } | |
1602 | |
1603 TEST_F(AppBundleStateInitUserTest, install) { | |
1604 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, app_bundle_->install()); | |
1605 EXPECT_EQ(STATE_INIT, GetBundleState()); | |
1606 } | |
1607 | |
1608 TEST_F(AppBundleStateInitUserTest, updateAllApps) { | |
1609 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, app_bundle_->updateAllApps()); | |
1610 EXPECT_EQ(STATE_INIT, GetBundleState()); | |
1611 } | |
1612 | |
1613 TEST_F(AppBundleStateInitUserTest, stop) { | |
1614 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, app_bundle_->stop()); | |
1615 EXPECT_EQ(STATE_INIT, GetBundleState()); | |
1616 } | |
1617 | |
1618 TEST_F(AppBundleStateInitUserTest, pause) { | |
1619 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, app_bundle_->pause()); | |
1620 EXPECT_EQ(STATE_INIT, GetBundleState()); | |
1621 } | |
1622 | |
1623 TEST_F(AppBundleStateInitUserTest, resume) { | |
1624 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, app_bundle_->resume()); | |
1625 EXPECT_EQ(STATE_INIT, GetBundleState()); | |
1626 } | |
1627 | |
1628 TEST_F(AppBundleStateInitUserTest, isBusy) { | |
1629 VARIANT_BOOL is_busy = VARIANT_TRUE; | |
1630 EXPECT_SUCCEEDED(app_bundle_->isBusy(&is_busy)); | |
1631 EXPECT_EQ(VARIANT_FALSE, is_busy); | |
1632 EXPECT_EQ(STATE_INIT, GetBundleState()); | |
1633 } | |
1634 | |
1635 TEST_F(AppBundleStateInitUserTest, downloadPackage) { | |
1636 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, | |
1637 app_bundle_->downloadPackage(CComBSTR(kGuid1), | |
1638 CComBSTR(_T("package")))); | |
1639 EXPECT_EQ(STATE_INIT, GetBundleState()); | |
1640 } | |
1641 | |
1642 // TODO(omaha): Check the state or remove this function. | |
1643 TEST_F(AppBundleStateInitUserTest, get_currentState) { | |
1644 VARIANT current_state; | |
1645 ExpectAsserts expect_asserts; // Not yet implemented. | |
1646 EXPECT_EQ(E_NOTIMPL, app_bundle_->get_currentState(¤t_state)); | |
1647 EXPECT_EQ(STATE_INIT, GetBundleState()); | |
1648 } | |
1649 | |
1650 TEST_F(AppBundleStateInitUserTest, CompleteAsyncCall) { | |
1651 { | |
1652 ExpectAsserts expect_asserts; | |
1653 app_bundle_->CompleteAsyncCall(); | |
1654 } | |
1655 | |
1656 EXPECT_EQ(STATE_INIT, GetBundleState()); | |
1657 } | |
1658 | |
1659 // Initialized. | |
1660 | |
1661 TEST_F(AppBundleStateInitializedUserTest, Properties) { | |
1662 TestPropertyReflexiveness(); | |
1663 EXPECT_EQ(STATE_INITIALIZED, GetBundleState()); | |
1664 } | |
1665 | |
1666 TEST_F(AppBundleStateInitializedUserTest, CountAndItem) { | |
1667 long num_apps = 0; // NOLINT | |
1668 EXPECT_SUCCEEDED(app_bundle_->get_Count(&num_apps)); | |
1669 EXPECT_EQ(0, num_apps); | |
1670 | |
1671 App* app0_obtained = NULL; | |
1672 EXPECT_EQ(HRESULT_FROM_WIN32(ERROR_INVALID_INDEX), | |
1673 app_bundle_->get_Item(0, &app0_obtained)); | |
1674 EXPECT_FALSE(app0_obtained); | |
1675 | |
1676 EXPECT_EQ(STATE_INITIALIZED, GetBundleState()); | |
1677 } | |
1678 | |
1679 TEST_F(AppBundleStateInitializedUserTest, put_altTokens) { | |
1680 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, app_bundle_->put_altTokens(1, 2, 3)); | |
1681 EXPECT_EQ(STATE_INITIALIZED, GetBundleState()); | |
1682 } | |
1683 | |
1684 TEST_F(AppBundleStateInitializedUserTest, initialize) { | |
1685 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, app_bundle_->initialize()); | |
1686 EXPECT_EQ(STATE_INITIALIZED, GetBundleState()); | |
1687 } | |
1688 | |
1689 TEST_F(AppBundleStateInitializedUserTest, createApp) { | |
1690 App* app = NULL; | |
1691 EXPECT_SUCCEEDED(app_bundle_->createApp(CComBSTR(kGuid1), &app)); | |
1692 EXPECT_EQ(STATE_INITIALIZED, GetBundleState()); | |
1693 } | |
1694 | |
1695 TEST_F(AppBundleStateInitializedUserTest, createInstalledApp) { | |
1696 CreateClientsKeyForApp1(); | |
1697 | |
1698 App* app = NULL; | |
1699 EXPECT_SUCCEEDED(app_bundle_->createInstalledApp(CComBSTR(kGuid1), &app)); | |
1700 EXPECT_EQ(STATE_INITIALIZED, GetBundleState()); | |
1701 } | |
1702 | |
1703 TEST_F(AppBundleStateInitializedUserTest, createAllInstalledApps) { | |
1704 CreateClientsKeyForApp1(); | |
1705 EXPECT_HRESULT_SUCCEEDED(RegKey::CreateKey( | |
1706 AppendRegKeyPath(USER_REG_CLIENT_STATE, kGuid1))); // Avoid assert. | |
1707 | |
1708 App* app = NULL; | |
1709 EXPECT_SUCCEEDED(app_bundle_->createAllInstalledApps()); | |
1710 EXPECT_EQ(STATE_INITIALIZED, GetBundleState()); | |
1711 } | |
1712 | |
1713 TEST_F(AppBundleStateInitializedUserTest, checkForUpdate) { | |
1714 App* app = NULL; | |
1715 EXPECT_SUCCEEDED(app_bundle_->createApp(CComBSTR(kGuid1), &app)); | |
1716 DummyUserWorkItem dummy_work_item; | |
1717 EXPECT_CALL(*worker_, CheckForUpdateAsync(_)) | |
1718 .WillOnce(SetWorkItem(&dummy_work_item)); | |
1719 | |
1720 EXPECT_SUCCEEDED(app_bundle_->checkForUpdate()); | |
1721 EXPECT_EQ(STATE_BUSY, GetBundleState()); | |
1722 | |
1723 EXPECT_FALSE(app_bundle_->is_auto_update()); | |
1724 } | |
1725 | |
1726 TEST_F(AppBundleStateInitializedUserTest, download) { | |
1727 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, app_bundle_->download()); | |
1728 EXPECT_EQ(STATE_INITIALIZED, GetBundleState()); | |
1729 } | |
1730 | |
1731 TEST_F(AppBundleStateInitializedUserTest, install) { | |
1732 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, app_bundle_->install()); | |
1733 EXPECT_EQ(STATE_INITIALIZED, GetBundleState()); | |
1734 } | |
1735 | |
1736 TEST_F(AppBundleStateInitializedUserTest, updateAllApps) { | |
1737 CreateClientsKeyForApp1(); | |
1738 EXPECT_HRESULT_SUCCEEDED(RegKey::CreateKey( | |
1739 AppendRegKeyPath(USER_REG_CLIENT_STATE, kGuid1))); // Avoid assert. | |
1740 | |
1741 DummyUserWorkItem dummy_work_item; | |
1742 EXPECT_CALL(*worker_, UpdateAllAppsAsync(_)) | |
1743 .WillOnce(SetWorkItem(&dummy_work_item)); | |
1744 | |
1745 EXPECT_SUCCEEDED(app_bundle_->updateAllApps()); | |
1746 EXPECT_EQ(STATE_BUSY, GetBundleState()); | |
1747 | |
1748 EXPECT_TRUE(app_bundle_->is_auto_update()); | |
1749 } | |
1750 | |
1751 TEST_F(AppBundleStateInitializedUserTest, stop) { | |
1752 EXPECT_SUCCEEDED(app_bundle_->stop()); | |
1753 EXPECT_EQ(STATE_STOPPED, GetBundleState()); | |
1754 } | |
1755 | |
1756 TEST_F(AppBundleStateInitializedUserTest, pause) { | |
1757 EXPECT_SUCCEEDED(app_bundle_->pause()); | |
1758 EXPECT_EQ(STATE_PAUSED, GetBundleState()); | |
1759 } | |
1760 | |
1761 TEST_F(AppBundleStateInitializedUserTest, resume) { | |
1762 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, app_bundle_->resume()); | |
1763 EXPECT_EQ(STATE_INITIALIZED, GetBundleState()); | |
1764 } | |
1765 | |
1766 TEST_F(AppBundleStateInitializedUserTest, isBusy) { | |
1767 VARIANT_BOOL is_busy = VARIANT_TRUE; | |
1768 EXPECT_SUCCEEDED(app_bundle_->isBusy(&is_busy)); | |
1769 EXPECT_EQ(VARIANT_FALSE, is_busy); | |
1770 EXPECT_EQ(STATE_INITIALIZED, GetBundleState()); | |
1771 } | |
1772 | |
1773 // downloadPackage() returns E_INVALIDARG because the app has no packages. | |
1774 // TODO(omaha): Add the package so downloadPackage can succeed. | |
1775 TEST_F(AppBundleStateInitializedUserTest, downloadPackage) { | |
1776 CreateClientsKeyForApp1(); | |
1777 App* app = NULL; | |
1778 EXPECT_SUCCEEDED(app_bundle_->createInstalledApp(CComBSTR(kGuid1), &app)); | |
1779 | |
1780 EXPECT_EQ( | |
1781 E_INVALIDARG, | |
1782 app_bundle_->downloadPackage(CComBSTR(kGuid1), CComBSTR(_T("package")))); | |
1783 EXPECT_EQ(STATE_INITIALIZED, GetBundleState()); | |
1784 | |
1785 EXPECT_FALSE(app_bundle_->is_auto_update()); | |
1786 } | |
1787 | |
1788 TEST_F(AppBundleStateInitializedUserTest, get_currentState) { | |
1789 VARIANT current_state; | |
1790 ExpectAsserts expect_asserts; // Not yet implemented. | |
1791 EXPECT_EQ(E_NOTIMPL, app_bundle_->get_currentState(¤t_state)); | |
1792 EXPECT_EQ(STATE_INITIALIZED, GetBundleState()); | |
1793 } | |
1794 | |
1795 TEST_F(AppBundleStateInitializedUserTest, CompleteAsyncCall) { | |
1796 { | |
1797 ExpectAsserts expect_asserts; | |
1798 app_bundle_->CompleteAsyncCall(); | |
1799 } | |
1800 | |
1801 EXPECT_EQ(STATE_INITIALIZED, GetBundleState()); | |
1802 } | |
1803 | |
1804 // Busy. | |
1805 | |
1806 TEST_F(AppBundleStateBusyUserTest, Properties) { | |
1807 TestPropertyReflexiveness(); | |
1808 EXPECT_EQ(STATE_BUSY, GetBundleState()); | |
1809 } | |
1810 | |
1811 TEST_F(AppBundleStateBusyUserTest, CountAndItem) { | |
1812 long num_apps = 0; // NOLINT | |
1813 EXPECT_SUCCEEDED(app_bundle_->get_Count(&num_apps)); | |
1814 EXPECT_EQ(0, num_apps); | |
1815 | |
1816 App* app0_obtained = NULL; | |
1817 EXPECT_EQ(HRESULT_FROM_WIN32(ERROR_INVALID_INDEX), | |
1818 app_bundle_->get_Item(0, &app0_obtained)); | |
1819 EXPECT_FALSE(app0_obtained); | |
1820 | |
1821 EXPECT_EQ(STATE_BUSY, GetBundleState()); | |
1822 } | |
1823 | |
1824 TEST_F(AppBundleStateBusyUserTest, put_altTokens) { | |
1825 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, app_bundle_->put_altTokens(1, 2, 3)); | |
1826 EXPECT_EQ(STATE_BUSY, GetBundleState()); | |
1827 } | |
1828 | |
1829 TEST_F(AppBundleStateBusyUserTest, initialize) { | |
1830 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, app_bundle_->initialize()); | |
1831 EXPECT_EQ(STATE_BUSY, GetBundleState()); | |
1832 } | |
1833 | |
1834 TEST_F(AppBundleStateBusyUserTest, createApp) { | |
1835 App* app = NULL; | |
1836 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, | |
1837 app_bundle_->createApp(CComBSTR(kGuid1), &app)); | |
1838 EXPECT_EQ(STATE_BUSY, GetBundleState()); | |
1839 } | |
1840 | |
1841 TEST_F(AppBundleStateBusyUserTest, createInstalledApp) { | |
1842 CreateClientsKeyForApp1(); | |
1843 | |
1844 App* app = NULL; | |
1845 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, | |
1846 app_bundle_->createInstalledApp(CComBSTR(kGuid1), &app)); | |
1847 EXPECT_EQ(STATE_BUSY, GetBundleState()); | |
1848 } | |
1849 | |
1850 TEST_F(AppBundleStateBusyUserTest, createAllInstalledApps) { | |
1851 CreateClientsKeyForApp1(); | |
1852 | |
1853 App* app = NULL; | |
1854 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, | |
1855 app_bundle_->createAllInstalledApps()); | |
1856 EXPECT_EQ(STATE_BUSY, GetBundleState()); | |
1857 } | |
1858 | |
1859 TEST_F(AppBundleStateBusyUserTest, checkForUpdate) { | |
1860 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, app_bundle_->checkForUpdate()); | |
1861 EXPECT_EQ(STATE_BUSY, GetBundleState()); | |
1862 } | |
1863 | |
1864 TEST_F(AppBundleStateBusyUserTest, download) { | |
1865 EXPECT_EQ(GOOPDATE_E_NON_BLOCKING_CALL_PENDING, app_bundle_->download()); | |
1866 EXPECT_EQ(STATE_BUSY, GetBundleState()); | |
1867 } | |
1868 | |
1869 TEST_F(AppBundleStateBusyUserTest, install) { | |
1870 EXPECT_EQ(GOOPDATE_E_NON_BLOCKING_CALL_PENDING, app_bundle_->install()); | |
1871 EXPECT_EQ(STATE_BUSY, GetBundleState()); | |
1872 } | |
1873 | |
1874 TEST_F(AppBundleStateBusyUserTest, updateAllApps) { | |
1875 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, app_bundle_->updateAllApps()); | |
1876 EXPECT_EQ(STATE_BUSY, GetBundleState()); | |
1877 } | |
1878 | |
1879 TEST_F(AppBundleStateBusyUserTest, stop_Succeeds) { | |
1880 EXPECT_CALL(*worker_, Stop(app_bundle_.get())) | |
1881 .WillOnce(Return(S_OK)); | |
1882 | |
1883 EXPECT_SUCCEEDED(app_bundle_->stop()); | |
1884 EXPECT_EQ(STATE_STOPPED, GetBundleState()); | |
1885 } | |
1886 | |
1887 TEST_F(AppBundleStateBusyUserTest, stop_Fails) { | |
1888 EXPECT_CALL(*worker_, Stop(app_bundle_.get())) | |
1889 .WillOnce(Return(kKnownError)); | |
1890 | |
1891 EXPECT_EQ(kKnownError, app_bundle_->stop()); | |
1892 EXPECT_EQ(STATE_BUSY, GetBundleState()); | |
1893 } | |
1894 | |
1895 TEST_F(AppBundleStateBusyUserTest, pause_Succeeds) { | |
1896 EXPECT_CALL(*worker_, Pause(app_bundle_.get())) | |
1897 .WillOnce(Return(S_OK)); | |
1898 | |
1899 EXPECT_EQ(S_OK, app_bundle_->pause()); | |
1900 EXPECT_EQ(STATE_PAUSED, GetBundleState()); | |
1901 } | |
1902 | |
1903 TEST_F(AppBundleStateBusyUserTest, pause_Fails) { | |
1904 EXPECT_CALL(*worker_, Pause(_)) | |
1905 .WillOnce(Return(kKnownError)); | |
1906 | |
1907 EXPECT_EQ(kKnownError, app_bundle_->pause()); | |
1908 EXPECT_EQ(STATE_BUSY, GetBundleState()); | |
1909 } | |
1910 | |
1911 TEST_F(AppBundleStateBusyUserTest, resume) { | |
1912 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, app_bundle_->resume()); | |
1913 EXPECT_EQ(STATE_BUSY, GetBundleState()); | |
1914 } | |
1915 | |
1916 TEST_F(AppBundleStateBusyUserTest, isBusy) { | |
1917 VARIANT_BOOL is_busy = VARIANT_TRUE; | |
1918 EXPECT_SUCCEEDED(app_bundle_->isBusy(&is_busy)); | |
1919 EXPECT_EQ(VARIANT_TRUE, is_busy); | |
1920 EXPECT_EQ(STATE_BUSY, GetBundleState()); | |
1921 } | |
1922 | |
1923 TEST_F(AppBundleStateBusyUserTest, downloadPackage) { | |
1924 EXPECT_EQ(GOOPDATE_E_NON_BLOCKING_CALL_PENDING, | |
1925 app_bundle_->downloadPackage(CComBSTR(kGuid1), | |
1926 CComBSTR(_T("package")))); | |
1927 EXPECT_EQ(STATE_BUSY, GetBundleState()); | |
1928 } | |
1929 | |
1930 TEST_F(AppBundleStateBusyUserTest, get_currentState) { | |
1931 VARIANT current_state; | |
1932 ExpectAsserts expect_asserts; // Not yet implemented. | |
1933 EXPECT_EQ(E_NOTIMPL, app_bundle_->get_currentState(¤t_state)); | |
1934 EXPECT_EQ(STATE_BUSY, GetBundleState()); | |
1935 } | |
1936 | |
1937 TEST_F(AppBundleStateBusyUserTest, CompleteAsyncCall) { | |
1938 app_bundle_->CompleteAsyncCall(); | |
1939 | |
1940 EXPECT_EQ(STATE_READY, GetBundleState()); | |
1941 } | |
1942 | |
1943 // Ready. | |
1944 | |
1945 TEST_F(AppBundleStateReadyUserTest, Properties) { | |
1946 TestPropertyReflexiveness(); | |
1947 EXPECT_EQ(STATE_READY, GetBundleState()); | |
1948 } | |
1949 | |
1950 TEST_F(AppBundleStateReadyUserTest, CountAndItem) { | |
1951 long num_apps = 0; // NOLINT | |
1952 EXPECT_SUCCEEDED(app_bundle_->get_Count(&num_apps)); | |
1953 EXPECT_EQ(1, num_apps); | |
1954 | |
1955 App* app0_obtained = NULL; | |
1956 EXPECT_SUCCEEDED(app_bundle_->get_Item(0, &app0_obtained)); | |
1957 EXPECT_TRUE(app0_obtained); | |
1958 | |
1959 EXPECT_EQ(STATE_READY, GetBundleState()); | |
1960 } | |
1961 | |
1962 TEST_F(AppBundleStateReadyUserTest, put_altTokens) { | |
1963 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, app_bundle_->put_altTokens(1, 2, 3)); | |
1964 EXPECT_EQ(STATE_READY, GetBundleState()); | |
1965 } | |
1966 | |
1967 TEST_F(AppBundleStateReadyUserTest, initialize) { | |
1968 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, app_bundle_->initialize()); | |
1969 EXPECT_EQ(STATE_READY, GetBundleState()); | |
1970 } | |
1971 | |
1972 TEST_F(AppBundleStateReadyUserTest, createApp) { | |
1973 App* app = NULL; | |
1974 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, | |
1975 app_bundle_->createApp(CComBSTR(kGuid1), &app)); | |
1976 EXPECT_EQ(STATE_READY, GetBundleState()); | |
1977 } | |
1978 | |
1979 TEST_F(AppBundleStateReadyUserTest, createInstalledApp) { | |
1980 CreateClientsKeyForApp1(); | |
1981 | |
1982 App* app = NULL; | |
1983 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, | |
1984 app_bundle_->createInstalledApp(CComBSTR(kGuid1), &app)); | |
1985 EXPECT_EQ(STATE_READY, GetBundleState()); | |
1986 } | |
1987 | |
1988 TEST_F(AppBundleStateReadyUserTest, createAllInstalledApps) { | |
1989 CreateClientsKeyForApp1(); | |
1990 | |
1991 App* app = NULL; | |
1992 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, | |
1993 app_bundle_->createAllInstalledApps()); | |
1994 EXPECT_EQ(STATE_READY, GetBundleState()); | |
1995 } | |
1996 | |
1997 TEST_F(AppBundleStateReadyUserTest, checkForUpdate) { | |
1998 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, app_bundle_->checkForUpdate()); | |
1999 EXPECT_EQ(STATE_READY, GetBundleState()); | |
2000 } | |
2001 | |
2002 TEST_F(AppBundleStateReadyUserTest, download) { | |
2003 DummyUserWorkItem dummy_work_item; | |
2004 EXPECT_CALL(*worker_, DownloadAsync(_)) | |
2005 .WillOnce(SetWorkItem(&dummy_work_item)); | |
2006 | |
2007 EXPECT_SUCCEEDED(app_bundle_->download()); | |
2008 EXPECT_EQ(STATE_BUSY, GetBundleState()); | |
2009 | |
2010 EXPECT_FALSE(app_bundle_->is_auto_update()); | |
2011 } | |
2012 | |
2013 TEST_F(AppBundleStateReadyUserTest, install) { | |
2014 DummyUserWorkItem dummy_work_item; | |
2015 EXPECT_CALL(*worker_, DownloadAndInstallAsync(_)) | |
2016 .WillOnce(SetWorkItem(&dummy_work_item)); | |
2017 | |
2018 EXPECT_SUCCEEDED(app_bundle_->install()); | |
2019 EXPECT_EQ(STATE_BUSY, GetBundleState()); | |
2020 | |
2021 EXPECT_FALSE(app_bundle_->is_auto_update()); | |
2022 } | |
2023 | |
2024 TEST_F(AppBundleStateReadyUserTest, updateAllApps) { | |
2025 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, app_bundle_->updateAllApps()); | |
2026 EXPECT_EQ(STATE_READY, GetBundleState()); | |
2027 } | |
2028 | |
2029 TEST_F(AppBundleStateReadyUserTest, stop) { | |
2030 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, app_bundle_->stop()); | |
2031 EXPECT_EQ(STATE_READY, GetBundleState()); | |
2032 } | |
2033 | |
2034 TEST_F(AppBundleStateReadyUserTest, pause) { | |
2035 EXPECT_SUCCEEDED(app_bundle_->pause()); | |
2036 EXPECT_EQ(STATE_READY, GetBundleState()); | |
2037 } | |
2038 | |
2039 TEST_F(AppBundleStateReadyUserTest, resume) { | |
2040 EXPECT_SUCCEEDED(app_bundle_->resume()); | |
2041 EXPECT_EQ(STATE_READY, GetBundleState()); | |
2042 } | |
2043 | |
2044 TEST_F(AppBundleStateReadyUserTest, isBusy) { | |
2045 VARIANT_BOOL is_busy = VARIANT_TRUE; | |
2046 EXPECT_SUCCEEDED(app_bundle_->isBusy(&is_busy)); | |
2047 EXPECT_EQ(VARIANT_FALSE, is_busy); | |
2048 EXPECT_EQ(STATE_READY, GetBundleState()); | |
2049 } | |
2050 | |
2051 // downloadPackage() returns E_INVALIDARG because the app has no packages. | |
2052 // TODO(omaha): Add the package so downloadPackage can succeed. | |
2053 TEST_F(AppBundleStateReadyUserTest, downloadPackage) { | |
2054 EXPECT_EQ( | |
2055 E_INVALIDARG, | |
2056 app_bundle_->downloadPackage(CComBSTR(kGuid1), CComBSTR(_T("package")))); | |
2057 EXPECT_EQ(STATE_READY, GetBundleState()); | |
2058 } | |
2059 | |
2060 TEST_F(AppBundleStateReadyUserTest, get_currentState) { | |
2061 VARIANT current_state; | |
2062 ExpectAsserts expect_asserts; // Not yet implemented. | |
2063 EXPECT_EQ(E_NOTIMPL, app_bundle_->get_currentState(¤t_state)); | |
2064 EXPECT_EQ(STATE_READY, GetBundleState()); | |
2065 } | |
2066 | |
2067 TEST_F(AppBundleStateReadyUserTest, CompleteAsyncCall) { | |
2068 { | |
2069 ExpectAsserts expect_asserts; | |
2070 app_bundle_->CompleteAsyncCall(); | |
2071 } | |
2072 | |
2073 EXPECT_EQ(STATE_READY, GetBundleState()); | |
2074 } | |
2075 | |
2076 // Paused. | |
2077 | |
2078 TEST_F(AppBundleStatePausedUserTest, Properties) { | |
2079 TestPropertyReflexiveness(); | |
2080 EXPECT_EQ(STATE_PAUSED, GetBundleState()); | |
2081 } | |
2082 | |
2083 TEST_F(AppBundleStatePausedUserTest, CountAndItem) { | |
2084 long num_apps = 0; // NOLINT | |
2085 EXPECT_SUCCEEDED(app_bundle_->get_Count(&num_apps)); | |
2086 EXPECT_EQ(0, num_apps); | |
2087 | |
2088 App* app0_obtained = NULL; | |
2089 EXPECT_EQ(HRESULT_FROM_WIN32(ERROR_INVALID_INDEX), | |
2090 app_bundle_->get_Item(0, &app0_obtained)); | |
2091 EXPECT_FALSE(app0_obtained); | |
2092 | |
2093 EXPECT_EQ(STATE_PAUSED, GetBundleState()); | |
2094 } | |
2095 | |
2096 TEST_F(AppBundleStatePausedUserTest, put_altTokens) { | |
2097 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, app_bundle_->put_altTokens(1, 2, 3)); | |
2098 EXPECT_EQ(STATE_PAUSED, GetBundleState()); | |
2099 } | |
2100 | |
2101 TEST_F(AppBundleStatePausedUserTest, initialize) { | |
2102 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, app_bundle_->initialize()); | |
2103 EXPECT_EQ(STATE_PAUSED, GetBundleState()); | |
2104 } | |
2105 | |
2106 TEST_F(AppBundleStatePausedUserTest, createApp) { | |
2107 App* app = NULL; | |
2108 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, | |
2109 app_bundle_->createApp(CComBSTR(kGuid1), &app)); | |
2110 EXPECT_EQ(STATE_PAUSED, GetBundleState()); | |
2111 } | |
2112 | |
2113 TEST_F(AppBundleStatePausedUserTest, createInstalledApp) { | |
2114 CreateClientsKeyForApp1(); | |
2115 | |
2116 App* app = NULL; | |
2117 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, | |
2118 app_bundle_->createInstalledApp(CComBSTR(kGuid1), &app)); | |
2119 EXPECT_EQ(STATE_PAUSED, GetBundleState()); | |
2120 } | |
2121 | |
2122 TEST_F(AppBundleStatePausedUserTest, createAllInstalledApps) { | |
2123 CreateClientsKeyForApp1(); | |
2124 | |
2125 App* app = NULL; | |
2126 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, | |
2127 app_bundle_->createAllInstalledApps()); | |
2128 EXPECT_EQ(STATE_PAUSED, GetBundleState()); | |
2129 } | |
2130 | |
2131 TEST_F(AppBundleStatePausedUserTest, checkForUpdate) { | |
2132 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, app_bundle_->checkForUpdate()); | |
2133 EXPECT_EQ(STATE_PAUSED, GetBundleState()); | |
2134 } | |
2135 | |
2136 TEST_F(AppBundleStatePausedUserTest, download) { | |
2137 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, app_bundle_->download()); | |
2138 EXPECT_EQ(STATE_PAUSED, GetBundleState()); | |
2139 } | |
2140 | |
2141 TEST_F(AppBundleStatePausedUserTest, install) { | |
2142 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, app_bundle_->install()); | |
2143 EXPECT_EQ(STATE_PAUSED, GetBundleState()); | |
2144 } | |
2145 | |
2146 TEST_F(AppBundleStatePausedUserTest, updateAllApps) { | |
2147 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, app_bundle_->updateAllApps()); | |
2148 EXPECT_EQ(STATE_PAUSED, GetBundleState()); | |
2149 } | |
2150 | |
2151 // This may change when implemented. | |
2152 TEST_F(AppBundleStatePausedUserTest, stop) { | |
2153 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, app_bundle_->stop()); | |
2154 EXPECT_EQ(STATE_PAUSED, GetBundleState()); | |
2155 } | |
2156 | |
2157 TEST_F(AppBundleStatePausedUserTest, pause) { | |
2158 EXPECT_SUCCEEDED(app_bundle_->pause()); | |
2159 EXPECT_EQ(STATE_PAUSED, GetBundleState()); | |
2160 } | |
2161 | |
2162 TEST_F(AppBundleStatePausedUserTest, resume_Succeeds_AsyncCallNotCompleted) { | |
2163 EXPECT_CALL(*worker_, Resume(app_bundle_.get())) | |
2164 .WillOnce(Return(S_OK)); | |
2165 | |
2166 EXPECT_SUCCEEDED(app_bundle_->resume()); | |
2167 EXPECT_EQ(STATE_BUSY, GetBundleState()); | |
2168 } | |
2169 | |
2170 TEST_F(AppBundleStatePausedUserTest, resume_Succeeds_AsyncCallCompleted) { | |
2171 DummyUserWorkItem dummy_work_item; | |
2172 app_bundle_->set_user_work_item(&dummy_work_item); | |
2173 app_bundle_->CompleteAsyncCall(); | |
2174 | |
2175 EXPECT_CALL(*worker_, Resume(app_bundle_.get())) | |
2176 .WillOnce(Return(S_OK)); | |
2177 | |
2178 EXPECT_SUCCEEDED(app_bundle_->resume()); | |
2179 EXPECT_EQ(STATE_READY, GetBundleState()); | |
2180 } | |
2181 | |
2182 TEST_F(AppBundleStatePausedUserTest, resume_Fails_AsyncCallNotCompleted) { | |
2183 EXPECT_CALL(*worker_, Resume(app_bundle_.get())) | |
2184 .WillOnce(Return(kKnownError)); | |
2185 | |
2186 EXPECT_EQ(kKnownError, app_bundle_->resume()); | |
2187 EXPECT_EQ(STATE_PAUSED, GetBundleState()); | |
2188 } | |
2189 | |
2190 TEST_F(AppBundleStatePausedUserTest, resume_Fails_AsyncCallCompleted) { | |
2191 DummyUserWorkItem dummy_work_item; | |
2192 app_bundle_->set_user_work_item(&dummy_work_item); | |
2193 app_bundle_->CompleteAsyncCall(); | |
2194 | |
2195 EXPECT_CALL(*worker_, Resume(app_bundle_.get())) | |
2196 .WillOnce(Return(kKnownError)); | |
2197 | |
2198 EXPECT_EQ(kKnownError, app_bundle_->resume()); | |
2199 EXPECT_EQ(STATE_PAUSED, GetBundleState()); | |
2200 } | |
2201 | |
2202 TEST_F(AppBundleStatePausedUserTest, isBusy) { | |
2203 VARIANT_BOOL is_busy = VARIANT_TRUE; | |
2204 EXPECT_SUCCEEDED(app_bundle_->isBusy(&is_busy)); | |
2205 EXPECT_EQ(VARIANT_FALSE, is_busy); | |
2206 EXPECT_EQ(STATE_PAUSED, GetBundleState()); | |
2207 } | |
2208 | |
2209 TEST_F(AppBundleStatePausedUserTest, downloadPackage) { | |
2210 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, | |
2211 app_bundle_->downloadPackage(CComBSTR(kGuid1), | |
2212 CComBSTR(_T("package")))); | |
2213 EXPECT_EQ(STATE_PAUSED, GetBundleState()); | |
2214 } | |
2215 | |
2216 TEST_F(AppBundleStatePausedUserTest, get_currentState) { | |
2217 VARIANT current_state; | |
2218 ExpectAsserts expect_asserts; // Not yet implemented. | |
2219 EXPECT_EQ(E_NOTIMPL, app_bundle_->get_currentState(¤t_state)); | |
2220 EXPECT_EQ(STATE_PAUSED, GetBundleState()); | |
2221 } | |
2222 | |
2223 // Remains Paused until resumed. | |
2224 TEST_F(AppBundleStatePausedUserTest, CompleteAsyncCall) { | |
2225 DummyUserWorkItem dummy_work_item; | |
2226 app_bundle_->set_user_work_item(&dummy_work_item); | |
2227 SetAppBundleStateForUnitTest(app_bundle_.get(), | |
2228 new fsm::AppBundleStatePaused); | |
2229 | |
2230 app_bundle_->CompleteAsyncCall(); | |
2231 | |
2232 EXPECT_EQ(STATE_PAUSED, GetBundleState()); | |
2233 } | |
2234 | |
2235 // Stopped. | |
2236 | |
2237 TEST_F(AppBundleStateStoppedUserTest, Properties) { | |
2238 TestPropertyReflexiveness(); | |
2239 EXPECT_EQ(STATE_STOPPED, GetBundleState()); | |
2240 } | |
2241 | |
2242 TEST_F(AppBundleStateStoppedUserTest, CountAndItem) { | |
2243 long num_apps = 0; // NOLINT | |
2244 EXPECT_SUCCEEDED(app_bundle_->get_Count(&num_apps)); | |
2245 EXPECT_EQ(0, num_apps); | |
2246 | |
2247 App* app0_obtained = NULL; | |
2248 EXPECT_EQ(HRESULT_FROM_WIN32(ERROR_INVALID_INDEX), | |
2249 app_bundle_->get_Item(0, &app0_obtained)); | |
2250 EXPECT_FALSE(app0_obtained); | |
2251 | |
2252 EXPECT_EQ(STATE_STOPPED, GetBundleState()); | |
2253 } | |
2254 | |
2255 TEST_F(AppBundleStateStoppedUserTest, put_altTokens) { | |
2256 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, app_bundle_->put_altTokens(1, 2, 3)); | |
2257 EXPECT_EQ(STATE_STOPPED, GetBundleState()); | |
2258 } | |
2259 | |
2260 TEST_F(AppBundleStateStoppedUserTest, initialize) { | |
2261 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, app_bundle_->initialize()); | |
2262 EXPECT_EQ(STATE_STOPPED, GetBundleState()); | |
2263 } | |
2264 | |
2265 TEST_F(AppBundleStateStoppedUserTest, createApp) { | |
2266 App* app = NULL; | |
2267 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, | |
2268 app_bundle_->createApp(CComBSTR(kGuid1), &app)); | |
2269 | |
2270 EXPECT_EQ(S_OK, app_bundle_->stop()); | |
2271 EXPECT_EQ(STATE_STOPPED, GetBundleState()); | |
2272 } | |
2273 | |
2274 TEST_F(AppBundleStateStoppedUserTest, createInstalledApp) { | |
2275 CreateClientsKeyForApp1(); | |
2276 | |
2277 App* app = NULL; | |
2278 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, | |
2279 app_bundle_->createInstalledApp(CComBSTR(kGuid1), &app)); | |
2280 EXPECT_EQ(STATE_STOPPED, GetBundleState()); | |
2281 } | |
2282 | |
2283 TEST_F(AppBundleStateStoppedUserTest, createAllInstalledApps) { | |
2284 CreateClientsKeyForApp1(); | |
2285 | |
2286 App* app = NULL; | |
2287 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, | |
2288 app_bundle_->createAllInstalledApps()); | |
2289 EXPECT_EQ(STATE_STOPPED, GetBundleState()); | |
2290 } | |
2291 | |
2292 TEST_F(AppBundleStateStoppedUserTest, checkForUpdate) { | |
2293 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, app_bundle_->checkForUpdate()); | |
2294 EXPECT_EQ(STATE_STOPPED, GetBundleState()); | |
2295 } | |
2296 | |
2297 TEST_F(AppBundleStateStoppedUserTest, download) { | |
2298 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, app_bundle_->download()); | |
2299 EXPECT_EQ(STATE_STOPPED, GetBundleState()); | |
2300 } | |
2301 | |
2302 TEST_F(AppBundleStateStoppedUserTest, install) { | |
2303 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, app_bundle_->install()); | |
2304 EXPECT_EQ(STATE_STOPPED, GetBundleState()); | |
2305 } | |
2306 | |
2307 TEST_F(AppBundleStateStoppedUserTest, updateAllApps) { | |
2308 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, app_bundle_->updateAllApps()); | |
2309 EXPECT_EQ(STATE_STOPPED, GetBundleState()); | |
2310 } | |
2311 | |
2312 TEST_F(AppBundleStateStoppedUserTest, stop) { | |
2313 EXPECT_EQ(S_OK, app_bundle_->stop()); | |
2314 EXPECT_EQ(STATE_STOPPED, GetBundleState()); | |
2315 } | |
2316 | |
2317 TEST_F(AppBundleStateStoppedUserTest, pause) { | |
2318 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, app_bundle_->pause()); | |
2319 EXPECT_EQ(STATE_STOPPED, GetBundleState()); | |
2320 } | |
2321 | |
2322 TEST_F(AppBundleStateStoppedUserTest, resume) { | |
2323 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, app_bundle_->resume()); | |
2324 EXPECT_EQ(STATE_STOPPED, GetBundleState()); | |
2325 } | |
2326 | |
2327 TEST_F(AppBundleStateStoppedUserTest, isBusy) { | |
2328 VARIANT_BOOL is_busy = VARIANT_TRUE; | |
2329 EXPECT_SUCCEEDED(app_bundle_->isBusy(&is_busy)); | |
2330 EXPECT_EQ(VARIANT_FALSE, is_busy); | |
2331 EXPECT_EQ(STATE_STOPPED, GetBundleState()); | |
2332 } | |
2333 | |
2334 TEST_F(AppBundleStateStoppedUserTest, downloadPackage) { | |
2335 EXPECT_EQ(GOOPDATE_E_CALL_UNEXPECTED, | |
2336 app_bundle_->downloadPackage(CComBSTR(kGuid1), | |
2337 CComBSTR(_T("package")))); | |
2338 EXPECT_EQ(STATE_STOPPED, GetBundleState()); | |
2339 } | |
2340 | |
2341 TEST_F(AppBundleStateStoppedUserTest, get_currentState) { | |
2342 VARIANT current_state; | |
2343 ExpectAsserts expect_asserts; // Not yet implemented. | |
2344 EXPECT_EQ(E_NOTIMPL, app_bundle_->get_currentState(¤t_state)); | |
2345 EXPECT_EQ(STATE_STOPPED, GetBundleState()); | |
2346 } | |
2347 | |
2348 TEST_F(AppBundleStateStoppedUserTest, CompleteAsyncCall) { | |
2349 DummyUserWorkItem dummy_work_item; | |
2350 app_bundle_->set_user_work_item(&dummy_work_item); | |
2351 | |
2352 app_bundle_->CompleteAsyncCall(); | |
2353 | |
2354 EXPECT_EQ(STATE_STOPPED, GetBundleState()); | |
2355 } | |
2356 | |
2357 } // namespace omaha | |
OLD | NEW |