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 |