| OLD | NEW |
| 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 "base/basictypes.h" | 5 #include "base/basictypes.h" |
| 6 #include "base/bind.h" | 6 #include "base/bind.h" |
| 7 #include "base/json/json_writer.h" | 7 #include "base/json/json_writer.h" |
| 8 #include "base/message_loop/message_loop.h" | 8 #include "base/message_loop/message_loop.h" |
| 9 #include "base/run_loop.h" | 9 #include "base/run_loop.h" |
| 10 #include "base/synchronization/waitable_event.h" | 10 #include "base/synchronization/waitable_event.h" |
| (...skipping 16 matching lines...) Expand all Loading... |
| 27 message_loop_proxy_ = base::MessageLoopProxy::current(); | 27 message_loop_proxy_ = base::MessageLoopProxy::current(); |
| 28 policy_updated_callback_ = base::Bind( | 28 policy_updated_callback_ = base::Bind( |
| 29 &MockPolicyCallback::OnPolicyUpdate, | 29 &MockPolicyCallback::OnPolicyUpdate, |
| 30 base::Unretained(&mock_policy_callback_)); | 30 base::Unretained(&mock_policy_callback_)); |
| 31 policy_error_callback_ = base::Bind( | 31 policy_error_callback_ = base::Bind( |
| 32 &MockPolicyCallback::OnPolicyError, | 32 &MockPolicyCallback::OnPolicyError, |
| 33 base::Unretained(&mock_policy_callback_)); | 33 base::Unretained(&mock_policy_callback_)); |
| 34 | 34 |
| 35 // Retaining a raw pointer to keep control over policy contents. | 35 // Retaining a raw pointer to keep control over policy contents. |
| 36 policy_loader_ = new policy::FakeAsyncPolicyLoader(message_loop_proxy_); | 36 policy_loader_ = new policy::FakeAsyncPolicyLoader(message_loop_proxy_); |
| 37 policy_watcher_ = PolicyWatcher::CreateFromPolicyLoader( | 37 policy_watcher_ = |
| 38 message_loop_proxy_, make_scoped_ptr(policy_loader_)); | 38 PolicyWatcher::CreateFromPolicyLoader(make_scoped_ptr(policy_loader_)); |
| 39 | 39 |
| 40 nat_true_.SetBoolean(policy::key::kRemoteAccessHostFirewallTraversal, true); | 40 nat_true_.SetBoolean(policy::key::kRemoteAccessHostFirewallTraversal, true); |
| 41 nat_false_.SetBoolean(policy::key::kRemoteAccessHostFirewallTraversal, | 41 nat_false_.SetBoolean(policy::key::kRemoteAccessHostFirewallTraversal, |
| 42 false); | 42 false); |
| 43 nat_one_.SetInteger(policy::key::kRemoteAccessHostFirewallTraversal, 1); | 43 nat_one_.SetInteger(policy::key::kRemoteAccessHostFirewallTraversal, 1); |
| 44 domain_empty_.SetString(policy::key::kRemoteAccessHostDomain, | 44 domain_empty_.SetString(policy::key::kRemoteAccessHostDomain, |
| 45 std::string()); | 45 std::string()); |
| 46 domain_full_.SetString(policy::key::kRemoteAccessHostDomain, kHostDomain); | 46 domain_full_.SetString(policy::key::kRemoteAccessHostDomain, kHostDomain); |
| 47 SetDefaults(nat_true_others_default_); | 47 SetDefaults(nat_true_others_default_); |
| 48 nat_true_others_default_.SetBoolean( | 48 nat_true_others_default_.SetBoolean( |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 121 } | 121 } |
| 122 | 122 |
| 123 protected: | 123 protected: |
| 124 void StartWatching() { | 124 void StartWatching() { |
| 125 policy_watcher_->StartWatching( | 125 policy_watcher_->StartWatching( |
| 126 policy_updated_callback_, | 126 policy_updated_callback_, |
| 127 policy_error_callback_); | 127 policy_error_callback_); |
| 128 base::RunLoop().RunUntilIdle(); | 128 base::RunLoop().RunUntilIdle(); |
| 129 } | 129 } |
| 130 | 130 |
| 131 void StopWatching() { | |
| 132 EXPECT_CALL(*this, PostPolicyWatcherShutdown()).Times(1); | |
| 133 policy_watcher_->StopWatching(base::Bind( | |
| 134 &PolicyWatcherTest::PostPolicyWatcherShutdown, base::Unretained(this))); | |
| 135 base::RunLoop().RunUntilIdle(); | |
| 136 } | |
| 137 | |
| 138 void SetPolicies(const base::DictionaryValue& dict) { | 131 void SetPolicies(const base::DictionaryValue& dict) { |
| 139 // Copy |dict| into |policy_bundle|. | 132 // Copy |dict| into |policy_bundle|. |
| 140 policy::PolicyNamespace policy_namespace = | 133 policy::PolicyNamespace policy_namespace = |
| 141 policy::PolicyNamespace(policy::POLICY_DOMAIN_CHROME, std::string()); | 134 policy::PolicyNamespace(policy::POLICY_DOMAIN_CHROME, std::string()); |
| 142 policy::PolicyBundle policy_bundle; | 135 policy::PolicyBundle policy_bundle; |
| 143 policy::PolicyMap& policy_map = policy_bundle.Get(policy_namespace); | 136 policy::PolicyMap& policy_map = policy_bundle.Get(policy_namespace); |
| 144 policy_map.LoadFrom(&dict, policy::POLICY_LEVEL_MANDATORY, | 137 policy_map.LoadFrom(&dict, policy::POLICY_LEVEL_MANDATORY, |
| 145 policy::POLICY_SCOPE_MACHINE); | 138 policy::POLICY_SCOPE_MACHINE); |
| 146 | 139 |
| 147 // Simulate a policy file/registry/preference update. | 140 // Simulate a policy file/registry/preference update. |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 242 } | 235 } |
| 243 return equal; | 236 return equal; |
| 244 } | 237 } |
| 245 | 238 |
| 246 TEST_F(PolicyWatcherTest, None) { | 239 TEST_F(PolicyWatcherTest, None) { |
| 247 EXPECT_CALL(mock_policy_callback_, | 240 EXPECT_CALL(mock_policy_callback_, |
| 248 OnPolicyUpdatePtr(IsPolicies(&nat_true_others_default_))); | 241 OnPolicyUpdatePtr(IsPolicies(&nat_true_others_default_))); |
| 249 | 242 |
| 250 SetPolicies(empty_); | 243 SetPolicies(empty_); |
| 251 StartWatching(); | 244 StartWatching(); |
| 252 StopWatching(); | |
| 253 } | 245 } |
| 254 | 246 |
| 255 TEST_F(PolicyWatcherTest, NatTrue) { | 247 TEST_F(PolicyWatcherTest, NatTrue) { |
| 256 EXPECT_CALL(mock_policy_callback_, | 248 EXPECT_CALL(mock_policy_callback_, |
| 257 OnPolicyUpdatePtr(IsPolicies(&nat_true_others_default_))); | 249 OnPolicyUpdatePtr(IsPolicies(&nat_true_others_default_))); |
| 258 | 250 |
| 259 SetPolicies(nat_true_); | 251 SetPolicies(nat_true_); |
| 260 StartWatching(); | 252 StartWatching(); |
| 261 StopWatching(); | |
| 262 } | 253 } |
| 263 | 254 |
| 264 TEST_F(PolicyWatcherTest, NatFalse) { | 255 TEST_F(PolicyWatcherTest, NatFalse) { |
| 265 EXPECT_CALL(mock_policy_callback_, | 256 EXPECT_CALL(mock_policy_callback_, |
| 266 OnPolicyUpdatePtr(IsPolicies(&nat_false_others_default_))); | 257 OnPolicyUpdatePtr(IsPolicies(&nat_false_others_default_))); |
| 267 | 258 |
| 268 SetPolicies(nat_false_); | 259 SetPolicies(nat_false_); |
| 269 StartWatching(); | 260 StartWatching(); |
| 270 StopWatching(); | |
| 271 } | 261 } |
| 272 | 262 |
| 273 TEST_F(PolicyWatcherTest, NatOne) { | 263 TEST_F(PolicyWatcherTest, NatOne) { |
| 274 EXPECT_CALL(mock_policy_callback_, | 264 EXPECT_CALL(mock_policy_callback_, |
| 275 OnPolicyUpdatePtr(IsPolicies(&nat_false_others_default_))); | 265 OnPolicyUpdatePtr(IsPolicies(&nat_false_others_default_))); |
| 276 | 266 |
| 277 SetPolicies(nat_one_); | 267 SetPolicies(nat_one_); |
| 278 StartWatching(); | 268 StartWatching(); |
| 279 StopWatching(); | |
| 280 } | 269 } |
| 281 | 270 |
| 282 TEST_F(PolicyWatcherTest, DomainEmpty) { | 271 TEST_F(PolicyWatcherTest, DomainEmpty) { |
| 283 EXPECT_CALL(mock_policy_callback_, | 272 EXPECT_CALL(mock_policy_callback_, |
| 284 OnPolicyUpdatePtr(IsPolicies(&domain_empty_others_default_))); | 273 OnPolicyUpdatePtr(IsPolicies(&domain_empty_others_default_))); |
| 285 | 274 |
| 286 SetPolicies(domain_empty_); | 275 SetPolicies(domain_empty_); |
| 287 StartWatching(); | 276 StartWatching(); |
| 288 StopWatching(); | |
| 289 } | 277 } |
| 290 | 278 |
| 291 TEST_F(PolicyWatcherTest, DomainFull) { | 279 TEST_F(PolicyWatcherTest, DomainFull) { |
| 292 EXPECT_CALL(mock_policy_callback_, | 280 EXPECT_CALL(mock_policy_callback_, |
| 293 OnPolicyUpdatePtr(IsPolicies(&domain_full_others_default_))); | 281 OnPolicyUpdatePtr(IsPolicies(&domain_full_others_default_))); |
| 294 | 282 |
| 295 SetPolicies(domain_full_); | 283 SetPolicies(domain_full_); |
| 296 StartWatching(); | 284 StartWatching(); |
| 297 StopWatching(); | |
| 298 } | 285 } |
| 299 | 286 |
| 300 TEST_F(PolicyWatcherTest, NatNoneThenTrue) { | 287 TEST_F(PolicyWatcherTest, NatNoneThenTrue) { |
| 301 EXPECT_CALL(mock_policy_callback_, | 288 EXPECT_CALL(mock_policy_callback_, |
| 302 OnPolicyUpdatePtr(IsPolicies(&nat_true_others_default_))); | 289 OnPolicyUpdatePtr(IsPolicies(&nat_true_others_default_))); |
| 303 | 290 |
| 304 SetPolicies(empty_); | 291 SetPolicies(empty_); |
| 305 StartWatching(); | 292 StartWatching(); |
| 306 SetPolicies(nat_true_); | 293 SetPolicies(nat_true_); |
| 307 StopWatching(); | |
| 308 } | 294 } |
| 309 | 295 |
| 310 TEST_F(PolicyWatcherTest, NatNoneThenTrueThenTrue) { | 296 TEST_F(PolicyWatcherTest, NatNoneThenTrueThenTrue) { |
| 311 EXPECT_CALL(mock_policy_callback_, | 297 EXPECT_CALL(mock_policy_callback_, |
| 312 OnPolicyUpdatePtr(IsPolicies(&nat_true_others_default_))); | 298 OnPolicyUpdatePtr(IsPolicies(&nat_true_others_default_))); |
| 313 | 299 |
| 314 SetPolicies(empty_); | 300 SetPolicies(empty_); |
| 315 StartWatching(); | 301 StartWatching(); |
| 316 SetPolicies(nat_true_); | 302 SetPolicies(nat_true_); |
| 317 SetPolicies(nat_true_); | 303 SetPolicies(nat_true_); |
| 318 StopWatching(); | |
| 319 } | 304 } |
| 320 | 305 |
| 321 TEST_F(PolicyWatcherTest, NatNoneThenTrueThenTrueThenFalse) { | 306 TEST_F(PolicyWatcherTest, NatNoneThenTrueThenTrueThenFalse) { |
| 322 testing::InSequence sequence; | 307 testing::InSequence sequence; |
| 323 EXPECT_CALL(mock_policy_callback_, | 308 EXPECT_CALL(mock_policy_callback_, |
| 324 OnPolicyUpdatePtr(IsPolicies(&nat_true_others_default_))); | 309 OnPolicyUpdatePtr(IsPolicies(&nat_true_others_default_))); |
| 325 EXPECT_CALL(mock_policy_callback_, | 310 EXPECT_CALL(mock_policy_callback_, |
| 326 OnPolicyUpdatePtr(IsPolicies(&nat_false_))); | 311 OnPolicyUpdatePtr(IsPolicies(&nat_false_))); |
| 327 | 312 |
| 328 SetPolicies(empty_); | 313 SetPolicies(empty_); |
| 329 StartWatching(); | 314 StartWatching(); |
| 330 SetPolicies(nat_true_); | 315 SetPolicies(nat_true_); |
| 331 SetPolicies(nat_true_); | 316 SetPolicies(nat_true_); |
| 332 SetPolicies(nat_false_); | 317 SetPolicies(nat_false_); |
| 333 StopWatching(); | |
| 334 } | 318 } |
| 335 | 319 |
| 336 TEST_F(PolicyWatcherTest, NatNoneThenFalse) { | 320 TEST_F(PolicyWatcherTest, NatNoneThenFalse) { |
| 337 testing::InSequence sequence; | 321 testing::InSequence sequence; |
| 338 EXPECT_CALL(mock_policy_callback_, | 322 EXPECT_CALL(mock_policy_callback_, |
| 339 OnPolicyUpdatePtr(IsPolicies(&nat_true_others_default_))); | 323 OnPolicyUpdatePtr(IsPolicies(&nat_true_others_default_))); |
| 340 EXPECT_CALL(mock_policy_callback_, | 324 EXPECT_CALL(mock_policy_callback_, |
| 341 OnPolicyUpdatePtr(IsPolicies(&nat_false_))); | 325 OnPolicyUpdatePtr(IsPolicies(&nat_false_))); |
| 342 | 326 |
| 343 SetPolicies(empty_); | 327 SetPolicies(empty_); |
| 344 StartWatching(); | 328 StartWatching(); |
| 345 SetPolicies(nat_false_); | 329 SetPolicies(nat_false_); |
| 346 StopWatching(); | |
| 347 } | 330 } |
| 348 | 331 |
| 349 TEST_F(PolicyWatcherTest, NatNoneThenFalseThenTrue) { | 332 TEST_F(PolicyWatcherTest, NatNoneThenFalseThenTrue) { |
| 350 testing::InSequence sequence; | 333 testing::InSequence sequence; |
| 351 EXPECT_CALL(mock_policy_callback_, | 334 EXPECT_CALL(mock_policy_callback_, |
| 352 OnPolicyUpdatePtr(IsPolicies(&nat_true_others_default_))); | 335 OnPolicyUpdatePtr(IsPolicies(&nat_true_others_default_))); |
| 353 EXPECT_CALL(mock_policy_callback_, | 336 EXPECT_CALL(mock_policy_callback_, |
| 354 OnPolicyUpdatePtr(IsPolicies(&nat_false_))); | 337 OnPolicyUpdatePtr(IsPolicies(&nat_false_))); |
| 355 EXPECT_CALL(mock_policy_callback_, | 338 EXPECT_CALL(mock_policy_callback_, |
| 356 OnPolicyUpdatePtr(IsPolicies(&nat_true_))); | 339 OnPolicyUpdatePtr(IsPolicies(&nat_true_))); |
| 357 | 340 |
| 358 SetPolicies(empty_); | 341 SetPolicies(empty_); |
| 359 StartWatching(); | 342 StartWatching(); |
| 360 SetPolicies(nat_false_); | 343 SetPolicies(nat_false_); |
| 361 SetPolicies(nat_true_); | 344 SetPolicies(nat_true_); |
| 362 StopWatching(); | |
| 363 } | 345 } |
| 364 | 346 |
| 365 TEST_F(PolicyWatcherTest, ChangeOneRepeatedlyThenTwo) { | 347 TEST_F(PolicyWatcherTest, ChangeOneRepeatedlyThenTwo) { |
| 366 testing::InSequence sequence; | 348 testing::InSequence sequence; |
| 367 EXPECT_CALL(mock_policy_callback_, | 349 EXPECT_CALL(mock_policy_callback_, |
| 368 OnPolicyUpdatePtr(IsPolicies( | 350 OnPolicyUpdatePtr(IsPolicies( |
| 369 &nat_true_domain_empty_others_default_))); | 351 &nat_true_domain_empty_others_default_))); |
| 370 EXPECT_CALL(mock_policy_callback_, | 352 EXPECT_CALL(mock_policy_callback_, |
| 371 OnPolicyUpdatePtr(IsPolicies(&domain_full_))); | 353 OnPolicyUpdatePtr(IsPolicies(&domain_full_))); |
| 372 EXPECT_CALL(mock_policy_callback_, | 354 EXPECT_CALL(mock_policy_callback_, |
| 373 OnPolicyUpdatePtr(IsPolicies(&nat_false_))); | 355 OnPolicyUpdatePtr(IsPolicies(&nat_false_))); |
| 374 EXPECT_CALL(mock_policy_callback_, | 356 EXPECT_CALL(mock_policy_callback_, |
| 375 OnPolicyUpdatePtr(IsPolicies(&domain_empty_))); | 357 OnPolicyUpdatePtr(IsPolicies(&domain_empty_))); |
| 376 EXPECT_CALL(mock_policy_callback_, | 358 EXPECT_CALL(mock_policy_callback_, |
| 377 OnPolicyUpdatePtr(IsPolicies(&nat_true_domain_full_))); | 359 OnPolicyUpdatePtr(IsPolicies(&nat_true_domain_full_))); |
| 378 | 360 |
| 379 SetPolicies(nat_true_domain_empty_); | 361 SetPolicies(nat_true_domain_empty_); |
| 380 StartWatching(); | 362 StartWatching(); |
| 381 SetPolicies(nat_true_domain_full_); | 363 SetPolicies(nat_true_domain_full_); |
| 382 SetPolicies(nat_false_domain_full_); | 364 SetPolicies(nat_false_domain_full_); |
| 383 SetPolicies(nat_false_domain_empty_); | 365 SetPolicies(nat_false_domain_empty_); |
| 384 SetPolicies(nat_true_domain_full_); | 366 SetPolicies(nat_true_domain_full_); |
| 385 StopWatching(); | |
| 386 } | 367 } |
| 387 | 368 |
| 388 TEST_F(PolicyWatcherTest, FilterUnknownPolicies) { | 369 TEST_F(PolicyWatcherTest, FilterUnknownPolicies) { |
| 389 testing::InSequence sequence; | 370 testing::InSequence sequence; |
| 390 EXPECT_CALL(mock_policy_callback_, | 371 EXPECT_CALL(mock_policy_callback_, |
| 391 OnPolicyUpdatePtr(IsPolicies(&nat_true_others_default_))); | 372 OnPolicyUpdatePtr(IsPolicies(&nat_true_others_default_))); |
| 392 | 373 |
| 393 SetPolicies(empty_); | 374 SetPolicies(empty_); |
| 394 StartWatching(); | 375 StartWatching(); |
| 395 SetPolicies(unknown_policies_); | 376 SetPolicies(unknown_policies_); |
| 396 SetPolicies(empty_); | 377 SetPolicies(empty_); |
| 397 StopWatching(); | |
| 398 } | 378 } |
| 399 | 379 |
| 400 TEST_F(PolicyWatcherTest, DebugOverrideNatPolicy) { | 380 TEST_F(PolicyWatcherTest, DebugOverrideNatPolicy) { |
| 401 #if !defined(NDEBUG) | 381 #if !defined(NDEBUG) |
| 402 EXPECT_CALL( | 382 EXPECT_CALL( |
| 403 mock_policy_callback_, | 383 mock_policy_callback_, |
| 404 OnPolicyUpdatePtr(IsPolicies(&nat_false_overridden_others_default_))); | 384 OnPolicyUpdatePtr(IsPolicies(&nat_false_overridden_others_default_))); |
| 405 #else | 385 #else |
| 406 EXPECT_CALL(mock_policy_callback_, | 386 EXPECT_CALL(mock_policy_callback_, |
| 407 OnPolicyUpdatePtr(IsPolicies(&nat_true_others_default_))); | 387 OnPolicyUpdatePtr(IsPolicies(&nat_true_others_default_))); |
| 408 #endif | 388 #endif |
| 409 | 389 |
| 410 SetPolicies(nat_true_and_overridden_); | 390 SetPolicies(nat_true_and_overridden_); |
| 411 StartWatching(); | 391 StartWatching(); |
| 412 StopWatching(); | |
| 413 } | 392 } |
| 414 | 393 |
| 415 TEST_F(PolicyWatcherTest, PairingFalseThenTrue) { | 394 TEST_F(PolicyWatcherTest, PairingFalseThenTrue) { |
| 416 testing::InSequence sequence; | 395 testing::InSequence sequence; |
| 417 EXPECT_CALL(mock_policy_callback_, | 396 EXPECT_CALL(mock_policy_callback_, |
| 418 OnPolicyUpdatePtr(IsPolicies(&nat_true_others_default_))); | 397 OnPolicyUpdatePtr(IsPolicies(&nat_true_others_default_))); |
| 419 EXPECT_CALL(mock_policy_callback_, | 398 EXPECT_CALL(mock_policy_callback_, |
| 420 OnPolicyUpdatePtr(IsPolicies(&pairing_false_))); | 399 OnPolicyUpdatePtr(IsPolicies(&pairing_false_))); |
| 421 EXPECT_CALL(mock_policy_callback_, | 400 EXPECT_CALL(mock_policy_callback_, |
| 422 OnPolicyUpdatePtr(IsPolicies(&pairing_true_))); | 401 OnPolicyUpdatePtr(IsPolicies(&pairing_true_))); |
| 423 | 402 |
| 424 SetPolicies(empty_); | 403 SetPolicies(empty_); |
| 425 StartWatching(); | 404 StartWatching(); |
| 426 SetPolicies(pairing_false_); | 405 SetPolicies(pairing_false_); |
| 427 SetPolicies(pairing_true_); | 406 SetPolicies(pairing_true_); |
| 428 StopWatching(); | |
| 429 } | 407 } |
| 430 | 408 |
| 431 TEST_F(PolicyWatcherTest, GnubbyAuth) { | 409 TEST_F(PolicyWatcherTest, GnubbyAuth) { |
| 432 testing::InSequence sequence; | 410 testing::InSequence sequence; |
| 433 EXPECT_CALL(mock_policy_callback_, | 411 EXPECT_CALL(mock_policy_callback_, |
| 434 OnPolicyUpdatePtr(IsPolicies(&nat_true_others_default_))); | 412 OnPolicyUpdatePtr(IsPolicies(&nat_true_others_default_))); |
| 435 EXPECT_CALL(mock_policy_callback_, | 413 EXPECT_CALL(mock_policy_callback_, |
| 436 OnPolicyUpdatePtr(IsPolicies(&gnubby_auth_false_))); | 414 OnPolicyUpdatePtr(IsPolicies(&gnubby_auth_false_))); |
| 437 EXPECT_CALL(mock_policy_callback_, | 415 EXPECT_CALL(mock_policy_callback_, |
| 438 OnPolicyUpdatePtr(IsPolicies(&gnubby_auth_true_))); | 416 OnPolicyUpdatePtr(IsPolicies(&gnubby_auth_true_))); |
| 439 | 417 |
| 440 SetPolicies(empty_); | 418 SetPolicies(empty_); |
| 441 StartWatching(); | 419 StartWatching(); |
| 442 SetPolicies(gnubby_auth_false_); | 420 SetPolicies(gnubby_auth_false_); |
| 443 SetPolicies(gnubby_auth_true_); | 421 SetPolicies(gnubby_auth_true_); |
| 444 StopWatching(); | |
| 445 } | 422 } |
| 446 | 423 |
| 447 TEST_F(PolicyWatcherTest, Relay) { | 424 TEST_F(PolicyWatcherTest, Relay) { |
| 448 testing::InSequence sequence; | 425 testing::InSequence sequence; |
| 449 EXPECT_CALL(mock_policy_callback_, | 426 EXPECT_CALL(mock_policy_callback_, |
| 450 OnPolicyUpdatePtr(IsPolicies(&nat_true_others_default_))); | 427 OnPolicyUpdatePtr(IsPolicies(&nat_true_others_default_))); |
| 451 EXPECT_CALL(mock_policy_callback_, | 428 EXPECT_CALL(mock_policy_callback_, |
| 452 OnPolicyUpdatePtr(IsPolicies(&relay_false_))); | 429 OnPolicyUpdatePtr(IsPolicies(&relay_false_))); |
| 453 EXPECT_CALL(mock_policy_callback_, | 430 EXPECT_CALL(mock_policy_callback_, |
| 454 OnPolicyUpdatePtr(IsPolicies(&relay_true_))); | 431 OnPolicyUpdatePtr(IsPolicies(&relay_true_))); |
| 455 | 432 |
| 456 SetPolicies(empty_); | 433 SetPolicies(empty_); |
| 457 StartWatching(); | 434 StartWatching(); |
| 458 SetPolicies(relay_false_); | 435 SetPolicies(relay_false_); |
| 459 SetPolicies(relay_true_); | 436 SetPolicies(relay_true_); |
| 460 StopWatching(); | |
| 461 } | 437 } |
| 462 | 438 |
| 463 TEST_F(PolicyWatcherTest, UdpPortRange) { | 439 TEST_F(PolicyWatcherTest, UdpPortRange) { |
| 464 testing::InSequence sequence; | 440 testing::InSequence sequence; |
| 465 EXPECT_CALL(mock_policy_callback_, | 441 EXPECT_CALL(mock_policy_callback_, |
| 466 OnPolicyUpdatePtr(IsPolicies(&nat_true_others_default_))); | 442 OnPolicyUpdatePtr(IsPolicies(&nat_true_others_default_))); |
| 467 EXPECT_CALL(mock_policy_callback_, | 443 EXPECT_CALL(mock_policy_callback_, |
| 468 OnPolicyUpdatePtr(IsPolicies(&port_range_full_))); | 444 OnPolicyUpdatePtr(IsPolicies(&port_range_full_))); |
| 469 EXPECT_CALL(mock_policy_callback_, | 445 EXPECT_CALL(mock_policy_callback_, |
| 470 OnPolicyUpdatePtr(IsPolicies(&port_range_empty_))); | 446 OnPolicyUpdatePtr(IsPolicies(&port_range_empty_))); |
| 471 | 447 |
| 472 SetPolicies(empty_); | 448 SetPolicies(empty_); |
| 473 StartWatching(); | 449 StartWatching(); |
| 474 SetPolicies(port_range_full_); | 450 SetPolicies(port_range_full_); |
| 475 SetPolicies(port_range_empty_); | 451 SetPolicies(port_range_empty_); |
| 476 StopWatching(); | |
| 477 } | 452 } |
| 478 | 453 |
| 479 const int kMaxTransientErrorRetries = 5; | 454 const int kMaxTransientErrorRetries = 5; |
| 480 | 455 |
| 481 TEST_F(PolicyWatcherTest, SingleTransientErrorDoesntTriggerErrorCallback) { | 456 TEST_F(PolicyWatcherTest, SingleTransientErrorDoesntTriggerErrorCallback) { |
| 482 EXPECT_CALL(mock_policy_callback_, OnPolicyErrorPtr()).Times(0); | 457 EXPECT_CALL(mock_policy_callback_, OnPolicyErrorPtr()).Times(0); |
| 483 | 458 |
| 484 StartWatching(); | 459 StartWatching(); |
| 485 SignalTransientErrorForTest(); | 460 SignalTransientErrorForTest(); |
| 486 StopWatching(); | |
| 487 } | 461 } |
| 488 | 462 |
| 489 TEST_F(PolicyWatcherTest, MultipleTransientErrorsTriggerErrorCallback) { | 463 TEST_F(PolicyWatcherTest, MultipleTransientErrorsTriggerErrorCallback) { |
| 490 EXPECT_CALL(mock_policy_callback_, OnPolicyErrorPtr()); | 464 EXPECT_CALL(mock_policy_callback_, OnPolicyErrorPtr()); |
| 491 | 465 |
| 492 StartWatching(); | 466 StartWatching(); |
| 493 for (int i = 0; i < kMaxTransientErrorRetries; i++) { | 467 for (int i = 0; i < kMaxTransientErrorRetries; i++) { |
| 494 SignalTransientErrorForTest(); | 468 SignalTransientErrorForTest(); |
| 495 } | 469 } |
| 496 StopWatching(); | |
| 497 } | 470 } |
| 498 | 471 |
| 499 TEST_F(PolicyWatcherTest, PolicyUpdateResetsTransientErrorsCounter) { | 472 TEST_F(PolicyWatcherTest, PolicyUpdateResetsTransientErrorsCounter) { |
| 500 testing::InSequence s; | 473 testing::InSequence s; |
| 501 EXPECT_CALL(mock_policy_callback_, OnPolicyUpdatePtr(testing::_)); | 474 EXPECT_CALL(mock_policy_callback_, OnPolicyUpdatePtr(testing::_)); |
| 502 EXPECT_CALL(mock_policy_callback_, OnPolicyErrorPtr()).Times(0); | 475 EXPECT_CALL(mock_policy_callback_, OnPolicyErrorPtr()).Times(0); |
| 503 | 476 |
| 504 StartWatching(); | 477 StartWatching(); |
| 505 for (int i = 0; i < (kMaxTransientErrorRetries - 1); i++) { | 478 for (int i = 0; i < (kMaxTransientErrorRetries - 1); i++) { |
| 506 SignalTransientErrorForTest(); | 479 SignalTransientErrorForTest(); |
| 507 } | 480 } |
| 508 SetPolicies(nat_true_); | 481 SetPolicies(nat_true_); |
| 509 for (int i = 0; i < (kMaxTransientErrorRetries - 1); i++) { | 482 for (int i = 0; i < (kMaxTransientErrorRetries - 1); i++) { |
| 510 SignalTransientErrorForTest(); | 483 SignalTransientErrorForTest(); |
| 511 } | 484 } |
| 512 StopWatching(); | |
| 513 } | 485 } |
| 514 | 486 |
| 515 // Unit tests cannot instantiate PolicyWatcher on ChromeOS | 487 // Unit tests cannot instantiate PolicyWatcher on ChromeOS |
| 516 // (as this requires running inside a browser process). | 488 // (as this requires running inside a browser process). |
| 517 #ifndef OS_CHROMEOS | 489 #ifndef OS_CHROMEOS |
| 518 | 490 |
| 519 namespace { | 491 namespace { |
| 520 | 492 |
| 521 void OnPolicyUpdatedDumpPolicy(scoped_ptr<base::DictionaryValue> policies) { | 493 void OnPolicyUpdatedDumpPolicy(scoped_ptr<base::DictionaryValue> policies) { |
| 522 VLOG(1) << "OnPolicyUpdated callback received the following policies:"; | 494 VLOG(1) << "OnPolicyUpdated callback received the following policies:"; |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 557 scoped_ptr<PolicyWatcher> policy_watcher( | 529 scoped_ptr<PolicyWatcher> policy_watcher( |
| 558 PolicyWatcher::Create(nullptr, task_runner)); | 530 PolicyWatcher::Create(nullptr, task_runner)); |
| 559 | 531 |
| 560 { | 532 { |
| 561 base::RunLoop run_loop; | 533 base::RunLoop run_loop; |
| 562 policy_watcher->StartWatching(base::Bind(OnPolicyUpdatedDumpPolicy), | 534 policy_watcher->StartWatching(base::Bind(OnPolicyUpdatedDumpPolicy), |
| 563 base::Bind(base::DoNothing)); | 535 base::Bind(base::DoNothing)); |
| 564 run_loop.RunUntilIdle(); | 536 run_loop.RunUntilIdle(); |
| 565 } | 537 } |
| 566 | 538 |
| 567 { | |
| 568 base::RunLoop run_loop; | |
| 569 PolicyWatcher* raw_policy_watcher = policy_watcher.release(); | |
| 570 raw_policy_watcher->StopWatching( | |
| 571 base::Bind(base::IgnoreResult( | |
| 572 &base::SequencedTaskRunner::DeleteSoon<PolicyWatcher>), | |
| 573 task_runner, FROM_HERE, raw_policy_watcher)); | |
| 574 run_loop.RunUntilIdle(); | |
| 575 } | |
| 576 | |
| 577 // Today, the only verification offered by this test is: | 539 // Today, the only verification offered by this test is: |
| 578 // - Manual verification of policy values dumped by OnPolicyUpdatedDumpPolicy | 540 // - Manual verification of policy values dumped by OnPolicyUpdatedDumpPolicy |
| 579 // - Automated verification that nothing crashed | 541 // - Automated verification that nothing crashed |
| 580 } | 542 } |
| 581 | 543 |
| 582 #endif | 544 #endif |
| 583 | 545 |
| 584 } // namespace policy_hack | 546 } // namespace policy_hack |
| 585 } // namespace remoting | 547 } // namespace remoting |
| OLD | NEW |