Chromium Code Reviews| Index: services/service_manager/background/tests/background_service_manager_unittest.cc |
| diff --git a/services/service_manager/background/tests/background_service_manager_unittest.cc b/services/service_manager/background/tests/background_service_manager_unittest.cc |
| index f315cd2909968d888080e641547645b838d8f812..02c4df9dfe2322625158ffff978bb94e4e4d28e8 100644 |
| --- a/services/service_manager/background/tests/background_service_manager_unittest.cc |
| +++ b/services/service_manager/background/tests/background_service_manager_unittest.cc |
| @@ -20,6 +20,7 @@ namespace { |
| const char kTestName[] = "background_service_manager_unittest"; |
| const char kAppName[] = "background_service_manager_test_service"; |
| +// The parent unit test suite service, not the underlying test service. |
| class ServiceImpl : public Service { |
| public: |
| ServiceImpl() {} |
| @@ -40,8 +41,6 @@ void SetFlagAndRunClosure(bool* flag, const base::Closure& closure) { |
| closure.Run(); |
| } |
| -} // namespace |
| - |
| // Uses BackgroundServiceManager to start the service manager in the background |
| // and connects to background_service_manager_test_service, verifying we can |
| // send a message to the service. |
| @@ -71,4 +70,41 @@ TEST(BackgroundServiceManagerTest, MAYBE_Basic) { |
| EXPECT_TRUE(got_result); |
| } |
| +// The out param cannot be last due to base::Bind() currying. |
| +void QuitCallback(bool* callback_called, |
| + const base::Closure& quit_closure, |
| + const Identity& identity) { |
| + EXPECT_EQ(kAppName, identity.name()); |
| + *callback_called = true; |
| + quit_closure.Run(); |
| +} |
| + |
| +// Verifies that quitting a service invokes the quit callback. |
| +TEST(BackgroundServiceManagerTest, SetInstanceQuitCallback) { |
| + BackgroundServiceManager background_service_manager(nullptr, nullptr); |
|
James Cook
2017/01/31 23:14:16
I looked at de-duplicating this setup with the tes
Ken Rockot(use gerrit already)
2017/01/31 23:33:28
Seems fine to me. I prefer copypasta over arbitrar
|
| + base::MessageLoop message_loop; |
| + mojom::ServicePtr service; |
| + ServiceContext service_context(base::MakeUnique<ServiceImpl>(), |
| + mojom::ServiceRequest(&service)); |
| + background_service_manager.RegisterService( |
| + Identity(kTestName, mojom::kRootUserID), std::move(service), nullptr); |
| + |
| + mojom::TestServicePtr test_service; |
| + service_context.connector()->BindInterface(kAppName, &test_service); |
| + |
| + // Set a callback for when the service quits that will quit |run_loop|. |
| + base::RunLoop run_loop; |
| + bool callback_called = false; |
| + background_service_manager.SetInstanceQuitCallback( |
| + base::Bind(&QuitCallback, &callback_called, run_loop.QuitClosure())); |
| + |
| + // Ask the service to quit itself. |
| + test_service->Quit(); |
| + run_loop.Run(); |
| + |
| + // The run loop was quit by the callback and not by something else. |
| + EXPECT_TRUE(callback_called); |
| +} |
| + |
| +} // namespace |
| } // namespace service_manager |