| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "components/update_client/update_checker.h" | 5 #include "components/update_client/update_checker.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 62 | 62 |
| 63 protected: | 63 protected: |
| 64 void Quit(); | 64 void Quit(); |
| 65 void RunThreads(); | 65 void RunThreads(); |
| 66 void RunThreadsUntilIdle(); | 66 void RunThreadsUntilIdle(); |
| 67 | 67 |
| 68 std::unique_ptr<Component> MakeComponent() const; | 68 std::unique_ptr<Component> MakeComponent() const; |
| 69 | 69 |
| 70 scoped_refptr<TestConfigurator> config_; | 70 scoped_refptr<TestConfigurator> config_; |
| 71 std::unique_ptr<TestingPrefServiceSimple> pref_; | 71 std::unique_ptr<TestingPrefServiceSimple> pref_; |
| 72 std::unique_ptr<PersistedData> metadata_; | |
| 73 | 72 |
| 74 std::unique_ptr<UpdateChecker> update_checker_; | 73 std::unique_ptr<UpdateChecker> update_checker_; |
| 75 | 74 |
| 76 std::unique_ptr<InterceptorFactory> interceptor_factory_; | 75 std::unique_ptr<InterceptorFactory> interceptor_factory_; |
| 77 URLRequestPostInterceptor* post_interceptor_ = | 76 URLRequestPostInterceptor* post_interceptor_ = |
| 78 nullptr; // Owned by the factory. | 77 nullptr; // Owned by the factory. |
| 79 | 78 |
| 80 int error_ = 0; | 79 int error_ = 0; |
| 81 int retry_after_sec_ = 0; | 80 int retry_after_sec_ = 0; |
| 82 | 81 |
| 83 std::unique_ptr<UpdateContext> update_context_; | 82 std::unique_ptr<UpdateContext> update_context_; |
| 84 | 83 |
| 85 private: | 84 private: |
| 86 std::unique_ptr<UpdateContext> MakeFakeUpdateContext() const; | 85 std::unique_ptr<UpdateContext> MakeFakeUpdateContext() const; |
| 87 | 86 |
| 88 base::MessageLoopForIO loop_; | 87 base::MessageLoopForIO loop_; |
| 89 base::test::ScopedTaskScheduler scoped_task_scheduler_; | 88 base::test::ScopedTaskScheduler scoped_task_scheduler_; |
| 90 base::Closure quit_closure_; | 89 base::Closure quit_closure_; |
| 91 | 90 |
| 92 DISALLOW_COPY_AND_ASSIGN(UpdateCheckerTest); | 91 DISALLOW_COPY_AND_ASSIGN(UpdateCheckerTest); |
| 93 }; | 92 }; |
| 94 | 93 |
| 95 UpdateCheckerTest::UpdateCheckerTest() : scoped_task_scheduler_(&loop_) {} | 94 UpdateCheckerTest::UpdateCheckerTest() : scoped_task_scheduler_(&loop_) {} |
| 96 | 95 |
| 97 UpdateCheckerTest::~UpdateCheckerTest() { | 96 UpdateCheckerTest::~UpdateCheckerTest() { |
| 98 } | 97 } |
| 99 | 98 |
| 100 void UpdateCheckerTest::SetUp() { | 99 void UpdateCheckerTest::SetUp() { |
| 100 pref_ = base::MakeUnique<TestingPrefServiceSimple>(); |
| 101 config_ = base::MakeShared<TestConfigurator>( | 101 config_ = base::MakeShared<TestConfigurator>( |
| 102 base::ThreadTaskRunnerHandle::Get(), base::ThreadTaskRunnerHandle::Get()); | 102 base::ThreadTaskRunnerHandle::Get(), base::ThreadTaskRunnerHandle::Get()); |
| 103 pref_ = base::MakeUnique<TestingPrefServiceSimple>(); | 103 config_->SetPrefService(pref_.get()); |
| 104 PersistedData::RegisterPrefs(pref_->registry()); | 104 PersistedData::RegisterPrefs(pref_->registry()); |
| 105 metadata_ = base::MakeUnique<PersistedData>(pref_.get()); | |
| 106 interceptor_factory_ = | 105 interceptor_factory_ = |
| 107 base::MakeUnique<InterceptorFactory>(base::ThreadTaskRunnerHandle::Get()); | 106 base::MakeUnique<InterceptorFactory>(base::ThreadTaskRunnerHandle::Get()); |
| 108 post_interceptor_ = interceptor_factory_->CreateInterceptor(); | 107 post_interceptor_ = interceptor_factory_->CreateInterceptor(); |
| 109 EXPECT_TRUE(post_interceptor_); | 108 EXPECT_TRUE(post_interceptor_); |
| 110 | 109 |
| 111 update_checker_ = nullptr; | 110 update_checker_ = nullptr; |
| 112 | 111 |
| 113 error_ = 0; | 112 error_ = 0; |
| 114 retry_after_sec_ = 0; | 113 retry_after_sec_ = 0; |
| 115 update_context_ = MakeFakeUpdateContext(); | 114 update_context_ = MakeFakeUpdateContext(); |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 175 component->state_ = base::MakeUnique<Component::StateNew>(component.get()); | 174 component->state_ = base::MakeUnique<Component::StateNew>(component.get()); |
| 176 component->crx_component_ = crx_component; | 175 component->crx_component_ = crx_component; |
| 177 | 176 |
| 178 return component; | 177 return component; |
| 179 } | 178 } |
| 180 | 179 |
| 181 TEST_F(UpdateCheckerTest, UpdateCheckSuccess) { | 180 TEST_F(UpdateCheckerTest, UpdateCheckSuccess) { |
| 182 EXPECT_TRUE(post_interceptor_->ExpectRequest( | 181 EXPECT_TRUE(post_interceptor_->ExpectRequest( |
| 183 new PartialMatch("updatecheck"), test_file("updatecheck_reply_1.xml"))); | 182 new PartialMatch("updatecheck"), test_file("updatecheck_reply_1.xml"))); |
| 184 | 183 |
| 185 update_checker_ = UpdateChecker::Create(config_, metadata_.get()); | 184 update_checker_ = UpdateChecker::Create(config_); |
| 186 | 185 |
| 187 IdToComponentPtrMap components; | 186 IdToComponentPtrMap components; |
| 188 components[kUpdateItemId] = MakeComponent(); | 187 components[kUpdateItemId] = MakeComponent(); |
| 189 | 188 |
| 190 auto& component = components[kUpdateItemId]; | 189 auto& component = components[kUpdateItemId]; |
| 191 component->crx_component_.installer_attributes["ap"] = "some_ap"; | 190 component->crx_component_.installer_attributes["ap"] = "some_ap"; |
| 192 | 191 |
| 193 update_checker_->CheckForUpdates( | 192 update_checker_->CheckForUpdates( |
| 194 std::vector<std::string>{kUpdateItemId}, components, "extra=\"params\"", | 193 std::vector<std::string>{kUpdateItemId}, components, "extra=\"params\"", |
| 195 true, | 194 true, |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 243 EXPECT_NE(string::npos, request.find(" name=\"Omaha\" ")); | 242 EXPECT_NE(string::npos, request.find(" name=\"Omaha\" ")); |
| 244 #endif // GOOGLE_CHROME_BUILD | 243 #endif // GOOGLE_CHROME_BUILD |
| 245 #endif // OS_WINDOWS | 244 #endif // OS_WINDOWS |
| 246 } | 245 } |
| 247 | 246 |
| 248 // Tests that an invalid "ap" is not serialized. | 247 // Tests that an invalid "ap" is not serialized. |
| 249 TEST_F(UpdateCheckerTest, UpdateCheckInvalidAp) { | 248 TEST_F(UpdateCheckerTest, UpdateCheckInvalidAp) { |
| 250 EXPECT_TRUE(post_interceptor_->ExpectRequest( | 249 EXPECT_TRUE(post_interceptor_->ExpectRequest( |
| 251 new PartialMatch("updatecheck"), test_file("updatecheck_reply_1.xml"))); | 250 new PartialMatch("updatecheck"), test_file("updatecheck_reply_1.xml"))); |
| 252 | 251 |
| 253 update_checker_ = UpdateChecker::Create(config_, metadata_.get()); | 252 update_checker_ = UpdateChecker::Create(config_); |
| 254 | 253 |
| 255 IdToComponentPtrMap components; | 254 IdToComponentPtrMap components; |
| 256 components[kUpdateItemId] = MakeComponent(); | 255 components[kUpdateItemId] = MakeComponent(); |
| 257 | 256 |
| 258 // Make "ap" too long. | 257 // Make "ap" too long. |
| 259 auto& component = components[kUpdateItemId]; | 258 auto& component = components[kUpdateItemId]; |
| 260 component->crx_component_.installer_attributes["ap"] = std::string(257, 'a'); | 259 component->crx_component_.installer_attributes["ap"] = std::string(257, 'a'); |
| 261 | 260 |
| 262 update_checker_->CheckForUpdates( | 261 update_checker_->CheckForUpdates( |
| 263 std::vector<std::string>{kUpdateItemId}, components, "", true, | 262 std::vector<std::string>{kUpdateItemId}, components, "", true, |
| 264 base::Bind(&UpdateCheckerTest::UpdateCheckComplete, | 263 base::Bind(&UpdateCheckerTest::UpdateCheckComplete, |
| 265 base::Unretained(this))); | 264 base::Unretained(this))); |
| 266 | 265 |
| 267 RunThreads(); | 266 RunThreads(); |
| 268 | 267 |
| 269 EXPECT_NE(string::npos, post_interceptor_->GetRequests()[0].find( | 268 EXPECT_NE(string::npos, post_interceptor_->GetRequests()[0].find( |
| 270 std::string("app appid=\"") + kUpdateItemId + | 269 std::string("app appid=\"") + kUpdateItemId + |
| 271 "\" version=\"0.9\" " | 270 "\" version=\"0.9\" " |
| 272 "brand=\"TEST\"><updatecheck/><ping rd=\"-2\" ")); | 271 "brand=\"TEST\"><updatecheck/><ping rd=\"-2\" ")); |
| 273 EXPECT_NE(string::npos, | 272 EXPECT_NE(string::npos, |
| 274 post_interceptor_->GetRequests()[0].find( | 273 post_interceptor_->GetRequests()[0].find( |
| 275 "<packages><package fp=\"fp1\"/></packages></app>")); | 274 "<packages><package fp=\"fp1\"/></packages></app>")); |
| 276 } | 275 } |
| 277 | 276 |
| 278 TEST_F(UpdateCheckerTest, UpdateCheckSuccessNoBrand) { | 277 TEST_F(UpdateCheckerTest, UpdateCheckSuccessNoBrand) { |
| 279 EXPECT_TRUE(post_interceptor_->ExpectRequest( | 278 EXPECT_TRUE(post_interceptor_->ExpectRequest( |
| 280 new PartialMatch("updatecheck"), test_file("updatecheck_reply_1.xml"))); | 279 new PartialMatch("updatecheck"), test_file("updatecheck_reply_1.xml"))); |
| 281 | 280 |
| 282 config_->SetBrand("TOOLONG"); // Sets an invalid brand code. | 281 config_->SetBrand("TOOLONG"); // Sets an invalid brand code. |
| 283 update_checker_ = UpdateChecker::Create(config_, metadata_.get()); | 282 update_checker_ = UpdateChecker::Create(config_); |
| 284 | 283 |
| 285 IdToComponentPtrMap components; | 284 IdToComponentPtrMap components; |
| 286 components[kUpdateItemId] = MakeComponent(); | 285 components[kUpdateItemId] = MakeComponent(); |
| 287 | 286 |
| 288 update_checker_->CheckForUpdates( | 287 update_checker_->CheckForUpdates( |
| 289 std::vector<std::string>{kUpdateItemId}, components, "", true, | 288 std::vector<std::string>{kUpdateItemId}, components, "", true, |
| 290 base::Bind(&UpdateCheckerTest::UpdateCheckComplete, | 289 base::Bind(&UpdateCheckerTest::UpdateCheckComplete, |
| 291 base::Unretained(this))); | 290 base::Unretained(this))); |
| 292 | 291 |
| 293 RunThreads(); | 292 RunThreads(); |
| 294 | 293 |
| 295 EXPECT_NE(string::npos, post_interceptor_->GetRequests()[0].find( | 294 EXPECT_NE(string::npos, post_interceptor_->GetRequests()[0].find( |
| 296 std::string("<app appid=\"") + kUpdateItemId + | 295 std::string("<app appid=\"") + kUpdateItemId + |
| 297 "\" version=\"0.9\">" | 296 "\" version=\"0.9\">" |
| 298 "<updatecheck/><ping rd=\"-2\" ")); | 297 "<updatecheck/><ping rd=\"-2\" ")); |
| 299 EXPECT_NE(string::npos, | 298 EXPECT_NE(string::npos, |
| 300 post_interceptor_->GetRequests()[0].find( | 299 post_interceptor_->GetRequests()[0].find( |
| 301 "<packages><package fp=\"fp1\"/></packages></app>")); | 300 "<packages><package fp=\"fp1\"/></packages></app>")); |
| 302 } | 301 } |
| 303 | 302 |
| 304 // Simulates a 403 server response error. | 303 // Simulates a 403 server response error. |
| 305 TEST_F(UpdateCheckerTest, UpdateCheckError) { | 304 TEST_F(UpdateCheckerTest, UpdateCheckError) { |
| 306 EXPECT_TRUE( | 305 EXPECT_TRUE( |
| 307 post_interceptor_->ExpectRequest(new PartialMatch("updatecheck"), 403)); | 306 post_interceptor_->ExpectRequest(new PartialMatch("updatecheck"), 403)); |
| 308 | 307 |
| 309 update_checker_ = UpdateChecker::Create(config_, metadata_.get()); | 308 update_checker_ = UpdateChecker::Create(config_); |
| 310 | 309 |
| 311 IdToComponentPtrMap components; | 310 IdToComponentPtrMap components; |
| 312 components[kUpdateItemId] = MakeComponent(); | 311 components[kUpdateItemId] = MakeComponent(); |
| 313 | 312 |
| 314 auto& component = components[kUpdateItemId]; | 313 auto& component = components[kUpdateItemId]; |
| 315 | 314 |
| 316 update_checker_->CheckForUpdates( | 315 update_checker_->CheckForUpdates( |
| 317 std::vector<std::string>{kUpdateItemId}, components, "", true, | 316 std::vector<std::string>{kUpdateItemId}, components, "", true, |
| 318 base::Bind(&UpdateCheckerTest::UpdateCheckComplete, | 317 base::Bind(&UpdateCheckerTest::UpdateCheckComplete, |
| 319 base::Unretained(this))); | 318 base::Unretained(this))); |
| 320 RunThreads(); | 319 RunThreads(); |
| 321 | 320 |
| 322 EXPECT_EQ(1, post_interceptor_->GetHitCount()) | 321 EXPECT_EQ(1, post_interceptor_->GetHitCount()) |
| 323 << post_interceptor_->GetRequestsAsString(); | 322 << post_interceptor_->GetRequestsAsString(); |
| 324 EXPECT_EQ(1, post_interceptor_->GetCount()) | 323 EXPECT_EQ(1, post_interceptor_->GetCount()) |
| 325 << post_interceptor_->GetRequestsAsString(); | 324 << post_interceptor_->GetRequestsAsString(); |
| 326 | 325 |
| 327 EXPECT_EQ(403, error_); | 326 EXPECT_EQ(403, error_); |
| 328 EXPECT_FALSE(component->next_version_.IsValid()); | 327 EXPECT_FALSE(component->next_version_.IsValid()); |
| 329 } | 328 } |
| 330 | 329 |
| 331 TEST_F(UpdateCheckerTest, UpdateCheckDownloadPreference) { | 330 TEST_F(UpdateCheckerTest, UpdateCheckDownloadPreference) { |
| 332 EXPECT_TRUE(post_interceptor_->ExpectRequest( | 331 EXPECT_TRUE(post_interceptor_->ExpectRequest( |
| 333 new PartialMatch("updatecheck"), test_file("updatecheck_reply_1.xml"))); | 332 new PartialMatch("updatecheck"), test_file("updatecheck_reply_1.xml"))); |
| 334 | 333 |
| 335 config_->SetDownloadPreference(string("cacheable")); | 334 config_->SetDownloadPreference(string("cacheable")); |
| 336 | 335 |
| 337 update_checker_ = UpdateChecker::Create(config_, metadata_.get()); | 336 update_checker_ = UpdateChecker::Create(config_); |
| 338 | 337 |
| 339 IdToComponentPtrMap components; | 338 IdToComponentPtrMap components; |
| 340 components[kUpdateItemId] = MakeComponent(); | 339 components[kUpdateItemId] = MakeComponent(); |
| 341 | 340 |
| 342 update_checker_->CheckForUpdates( | 341 update_checker_->CheckForUpdates( |
| 343 std::vector<std::string>{kUpdateItemId}, components, "extra=\"params\"", | 342 std::vector<std::string>{kUpdateItemId}, components, "extra=\"params\"", |
| 344 true, | 343 true, |
| 345 base::Bind(&UpdateCheckerTest::UpdateCheckComplete, | 344 base::Bind(&UpdateCheckerTest::UpdateCheckComplete, |
| 346 base::Unretained(this))); | 345 base::Unretained(this))); |
| 347 | 346 |
| 348 RunThreads(); | 347 RunThreads(); |
| 349 | 348 |
| 350 // The request must contain dlpref="cacheable". | 349 // The request must contain dlpref="cacheable". |
| 351 EXPECT_NE(string::npos, | 350 EXPECT_NE(string::npos, |
| 352 post_interceptor_->GetRequests()[0].find(" dlpref=\"cacheable\"")); | 351 post_interceptor_->GetRequests()[0].find(" dlpref=\"cacheable\"")); |
| 353 } | 352 } |
| 354 | 353 |
| 355 // This test is checking that an update check signed with CUP fails, since there | 354 // This test is checking that an update check signed with CUP fails, since there |
| 356 // is currently no entity that can respond with a valid signed response. | 355 // is currently no entity that can respond with a valid signed response. |
| 357 // A proper CUP test requires network mocks, which are not available now. | 356 // A proper CUP test requires network mocks, which are not available now. |
| 358 TEST_F(UpdateCheckerTest, UpdateCheckCupError) { | 357 TEST_F(UpdateCheckerTest, UpdateCheckCupError) { |
| 359 EXPECT_TRUE(post_interceptor_->ExpectRequest( | 358 EXPECT_TRUE(post_interceptor_->ExpectRequest( |
| 360 new PartialMatch("updatecheck"), test_file("updatecheck_reply_1.xml"))); | 359 new PartialMatch("updatecheck"), test_file("updatecheck_reply_1.xml"))); |
| 361 | 360 |
| 362 config_->SetEnabledCupSigning(true); | 361 config_->SetEnabledCupSigning(true); |
| 363 update_checker_ = UpdateChecker::Create(config_, metadata_.get()); | 362 update_checker_ = UpdateChecker::Create(config_); |
| 364 | 363 |
| 365 IdToComponentPtrMap components; | 364 IdToComponentPtrMap components; |
| 366 components[kUpdateItemId] = MakeComponent(); | 365 components[kUpdateItemId] = MakeComponent(); |
| 367 | 366 |
| 368 const auto& component = components[kUpdateItemId]; | 367 const auto& component = components[kUpdateItemId]; |
| 369 | 368 |
| 370 update_checker_->CheckForUpdates( | 369 update_checker_->CheckForUpdates( |
| 371 std::vector<std::string>{kUpdateItemId}, components, "", true, | 370 std::vector<std::string>{kUpdateItemId}, components, "", true, |
| 372 base::Bind(&UpdateCheckerTest::UpdateCheckComplete, | 371 base::Bind(&UpdateCheckerTest::UpdateCheckComplete, |
| 373 base::Unretained(this))); | 372 base::Unretained(this))); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 391 // Expect an error since the response is not trusted. | 390 // Expect an error since the response is not trusted. |
| 392 EXPECT_EQ(-10000, error_); | 391 EXPECT_EQ(-10000, error_); |
| 393 EXPECT_FALSE(component->next_version_.IsValid()); | 392 EXPECT_FALSE(component->next_version_.IsValid()); |
| 394 } | 393 } |
| 395 | 394 |
| 396 // Tests that the UpdateCheckers will not make an update check for a | 395 // Tests that the UpdateCheckers will not make an update check for a |
| 397 // component that requires encryption when the update check URL is unsecure. | 396 // component that requires encryption when the update check URL is unsecure. |
| 398 TEST_F(UpdateCheckerTest, UpdateCheckRequiresEncryptionError) { | 397 TEST_F(UpdateCheckerTest, UpdateCheckRequiresEncryptionError) { |
| 399 config_->SetUpdateCheckUrl(GURL("http:\\foo\bar")); | 398 config_->SetUpdateCheckUrl(GURL("http:\\foo\bar")); |
| 400 | 399 |
| 401 update_checker_ = UpdateChecker::Create(config_, metadata_.get()); | 400 update_checker_ = UpdateChecker::Create(config_); |
| 402 | 401 |
| 403 IdToComponentPtrMap components; | 402 IdToComponentPtrMap components; |
| 404 components[kUpdateItemId] = MakeComponent(); | 403 components[kUpdateItemId] = MakeComponent(); |
| 405 | 404 |
| 406 auto& component = components[kUpdateItemId]; | 405 auto& component = components[kUpdateItemId]; |
| 407 component->crx_component_.requires_network_encryption = true; | 406 component->crx_component_.requires_network_encryption = true; |
| 408 | 407 |
| 409 update_checker_->CheckForUpdates( | 408 update_checker_->CheckForUpdates( |
| 410 std::vector<std::string>{kUpdateItemId}, components, "", true, | 409 std::vector<std::string>{kUpdateItemId}, components, "", true, |
| 411 base::Bind(&UpdateCheckerTest::UpdateCheckComplete, | 410 base::Bind(&UpdateCheckerTest::UpdateCheckComplete, |
| 412 base::Unretained(this))); | 411 base::Unretained(this))); |
| 413 RunThreads(); | 412 RunThreads(); |
| 414 | 413 |
| 415 EXPECT_EQ(-1, error_); | 414 EXPECT_EQ(-1, error_); |
| 416 EXPECT_FALSE(component->next_version_.IsValid()); | 415 EXPECT_FALSE(component->next_version_.IsValid()); |
| 417 } | 416 } |
| 418 | 417 |
| 419 // Tests that the PersistedData will get correctly update and reserialize | 418 // Tests that the PersistedData will get correctly update and reserialize |
| 420 // the elapsed_days value. | 419 // the elapsed_days value. |
| 421 TEST_F(UpdateCheckerTest, UpdateCheckDateLastRollCall) { | 420 TEST_F(UpdateCheckerTest, UpdateCheckDateLastRollCall) { |
| 422 EXPECT_TRUE(post_interceptor_->ExpectRequest( | 421 EXPECT_TRUE(post_interceptor_->ExpectRequest( |
| 423 new PartialMatch("updatecheck"), test_file("updatecheck_reply_4.xml"))); | 422 new PartialMatch("updatecheck"), test_file("updatecheck_reply_4.xml"))); |
| 424 EXPECT_TRUE(post_interceptor_->ExpectRequest( | 423 EXPECT_TRUE(post_interceptor_->ExpectRequest( |
| 425 new PartialMatch("updatecheck"), test_file("updatecheck_reply_4.xml"))); | 424 new PartialMatch("updatecheck"), test_file("updatecheck_reply_4.xml"))); |
| 426 | 425 |
| 427 update_checker_ = UpdateChecker::Create(config_, metadata_.get()); | 426 update_checker_ = UpdateChecker::Create(config_); |
| 428 | 427 |
| 429 IdToComponentPtrMap components; | 428 IdToComponentPtrMap components; |
| 430 components[kUpdateItemId] = MakeComponent(); | 429 components[kUpdateItemId] = MakeComponent(); |
| 431 | 430 |
| 432 // Do two update-checks. | 431 // Do two update-checks. |
| 433 update_checker_->CheckForUpdates( | 432 update_checker_->CheckForUpdates( |
| 434 std::vector<std::string>{kUpdateItemId}, components, "extra=\"params\"", | 433 std::vector<std::string>{kUpdateItemId}, components, "extra=\"params\"", |
| 435 true, | 434 true, |
| 436 base::Bind(&UpdateCheckerTest::UpdateCheckComplete, | 435 base::Bind(&UpdateCheckerTest::UpdateCheckComplete, |
| 437 base::Unretained(this))); | 436 base::Unretained(this))); |
| 438 RunThreads(); | 437 RunThreads(); |
| 439 | 438 |
| 440 update_checker_ = UpdateChecker::Create(config_, metadata_.get()); | 439 update_checker_ = UpdateChecker::Create(config_); |
| 441 update_checker_->CheckForUpdates( | 440 update_checker_->CheckForUpdates( |
| 442 std::vector<std::string>{kUpdateItemId}, components, "extra=\"params\"", | 441 std::vector<std::string>{kUpdateItemId}, components, "extra=\"params\"", |
| 443 true, | 442 true, |
| 444 base::Bind(&UpdateCheckerTest::UpdateCheckComplete, | 443 base::Bind(&UpdateCheckerTest::UpdateCheckComplete, |
| 445 base::Unretained(this))); | 444 base::Unretained(this))); |
| 446 RunThreads(); | 445 RunThreads(); |
| 447 | 446 |
| 448 EXPECT_EQ(2, post_interceptor_->GetHitCount()) | 447 EXPECT_EQ(2, post_interceptor_->GetHitCount()) |
| 449 << post_interceptor_->GetRequestsAsString(); | 448 << post_interceptor_->GetRequestsAsString(); |
| 450 ASSERT_EQ(2, post_interceptor_->GetCount()) | 449 ASSERT_EQ(2, post_interceptor_->GetCount()) |
| 451 << post_interceptor_->GetRequestsAsString(); | 450 << post_interceptor_->GetRequestsAsString(); |
| 452 EXPECT_NE(string::npos, post_interceptor_->GetRequests()[0].find( | 451 EXPECT_NE(string::npos, post_interceptor_->GetRequests()[0].find( |
| 453 "<ping rd=\"-2\" ping_freshness=")); | 452 "<ping rd=\"-2\" ping_freshness=")); |
| 454 EXPECT_NE(string::npos, post_interceptor_->GetRequests()[1].find( | 453 EXPECT_NE(string::npos, post_interceptor_->GetRequests()[1].find( |
| 455 "<ping rd=\"3383\" ping_freshness=")); | 454 "<ping rd=\"3383\" ping_freshness=")); |
| 456 } | 455 } |
| 457 | 456 |
| 458 TEST_F(UpdateCheckerTest, UpdateCheckUpdateDisabled) { | 457 TEST_F(UpdateCheckerTest, UpdateCheckUpdateDisabled) { |
| 459 EXPECT_TRUE(post_interceptor_->ExpectRequest( | 458 EXPECT_TRUE(post_interceptor_->ExpectRequest( |
| 460 new PartialMatch("updatecheck"), test_file("updatecheck_reply_1.xml"))); | 459 new PartialMatch("updatecheck"), test_file("updatecheck_reply_1.xml"))); |
| 461 | 460 |
| 462 config_->SetBrand(""); | 461 config_->SetBrand(""); |
| 463 update_checker_ = UpdateChecker::Create(config_, metadata_.get()); | 462 update_checker_ = UpdateChecker::Create(config_); |
| 464 | 463 |
| 465 IdToComponentPtrMap components; | 464 IdToComponentPtrMap components; |
| 466 components[kUpdateItemId] = MakeComponent(); | 465 components[kUpdateItemId] = MakeComponent(); |
| 467 | 466 |
| 468 auto& component = components[kUpdateItemId]; | 467 auto& component = components[kUpdateItemId]; |
| 469 | 468 |
| 470 // Tests the scenario where: | 469 // Tests the scenario where: |
| 471 // * the component does not support group policies. | 470 // * the component does not support group policies. |
| 472 // * the component updates are disabled. | 471 // * the component updates are disabled. |
| 473 // Expects the group policy to be ignored and the update check to not | 472 // Expects the group policy to be ignored and the update check to not |
| (...skipping 10 matching lines...) Expand all Loading... |
| 484 std::string("<app appid=\"") + kUpdateItemId + | 483 std::string("<app appid=\"") + kUpdateItemId + |
| 485 "\" version=\"0.9\">" | 484 "\" version=\"0.9\">" |
| 486 "<updatecheck/>")); | 485 "<updatecheck/>")); |
| 487 | 486 |
| 488 // Tests the scenario where: | 487 // Tests the scenario where: |
| 489 // * the component supports group policies. | 488 // * the component supports group policies. |
| 490 // * the component updates are disabled. | 489 // * the component updates are disabled. |
| 491 // Expects the update check to include the "updatedisabled" attribute. | 490 // Expects the update check to include the "updatedisabled" attribute. |
| 492 component->crx_component_.supports_group_policy_enable_component_updates = | 491 component->crx_component_.supports_group_policy_enable_component_updates = |
| 493 true; | 492 true; |
| 494 update_checker_ = UpdateChecker::Create(config_, metadata_.get()); | 493 update_checker_ = UpdateChecker::Create(config_); |
| 495 update_checker_->CheckForUpdates( | 494 update_checker_->CheckForUpdates( |
| 496 std::vector<std::string>{kUpdateItemId}, components, "", false, | 495 std::vector<std::string>{kUpdateItemId}, components, "", false, |
| 497 base::Bind(&UpdateCheckerTest::UpdateCheckComplete, | 496 base::Bind(&UpdateCheckerTest::UpdateCheckComplete, |
| 498 base::Unretained(this))); | 497 base::Unretained(this))); |
| 499 RunThreads(); | 498 RunThreads(); |
| 500 EXPECT_NE(string::npos, post_interceptor_->GetRequests()[1].find( | 499 EXPECT_NE(string::npos, post_interceptor_->GetRequests()[1].find( |
| 501 std::string("<app appid=\"") + kUpdateItemId + | 500 std::string("<app appid=\"") + kUpdateItemId + |
| 502 "\" version=\"0.9\">" | 501 "\" version=\"0.9\">" |
| 503 "<updatecheck updatedisabled=\"true\"/>")); | 502 "<updatecheck updatedisabled=\"true\"/>")); |
| 504 | 503 |
| 505 // Tests the scenario where: | 504 // Tests the scenario where: |
| 506 // * the component does not support group policies. | 505 // * the component does not support group policies. |
| 507 // * the component updates are enabled. | 506 // * the component updates are enabled. |
| 508 // Expects the update check to not include the "updatedisabled" attribute. | 507 // Expects the update check to not include the "updatedisabled" attribute. |
| 509 component->crx_component_.supports_group_policy_enable_component_updates = | 508 component->crx_component_.supports_group_policy_enable_component_updates = |
| 510 false; | 509 false; |
| 511 update_checker_ = UpdateChecker::Create(config_, metadata_.get()); | 510 update_checker_ = UpdateChecker::Create(config_); |
| 512 update_checker_->CheckForUpdates( | 511 update_checker_->CheckForUpdates( |
| 513 std::vector<std::string>{kUpdateItemId}, components, "", true, | 512 std::vector<std::string>{kUpdateItemId}, components, "", true, |
| 514 base::Bind(&UpdateCheckerTest::UpdateCheckComplete, | 513 base::Bind(&UpdateCheckerTest::UpdateCheckComplete, |
| 515 base::Unretained(this))); | 514 base::Unretained(this))); |
| 516 RunThreads(); | 515 RunThreads(); |
| 517 EXPECT_NE(string::npos, post_interceptor_->GetRequests()[2].find( | 516 EXPECT_NE(string::npos, post_interceptor_->GetRequests()[2].find( |
| 518 std::string("<app appid=\"") + kUpdateItemId + | 517 std::string("<app appid=\"") + kUpdateItemId + |
| 519 "\" version=\"0.9\">" | 518 "\" version=\"0.9\">" |
| 520 "<updatecheck/>")); | 519 "<updatecheck/>")); |
| 521 | 520 |
| 522 // Tests the scenario where: | 521 // Tests the scenario where: |
| 523 // * the component supports group policies. | 522 // * the component supports group policies. |
| 524 // * the component updates are enabled. | 523 // * the component updates are enabled. |
| 525 // Expects the update check to not include the "updatedisabled" attribute. | 524 // Expects the update check to not include the "updatedisabled" attribute. |
| 526 component->crx_component_.supports_group_policy_enable_component_updates = | 525 component->crx_component_.supports_group_policy_enable_component_updates = |
| 527 true; | 526 true; |
| 528 update_checker_ = UpdateChecker::Create(config_, metadata_.get()); | 527 update_checker_ = UpdateChecker::Create(config_); |
| 529 update_checker_->CheckForUpdates( | 528 update_checker_->CheckForUpdates( |
| 530 std::vector<std::string>{kUpdateItemId}, components, "", true, | 529 std::vector<std::string>{kUpdateItemId}, components, "", true, |
| 531 base::Bind(&UpdateCheckerTest::UpdateCheckComplete, | 530 base::Bind(&UpdateCheckerTest::UpdateCheckComplete, |
| 532 base::Unretained(this))); | 531 base::Unretained(this))); |
| 533 RunThreads(); | 532 RunThreads(); |
| 534 EXPECT_NE(string::npos, post_interceptor_->GetRequests()[3].find( | 533 EXPECT_NE(string::npos, post_interceptor_->GetRequests()[3].find( |
| 535 std::string("<app appid=\"") + kUpdateItemId + | 534 std::string("<app appid=\"") + kUpdateItemId + |
| 536 "\" version=\"0.9\">" | 535 "\" version=\"0.9\">" |
| 537 "<updatecheck/>")); | 536 "<updatecheck/>")); |
| 538 } | 537 } |
| 539 | 538 |
| 540 TEST_F(UpdateCheckerTest, NoUpdateActionRun) { | 539 TEST_F(UpdateCheckerTest, NoUpdateActionRun) { |
| 541 EXPECT_TRUE(post_interceptor_->ExpectRequest( | 540 EXPECT_TRUE(post_interceptor_->ExpectRequest( |
| 542 new PartialMatch("updatecheck"), | 541 new PartialMatch("updatecheck"), |
| 543 test_file("updatecheck_reply_noupdate.xml"))); | 542 test_file("updatecheck_reply_noupdate.xml"))); |
| 544 | 543 |
| 545 update_checker_ = UpdateChecker::Create(config_, metadata_.get()); | 544 update_checker_ = UpdateChecker::Create(config_); |
| 546 | 545 |
| 547 IdToComponentPtrMap components; | 546 IdToComponentPtrMap components; |
| 548 components[kUpdateItemId] = MakeComponent(); | 547 components[kUpdateItemId] = MakeComponent(); |
| 549 | 548 |
| 550 auto& component = components[kUpdateItemId]; | 549 auto& component = components[kUpdateItemId]; |
| 551 | 550 |
| 552 update_checker_->CheckForUpdates( | 551 update_checker_->CheckForUpdates( |
| 553 std::vector<std::string>{kUpdateItemId}, components, "", true, | 552 std::vector<std::string>{kUpdateItemId}, components, "", true, |
| 554 base::Bind(&UpdateCheckerTest::UpdateCheckComplete, | 553 base::Bind(&UpdateCheckerTest::UpdateCheckComplete, |
| 555 base::Unretained(this))); | 554 base::Unretained(this))); |
| 556 RunThreads(); | 555 RunThreads(); |
| 557 | 556 |
| 558 EXPECT_EQ(1, post_interceptor_->GetHitCount()) | 557 EXPECT_EQ(1, post_interceptor_->GetHitCount()) |
| 559 << post_interceptor_->GetRequestsAsString(); | 558 << post_interceptor_->GetRequestsAsString(); |
| 560 ASSERT_EQ(1, post_interceptor_->GetCount()) | 559 ASSERT_EQ(1, post_interceptor_->GetCount()) |
| 561 << post_interceptor_->GetRequestsAsString(); | 560 << post_interceptor_->GetRequestsAsString(); |
| 562 | 561 |
| 563 EXPECT_EQ(0, error_); | 562 EXPECT_EQ(0, error_); |
| 564 EXPECT_STREQ("this", component->action_run_.c_str()); | 563 EXPECT_STREQ("this", component->action_run_.c_str()); |
| 565 } | 564 } |
| 566 | 565 |
| 567 } // namespace update_client | 566 } // namespace update_client |
| OLD | NEW |