quick_pair_process_manager_impl_unittest.cc 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. // Copyright 2020 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "ash/services/quick_pair/quick_pair_process_manager_impl.h"
  5. #include <memory>
  6. #include "ash/quick_pair/common/mock_quick_pair_browser_delegate.h"
  7. #include "ash/services/quick_pair/quick_pair_process_manager.h"
  8. #include "ash/services/quick_pair/quick_pair_process_shutdown_controller.h"
  9. #include "base/callback.h"
  10. #include "base/callback_helpers.h"
  11. #include "base/test/mock_callback.h"
  12. #include "base/test/task_environment.h"
  13. #include "testing/gtest/include/gtest/gtest.h"
  14. namespace ash {
  15. namespace quick_pair {
  16. class FakeProcessShutdownController
  17. : public QuickPairProcessShutdownController {
  18. public:
  19. void Start(base::OnceClosure callback) override {
  20. is_running_ = true;
  21. callback_ = std::move(callback);
  22. }
  23. void Stop() override { is_running_ = false; }
  24. bool is_running() { return is_running_; }
  25. void FireCallback() { std::move(callback_).Run(); }
  26. private:
  27. base::OnceClosure callback_;
  28. bool is_running_;
  29. };
  30. class QuickPairProcessManagerImplTest : public testing::Test {
  31. public:
  32. void SetUp() override {
  33. std::unique_ptr<QuickPairProcessShutdownController> shutdown_controller =
  34. std::make_unique<FakeProcessShutdownController>();
  35. shutdown_controller_ =
  36. static_cast<FakeProcessShutdownController*>(shutdown_controller.get());
  37. process_manager_ = std::make_unique<QuickPairProcessManagerImpl>(
  38. std::move(shutdown_controller));
  39. browser_delegate_ = std::make_unique<MockQuickPairBrowserDelegate>();
  40. }
  41. protected:
  42. base::test::TaskEnvironment task_enviornment_;
  43. FakeProcessShutdownController* shutdown_controller_;
  44. std::unique_ptr<QuickPairProcessManager> process_manager_;
  45. std::unique_ptr<MockQuickPairBrowserDelegate> browser_delegate_;
  46. };
  47. TEST_F(QuickPairProcessManagerImplTest, ProcessStartedWhenReferencesRequested) {
  48. EXPECT_CALL(*(browser_delegate_.get()), RequestService);
  49. process_manager_->GetProcessReference(base::DoNothing());
  50. }
  51. TEST_F(QuickPairProcessManagerImplTest,
  52. ProcessStartedOnceWhenMultipleReferencesRequested) {
  53. EXPECT_CALL(*(browser_delegate_.get()), RequestService);
  54. process_manager_->GetProcessReference(base::DoNothing());
  55. process_manager_->GetProcessReference(base::DoNothing());
  56. }
  57. TEST_F(QuickPairProcessManagerImplTest,
  58. ShutdownStartedWhenNoActiveReferencesRemaining) {
  59. EXPECT_CALL(*(browser_delegate_.get()), RequestService);
  60. auto reference = process_manager_->GetProcessReference(base::DoNothing());
  61. EXPECT_FALSE(shutdown_controller_->is_running());
  62. reference.reset();
  63. EXPECT_TRUE(shutdown_controller_->is_running());
  64. }
  65. TEST_F(QuickPairProcessManagerImplTest,
  66. DeletedReferencesArentNotifiedOnProcessStop) {
  67. EXPECT_CALL(*(browser_delegate_.get()), RequestService);
  68. base::MockCallback<
  69. base::OnceCallback<void(QuickPairProcessManager::ShutdownReason)>>
  70. callback;
  71. auto reference = process_manager_->GetProcessReference(callback.Get());
  72. reference.reset();
  73. EXPECT_CALL(callback, Run(QuickPairProcessManager::ShutdownReason::kNormal))
  74. .Times(0);
  75. shutdown_controller_->FireCallback();
  76. }
  77. } // namespace quick_pair
  78. } // namespace ash