Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 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 #import "ios/chrome/browser/omaha/omaha_service.h" | 5 #import "ios/chrome/browser/omaha/omaha_service.h" |
| 6 | 6 |
| 7 #include <regex.h> | 7 #include <regex.h> |
| 8 #include <sys/types.h> | 8 #include <sys/types.h> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| 11 #include "base/logging.h" | 11 #include "base/logging.h" |
| 12 #include "base/message_loop/message_loop.h" | |
| 13 #include "base/run_loop.h" | 12 #include "base/run_loop.h" |
| 14 #include "base/strings/stringprintf.h" | 13 #include "base/strings/stringprintf.h" |
| 15 #include "components/metrics/metrics_pref_names.h" | 14 #include "components/metrics/metrics_pref_names.h" |
| 16 #include "components/prefs/pref_registry_simple.h" | 15 #include "components/prefs/pref_registry_simple.h" |
| 17 #include "components/version_info/version_info.h" | 16 #include "components/version_info/version_info.h" |
| 18 #include "ios/chrome/browser/application_context.h" | 17 #include "ios/chrome/browser/application_context.h" |
| 19 #include "ios/chrome/browser/browser_state/test_chrome_browser_state_manager.h" | 18 #include "ios/chrome/browser/browser_state/test_chrome_browser_state_manager.h" |
| 20 #include "ios/chrome/browser/install_time_util.h" | 19 #include "ios/chrome/browser/install_time_util.h" |
| 21 #include "ios/chrome/common/channel_info.h" | 20 #include "ios/chrome/common/channel_info.h" |
| 22 #include "ios/chrome/test/testing_application_context.h" | 21 #include "ios/chrome/test/ios_chrome_scoped_testing_chrome_browser_state_manager .h" |
| 23 #include "ios/public/provider/chrome/browser/chrome_browser_provider.h" | 22 #include "ios/public/provider/chrome/browser/chrome_browser_provider.h" |
| 24 #include "ios/public/provider/chrome/browser/omaha/omaha_service_provider.h" | 23 #include "ios/public/provider/chrome/browser/omaha/omaha_service_provider.h" |
| 25 #include "ios/web/public/test/test_web_thread.h" | 24 #include "ios/web/public/test/test_web_thread_bundle.h" |
| 25 #include "ios/web/public/web_thread.h" | |
| 26 #include "net/url_request/test_url_fetcher_factory.h" | 26 #include "net/url_request/test_url_fetcher_factory.h" |
| 27 #include "testing/gtest/include/gtest/gtest.h" | 27 #include "testing/gtest/include/gtest/gtest.h" |
| 28 #include "testing/gtest_mac.h" | 28 #include "testing/gtest_mac.h" |
| 29 #include "testing/platform_test.h" | 29 #include "testing/platform_test.h" |
| 30 | 30 |
| 31 namespace { | 31 namespace { |
| 32 | 32 |
| 33 const char kUserDataDir[] = "."; | 33 const char kUserDataDir[] = FILE_PATH_LITERAL("."); |
| 34 | 34 |
| 35 } // namespace | 35 } // namespace |
| 36 | 36 |
| 37 class OmahaServiceTest : public PlatformTest { | 37 class OmahaServiceTest : public PlatformTest { |
| 38 public: | 38 public: |
| 39 OmahaServiceTest() | 39 OmahaServiceTest() |
| 40 : need_update_(false), | 40 : need_update_(false), |
| 41 loop_(base::MessageLoop::TYPE_IO), | 41 scoped_browser_state_manager_( |
| 42 browser_state_manager_(base::FilePath(kUserDataDir)), | 42 base::MakeUnique<TestChromeBrowserStateManager>( |
| 43 ui_thread_(web::WebThread::UI, &loop_), | 43 base::FilePath(kUserDataDir))) { |
| 44 io_thread_(web::WebThread::IO, &loop_) { | |
| 45 GetApplicationContext()->GetLocalState()->SetInt64( | 44 GetApplicationContext()->GetLocalState()->SetInt64( |
| 46 metrics::prefs::kInstallDate, install_time_util::kUnknownInstallDate); | 45 metrics::prefs::kInstallDate, install_time_util::kUnknownInstallDate); |
| 47 OmahaService::ClearPersistentStateForTests(); | 46 OmahaService::ClearPersistentStateForTests(); |
| 48 test_application_id_ = ios::GetChromeBrowserProvider() | |
| 49 ->GetOmahaServiceProvider() | |
| 50 ->GetApplicationID(); | |
| 51 } | 47 } |
| 52 | 48 |
| 53 ~OmahaServiceTest() override {} | |
| 54 | |
| 55 void OnNeedUpdate(const UpgradeRecommendedDetails& details) { | 49 void OnNeedUpdate(const UpgradeRecommendedDetails& details) { |
| 56 need_update_ = true; | 50 need_update_ = true; |
| 57 } | 51 } |
| 58 | 52 |
| 59 bool NeedUpdate() { | 53 bool NeedUpdate() { |
| 60 DCHECK_CURRENTLY_ON(web::WebThread::UI); | 54 DCHECK_CURRENTLY_ON(web::WebThread::UI); |
| 61 if (!need_update_) { | 55 if (!need_update_) { |
| 62 base::RunLoop().RunUntilIdle(); | 56 base::RunLoop().RunUntilIdle(); |
| 63 } | 57 } |
| 64 return need_update_; | 58 return need_update_; |
| 65 } | 59 } |
| 66 | 60 |
| 67 void CleanService(OmahaService* service, | 61 void CleanService(OmahaService* service, |
| 68 const std::string& last_sent_version) { | 62 const std::string& last_sent_version) { |
| 69 service->ClearInstallRetryRequestId(); | 63 service->ClearInstallRetryRequestId(); |
| 70 service->number_of_tries_ = 0; | 64 service->number_of_tries_ = 0; |
| 71 if (last_sent_version.length() == 0) | 65 if (last_sent_version.length() == 0) |
| 72 service->last_sent_version_ = base::Version("0.0.0.0"); | 66 service->last_sent_version_ = base::Version("0.0.0.0"); |
| 73 else | 67 else |
| 74 service->last_sent_version_ = base::Version(last_sent_version); | 68 service->last_sent_version_ = base::Version(last_sent_version); |
| 75 service->current_ping_time_ = base::Time(); | 69 service->current_ping_time_ = base::Time(); |
| 76 service->last_sent_time_ = base::Time(); | 70 service->last_sent_time_ = base::Time(); |
| 77 service->locale_lang_ = std::string(); | 71 service->locale_lang_ = std::string(); |
| 78 } | 72 } |
| 79 | 73 |
| 80 protected: | 74 std::string test_application_id() const { |
| 81 std::string test_application_id_; | 75 return ios::GetChromeBrowserProvider() |
| 82 bool need_update_; | 76 ->GetOmahaServiceProvider() |
| 83 base::MessageLoop loop_; | 77 ->GetApplicationID(); |
| 84 TestChromeBrowserStateManager browser_state_manager_; | 78 } |
| 85 | 79 |
| 86 private: | 80 private: |
| 87 web::TestWebThread ui_thread_; | 81 bool need_update_; |
| 88 web::TestWebThread io_thread_; | 82 IOSChromeScopedTestingChromeBrowserStateManager scoped_browser_state_manager_; |
| 83 web::TestWebThreadBundle thread_bundle_; | |
|
sdefresne
2017/01/10 14:27:25
Using web::TestWebThreadBundle is better than usin
| |
| 84 | |
| 85 DISALLOW_COPY_AND_ASSIGN(OmahaServiceTest); | |
| 89 }; | 86 }; |
| 90 | 87 |
| 91 TEST_F(OmahaServiceTest, PingMessageTest) { | 88 TEST_F(OmahaServiceTest, PingMessageTest) { |
| 92 const char* expectedResult = | 89 const char* expectedResult = |
| 93 "<request protocol=\"3.0\" version=\"iOS-1.0.0.0\" ismachine=\"1\" " | 90 "<request protocol=\"3.0\" version=\"iOS-1.0.0.0\" ismachine=\"1\" " |
| 94 "requestid=\"requestId\" sessionid=\"sessionId\"" | 91 "requestid=\"requestId\" sessionid=\"sessionId\"" |
| 95 " hardware_class=\"[^\"]*\">" | 92 " hardware_class=\"[^\"]*\">" |
| 96 "<os platform=\"ios\" version=\"[0-9][0-9]*\\(\\.[0-9][0-9]*\\)*\"" | 93 "<os platform=\"ios\" version=\"[0-9][0-9]*\\(\\.[0-9][0-9]*\\)*\"" |
| 97 " arch=\"[^\"]*\"/>" | 94 " arch=\"[^\"]*\"/>" |
| 98 "<app version=\"[^\"]*\" nextversion=\"\" lang=\"[^\"]*\"" | 95 "<app version=\"[^\"]*\" nextversion=\"\" lang=\"[^\"]*\"" |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 206 | 203 |
| 207 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); | 204 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
| 208 DCHECK(fetcher); | 205 DCHECK(fetcher); |
| 209 DCHECK(fetcher->delegate()); | 206 DCHECK(fetcher->delegate()); |
| 210 fetcher->set_status(net::URLRequestStatus()); | 207 fetcher->set_status(net::URLRequestStatus()); |
| 211 fetcher->set_response_code(200); | 208 fetcher->set_response_code(200); |
| 212 std::string response = | 209 std::string response = |
| 213 std::string( | 210 std::string( |
| 214 "<?xml version=\"1.0\"?><response protocol=\"3.0\" server=\"prod\">" | 211 "<?xml version=\"1.0\"?><response protocol=\"3.0\" server=\"prod\">" |
| 215 "<daystart elapsed_seconds=\"56754\"/><app appid=\"") + | 212 "<daystart elapsed_seconds=\"56754\"/><app appid=\"") + |
| 216 test_application_id_ + | 213 test_application_id() + |
| 217 "\" status=\"ok\">" | 214 "\" status=\"ok\">" |
| 218 "<updatecheck status=\"noupdate\"/><ping status=\"ok\"/>" | 215 "<updatecheck status=\"noupdate\"/><ping status=\"ok\"/>" |
| 219 "</app></response>"; | 216 "</app></response>"; |
| 220 fetcher->SetResponseString(response); | 217 fetcher->SetResponseString(response); |
| 221 fetcher->delegate()->OnURLFetchComplete(fetcher); | 218 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 222 | 219 |
| 223 EXPECT_EQ(0, service.number_of_tries_); | 220 EXPECT_EQ(0, service.number_of_tries_); |
| 224 EXPECT_FALSE(service.current_ping_time_.is_null()); | 221 EXPECT_FALSE(service.current_ping_time_.is_null()); |
| 225 EXPECT_EQ(service.current_ping_time_, service.next_tries_time_); | 222 EXPECT_EQ(service.current_ping_time_, service.next_tries_time_); |
| 226 EXPECT_GT(service.last_sent_time_, now); | 223 EXPECT_GT(service.last_sent_time_, now); |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 243 | 240 |
| 244 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); | 241 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
| 245 DCHECK(fetcher); | 242 DCHECK(fetcher); |
| 246 DCHECK(fetcher->delegate()); | 243 DCHECK(fetcher->delegate()); |
| 247 fetcher->set_status(net::URLRequestStatus()); | 244 fetcher->set_status(net::URLRequestStatus()); |
| 248 fetcher->set_response_code(200); | 245 fetcher->set_response_code(200); |
| 249 std::string response = | 246 std::string response = |
| 250 std::string( | 247 std::string( |
| 251 "<?xml version=\"1.0\"?><response protocol=\"3.0\" server=\"prod\">" | 248 "<?xml version=\"1.0\"?><response protocol=\"3.0\" server=\"prod\">" |
| 252 "<daystart elapsed_seconds=\"56754\"/><app appid=\"") + | 249 "<daystart elapsed_seconds=\"56754\"/><app appid=\"") + |
| 253 test_application_id_ + | 250 test_application_id() + |
| 254 "\" status=\"ok\">" | 251 "\" status=\"ok\">" |
| 255 "<event status=\"ok\"/>" | 252 "<event status=\"ok\"/>" |
| 256 "</app></response>"; | 253 "</app></response>"; |
| 257 fetcher->SetResponseString(response); | 254 fetcher->SetResponseString(response); |
| 258 fetcher->delegate()->OnURLFetchComplete(fetcher); | 255 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 259 | 256 |
| 260 EXPECT_FALSE(service.current_ping_time_.is_null()); | 257 EXPECT_FALSE(service.current_ping_time_.is_null()); |
| 261 EXPECT_GT(service.last_sent_time_, now); | 258 EXPECT_GT(service.last_sent_time_, now); |
| 262 EXPECT_FALSE(NeedUpdate()); | 259 EXPECT_FALSE(NeedUpdate()); |
| 263 } | 260 } |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 278 | 275 |
| 279 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); | 276 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
| 280 DCHECK(fetcher); | 277 DCHECK(fetcher); |
| 281 DCHECK(fetcher->delegate()); | 278 DCHECK(fetcher->delegate()); |
| 282 fetcher->set_status(net::URLRequestStatus()); | 279 fetcher->set_status(net::URLRequestStatus()); |
| 283 fetcher->set_response_code(200); | 280 fetcher->set_response_code(200); |
| 284 std::string response = | 281 std::string response = |
| 285 std::string( | 282 std::string( |
| 286 "<?xml version=\"1.0\"?><response protocol=\"3.0\" server=\"prod\">" | 283 "<?xml version=\"1.0\"?><response protocol=\"3.0\" server=\"prod\">" |
| 287 "<daystart elapsed_seconds=\"56754\"/><app appid=\"") + | 284 "<daystart elapsed_seconds=\"56754\"/><app appid=\"") + |
| 288 test_application_id_ + | 285 test_application_id() + |
| 289 "\" status=\"ok\">" | 286 "\" status=\"ok\">" |
| 290 "<updatecheck status=\"ok\"><urls>" | 287 "<updatecheck status=\"ok\"><urls>" |
| 291 "<url codebase=\"http://www.goo.fr/foo/\"/></urls>" | 288 "<url codebase=\"http://www.goo.fr/foo/\"/></urls>" |
| 292 "<manifest version=\"0.0.1075.1441\">" | 289 "<manifest version=\"0.0.1075.1441\">" |
| 293 "<packages>" | 290 "<packages>" |
| 294 "<package hash=\"0\" name=\"Chrome\" required=\"true\" size=\"0\"/>" | 291 "<package hash=\"0\" name=\"Chrome\" required=\"true\" size=\"0\"/>" |
| 295 "</packages>" | 292 "</packages>" |
| 296 "<actions>" | 293 "<actions>" |
| 297 "<action event=\"update\" run=\"Chrome\"/>" | 294 "<action event=\"update\" run=\"Chrome\"/>" |
| 298 "<action event=\"postinstall\" osminversion=\"6.0\"/>" | 295 "<action event=\"postinstall\" osminversion=\"6.0\"/>" |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 413 | 410 |
| 414 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); | 411 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
| 415 DCHECK(fetcher); | 412 DCHECK(fetcher); |
| 416 DCHECK(fetcher->delegate()); | 413 DCHECK(fetcher->delegate()); |
| 417 fetcher->set_status(net::URLRequestStatus()); | 414 fetcher->set_status(net::URLRequestStatus()); |
| 418 fetcher->set_response_code(200); | 415 fetcher->set_response_code(200); |
| 419 std::string response = | 416 std::string response = |
| 420 std::string( | 417 std::string( |
| 421 "<?xml version=\"1.0\"?><response protocol=\"3.0\" server=\"prod\">" | 418 "<?xml version=\"1.0\"?><response protocol=\"3.0\" server=\"prod\">" |
| 422 "<daystart elapsed_seconds=\"0\"/><app appid=\"") + | 419 "<daystart elapsed_seconds=\"0\"/><app appid=\"") + |
| 423 test_application_id_ + | 420 test_application_id() + |
| 424 "\" status=\"ok\">" | 421 "\" status=\"ok\">" |
| 425 "<event status=\"ok\"/>" | 422 "<event status=\"ok\"/>" |
| 426 "</app></response>"; | 423 "</app></response>"; |
| 427 fetcher->SetResponseString(response); | 424 fetcher->SetResponseString(response); |
| 428 fetcher->delegate()->OnURLFetchComplete(fetcher); | 425 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 429 | 426 |
| 430 EXPECT_EQ(1, service.number_of_tries_); | 427 EXPECT_EQ(1, service.number_of_tries_); |
| 431 EXPECT_LT(service.current_ping_time_ - now, base::TimeDelta::FromMinutes(1)); | 428 EXPECT_LT(service.current_ping_time_ - now, base::TimeDelta::FromMinutes(1)); |
| 432 EXPECT_GT(service.next_tries_time_, service.current_ping_time_); | 429 EXPECT_GT(service.next_tries_time_, service.current_ping_time_); |
| 433 EXPECT_FALSE(NeedUpdate()); | 430 EXPECT_FALSE(NeedUpdate()); |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 450 | 447 |
| 451 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); | 448 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
| 452 DCHECK(fetcher); | 449 DCHECK(fetcher); |
| 453 DCHECK(fetcher->delegate()); | 450 DCHECK(fetcher->delegate()); |
| 454 fetcher->set_status(net::URLRequestStatus()); | 451 fetcher->set_status(net::URLRequestStatus()); |
| 455 fetcher->set_response_code(200); | 452 fetcher->set_response_code(200); |
| 456 std::string response = | 453 std::string response = |
| 457 std::string( | 454 std::string( |
| 458 "<?xml version=\"1.0\"?><response protocol=\"3.0\" server=\"prod\">" | 455 "<?xml version=\"1.0\"?><response protocol=\"3.0\" server=\"prod\">" |
| 459 "<daystart elapsed_seconds=\"0\"/><app appid=\"") + | 456 "<daystart elapsed_seconds=\"0\"/><app appid=\"") + |
| 460 test_application_id_ + | 457 test_application_id() + |
| 461 "\" status=\"ok\">" | 458 "\" status=\"ok\">" |
| 462 "<updatecheck status=\"noupdate\"/><ping status=\"ok\"/>" | 459 "<updatecheck status=\"noupdate\"/><ping status=\"ok\"/>" |
| 463 "</app></response>"; | 460 "</app></response>"; |
| 464 fetcher->SetResponseString(response); | 461 fetcher->SetResponseString(response); |
| 465 fetcher->delegate()->OnURLFetchComplete(fetcher); | 462 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 466 | 463 |
| 467 EXPECT_EQ(0, service.number_of_tries_); | 464 EXPECT_EQ(0, service.number_of_tries_); |
| 468 EXPECT_FALSE(service.current_ping_time_.is_null()); | 465 EXPECT_FALSE(service.current_ping_time_.is_null()); |
| 469 EXPECT_GE(service.next_tries_time_ - now, base::TimeDelta::FromHours(2)); | 466 EXPECT_GE(service.next_tries_time_ - now, base::TimeDelta::FromHours(2)); |
| 470 EXPECT_GT(service.last_sent_time_, now); | 467 EXPECT_GT(service.last_sent_time_, now); |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 486 service.SendPing(); | 483 service.SendPing(); |
| 487 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); | 484 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
| 488 DCHECK(fetcher); | 485 DCHECK(fetcher); |
| 489 DCHECK(fetcher->delegate()); | 486 DCHECK(fetcher->delegate()); |
| 490 fetcher->set_status(net::URLRequestStatus()); | 487 fetcher->set_status(net::URLRequestStatus()); |
| 491 fetcher->set_response_code(200); | 488 fetcher->set_response_code(200); |
| 492 std::string response = | 489 std::string response = |
| 493 std::string( | 490 std::string( |
| 494 "<?xml version=\"1.0\"?><response protocol=\"3.0\" server=\"prod\">" | 491 "<?xml version=\"1.0\"?><response protocol=\"3.0\" server=\"prod\">" |
| 495 "<daystart elapsed_seconds=\"56754\"/><app appid=\"") + | 492 "<daystart elapsed_seconds=\"56754\"/><app appid=\"") + |
| 496 test_application_id_ + | 493 test_application_id() + |
| 497 "\" status=\"ok\">" | 494 "\" status=\"ok\">" |
| 498 "<updatecheck status=\"noupdate\"/><ping status=\"ok\"/>" | 495 "<updatecheck status=\"noupdate\"/><ping status=\"ok\"/>" |
| 499 "</app></response>"; | 496 "</app></response>"; |
| 500 fetcher->SetResponseString(response); | 497 fetcher->SetResponseString(response); |
| 501 fetcher->delegate()->OnURLFetchComplete(fetcher); | 498 fetcher->delegate()->OnURLFetchComplete(fetcher); |
| 502 | 499 |
| 503 EXPECT_FALSE(service.IsNextPingInstallRetry()); | 500 EXPECT_FALSE(service.IsNextPingInstallRetry()); |
| 504 id1 = service.GetNextPingRequestId(OmahaService::USAGE_PING); | 501 id1 = service.GetNextPingRequestId(OmahaService::USAGE_PING); |
| 505 ASSERT_NE(id1, service.GetNextPingRequestId(OmahaService::USAGE_PING)); | 502 ASSERT_NE(id1, service.GetNextPingRequestId(OmahaService::USAGE_PING)); |
| 506 } | 503 } |
| OLD | NEW |