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