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

Unified Diff: goopdate/download_manager_unittest.cc

Issue 624713003: Keep only base/extractor.[cc|h]. (Closed) Base URL: https://chromium.googlesource.com/external/omaha.git@master
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « goopdate/download_manager.cc ('k') | goopdate/elevation_moniker_resource.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: goopdate/download_manager_unittest.cc
diff --git a/goopdate/download_manager_unittest.cc b/goopdate/download_manager_unittest.cc
deleted file mode 100644
index 29b3ef1f5afcaaa8bc6bbbd9389f43272090d88f..0000000000000000000000000000000000000000
--- a/goopdate/download_manager_unittest.cc
+++ /dev/null
@@ -1,1237 +0,0 @@
-// Copyright 2008-2010 Google Inc.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-// ========================================================================
-
-// TODO(omaha): why so many dependencies for this unit test?
-
-#include <windows.h>
-#include <atlstr.h>
-#include "omaha/base/app_util.h"
-#include "omaha/base/error.h"
-#include "omaha/base/file.h"
-#include "omaha/base/path.h"
-#include "omaha/base/scoped_any.h"
-#include "omaha/base/scoped_ptr_address.h"
-#include "omaha/base/signatures.h"
-#include "omaha/base/thread_pool.h"
-#include "omaha/base/timer.h"
-#include "omaha/base/utils.h"
-#include "omaha/base/vistautil.h"
-#include "omaha/base/vista_utils.h"
-#include "omaha/common/config_manager.h"
-#include "omaha/goopdate/app_state_checking_for_update.h"
-#include "omaha/goopdate/app_state_waiting_to_download.h"
-#include "omaha/goopdate/app_unittest_base.h"
-#include "omaha/goopdate/download_manager.h"
-#include "omaha/goopdate/update_response_utils.h"
-#include "omaha/testing/unit_test.h"
-
-using ::testing::_;
-using ::testing::Return;
-
-namespace omaha {
-
-namespace {
-
-const TCHAR kUpdateBinHash[] = _T("YF2z/br/S6E3KTca0MT7qziJN44=");
-const TCHAR kUpdateBin1Hash[] = _T("tbYInfmArVRUD62Ex292vN4LtGQ=");
-
-const TCHAR kAppGuid1[] = _T("{0B35E146-D9CB-4145-8A91-43FDCAEBCD1E}");
-const TCHAR kAppGuid2[] = _T("{C7F2B395-A01C-4806-AA07-9163F66AFC48}");
-
-
-class DownloadAppWorkItem : public UserWorkItem {
- public:
- DownloadAppWorkItem(DownloadManager* download_manager, App* app)
- : download_manager_(download_manager), app_(app) {}
-
- private:
- virtual void DoProcess() {
- download_manager_->DownloadApp(app_);
- }
-
- DownloadManager* download_manager_;
- App* app_;
-
- DISALLOW_EVIL_CONSTRUCTORS(DownloadAppWorkItem);
-};
-
-} // namespace
-
-class DownloadManagerTest : public AppTestBase {
- public:
- static HRESULT BuildUniqueFileName(const CString& filename,
- CString* unique_filename) {
- return DownloadManager::BuildUniqueFileName(filename,
- unique_filename);
- }
-
- protected:
- explicit DownloadManagerTest(bool is_machine)
- : AppTestBase(is_machine, true) {}
-
- virtual void SetUp() {
- AppTestBase::SetUp();
-
- CleanupFiles();
-
- download_manager_.reset(new DownloadManager(is_machine_));
- EXPECT_SUCCEEDED(download_manager_->Initialize());
- }
-
- virtual void TearDown() {
- download_manager_.reset();
- CleanupFiles();
-
- AppTestBase::TearDown();
- }
-
- virtual void CleanupFiles() = 0;
-
- static HRESULT LoadBundleFromXml(AppBundle* app_bundle,
- const CStringA& buffer_string) {
- __mutexScope(app_bundle->model()->lock());
-
- std::vector<uint8> buffer(buffer_string.GetLength());
- memcpy(&buffer.front(), buffer_string, buffer.size());
-
- scoped_ptr<xml::UpdateResponse> update_response(
- xml::UpdateResponse::Create());
- HRESULT hr = update_response->Deserialize(buffer);
- if (FAILED(hr)) {
- return hr;
- }
-
- for (size_t i = 0; i != app_bundle->GetNumberOfApps(); ++i) {
- hr = update_response_utils::BuildApp(update_response.get(),
- S_OK,
- app_bundle->GetApp(i));
- if (FAILED(hr)) {
- return hr;
- }
- }
-
- return S_OK;
- }
-
- static void SetAppStateCheckingForUpdate(App* app) {
- SetAppStateForUnitTest(app, new fsm::AppStateCheckingForUpdate);
- }
-
- static void SetAppStateWaitingToDownload(App* app) {
- SetAppStateForUnitTest(app, new fsm::AppStateWaitingToDownload);
- }
-
- const CString cache_path_;
- scoped_ptr<DownloadManager> download_manager_;
-};
-
-
-class DownloadManagerMachineTest : public DownloadManagerTest {
- protected:
- DownloadManagerMachineTest() : DownloadManagerTest(true) {}
-
- virtual void CleanupFiles() {
- ConfigManager* cm(ConfigManager::Instance());
- DeleteDirectory(cm->GetMachineInstallWorkingDir());
- DeleteDirectory(cm->GetMachineSecureDownloadStorageDir());
- }
-};
-
-class DownloadManagerUserTest : public DownloadManagerTest {
- protected:
- DownloadManagerUserTest() : DownloadManagerTest(false) {}
-
- virtual void CleanupFiles() {
- ConfigManager* cm(ConfigManager::Instance());
- DeleteDirectory(cm->GetUserInstallWorkingDir());
- DeleteDirectory(cm->GetUserDownloadStorageDir());
- }
-};
-
-TEST_F(DownloadManagerUserTest, DownloadApp_MultiplePackagesInOneApp) {
- App* app = NULL;
- ASSERT_SUCCEEDED(app_bundle_->createApp(CComBSTR(kAppGuid1), &app));
- EXPECT_SUCCEEDED(app->put_displayName(CComBSTR(_T("App1"))));
- EXPECT_SUCCEEDED(app->put_isEulaAccepted(VARIANT_TRUE)); // Allow download.
-
- // One app, two packages.
- CStringA buffer_string =
-
- "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
- "<response protocol=\"3.0\">"
- "<app appid=\"{0B35E146-D9CB-4145-8A91-43FDCAEBCD1E}\" status=\"ok\">"
- "<updatecheck status=\"ok\">"
- "<urls>"
- "<url codebase=\"http://dl.google.com/update2/\"/>"
- "</urls>"
- "<manifest version=\"1.0\">"
- "<packages>"
- "<package "
- "hash=\"YF2z/br/S6E3KTca0MT7qziJN44=\" "
- "name=\"UpdateData.bin\" "
- "required=\"true\" "
- "size=\"2048\"/>"
- "<package "
- "hash=\"tbYInfmArVRUD62Ex292vN4LtGQ=\" "
- "name=\"UpdateData1.bin\" "
- "required=\"true\" "
- "size=\"2048\"/>"
- "</packages>"
- "</manifest>"
- "</updatecheck>"
- "</app>"
- "</response>";
-
- EXPECT_HRESULT_SUCCEEDED(LoadBundleFromXml(app_bundle_.get(), buffer_string));
- SetAppStateWaitingToDownload(app);
-
- EXPECT_SUCCEEDED(download_manager_->DownloadApp(app));
-
- // Tests the first package.
- const Package* package = app->next_version()->GetPackage(0);
- ASSERT_TRUE(package);
- EXPECT_STREQ(_T("UpdateData.bin"), package->filename());
- EXPECT_EQ(2048, package->expected_size());
- EXPECT_STREQ(kUpdateBinHash, package->expected_hash());
- EXPECT_EQ(2048, package->bytes_downloaded());
- EXPECT_TRUE(download_manager_->IsPackageAvailable(package));
-
- // Tests the second package.
- package = app->next_version()->GetPackage(1);
- ASSERT_TRUE(package);
- EXPECT_STREQ(_T("UpdateData1.bin"), package->filename());
- EXPECT_EQ(2048, package->expected_size());
- EXPECT_STREQ(kUpdateBin1Hash, package->expected_hash());
- EXPECT_EQ(2048, package->bytes_downloaded());
- EXPECT_TRUE(download_manager_->IsPackageAvailable(package));
-}
-
-// Downloads multiple apps serially.
-TEST_F(DownloadManagerUserTest, DownloadApp_MultipleApps) {
- App* app = NULL;
- ASSERT_SUCCEEDED(app_bundle_->createApp(CComBSTR(kAppGuid1), &app));
- EXPECT_SUCCEEDED(app->put_displayName(CComBSTR(_T("App1"))));
- EXPECT_SUCCEEDED(app->put_isEulaAccepted(VARIANT_TRUE)); // Allow download.
-
- app = NULL;
- ASSERT_SUCCEEDED(app_bundle_->createApp(CComBSTR(kAppGuid2), &app));
- EXPECT_SUCCEEDED(app->put_displayName(CComBSTR(_T("App2"))));
- EXPECT_SUCCEEDED(app->put_isEulaAccepted(VARIANT_TRUE)); // Allow download.
-
- // Two apps, one package each.
- CStringA buffer_string =
-
- "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
- "<response protocol=\"3.0\">"
- "<app appid=\"{0B35E146-D9CB-4145-8A91-43FDCAEBCD1E}\" status=\"ok\">"
- "<updatecheck status=\"ok\">"
- "<urls>"
- "<url codebase=\"http://dl.google.com/update2/\"/>"
- "</urls>"
- "<manifest version=\"1.0\">"
- "<packages>"
- "<package "
- "hash=\"YF2z/br/S6E3KTca0MT7qziJN44=\" "
- "name=\"UpdateData.bin\" "
- "required=\"true\" "
- "size=\"2048\"/>"
- "</packages>"
- "</manifest>"
- "</updatecheck>"
- "</app>"
- "<app appid=\"{C7F2B395-A01C-4806-AA07-9163F66AFC48}\" status=\"ok\">"
- "<updatecheck status=\"ok\">"
- "<urls>"
- "<url codebase=\"http://dl.google.com/update2/\"/>"
- "</urls>"
- "<manifest version=\"2.0\">"
- "<packages>"
- "<package "
- "hash=\"tbYInfmArVRUD62Ex292vN4LtGQ=\" "
- "name=\"UpdateData1.bin\" "
- "required=\"true\" "
- "size=\"2048\"/>"
- "</packages>"
- "</manifest>"
- "</updatecheck>"
- "</app>"
- "</response>";
-
- EXPECT_HRESULT_SUCCEEDED(LoadBundleFromXml(app_bundle_.get(), buffer_string));
-
- // Tests the first app.
- app = app_bundle_->GetApp(0);
- ASSERT_TRUE(app);
- SetAppStateWaitingToDownload(app);
- EXPECT_SUCCEEDED(download_manager_->DownloadApp(app));
-
- const Package* package = app->next_version()->GetPackage(0);
- ASSERT_TRUE(package);
- EXPECT_STREQ(_T("UpdateData.bin"), package->filename());
- EXPECT_EQ(2048, package->expected_size());
- EXPECT_STREQ(kUpdateBinHash, package->expected_hash());
- EXPECT_EQ(2048, package->bytes_downloaded());
- EXPECT_TRUE(download_manager_->IsPackageAvailable(package));
-
- // Tests the second app.
- app = app_bundle_->GetApp(1);
- ASSERT_TRUE(app);
- SetAppStateWaitingToDownload(app);
- EXPECT_SUCCEEDED(download_manager_->DownloadApp(app));
-
- package = app->next_version()->GetPackage(0);
- ASSERT_TRUE(package);
- EXPECT_STREQ(_T("UpdateData1.bin"), package->filename());
- EXPECT_EQ(2048, package->expected_size());
- EXPECT_STREQ(kUpdateBin1Hash, package->expected_hash());
- EXPECT_EQ(2048, package->bytes_downloaded());
- EXPECT_TRUE(download_manager_->IsPackageAvailable(package));
-}
-
-// Downloads multiple apps concurrently. The test builds a bundle of two
-// apps, creates two thread pool work items to download the apps, waits
-// for the downloads to complete, and then checks the results of each download.
-// This is essentialy the same unit test as DownloadApp_MultipleApps done
-// concurrently instead of serially.
-TEST_F(DownloadManagerUserTest, DownloadApp_Concurrent) {
- App* app = NULL;
- ASSERT_SUCCEEDED(app_bundle_->createApp(CComBSTR(kAppGuid1), &app));
- EXPECT_SUCCEEDED(app->put_displayName(CComBSTR(_T("App1"))));
- EXPECT_SUCCEEDED(app->put_isEulaAccepted(VARIANT_TRUE)); // Allow download.
-
- app = NULL;
- ASSERT_SUCCEEDED(app_bundle_->createApp(CComBSTR(kAppGuid2), &app));
- EXPECT_SUCCEEDED(app->put_displayName(CComBSTR(_T("App2"))));
- EXPECT_SUCCEEDED(app->put_isEulaAccepted(VARIANT_TRUE)); // Allow download.
-
- // Two apps, one package each.
- CStringA buffer_string =
-
- "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
- "<response protocol=\"3.0\">"
- "<app appid=\"{0B35E146-D9CB-4145-8A91-43FDCAEBCD1E}\" status=\"ok\">"
- "<updatecheck status=\"ok\">"
- "<urls>"
- "<url codebase=\"http://dl.google.com/update2/\"/>"
- "</urls>"
- "<manifest version=\"1.0\">"
- "<packages>"
- "<package "
- "hash=\"YF2z/br/S6E3KTca0MT7qziJN44=\" "
- "name=\"UpdateData.bin\" "
- "required=\"true\" "
- "size=\"2048\"/>"
- "</packages>"
- "</manifest>"
- "</updatecheck>"
- "</app>"
- "<app appid=\"{C7F2B395-A01C-4806-AA07-9163F66AFC48}\" status=\"ok\">"
- "<updatecheck status=\"ok\">"
- "<urls>"
- "<url codebase=\"http://dl.google.com/update2/\"/>"
- "</urls>"
- "<manifest version=\"2.0\">"
- "<packages>"
- "<package "
- "hash=\"tbYInfmArVRUD62Ex292vN4LtGQ=\" "
- "name=\"UpdateData1.bin\" "
- "required=\"true\" "
- "size=\"2048\"/>"
- "</packages>"
- "</manifest>"
- "</updatecheck>"
- "</app>"
- "</response>";
-
- EXPECT_HRESULT_SUCCEEDED(LoadBundleFromXml(app_bundle_.get(), buffer_string));
-
- // The thread pool waits up to 1 minute for the work items to complete when
- // the thread pool object is destroyed.
- const int kShutdownDelayMs = 60000;
-
- ThreadPool thread_pool;
- ASSERT_HRESULT_SUCCEEDED(thread_pool.Initialize(kShutdownDelayMs));
-
- const int kNumApps = 2;
-
- for (int i = 0; i != kNumApps; ++i) {
- app = app_bundle_->GetApp(i);
- SetAppStateWaitingToDownload(app);
-
- scoped_ptr<DownloadAppWorkItem> work_item(
- new DownloadAppWorkItem(download_manager_.get(), app));
-
- // WT_EXECUTELONGFUNCTION causes the thread pool to use multiple threads.
- ASSERT_HRESULT_SUCCEEDED(thread_pool.QueueUserWorkItem(
- work_item.release(),
- WT_EXECUTELONGFUNCTION));
- }
-
- // Poll the state of the download manager and wait up to 1 minute for the
- // downloads to complete.
- const int kTimeToWaitForDownloadsMs = 60000;
- const int kTimeToSleepWhenPollingMs = 10;
-
- // Wait some time for the download manager to pick up the work items and
- // become busy.
- Timer timer(true);
- while (timer.GetMilliseconds() < kTimeToWaitForDownloadsMs) {
- if (download_manager_->IsBusy()) {
- break;
- }
- }
- timer.Reset();
-
- // Wait for the download manager to exit its busy state.
- timer.Start();
- while (download_manager_->IsBusy() &&
- timer.GetMilliseconds() < kTimeToWaitForDownloadsMs) {
- ::Sleep(kTimeToSleepWhenPollingMs);
- }
-
- // Expect that downloads have completed in a reasonable time.
- EXPECT_FALSE(download_manager_->IsBusy());
-
- // Test the outcome of the two downloads.
- app = app_bundle_->GetApp(0);
- const Package* package = app->next_version()->GetPackage(0);
- ASSERT_TRUE(package);
- EXPECT_STREQ(_T("UpdateData.bin"), package->filename());
- EXPECT_EQ(2048, package->expected_size());
- EXPECT_STREQ(kUpdateBinHash, package->expected_hash());
- EXPECT_EQ(2048, package->bytes_downloaded());
- EXPECT_TRUE(download_manager_->IsPackageAvailable(package));
-
- app = app_bundle_->GetApp(1);
- package = app->next_version()->GetPackage(0);
- ASSERT_TRUE(package);
- EXPECT_STREQ(_T("UpdateData1.bin"), package->filename());
- EXPECT_EQ(2048, package->expected_size());
- EXPECT_STREQ(kUpdateBin1Hash, package->expected_hash());
- EXPECT_EQ(2048, package->bytes_downloaded());
- EXPECT_TRUE(download_manager_->IsPackageAvailable(package));
-
- // Try to cancel the downloads if they could not complete in time and the
- // download manager is still busy. The thread pool waits a while for the work
- // items to complete after they have been canceled.
- if (download_manager_->IsBusy()) {
- for (int i = 0; i != kNumApps; ++i) {
- download_manager_->Cancel(app_bundle_->GetApp(i));
- }
- return;
- }
-}
-
-// Downloads multiple apps concurrently and cancels the downloads while they
-// are in progress. The test builds a bundle of two apps with one file each,
-// creates two thread pool work items to download the apps, waits for the
-// downloads to begin, and then cancels them.
-// TODO(omaha): Fix the intermittent failures.
-TEST_F(DownloadManagerUserTest, DISABLED_DownloadApp_Cancel) {
- App* app = NULL;
- ASSERT_SUCCEEDED(app_bundle_->createApp(CComBSTR(kAppGuid1), &app));
- EXPECT_SUCCEEDED(app->put_displayName(CComBSTR(_T("App1"))));
- EXPECT_SUCCEEDED(app->put_isEulaAccepted(VARIANT_TRUE)); // Allow download.
-
- app = NULL;
- ASSERT_SUCCEEDED(app_bundle_->createApp(CComBSTR(kAppGuid2), &app));
- EXPECT_SUCCEEDED(app->put_displayName(CComBSTR(_T("App2"))));
- EXPECT_SUCCEEDED(app->put_isEulaAccepted(VARIANT_TRUE)); // Allow download.
-
- // Two apps, one package each.
- CStringA buffer_string =
-
- "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
- "<response protocol=\"3.0\">"
- "<app appid=\"{0B35E146-D9CB-4145-8A91-43FDCAEBCD1E}\" status=\"ok\">"
- "<updatecheck status=\"ok\">"
- "<urls>"
- "<url codebase=\"http://dl.google.com/dl/edgedl/update2/\"/>"
- "</urls>"
- "<manifest version=\"1.0\">"
- "<packages>"
- "<package "
- "hash=\"jCBqGodZn1Ms5oZ1U28LFUaQDXo=\" "
- "name=\"UpdateData_10M.bin\" "
- "required=\"true\" "
- "size=\"10485760\"/>"
- "</packages>"
- "</manifest>"
- "</updatecheck>"
- "</app>"
- "<app appid=\"{C7F2B395-A01C-4806-AA07-9163F66AFC48}\" status=\"ok\">"
- "<updatecheck status=\"ok\">"
- "<urls>"
- "<url codebase=\"http://dl.google.com/dl/edgedl/update2/\"/>"
- "</urls>"
- "<manifest version=\"2.0\">"
- "<packages>"
- "<package "
- "hash=\"jCBqGodZn1Ms5oZ1U28LFUaQDXo=\" "
- "name=\"UpdateData_10M.bin\" "
- "required=\"true\" "
- "size=\"10485760\"/>"
- "</packages>"
- "</manifest>"
- "</updatecheck>"
- "</app>"
- "</response>";
-
- EXPECT_HRESULT_SUCCEEDED(LoadBundleFromXml(app_bundle_.get(), buffer_string));
-
- // The thread pool waits up to 1 minute for the work items to complete when
- // the thread pool object is destroyed.
- const int kShutdownDelayMs = 60000;
-
- ThreadPool thread_pool;
- ASSERT_HRESULT_SUCCEEDED(thread_pool.Initialize(kShutdownDelayMs));
-
- const int kNumApps = 2;
-
- for (int i = 0; i != kNumApps; ++i) {
- app = app_bundle_->GetApp(i);
- SetAppStateWaitingToDownload(app);
-
- scoped_ptr<DownloadAppWorkItem> work_item(
- new DownloadAppWorkItem(download_manager_.get(), app));
-
- ASSERT_HRESULT_SUCCEEDED(thread_pool.QueueUserWorkItem(
- work_item.release(),
- WT_EXECUTELONGFUNCTION));
- }
-
- for (int i = 0; i != kNumApps; ++i) {
- app = app_bundle_->GetApp(i);
- EXPECT_NE(STATE_ERROR, app->state());
- }
-
- // Poll the state of the download manager and wait up to 1 minute for the
- // downloads to complete.
- const int kTimeToWaitForDownloadsMs = 60000;
- const int kTimeToSleepWhenPollingMs = 10;
-
- // Cancel the downloads as soon as all apps are downloading and
- // wait until all apps have transitioned in the error state.
- Timer timer(true);
- bool is_done = false;
- while (!is_done && timer.GetMilliseconds() < kTimeToWaitForDownloadsMs) {
- int num_apps_downloading = 0;
-
- for (int i = 0; i != kNumApps; ++i) {
- app = app_bundle_->GetApp(i);
- if (app->state() == STATE_DOWNLOADING) {
- const Package* package = app->next_version()->GetPackage(0);
- if (package->bytes_downloaded()) {
- ++num_apps_downloading;
- }
- }
- }
-
- is_done = (num_apps_downloading == kNumApps);
-
- ::Sleep(kTimeToSleepWhenPollingMs);
- }
-
- for (int i = 0; i != kNumApps; ++i) {
- download_manager_->Cancel(app_bundle_->GetApp(i));
- }
-
- is_done = false;
- while (!is_done && timer.GetMilliseconds() < kTimeToWaitForDownloadsMs) {
- int num_apps_cancelled = 0;
- for (int i = 0; i != kNumApps; ++i) {
- app = app_bundle_->GetApp(i);
- if (app->state() == STATE_ERROR) {
- ++num_apps_cancelled;
- }
- }
-
- is_done = (num_apps_cancelled == kNumApps);
-
- ::Sleep(kTimeToSleepWhenPollingMs);
- }
-
- for (int i = 0; i != kNumApps; ++i) {
- // Check the state of the app and the package after the cancel call.
- app = app_bundle_->GetApp(i);
- EXPECT_EQ(STATE_ERROR, app->state());
-
- const Package* package = app->next_version()->GetPackage(0);
- ASSERT_TRUE(package);
- EXPECT_LT(0, package->bytes_downloaded());
- VARIANT_BOOL is_available(false);
- EXPECT_HRESULT_SUCCEEDED(package->get_isAvailable(&is_available));
- EXPECT_FALSE(is_available);
-
- // Check CurrentAppState members.
- CComPtr<IDispatch> current_state_disp;
- EXPECT_HRESULT_SUCCEEDED(app->get_currentState(&current_state_disp));
- CComPtr<ICurrentState> current_state;
- EXPECT_HRESULT_SUCCEEDED(
- current_state_disp->QueryInterface(&current_state));
-
- LONG state_value = 0;
- EXPECT_HRESULT_SUCCEEDED(current_state->get_stateValue(&state_value));
- EXPECT_EQ(STATE_ERROR, static_cast<CurrentState>(state_value));
-
- LONG error_code = 0;
- EXPECT_HRESULT_SUCCEEDED(current_state->get_errorCode(&error_code));
- EXPECT_EQ(GOOPDATE_E_CANCELLED, error_code);
-
- LONG extra_code1 = 0;
- EXPECT_HRESULT_SUCCEEDED(current_state->get_errorCode(&extra_code1));
- EXPECT_EQ(0, extra_code1);
- }
-}
-
-// Common packages of different apps are not cached by the package cache and
-// will be redownloaded until the network cache is implemented.
-// TODO(omaha): fix unit test as soon as the network cache is implemented.
-TEST_F(DownloadManagerUserTest, DownloadApp_MultipleAppsCommonPackage) {
- App* app = NULL;
- ASSERT_SUCCEEDED(app_bundle_->createApp(CComBSTR(kAppGuid1), &app));
- EXPECT_SUCCEEDED(app->put_displayName(CComBSTR(_T("App1"))));
- EXPECT_SUCCEEDED(app->put_isEulaAccepted(VARIANT_TRUE)); // Allow download.
-
- app = NULL;
- ASSERT_SUCCEEDED(app_bundle_->createApp(CComBSTR(kAppGuid2), &app));
- EXPECT_SUCCEEDED(app->put_displayName(CComBSTR(_T("App2"))));
- EXPECT_SUCCEEDED(app->put_isEulaAccepted(VARIANT_TRUE)); // Allow download.
-
- // Two apps, same package each.
- CStringA buffer_string =
-
- "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
- "<response protocol=\"3.0\">"
- "<app appid=\"{0B35E146-D9CB-4145-8A91-43FDCAEBCD1E}\" status=\"ok\">"
- "<updatecheck status=\"ok\">"
- "<urls>"
- "<url codebase=\"http://dl.google.com/update2/\"/>"
- "</urls>"
- "<manifest version=\"1.0\">"
- "<packages>"
- "<package "
- "hash=\"YF2z/br/S6E3KTca0MT7qziJN44=\" "
- "name=\"UpdateData.bin\" "
- "required=\"true\" "
- "size=\"2048\"/>"
- "</packages>"
- "</manifest>"
- "</updatecheck>"
- "</app>"
- "<app appid=\"{C7F2B395-A01C-4806-AA07-9163F66AFC48}\" status=\"ok\">"
- "<updatecheck status=\"ok\">"
- "<urls>"
- "<url codebase=\"http://dl.google.com/update2/\"/>"
- "</urls>"
- "<manifest version=\"2.0\">"
- "<packages>"
- "<package "
- "hash=\"YF2z/br/S6E3KTca0MT7qziJN44=\" "
- "name=\"UpdateData.bin\" "
- "required=\"true\" "
- "size=\"2048\"/>"
- "</packages>"
- "</manifest>"
- "</updatecheck>"
- "</app>"
- "</response>";
-
- EXPECT_HRESULT_SUCCEEDED(LoadBundleFromXml(app_bundle_.get(), buffer_string));
-
- // Tests the first app.
- app = app_bundle_->GetApp(0);
- ASSERT_TRUE(app);
- SetAppStateWaitingToDownload(app);
- EXPECT_SUCCEEDED(download_manager_->DownloadApp(app));
-
- const Package* package = app->next_version()->GetPackage(0);
- ASSERT_TRUE(package);
- EXPECT_STREQ(_T("UpdateData.bin"), package->filename());
- EXPECT_EQ(2048, package->expected_size());
- EXPECT_STREQ(kUpdateBinHash, package->expected_hash());
- EXPECT_EQ(2048, package->bytes_downloaded());
- EXPECT_TRUE(download_manager_->IsPackageAvailable(package));
-
- // Tests the second app. The package is redownloaded.
- app = app_bundle_->GetApp(1);
- ASSERT_TRUE(app);
- SetAppStateWaitingToDownload(app);
- EXPECT_SUCCEEDED(download_manager_->DownloadApp(app));
-
- package = app->next_version()->GetPackage(0);
- ASSERT_TRUE(package);
- EXPECT_STREQ(_T("UpdateData.bin"), package->filename());
- EXPECT_EQ(2048, package->expected_size());
- EXPECT_STREQ(kUpdateBinHash, package->expected_hash());
- EXPECT_EQ(2048, package->bytes_downloaded());
- EXPECT_TRUE(download_manager_->IsPackageAvailable(package));
-}
-
-// Creates two bundles with the same app. The package corresponding to the
-// app in the second bundle must come from the cache.
-TEST_F(DownloadManagerUserTest, DownloadApp_FileAlreadyInCache) {
- App* app = NULL;
- ASSERT_SUCCEEDED(app_bundle_->createApp(CComBSTR(kAppGuid1), &app));
- EXPECT_SUCCEEDED(app->put_displayName(CComBSTR(_T("App1"))));
- EXPECT_SUCCEEDED(app->put_isEulaAccepted(VARIANT_TRUE)); // Allow download.
-
- CStringA buffer_string =
-
- "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
- "<response protocol=\"3.0\">"
- "<app appid=\"{0B35E146-D9CB-4145-8A91-43FDCAEBCD1E}\" status=\"ok\">"
- "<updatecheck status=\"ok\">"
- "<urls>"
- "<url codebase=\"http://dl.google.com/update2/\"/>"
- "</urls>"
- "<manifest version=\"1.0\">"
- "<packages>"
- "<package "
- "hash=\"YF2z/br/S6E3KTca0MT7qziJN44=\" "
- "name=\"UpdateData.bin\" "
- "required=\"true\" "
- "size=\"2048\"/>"
- "</packages>"
- "</manifest>"
- "</updatecheck>"
- "</app>"
- "</response>";
-
- EXPECT_HRESULT_SUCCEEDED(LoadBundleFromXml(app_bundle_.get(), buffer_string));
- SetAppStateWaitingToDownload(app);
-
- EXPECT_SUCCEEDED(download_manager_->DownloadApp(app));
-
- // Tests the package and the bytes downloaded.
- const Package* package = app->next_version()->GetPackage(0);
- ASSERT_TRUE(package);
- EXPECT_STREQ(_T("UpdateData.bin"), package->filename());
- EXPECT_EQ(2048, package->expected_size());
- EXPECT_STREQ(kUpdateBinHash, package->expected_hash());
- EXPECT_EQ(2048, package->bytes_downloaded());
- EXPECT_TRUE(download_manager_->IsPackageAvailable(package));
-
- // Create the second app bundle.
- shared_ptr<AppBundle> app_bundle2(model_->CreateAppBundle(false));
- EXPECT_SUCCEEDED(app_bundle2->put_displayName(CComBSTR(_T("My Bundle"))));
- EXPECT_SUCCEEDED(app_bundle2->put_displayLanguage(CComBSTR(_T("en"))));
- EXPECT_SUCCEEDED(app_bundle2->initialize());
-
- app = NULL;
- ASSERT_SUCCEEDED(app_bundle2->createApp(CComBSTR(kAppGuid1), &app));
- EXPECT_SUCCEEDED(app->put_displayName(CComBSTR(_T("App1"))));
- // Since the package is cached, it does not matter if the EULA is accepted.
- EXPECT_SUCCEEDED(app->put_isEulaAccepted(VARIANT_FALSE));
-
- EXPECT_HRESULT_SUCCEEDED(LoadBundleFromXml(app_bundle2.get(), buffer_string));
- SetAppStateWaitingToDownload(app);
-
- EXPECT_SUCCEEDED(download_manager_->DownloadApp(app));
-
- // Tests the package and the bytes downloaded.
- package = app->next_version()->GetPackage(0);
- ASSERT_TRUE(package);
- EXPECT_STREQ(_T("UpdateData.bin"), package->filename());
- EXPECT_EQ(2048, package->expected_size());
- EXPECT_STREQ(kUpdateBinHash, package->expected_hash());
-
- // No bytes are downloaded if the package has been cached already.
- EXPECT_EQ(0, package->bytes_downloaded());
- EXPECT_TRUE(download_manager_->IsPackageAvailable(package));
-}
-
-TEST_F(DownloadManagerUserTest, DownloadApp_404) {
- App* app = NULL;
- ASSERT_SUCCEEDED(app_bundle_->createApp(CComBSTR(kAppGuid1), &app));
- EXPECT_SUCCEEDED(app->put_displayName(CComBSTR(_T("404 Test"))));
- EXPECT_SUCCEEDED(app->put_isEulaAccepted(VARIANT_TRUE)); // Allow download.
-
- CStringA buffer_string =
-
- "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
- "<response protocol=\"3.0\">"
- "<app appid=\"{0B35E146-D9CB-4145-8A91-43FDCAEBCD1E}\" status=\"ok\">"
- "<updatecheck status=\"ok\">"
- "<urls>"
- "<url codebase=\"http://dl.google.com/update2/\"/>"
- "</urls>"
- "<manifest version=\"1.0\">"
- "<packages>"
- "<package "
- "hash=\"YF2z/br/S6E3KTca0MT7qziJN44=\" "
- "name=\"NoSuchFile-OmahaTest.exe\" "
- "required=\"true\" "
- "size=\"2048\"/>"
- "</packages>"
- "</manifest>"
- "</updatecheck>"
- "</app>"
- "</response>";
-
- EXPECT_HRESULT_SUCCEEDED(LoadBundleFromXml(app_bundle_.get(), buffer_string));
- SetAppStateWaitingToDownload(app);
-
- EXPECT_EQ(GOOPDATE_E_NETWORK_FIRST + 404,
- download_manager_->DownloadApp(app));
-
- const Package* package = app->next_version()->GetPackage(0);
- ASSERT_TRUE(package);
- EXPECT_STREQ(_T("NoSuchFile-OmahaTest.exe"), package->filename());
- EXPECT_EQ(2048, package->expected_size());
- EXPECT_STREQ(kUpdateBinHash, package->expected_hash());
- EXPECT_EQ(0, package->bytes_downloaded());
- EXPECT_FALSE(download_manager_->IsPackageAvailable(package));
-}
-
-TEST_F(DownloadManagerUserTest, DownloadApp_HashFailure) {
- App* app = NULL;
- ASSERT_SUCCEEDED(app_bundle_->createApp(CComBSTR(kAppGuid1), &app));
- EXPECT_SUCCEEDED(app->put_displayName(CComBSTR(_T("Hash Fail"))));
- EXPECT_SUCCEEDED(app->put_isEulaAccepted(VARIANT_TRUE)); // Allow download.
-
- // Provides the wrong hash for the package.
- CStringA buffer_string =
-
- "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
- "<response protocol=\"3.0\">"
- "<app appid=\"{0B35E146-D9CB-4145-8A91-43FDCAEBCD1E}\" status=\"ok\">"
- "<updatecheck status=\"ok\">"
- "<urls>"
- "<url codebase=\"http://dl.google.com/update2/\"/>"
- "</urls>"
- "<manifest version=\"1.0\">"
- "<packages>"
- "<package "
- "hash=\"tbYInfmArVRUD62Ex292vN4LtGQ=\" "
- "name=\"UpdateData.bin\" "
- "required=\"true\" "
- "size=\"2048\"/>"
- "</packages>"
- "</manifest>"
- "</updatecheck>"
- "</app>"
- "</response>";
-
- EXPECT_HRESULT_SUCCEEDED(LoadBundleFromXml(app_bundle_.get(), buffer_string));
- SetAppStateWaitingToDownload(app);
-
- EXPECT_EQ(SIGS_E_INVALID_SIGNATURE,
- download_manager_->DownloadApp(app));
-
- const Package* package = app->next_version()->GetPackage(0);
- ASSERT_TRUE(package);
- EXPECT_STREQ(_T("UpdateData.bin"), package->filename());
- EXPECT_EQ(2048, package->expected_size());
- EXPECT_STREQ(kUpdateBin1Hash, package->expected_hash());
- EXPECT_EQ(2048, package->bytes_downloaded());
- EXPECT_FALSE(download_manager_->IsPackageAvailable(package));
-
- // All bytes were downloaded even if the validation of the file has failed.
- EXPECT_EQ(2048, package->bytes_downloaded());
-}
-
-TEST_F(DownloadManagerUserTest, DownloadApp_HashFailure_ActualSmaller) {
- App* app = NULL;
- ASSERT_SUCCEEDED(app_bundle_->createApp(CComBSTR(kAppGuid1), &app));
- EXPECT_SUCCEEDED(app->put_displayName(CComBSTR(_T("Hash Fail"))));
- EXPECT_SUCCEEDED(app->put_isEulaAccepted(VARIANT_TRUE)); // Allow download.
-
- // Provides the wrong hash for the package.
- CStringA buffer_string =
-
- "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
- "<response protocol=\"3.0\">"
- "<app appid=\"{0B35E146-D9CB-4145-8A91-43FDCAEBCD1E}\" status=\"ok\">"
- "<updatecheck status=\"ok\">"
- "<urls>"
- "<url codebase=\"http://dl.google.com/update2/\"/>"
- "</urls>"
- "<manifest version=\"1.0\">"
- "<packages>"
- "<package "
- "hash=\"tbYInfmArVRUD62Ex292vN4LtGQ=\" "
- "name=\"UpdateData.bin\" "
- "required=\"true\" "
- "size=\"2048000\"/>"
- "</packages>"
- "</manifest>"
- "</updatecheck>"
- "</app>"
- "</response>";
-
- EXPECT_HRESULT_SUCCEEDED(LoadBundleFromXml(app_bundle_.get(), buffer_string));
- SetAppStateWaitingToDownload(app);
-
- EXPECT_EQ(GOOPDATEDOWNLOAD_E_FILE_SIZE_SMALLER,
- download_manager_->DownloadApp(app));
-
- const Package* package = app->next_version()->GetPackage(0);
- ASSERT_TRUE(package);
- EXPECT_STREQ(_T("UpdateData.bin"), package->filename());
- EXPECT_EQ(2048000, package->expected_size());
- EXPECT_STREQ(kUpdateBin1Hash, package->expected_hash());
- EXPECT_EQ(2048, package->bytes_downloaded());
- EXPECT_FALSE(download_manager_->IsPackageAvailable(package));
-
- // Actual bytes were downloaded even if the validation of the file has failed.
- EXPECT_EQ(2048, package->bytes_downloaded());
-}
-
-TEST_F(DownloadManagerUserTest, DownloadApp_HashFailure_ActualLarger) {
- App* app = NULL;
- ASSERT_SUCCEEDED(app_bundle_->createApp(CComBSTR(kAppGuid1), &app));
- EXPECT_SUCCEEDED(app->put_displayName(CComBSTR(_T("Hash Fail"))));
- EXPECT_SUCCEEDED(app->put_isEulaAccepted(VARIANT_TRUE)); // Allow download.
-
- // Provides the wrong hash for the package.
- CStringA buffer_string =
-
- "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
- "<response protocol=\"3.0\">"
- "<app appid=\"{0B35E146-D9CB-4145-8A91-43FDCAEBCD1E}\" status=\"ok\">"
- "<updatecheck status=\"ok\">"
- "<urls>"
- "<url codebase=\"http://dl.google.com/update2/\"/>"
- "</urls>"
- "<manifest version=\"1.0\">"
- "<packages>"
- "<package "
- "hash=\"tbYInfmArVRUD62Ex292vN4LtGQ=\" "
- "name=\"UpdateData.bin\" "
- "required=\"true\" "
- "size=\"20\"/>"
- "</packages>"
- "</manifest>"
- "</updatecheck>"
- "</app>"
- "</response>";
-
- EXPECT_HRESULT_SUCCEEDED(LoadBundleFromXml(app_bundle_.get(), buffer_string));
- SetAppStateWaitingToDownload(app);
-
- EXPECT_EQ(GOOPDATEDOWNLOAD_E_FILE_SIZE_LARGER,
- download_manager_->DownloadApp(app));
-
- const Package* package = app->next_version()->GetPackage(0);
- ASSERT_TRUE(package);
- EXPECT_STREQ(_T("UpdateData.bin"), package->filename());
- EXPECT_EQ(20, package->expected_size());
- EXPECT_STREQ(kUpdateBin1Hash, package->expected_hash());
- EXPECT_EQ(2048, package->bytes_downloaded());
- EXPECT_FALSE(download_manager_->IsPackageAvailable(package));
-
- // Actual bytes were downloaded even if the validation of the file has failed
- // or expected a smaller file.
- EXPECT_EQ(2048, package->bytes_downloaded());
-}
-
-TEST_F(DownloadManagerUserTest, DownloadApp_BaseUrlFallback) {
- App* app = NULL;
- ASSERT_SUCCEEDED(app_bundle_->createApp(CComBSTR(kAppGuid1), &app));
- EXPECT_SUCCEEDED(app->put_displayName(CComBSTR(_T("Hash Fail"))));
- EXPECT_SUCCEEDED(app->put_isEulaAccepted(VARIANT_TRUE)); // Allow download.
-
- // Provides the wrong hash for the package.
- CStringA buffer_string =
-
- "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
- "<response protocol=\"3.0\">"
- "<app appid=\"{0B35E146-D9CB-4145-8A91-43FDCAEBCD1E}\" status=\"ok\">"
- "<updatecheck status=\"ok\">"
- "<urls>"
- "<url codebase=\"http://dl.google.com/update2/TEST_NOT_EXIST/\"/>"
- "<url codebase=\"http://dl.google.com/update2/\"/>"
- "</urls>"
- "<manifest version=\"1.0\">"
- "<packages>"
- "<package "
- "hash=\"YF2z/br/S6E3KTca0MT7qziJN44=\" "
- "name=\"UpdateData.bin\" "
- "required=\"true\" "
- "size=\"2048\"/>"
- "</packages>"
- "</manifest>"
- "</updatecheck>"
- "</app>"
- "</response>";
-
- EXPECT_HRESULT_SUCCEEDED(LoadBundleFromXml(app_bundle_.get(), buffer_string));
- SetAppStateWaitingToDownload(app);
-
- EXPECT_SUCCEEDED(download_manager_->DownloadApp(app));
- const Package* package = app->next_version()->GetPackage(0);
- ASSERT_TRUE(package);
- EXPECT_STREQ(_T("UpdateData.bin"), package->filename());
- EXPECT_EQ(2048, package->expected_size());
- EXPECT_STREQ(kUpdateBinHash, package->expected_hash());
- EXPECT_EQ(2048, package->bytes_downloaded());
- EXPECT_TRUE(download_manager_->IsPackageAvailable(package));
-}
-
-TEST_F(DownloadManagerUserTest, DownloadApp_FallbackToNextUrlIfCachingFails) {
- App* app = NULL;
- ASSERT_SUCCEEDED(app_bundle_->createApp(CComBSTR(kAppGuid1), &app));
- EXPECT_SUCCEEDED(
- app->put_displayName(CComBSTR(_T("Hash Fails For First Url"))));
- EXPECT_SUCCEEDED(app->put_isEulaAccepted(VARIANT_TRUE)); // Allow download.
-
- // First URL points to a corrupted file.
- CStringA buffer_string =
-
- "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
- "<response protocol=\"3.0\">"
- "<app appid=\"{0B35E146-D9CB-4145-8A91-43FDCAEBCD1E}\" status=\"ok\">"
- "<updatecheck status=\"ok\">"
- "<urls>"
- "<url codebase=\"http://dl.google.com/update2/test/fakedata/\"/>"
- "<url codebase=\"http://dl.google.com/update2/\"/>"
- "</urls>"
- "<manifest version=\"1.0\">"
- "<packages>"
- "<package "
- "hash=\"YF2z/br/S6E3KTca0MT7qziJN44=\" "
- "name=\"UpdateData.bin\" "
- "required=\"true\" "
- "size=\"2048\"/>"
- "</packages>"
- "</manifest>"
- "</updatecheck>"
- "</app>"
- "</response>";
-
- EXPECT_HRESULT_SUCCEEDED(LoadBundleFromXml(app_bundle_.get(), buffer_string));
- SetAppStateWaitingToDownload(app);
-
- EXPECT_SUCCEEDED(download_manager_->DownloadApp(app));
- const Package* package = app->next_version()->GetPackage(0);
- ASSERT_TRUE(package);
- EXPECT_STREQ(_T("UpdateData.bin"), package->filename());
- EXPECT_EQ(2048, package->expected_size());
- EXPECT_STREQ(kUpdateBinHash, package->expected_hash());
- EXPECT_EQ(2048, package->bytes_downloaded());
- EXPECT_TRUE(download_manager_->IsPackageAvailable(package));
-}
-
-TEST_F(DownloadManagerUserTest, DownloadApp_EulaNotAccepted) {
- App* app = NULL;
- ASSERT_SUCCEEDED(app_bundle_->createApp(CComBSTR(kAppGuid1), &app));
- EXPECT_SUCCEEDED(app->put_displayName(CComBSTR(_T("App1"))));
-
- EXPECT_SUCCEEDED(app->put_isEulaAccepted(VARIANT_FALSE));
-
- CStringA buffer_string =
-
- "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
- "<response protocol=\"3.0\">"
- "<app appid=\"{0B35E146-D9CB-4145-8A91-43FDCAEBCD1E}\" status=\"ok\">"
- "<updatecheck status=\"ok\">"
- "<urls>"
- "<url codebase=\"http://dl.google.com/update2/\"/>"
- "</urls>"
- "<manifest version=\"1.0\">"
- "<packages>"
- "<package "
- "hash=\"YF2z/br/S6E3KTca0MT7qziJN44=\" "
- "name=\"UpdateData.bin\" "
- "required=\"true\" "
- "size=\"2048\"/>"
- "</packages>"
- "</manifest>"
- "</updatecheck>"
- "</app>"
- "</response>";
-
- EXPECT_HRESULT_SUCCEEDED(LoadBundleFromXml(app_bundle_.get(), buffer_string));
- SetAppStateWaitingToDownload(app);
-
- ExpectAsserts expect_asserts; // Eula not accepted causes asserts.
-
- EXPECT_EQ(GOOPDATE_E_APP_UPDATE_DISABLED_EULA_NOT_ACCEPTED,
- download_manager_->DownloadApp(app));
-
- const Package* package = app->next_version()->GetPackage(0);
- ASSERT_TRUE(package);
- EXPECT_STREQ(_T("UpdateData.bin"), package->filename());
- EXPECT_EQ(2048, package->expected_size());
- EXPECT_STREQ(kUpdateBinHash, package->expected_hash());
- EXPECT_EQ(0, package->bytes_downloaded());
- EXPECT_FALSE(download_manager_->IsPackageAvailable(package));
-}
-
-TEST_F(DownloadManagerUserTest, GetPackage) {
- App* app = NULL;
- ASSERT_SUCCEEDED(app_bundle_->createApp(CComBSTR(kAppGuid1), &app));
- EXPECT_SUCCEEDED(app->put_displayName(CComBSTR(_T("App1"))));
- EXPECT_SUCCEEDED(app->put_isEulaAccepted(VARIANT_TRUE)); // Allow download.
-
- // One app, one package.
- CStringA buffer_string =
-
- "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
- "<response protocol=\"3.0\">"
- "<app appid=\"{0B35E146-D9CB-4145-8A91-43FDCAEBCD1E}\" status=\"ok\">"
- "<updatecheck status=\"ok\">"
- "<urls>"
- "<url codebase=\"http://dl.google.com/update2/\"/>"
- "</urls>"
- "<manifest version=\"1.0\">"
- "<packages>"
- "<package "
- "hash=\"YF2z/br/S6E3KTca0MT7qziJN44=\" "
- "name=\"UpdateData.bin\" "
- "required=\"true\" "
- "size=\"2048\"/>"
- "</packages>"
- "</manifest>"
- "</updatecheck>"
- "</app>"
- "</response>";
-
- EXPECT_HRESULT_SUCCEEDED(LoadBundleFromXml(app_bundle_.get(), buffer_string));
- SetAppStateWaitingToDownload(app);
-
- const Package* package = app->next_version()->GetPackage(0);
- ASSERT_TRUE(package);
-
- EXPECT_FALSE(download_manager_->IsPackageAvailable(package));
- EXPECT_SUCCEEDED(download_manager_->DownloadApp(app));
- EXPECT_TRUE(download_manager_->IsPackageAvailable(package));
-
- // Get a unique temp dir name. The directory is not created.
- CString dir(GetUniqueTempDirectoryName());
-
- // The call fails if the package destination directory does not exist.
- EXPECT_FAILED(download_manager_->GetPackage(package, dir));
-
- EXPECT_SUCCEEDED(CreateDir(dir, NULL));
- EXPECT_SUCCEEDED(download_manager_->GetPackage(package, dir));
-
- CString filename(ConcatenatePath(dir, package->filename()));
- std::vector<CString> files;
- files.push_back(filename);
- EXPECT_SUCCEEDED(AuthenticateFiles(files, kUpdateBinHash));
-
- // Getting the package the second time overwrites the destination file
- // and succeeds.
- EXPECT_SUCCEEDED(download_manager_->GetPackage(package, dir));
-
- EXPECT_SUCCEEDED(DeleteDirectory(dir));
-}
-
-TEST_F(DownloadManagerUserTest, GetPackage_NotPresent) {
- App* app = NULL;
- ASSERT_SUCCEEDED(app_bundle_->createApp(CComBSTR(kAppGuid1), &app));
- EXPECT_SUCCEEDED(app->put_displayName(CComBSTR(_T("App1"))));
-
- // One app, one package.
- CStringA buffer_string =
-
- "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
- "<response protocol=\"3.0\">"
- "<app appid=\"{0B35E146-D9CB-4145-8A91-43FDCAEBCD1E}\" status=\"ok\">"
- "<updatecheck status=\"ok\">"
- "<urls>"
- "<url codebase=\"http://dl.google.com/update2/\"/>"
- "</urls>"
- "<manifest version=\"1.0\">"
- "<packages>"
- "<package "
- "hash=\"YF2z/br/S6E3KTca0MT7qziJN44=\" "
- "name=\"UpdateData.bin\" "
- "required=\"true\" "
- "size=\"2048\"/>"
- "</packages>"
- "</manifest>"
- "</updatecheck>"
- "</app>"
- "</response>";
-
- EXPECT_HRESULT_SUCCEEDED(LoadBundleFromXml(app_bundle_.get(), buffer_string));
- SetAppStateWaitingToDownload(app);
-
- const Package* package = app->next_version()->GetPackage(0);
- ASSERT_TRUE(package);
-
- EXPECT_FALSE(download_manager_->IsPackageAvailable(package));
-
- // Get a unique temp dir name. The directory is not created.
- CString dir(GetUniqueTempDirectoryName());
-
- EXPECT_SUCCEEDED(CreateDir(dir, NULL));
- EXPECT_EQ(HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND),
- download_manager_->GetPackage(package, dir));
-
- EXPECT_SUCCEEDED(DeleteDirectory(dir));
-}
-
-TEST(DownloadManagerTest, BuildUniqueFileName) {
- CString file1, file2;
- EXPECT_SUCCEEDED(DownloadManagerTest::BuildUniqueFileName(_T("a"), &file1));
- EXPECT_SUCCEEDED(DownloadManagerTest::BuildUniqueFileName(_T("a"), &file2));
- EXPECT_STRNE(file1, file2);
-}
-
-TEST(DownloadManagerTest, GetMessageForError) {
- const TCHAR* kEnglish = _T("en");
- EXPECT_SUCCEEDED(ResourceManager::Create(
- true, app_util::GetCurrentModuleDirectory(), kEnglish));
-
- EXPECT_STREQ(
- _T("The installer could not connect to the Internet. Ensure that your ")
- _T("computer is connected to the Internet and your firewall allows ")
- _T("GoogleUpdate.exe to connect then try again."),
- DownloadManager::GetMessageForError(
- ErrorContext(GOOPDATE_E_NO_NETWORK), kEnglish));
-
- EXPECT_STREQ(
- _T("The installer could not connect to the Internet because of ")
- _T("an HTTP 401 Unauthorized response. This is likely a proxy ")
- _T("configuration issue. Please configure the proxy server to allow ")
- _T("network access and try again or contact your network administrator."),
- DownloadManager::GetMessageForError(
- ErrorContext(GOOPDATE_E_NETWORK_UNAUTHORIZED), kEnglish));
-
- EXPECT_STREQ(
- _T("The installer could not connect to the Internet because of ")
- _T("an HTTP 403 Forbidden response. This is likely a proxy ")
- _T("configuration issue. Please configure the proxy server to allow ")
- _T("network access and try again or contact your network administrator."),
- DownloadManager::GetMessageForError(
- ErrorContext(GOOPDATE_E_NETWORK_FORBIDDEN), kEnglish));
-
- EXPECT_STREQ(
- _T("The installer could not connect to the Internet because a ")
- _T("proxy server required user authentication. Please configure the ")
- _T("proxy server to allow network access and try again or contact your ")
- _T("network administrator."),
- DownloadManager::GetMessageForError(
- ErrorContext(GOOPDATE_E_NETWORK_PROXYAUTHREQUIRED),
- kEnglish));
-
- EXPECT_STREQ(
- _T("The download failed."),
- DownloadManager::GetMessageForError(ErrorContext(E_FAIL), kEnglish));
-
- EXPECT_STREQ(
- _T("Failed to cache the downloaded installer. Error: 0x80070005."),
- DownloadManager::GetMessageForError(
- ErrorContext(GOOPDATEDOWNLOAD_E_CACHING_FAILED, 0x80070005),
- kEnglish));
-
- ResourceManager::Delete();
-}
-
-} // namespace omaha
« no previous file with comments | « goopdate/download_manager.cc ('k') | goopdate/elevation_moniker_resource.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698