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 "chrome/common/service_process_util.h" | 5 #include "chrome/common/service_process_util.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
70 base::CompareCase::SENSITIVE)); | 70 base::CompareCase::SENSITIVE)); |
71 EXPECT_NE(std::string::npos, | 71 EXPECT_NE(std::string::npos, |
72 scoped_name.find(version_info::GetVersionNumber())); | 72 scoped_name.find(version_info::GetVersionNumber())); |
73 } | 73 } |
74 | 74 |
75 class ServiceProcessStateTest : public base::MultiProcessTest { | 75 class ServiceProcessStateTest : public base::MultiProcessTest { |
76 public: | 76 public: |
77 ServiceProcessStateTest(); | 77 ServiceProcessStateTest(); |
78 ~ServiceProcessStateTest() override; | 78 ~ServiceProcessStateTest() override; |
79 void SetUp() override; | 79 void SetUp() override; |
80 base::SingleThreadTaskRunner* IOMessageLoopProxy() { | 80 base::SingleThreadTaskRunner* IOTaskRunner() { |
81 return io_thread_.task_runner().get(); | 81 return io_thread_.task_runner().get(); |
82 } | 82 } |
83 void LaunchAndWait(const std::string& name); | 83 void LaunchAndWait(const std::string& name); |
84 | 84 |
85 private: | 85 private: |
86 // This is used to release the ServiceProcessState singleton after each test. | 86 // This is used to release the ServiceProcessState singleton after each test. |
87 base::ShadowingAtExitManager at_exit_manager_; | 87 base::ShadowingAtExitManager at_exit_manager_; |
88 base::Thread io_thread_; | 88 base::Thread io_thread_; |
89 }; | 89 }; |
90 | 90 |
(...skipping 21 matching lines...) Expand all Loading... |
112 ServiceProcessState state; | 112 ServiceProcessState state; |
113 ASSERT_TRUE(state.Initialize()); | 113 ASSERT_TRUE(state.Initialize()); |
114 LaunchAndWait("ServiceProcessStateTestSingleton"); | 114 LaunchAndWait("ServiceProcessStateTestSingleton"); |
115 } | 115 } |
116 | 116 |
117 // http://crbug.com/396390 | 117 // http://crbug.com/396390 |
118 TEST_F(ServiceProcessStateTest, DISABLED_ReadyState) { | 118 TEST_F(ServiceProcessStateTest, DISABLED_ReadyState) { |
119 ASSERT_FALSE(CheckServiceProcessReady()); | 119 ASSERT_FALSE(CheckServiceProcessReady()); |
120 ServiceProcessState state; | 120 ServiceProcessState state; |
121 ASSERT_TRUE(state.Initialize()); | 121 ASSERT_TRUE(state.Initialize()); |
122 ASSERT_TRUE(state.SignalReady(IOMessageLoopProxy(), base::Closure())); | 122 ASSERT_TRUE(state.SignalReady(IOTaskRunner(), base::Closure())); |
123 LaunchAndWait("ServiceProcessStateTestReadyTrue"); | 123 LaunchAndWait("ServiceProcessStateTestReadyTrue"); |
124 state.SignalStopped(); | 124 state.SignalStopped(); |
125 LaunchAndWait("ServiceProcessStateTestReadyFalse"); | 125 LaunchAndWait("ServiceProcessStateTestReadyFalse"); |
126 } | 126 } |
127 | 127 |
128 TEST_F(ServiceProcessStateTest, AutoRun) { | 128 TEST_F(ServiceProcessStateTest, AutoRun) { |
129 ServiceProcessState state; | 129 ServiceProcessState state; |
130 ASSERT_TRUE(state.AddToAutoRun()); | 130 ASSERT_TRUE(state.AddToAutoRun()); |
131 std::unique_ptr<base::CommandLine> autorun_command_line; | 131 std::unique_ptr<base::CommandLine> autorun_command_line; |
132 #if defined(OS_WIN) | 132 #if defined(OS_WIN) |
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
286 loop_.task_runner()->PostDelayedTask( | 286 loop_.task_runner()->PostDelayedTask( |
287 FROM_HERE, base::MessageLoop::QuitWhenIdleClosure(), | 287 FROM_HERE, base::MessageLoop::QuitWhenIdleClosure(), |
288 TestTimeouts::action_max_timeout()); | 288 TestTimeouts::action_max_timeout()); |
289 } | 289 } |
290 | 290 |
291 const MockLaunchd* mock_launchd() const { return mock_launchd_.get(); } | 291 const MockLaunchd* mock_launchd() const { return mock_launchd_.get(); } |
292 const base::FilePath& executable_path() const { return executable_path_; } | 292 const base::FilePath& executable_path() const { return executable_path_; } |
293 const base::FilePath& bundle_path() const { return bundle_path_; } | 293 const base::FilePath& bundle_path() const { return bundle_path_; } |
294 const base::FilePath& GetTempDirPath() const { return temp_dir_.path(); } | 294 const base::FilePath& GetTempDirPath() const { return temp_dir_.path(); } |
295 | 295 |
296 base::SingleThreadTaskRunner* GetIOMessageLoopProxy() { | 296 base::SingleThreadTaskRunner* GetIOTaskRunner() { |
297 return io_thread_.task_runner().get(); | 297 return io_thread_.task_runner().get(); |
298 } | 298 } |
299 void Run() { loop_.Run(); } | 299 void Run() { loop_.Run(); } |
300 | 300 |
301 private: | 301 private: |
302 base::ScopedTempDir temp_dir_; | 302 base::ScopedTempDir temp_dir_; |
303 base::MessageLoopForUI loop_; | 303 base::MessageLoopForUI loop_; |
304 base::Thread io_thread_; | 304 base::Thread io_thread_; |
305 base::FilePath executable_path_, bundle_path_; | 305 base::FilePath executable_path_, bundle_path_; |
306 std::unique_ptr<MockLaunchd> mock_launchd_; | 306 std::unique_ptr<MockLaunchd> mock_launchd_; |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
360 cl.AppendArg("limit"); | 360 cl.AppendArg("limit"); |
361 | 361 |
362 std::string output; | 362 std::string output; |
363 int exit_code = -1; | 363 int exit_code = -1; |
364 ASSERT_TRUE(base::GetAppOutputWithExitCode(cl, &output, &exit_code) | 364 ASSERT_TRUE(base::GetAppOutputWithExitCode(cl, &output, &exit_code) |
365 && exit_code == 0) | 365 && exit_code == 0) |
366 << " exit_code:" << exit_code << " " << output; | 366 << " exit_code:" << exit_code << " " << output; |
367 } | 367 } |
368 | 368 |
369 TEST_F(ServiceProcessStateFileManipulationTest, DeleteFile) { | 369 TEST_F(ServiceProcessStateFileManipulationTest, DeleteFile) { |
370 GetIOMessageLoopProxy()->PostTask( | 370 GetIOTaskRunner()->PostTask(FROM_HERE, |
371 FROM_HERE, | 371 base::Bind(&DeleteFunc, executable_path())); |
372 base::Bind(&DeleteFunc, executable_path())); | |
373 Run(); | 372 Run(); |
374 ASSERT_TRUE(mock_launchd()->remove_called()); | 373 ASSERT_TRUE(mock_launchd()->remove_called()); |
375 ASSERT_TRUE(mock_launchd()->delete_called()); | 374 ASSERT_TRUE(mock_launchd()->delete_called()); |
376 } | 375 } |
377 | 376 |
378 TEST_F(ServiceProcessStateFileManipulationTest, DeleteBundle) { | 377 TEST_F(ServiceProcessStateFileManipulationTest, DeleteBundle) { |
379 GetIOMessageLoopProxy()->PostTask( | 378 GetIOTaskRunner()->PostTask(FROM_HERE, |
380 FROM_HERE, | 379 base::Bind(&DeleteFunc, bundle_path())); |
381 base::Bind(&DeleteFunc, bundle_path())); | |
382 Run(); | 380 Run(); |
383 ASSERT_TRUE(mock_launchd()->remove_called()); | 381 ASSERT_TRUE(mock_launchd()->remove_called()); |
384 ASSERT_TRUE(mock_launchd()->delete_called()); | 382 ASSERT_TRUE(mock_launchd()->delete_called()); |
385 } | 383 } |
386 | 384 |
387 TEST_F(ServiceProcessStateFileManipulationTest, MoveBundle) { | 385 TEST_F(ServiceProcessStateFileManipulationTest, MoveBundle) { |
388 base::FilePath new_loc = GetTempDirPath().AppendASCII("MoveBundle"); | 386 base::FilePath new_loc = GetTempDirPath().AppendASCII("MoveBundle"); |
389 GetIOMessageLoopProxy()->PostTask( | 387 GetIOTaskRunner()->PostTask(FROM_HERE, |
390 FROM_HERE, | 388 base::Bind(&MoveFunc, bundle_path(), new_loc)); |
391 base::Bind(&MoveFunc, bundle_path(), new_loc)); | |
392 Run(); | 389 Run(); |
393 ASSERT_TRUE(mock_launchd()->restart_called()); | 390 ASSERT_TRUE(mock_launchd()->restart_called()); |
394 ASSERT_TRUE(mock_launchd()->write_called()); | 391 ASSERT_TRUE(mock_launchd()->write_called()); |
395 } | 392 } |
396 | 393 |
397 TEST_F(ServiceProcessStateFileManipulationTest, MoveFile) { | 394 TEST_F(ServiceProcessStateFileManipulationTest, MoveFile) { |
398 base::FilePath new_loc = GetTempDirPath().AppendASCII("MoveFile"); | 395 base::FilePath new_loc = GetTempDirPath().AppendASCII("MoveFile"); |
399 GetIOMessageLoopProxy()->PostTask( | 396 GetIOTaskRunner()->PostTask( |
400 FROM_HERE, | 397 FROM_HERE, base::Bind(&MoveFunc, executable_path(), new_loc)); |
401 base::Bind(&MoveFunc, executable_path(), new_loc)); | |
402 Run(); | 398 Run(); |
403 ASSERT_TRUE(mock_launchd()->remove_called()); | 399 ASSERT_TRUE(mock_launchd()->remove_called()); |
404 ASSERT_TRUE(mock_launchd()->delete_called()); | 400 ASSERT_TRUE(mock_launchd()->delete_called()); |
405 } | 401 } |
406 | 402 |
407 TEST_F(ServiceProcessStateFileManipulationTest, TrashBundle) { | 403 TEST_F(ServiceProcessStateFileManipulationTest, TrashBundle) { |
408 FSRef bundle_ref; | 404 FSRef bundle_ref; |
409 ASSERT_TRUE(base::mac::FSRefFromPath(bundle_path().value(), &bundle_ref)); | 405 ASSERT_TRUE(base::mac::FSRefFromPath(bundle_path().value(), &bundle_ref)); |
410 GetIOMessageLoopProxy()->PostTask( | 406 GetIOTaskRunner()->PostTask(FROM_HERE, base::Bind(&TrashFunc, bundle_path())); |
411 FROM_HERE, | |
412 base::Bind(&TrashFunc, bundle_path())); | |
413 Run(); | 407 Run(); |
414 ASSERT_TRUE(mock_launchd()->remove_called()); | 408 ASSERT_TRUE(mock_launchd()->remove_called()); |
415 ASSERT_TRUE(mock_launchd()->delete_called()); | 409 ASSERT_TRUE(mock_launchd()->delete_called()); |
416 std::string path(base::mac::PathFromFSRef(bundle_ref)); | 410 std::string path(base::mac::PathFromFSRef(bundle_ref)); |
417 base::FilePath file_path(path); | 411 base::FilePath file_path(path); |
418 ASSERT_TRUE(base::DeleteFile(file_path, true)); | 412 ASSERT_TRUE(base::DeleteFile(file_path, true)); |
419 } | 413 } |
420 | 414 |
421 TEST_F(ServiceProcessStateFileManipulationTest, ChangeAttr) { | 415 TEST_F(ServiceProcessStateFileManipulationTest, ChangeAttr) { |
422 ScopedAttributesRestorer restorer(bundle_path(), 0777); | 416 ScopedAttributesRestorer restorer(bundle_path(), 0777); |
423 GetIOMessageLoopProxy()->PostTask( | 417 GetIOTaskRunner()->PostTask(FROM_HERE, |
424 FROM_HERE, | 418 base::Bind(&ChangeAttr, bundle_path(), 0222)); |
425 base::Bind(&ChangeAttr, bundle_path(), 0222)); | |
426 Run(); | 419 Run(); |
427 ASSERT_TRUE(mock_launchd()->remove_called()); | 420 ASSERT_TRUE(mock_launchd()->remove_called()); |
428 ASSERT_TRUE(mock_launchd()->delete_called()); | 421 ASSERT_TRUE(mock_launchd()->delete_called()); |
429 } | 422 } |
430 | 423 |
431 #endif // !OS_MACOSX | 424 #endif // !OS_MACOSX |
OLD | NEW |