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

Side by Side Diff: chrome/browser/extensions/updater/extension_updater_unittest.cc

Issue 135473004: Add unittest that tests behavior when downloading a crx fails. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <list> 5 #include <list>
6 #include <map> 6 #include <map>
7 #include <set> 7 #include <set>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
63 #if defined(OS_CHROMEOS) 63 #if defined(OS_CHROMEOS)
64 #include "chrome/browser/chromeos/login/user_manager.h" 64 #include "chrome/browser/chromeos/login/user_manager.h"
65 #include "chrome/browser/chromeos/settings/cros_settings.h" 65 #include "chrome/browser/chromeos/settings/cros_settings.h"
66 #include "chrome/browser/chromeos/settings/device_settings_service.h" 66 #include "chrome/browser/chromeos/settings/device_settings_service.h"
67 #endif 67 #endif
68 68
69 using base::Time; 69 using base::Time;
70 using base::TimeDelta; 70 using base::TimeDelta;
71 using content::BrowserThread; 71 using content::BrowserThread;
72 using testing::DoAll; 72 using testing::DoAll;
73 using testing::Invoke;
73 using testing::InvokeWithoutArgs; 74 using testing::InvokeWithoutArgs;
74 using testing::Mock; 75 using testing::Mock;
75 using testing::Return; 76 using testing::Return;
76 using testing::SetArgPointee; 77 using testing::SetArgPointee;
77 using testing::_; 78 using testing::_;
78 79
79 namespace extensions { 80 namespace extensions {
80 81
81 typedef ExtensionDownloaderDelegate::Error Error; 82 typedef ExtensionDownloaderDelegate::Error Error;
82 typedef ExtensionDownloaderDelegate::PingResult PingResult; 83 typedef ExtensionDownloaderDelegate::PingResult PingResult;
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
144 new content::MessageLoopRunner; 145 new content::MessageLoopRunner;
145 quit_closure_ = runner->QuitClosure(); 146 quit_closure_ = runner->QuitClosure();
146 runner->Run(); 147 runner->Run();
147 quit_closure_.Reset(); 148 quit_closure_.Reset();
148 } 149 }
149 150
150 void Quit() { 151 void Quit() {
151 quit_closure_.Run(); 152 quit_closure_.Run();
152 } 153 }
153 154
155 void DelegateTo(ExtensionDownloaderDelegate* delegate) {
156 ON_CALL(*this, OnExtensionDownloadFailed(_, _, _, _))
157 .WillByDefault(Invoke(delegate,
158 &ExtensionDownloaderDelegate::OnExtensionDownloadFailed));
159 ON_CALL(*this, OnExtensionDownloadFinished(_, _, _, _, _, _, _))
160 .WillByDefault(Invoke(delegate,
161 &ExtensionDownloaderDelegate::OnExtensionDownloadFinished));
162 ON_CALL(*this, GetPingDataForExtension(_, _))
163 .WillByDefault(Invoke(delegate,
164 &ExtensionDownloaderDelegate::GetPingDataForExtension));
165 ON_CALL(*this, GetUpdateUrlData(_))
166 .WillByDefault(Invoke(delegate,
167 &ExtensionDownloaderDelegate::GetUpdateUrlData));
168 ON_CALL(*this, IsExtensionPending(_))
169 .WillByDefault(Invoke(delegate,
170 &ExtensionDownloaderDelegate::IsExtensionPending));
171 ON_CALL(*this, GetExtensionExistingVersion(_, _))
172 .WillByDefault(Invoke(delegate,
173 &ExtensionDownloaderDelegate::GetExtensionExistingVersion));
asargent_no_longer_on_chrome 2014/02/01 00:55:05 ZOMG gtest
174 }
175
154 private: 176 private:
155 base::Closure quit_closure_; 177 base::Closure quit_closure_;
156 }; 178 };
157 179
158 const int kNotificationsObserved[] = { 180 const int kNotificationsObserved[] = {
159 chrome::NOTIFICATION_EXTENSION_UPDATING_STARTED, 181 chrome::NOTIFICATION_EXTENSION_UPDATING_STARTED,
160 chrome::NOTIFICATION_EXTENSION_UPDATE_FOUND, 182 chrome::NOTIFICATION_EXTENSION_UPDATE_FOUND,
161 }; 183 };
162 184
163 // A class that observes the notifications sent by the ExtensionUpdater and 185 // A class that observes the notifications sent by the ExtensionUpdater and
(...skipping 795 matching lines...) Expand 10 before | Expand all | Expand 10 after
959 EXPECT_TRUE(fetcher->GetLoadFlags() == kExpectedLoadFlags); 981 EXPECT_TRUE(fetcher->GetLoadFlags() == kExpectedLoadFlags);
960 fetcher->set_url(kUpdateUrl); 982 fetcher->set_url(kUpdateUrl);
961 fetcher->set_status(net::URLRequestStatus()); 983 fetcher->set_status(net::URLRequestStatus());
962 fetcher->set_response_code(400); 984 fetcher->set_response_code(400);
963 fetcher->delegate()->OnURLFetchComplete(fetcher); 985 fetcher->delegate()->OnURLFetchComplete(fetcher);
964 RunUntilIdle(); 986 RunUntilIdle();
965 987
966 Mock::VerifyAndClearExpectations(&delegate); 988 Mock::VerifyAndClearExpectations(&delegate);
967 } 989 }
968 990
969 void TestSingleExtensionDownloading(bool pending, bool retry) { 991 void TestSingleExtensionDownloading(bool pending, bool retry, bool fail) {
970 net::TestURLFetcherFactory factory; 992 net::TestURLFetcherFactory factory;
971 net::TestURLFetcher* fetcher = NULL; 993 net::TestURLFetcher* fetcher = NULL;
972 scoped_ptr<ServiceForDownloadTests> service( 994 scoped_ptr<ServiceForDownloadTests> service(
973 new ServiceForDownloadTests(prefs_.get())); 995 new ServiceForDownloadTests(prefs_.get()));
974 ExtensionUpdater updater(service.get(), service->extension_prefs(), 996 ExtensionUpdater updater(service.get(), service->extension_prefs(),
975 service->pref_service(), 997 service->pref_service(),
976 service->profile(), 998 service->profile(),
977 kUpdateFrequencySecs, 999 kUpdateFrequencySecs,
978 NULL); 1000 NULL);
979 updater.Start(); 1001 updater.Start();
1002 MockExtensionDownloaderDelegate delegate;
1003 delegate.DelegateTo(&updater);
980 ResetDownloader( 1004 ResetDownloader(
981 &updater, 1005 &updater,
982 new ExtensionDownloader(&updater, service->request_context())); 1006 new ExtensionDownloader(&delegate, service->request_context()));
983 updater.downloader_->extensions_queue_.set_backoff_policy( 1007 updater.downloader_->extensions_queue_.set_backoff_policy(
984 &kNoBackoffPolicy); 1008 &kNoBackoffPolicy);
985 1009
986 GURL test_url("http://localhost/extension.crx"); 1010 GURL test_url("http://localhost/extension.crx");
987 1011
988 std::string id = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; 1012 std::string id = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
989 std::string hash; 1013 std::string hash;
990 Version version("0.0.1"); 1014 Version version("0.0.1");
991 std::set<int> requests; 1015 std::set<int> requests;
992 requests.insert(0); 1016 requests.insert(0);
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
1025 1049
1026 RunUntilIdle(); 1050 RunUntilIdle();
1027 fetcher = factory.GetFetcherByID( 1051 fetcher = factory.GetFetcherByID(
1028 ExtensionDownloader::kExtensionFetcherId); 1052 ExtensionDownloader::kExtensionFetcherId);
1029 EXPECT_TRUE(fetcher != NULL && fetcher->delegate() != NULL); 1053 EXPECT_TRUE(fetcher != NULL && fetcher->delegate() != NULL);
1030 EXPECT_TRUE(fetcher->GetLoadFlags() == kExpectedLoadFlags); 1054 EXPECT_TRUE(fetcher->GetLoadFlags() == kExpectedLoadFlags);
1031 } 1055 }
1032 1056
1033 fetcher->set_url(test_url); 1057 fetcher->set_url(test_url);
1034 fetcher->set_status(net::URLRequestStatus()); 1058 fetcher->set_status(net::URLRequestStatus());
1035 fetcher->set_response_code(200); 1059 if (fail) {
1036 fetcher->SetResponseFilePath(extension_file_path); 1060 fetcher->set_response_code(404);
1061 EXPECT_CALL(delegate, OnExtensionDownloadFailed(id, _, _, requests));
1062 } else {
1063 fetcher->set_response_code(200);
1064 fetcher->SetResponseFilePath(extension_file_path);
1065 EXPECT_CALL(delegate, OnExtensionDownloadFinished(
1066 id, _, _, _, version.GetString(), _, requests));
1067 }
1037 fetcher->delegate()->OnURLFetchComplete(fetcher); 1068 fetcher->delegate()->OnURLFetchComplete(fetcher);
1038 1069
1039 RunUntilIdle(); 1070 RunUntilIdle();
1040 1071
1041 // Expect that ExtensionUpdater asked the mock extensions service to install 1072 if (fail) {
1042 // a file with the test data for the right id. 1073 // Don't expect any extension to have been installed.
1043 EXPECT_EQ(id, service->extension_id()); 1074 EXPECT_TRUE(service->extension_id().empty());
1044 base::FilePath tmpfile_path = service->install_path(); 1075 } else {
1045 EXPECT_FALSE(tmpfile_path.empty()); 1076 // Expect that ExtensionUpdater asked the mock extensions service to
1046 EXPECT_EQ(test_url, service->download_url()); 1077 // install a file with the test data for the right id.
1047 EXPECT_EQ(extension_file_path, tmpfile_path); 1078 EXPECT_EQ(id, service->extension_id());
1079 base::FilePath tmpfile_path = service->install_path();
1080 EXPECT_FALSE(tmpfile_path.empty());
1081 EXPECT_EQ(test_url, service->download_url());
1082 EXPECT_EQ(extension_file_path, tmpfile_path);
1083 }
1048 } 1084 }
1049 1085
1050 // Two extensions are updated. If |updates_start_running| is true, the 1086 // Two extensions are updated. If |updates_start_running| is true, the
1051 // mock extensions service has UpdateExtension(...) return true, and 1087 // mock extensions service has UpdateExtension(...) return true, and
1052 // the test is responsible for creating fake CrxInstallers. Otherwise, 1088 // the test is responsible for creating fake CrxInstallers. Otherwise,
1053 // UpdateExtension() returns false, signaling install failures. 1089 // UpdateExtension() returns false, signaling install failures.
1054 void TestMultipleExtensionDownloading(bool updates_start_running) { 1090 void TestMultipleExtensionDownloading(bool updates_start_running) {
1055 net::TestURLFetcherFactory factory; 1091 net::TestURLFetcherFactory factory;
1056 net::TestURLFetcher* fetcher = NULL; 1092 net::TestURLFetcher* fetcher = NULL;
1057 ServiceForDownloadTests service(prefs_.get()); 1093 ServiceForDownloadTests service(prefs_.get());
(...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after
1432 1468
1433 TEST_F(ExtensionUpdaterTest, TestDetermineUpdatesPending) { 1469 TEST_F(ExtensionUpdaterTest, TestDetermineUpdatesPending) {
1434 TestDetermineUpdatesPending(); 1470 TestDetermineUpdatesPending();
1435 } 1471 }
1436 1472
1437 TEST_F(ExtensionUpdaterTest, TestMultipleManifestDownloading) { 1473 TEST_F(ExtensionUpdaterTest, TestMultipleManifestDownloading) {
1438 TestMultipleManifestDownloading(); 1474 TestMultipleManifestDownloading();
1439 } 1475 }
1440 1476
1441 TEST_F(ExtensionUpdaterTest, TestSingleExtensionDownloading) { 1477 TEST_F(ExtensionUpdaterTest, TestSingleExtensionDownloading) {
1442 TestSingleExtensionDownloading(false, false); 1478 TestSingleExtensionDownloading(false, false, false);
1443 } 1479 }
1444 1480
1445 TEST_F(ExtensionUpdaterTest, TestSingleExtensionDownloadingPending) { 1481 TEST_F(ExtensionUpdaterTest, TestSingleExtensionDownloadingPending) {
1446 TestSingleExtensionDownloading(true, false); 1482 TestSingleExtensionDownloading(true, false, false);
1447 } 1483 }
1448 1484
1449 TEST_F(ExtensionUpdaterTest, TestSingleExtensionDownloadingWithRetry) { 1485 TEST_F(ExtensionUpdaterTest, TestSingleExtensionDownloadingWithRetry) {
1450 TestSingleExtensionDownloading(false, true); 1486 TestSingleExtensionDownloading(false, true, false);
1451 } 1487 }
1452 1488
1453 TEST_F(ExtensionUpdaterTest, TestSingleExtensionDownloadingPendingWithRetry) { 1489 TEST_F(ExtensionUpdaterTest, TestSingleExtensionDownloadingPendingWithRetry) {
1454 TestSingleExtensionDownloading(true, true); 1490 TestSingleExtensionDownloading(true, true, false);
1491 }
1492
1493 TEST_F(ExtensionUpdaterTest, TestSingleExtensionDownloadingFailure) {
1494 TestSingleExtensionDownloading(false, false, true);
1495 }
1496
1497 TEST_F(ExtensionUpdaterTest, TestSingleExtensionDownloadingFailureWithRetry) {
1498 TestSingleExtensionDownloading(false, true, true);
1499 }
1500
1501 TEST_F(ExtensionUpdaterTest, TestSingleExtensionDownloadingFailurePending) {
1502 TestSingleExtensionDownloading(true, false, true);
1455 } 1503 }
1456 1504
1457 TEST_F(ExtensionUpdaterTest, TestMultipleExtensionDownloadingUpdatesFail) { 1505 TEST_F(ExtensionUpdaterTest, TestMultipleExtensionDownloadingUpdatesFail) {
1458 TestMultipleExtensionDownloading(false); 1506 TestMultipleExtensionDownloading(false);
1459 } 1507 }
1460 TEST_F(ExtensionUpdaterTest, TestMultipleExtensionDownloadingUpdatesSucceed) { 1508 TEST_F(ExtensionUpdaterTest, TestMultipleExtensionDownloadingUpdatesSucceed) {
1461 TestMultipleExtensionDownloading(true); 1509 TestMultipleExtensionDownloading(true);
1462 } 1510 }
1463 1511
1464 TEST_F(ExtensionUpdaterTest, TestManifestRetryDownloading) { 1512 TEST_F(ExtensionUpdaterTest, TestManifestRetryDownloading) {
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
1640 // -prodversionmin (shouldn't update if browser version too old) 1688 // -prodversionmin (shouldn't update if browser version too old)
1641 // -manifests & updates arriving out of order / interleaved 1689 // -manifests & updates arriving out of order / interleaved
1642 // -malformed update url (empty, file://, has query, has a # fragment, etc.) 1690 // -malformed update url (empty, file://, has query, has a # fragment, etc.)
1643 // -An extension gets uninstalled while updates are in progress (so it doesn't 1691 // -An extension gets uninstalled while updates are in progress (so it doesn't
1644 // "come back from the dead") 1692 // "come back from the dead")
1645 // -An extension gets manually updated to v3 while we're downloading v2 (ie 1693 // -An extension gets manually updated to v3 while we're downloading v2 (ie
1646 // you don't get downgraded accidentally) 1694 // you don't get downgraded accidentally)
1647 // -An update manifest mentions multiple updates 1695 // -An update manifest mentions multiple updates
1648 1696
1649 } // namespace extensions 1697 } // namespace extensions
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698