| 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 <gtest/gtest.h> | 5 #include <gtest/gtest.h> |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 #include <sys/wait.h> | 8 #include <sys/wait.h> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 70 bool valid = true; | 70 bool valid = true; |
| 71 for (size_t i = 0; i < output.length(); i++) { | 71 for (size_t i = 0; i < output.length(); i++) { |
| 72 // The character output[i] should be next in at least one of the lines we | 72 // The character output[i] should be next in at least one of the lines we |
| 73 // are testing. | 73 // are testing. |
| 74 valid = (ProcessReceivedCharacter(output[i], 0) || | 74 valid = (ProcessReceivedCharacter(output[i], 0) || |
| 75 ProcessReceivedCharacter(output[i], 1)); | 75 ProcessReceivedCharacter(output[i], 1)); |
| 76 EXPECT_TRUE(valid) << "Received: " << output; | 76 EXPECT_TRUE(valid) << "Received: " << output; |
| 77 } | 77 } |
| 78 | 78 |
| 79 if (!valid || TestSucceeded()) { | 79 if (!valid || TestSucceeded()) { |
| 80 MessageLoop::current()->PostTask(FROM_HERE, | 80 base::MessageLoop::current()->PostTask(FROM_HERE, |
| 81 MessageLoop::QuitClosure()); | 81 base::MessageLoop::QuitClosure()); |
| 82 } | 82 } |
| 83 } | 83 } |
| 84 | 84 |
| 85 virtual void StartRegistryTest(ProcessProxyRegistry* registry) OVERRIDE { | 85 virtual void StartRegistryTest(ProcessProxyRegistry* registry) OVERRIDE { |
| 86 for (int i = 0; i < kTestLineNum; i++) { | 86 for (int i = 0; i < kTestLineNum; i++) { |
| 87 EXPECT_TRUE(registry->SendInput(pid_, kTestLineToSend)); | 87 EXPECT_TRUE(registry->SendInput(pid_, kTestLineToSend)); |
| 88 } | 88 } |
| 89 } | 89 } |
| 90 | 90 |
| 91 private: | 91 private: |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 130 const std::string& output) OVERRIDE { | 130 const std::string& output) OVERRIDE { |
| 131 EXPECT_EQ(pid_, pid); | 131 EXPECT_EQ(pid_, pid); |
| 132 if (!output_received_) { | 132 if (!output_received_) { |
| 133 output_received_ = true; | 133 output_received_ = true; |
| 134 EXPECT_EQ(type, "stdout"); | 134 EXPECT_EQ(type, "stdout"); |
| 135 EXPECT_EQ(output, "p"); | 135 EXPECT_EQ(output, "p"); |
| 136 base::KillProcess(pid_, 0 , true); | 136 base::KillProcess(pid_, 0 , true); |
| 137 return; | 137 return; |
| 138 } | 138 } |
| 139 EXPECT_EQ("exit", type); | 139 EXPECT_EQ("exit", type); |
| 140 MessageLoop::current()->PostTask(FROM_HERE, | 140 base::MessageLoop::current()->PostTask(FROM_HERE, |
| 141 MessageLoop::QuitClosure()); | 141 base::MessageLoop::QuitClosure()); |
| 142 } | 142 } |
| 143 | 143 |
| 144 virtual void StartRegistryTest(ProcessProxyRegistry* registry) OVERRIDE { | 144 virtual void StartRegistryTest(ProcessProxyRegistry* registry) OVERRIDE { |
| 145 EXPECT_TRUE(registry->SendInput(pid_, "p")); | 145 EXPECT_TRUE(registry->SendInput(pid_, "p")); |
| 146 } | 146 } |
| 147 | 147 |
| 148 private: | 148 private: |
| 149 bool output_received_; | 149 bool output_received_; |
| 150 }; | 150 }; |
| 151 | 151 |
| 152 class SigIntTestRunner : public TestRunner { | 152 class SigIntTestRunner : public TestRunner { |
| 153 public: | 153 public: |
| 154 virtual ~SigIntTestRunner() {} | 154 virtual ~SigIntTestRunner() {} |
| 155 | 155 |
| 156 virtual void SetupExpectations(pid_t pid) OVERRIDE { | 156 virtual void SetupExpectations(pid_t pid) OVERRIDE { |
| 157 pid_ = pid; | 157 pid_ = pid; |
| 158 } | 158 } |
| 159 | 159 |
| 160 virtual void OnSomeRead(pid_t pid, const std::string& type, | 160 virtual void OnSomeRead(pid_t pid, const std::string& type, |
| 161 const std::string& output) OVERRIDE { | 161 const std::string& output) OVERRIDE { |
| 162 EXPECT_EQ(pid_, pid); | 162 EXPECT_EQ(pid_, pid); |
| 163 // We may receive ^C on stdout, but we don't care about that, as long as we | 163 // We may receive ^C on stdout, but we don't care about that, as long as we |
| 164 // eventually received exit event. | 164 // eventually received exit event. |
| 165 if (type == "exit") { | 165 if (type == "exit") { |
| 166 MessageLoop::current()->PostTask(FROM_HERE, | 166 base::MessageLoop::current()->PostTask(FROM_HERE, |
| 167 MessageLoop::QuitClosure()); | 167 base::MessageLoop::QuitClosure()); |
| 168 } | 168 } |
| 169 } | 169 } |
| 170 | 170 |
| 171 virtual void StartRegistryTest(ProcessProxyRegistry* registry) OVERRIDE { | 171 virtual void StartRegistryTest(ProcessProxyRegistry* registry) OVERRIDE { |
| 172 // Send SingInt and verify the process exited. | 172 // Send SingInt and verify the process exited. |
| 173 EXPECT_TRUE(registry->SendInput(pid_, "\003")); | 173 EXPECT_TRUE(registry->SendInput(pid_, "\003")); |
| 174 } | 174 } |
| 175 }; | 175 }; |
| 176 | 176 |
| 177 } // namespace | 177 } // namespace |
| (...skipping 17 matching lines...) Expand all Loading... |
| 195 } | 195 } |
| 196 | 196 |
| 197 void EndRegistryTest() { | 197 void EndRegistryTest() { |
| 198 registry_->CloseProcess(pid_); | 198 registry_->CloseProcess(pid_); |
| 199 | 199 |
| 200 base::TerminationStatus status = base::GetTerminationStatus(pid_, NULL); | 200 base::TerminationStatus status = base::GetTerminationStatus(pid_, NULL); |
| 201 EXPECT_NE(base::TERMINATION_STATUS_STILL_RUNNING, status); | 201 EXPECT_NE(base::TERMINATION_STATUS_STILL_RUNNING, status); |
| 202 if (status == base::TERMINATION_STATUS_STILL_RUNNING) | 202 if (status == base::TERMINATION_STATUS_STILL_RUNNING) |
| 203 base::KillProcess(pid_, 0, true); | 203 base::KillProcess(pid_, 0, true); |
| 204 | 204 |
| 205 MessageLoop::current()->PostTask(FROM_HERE, | 205 base::MessageLoop::current()->PostTask(FROM_HERE, |
| 206 MessageLoop::QuitClosure()); | 206 base::MessageLoop::QuitClosure()); |
| 207 } | 207 } |
| 208 | 208 |
| 209 void RunTest() { | 209 void RunTest() { |
| 210 MessageLoop::current()->PostTask( | 210 base::MessageLoop::current()->PostTask( |
| 211 FROM_HERE, | 211 FROM_HERE, |
| 212 base::Bind(&ProcessProxyTest::InitRegistryTest, | 212 base::Bind(&ProcessProxyTest::InitRegistryTest, |
| 213 base::Unretained(this))); | 213 base::Unretained(this))); |
| 214 | 214 |
| 215 // Wait until all data from output watcher is received (QuitTask will be | 215 // Wait until all data from output watcher is received (QuitTask will be |
| 216 // fired on watcher thread). | 216 // fired on watcher thread). |
| 217 MessageLoop::current()->Run(); | 217 base::MessageLoop::current()->Run(); |
| 218 | 218 |
| 219 MessageLoop::current()->PostTask( | 219 base::MessageLoop::current()->PostTask( |
| 220 FROM_HERE, | 220 FROM_HERE, |
| 221 base::Bind(&ProcessProxyTest::EndRegistryTest, | 221 base::Bind(&ProcessProxyTest::EndRegistryTest, |
| 222 base::Unretained(this))); | 222 base::Unretained(this))); |
| 223 | 223 |
| 224 // Wait until we clean up the process proxy. | 224 // Wait until we clean up the process proxy. |
| 225 MessageLoop::current()->Run(); | 225 base::MessageLoop::current()->Run(); |
| 226 } | 226 } |
| 227 | 227 |
| 228 scoped_ptr<TestRunner> test_runner_; | 228 scoped_ptr<TestRunner> test_runner_; |
| 229 | 229 |
| 230 private: | 230 private: |
| 231 ProcessProxyRegistry* registry_; | 231 ProcessProxyRegistry* registry_; |
| 232 pid_t pid_; | 232 pid_t pid_; |
| 233 | 233 |
| 234 MessageLoop message_loop_; | 234 base::MessageLoop message_loop_; |
| 235 }; | 235 }; |
| 236 | 236 |
| 237 // Test will open new process that will run cat command, and verify data we | 237 // Test will open new process that will run cat command, and verify data we |
| 238 // write to process gets echoed back. | 238 // write to process gets echoed back. |
| 239 TEST_F(ProcessProxyTest, RegistryTest) { | 239 TEST_F(ProcessProxyTest, RegistryTest) { |
| 240 test_runner_.reset(new RegistryTestRunner()); | 240 test_runner_.reset(new RegistryTestRunner()); |
| 241 RunTest(); | 241 RunTest(); |
| 242 } | 242 } |
| 243 | 243 |
| 244 // Open new process, then kill it. Verifiy that we detect when the process dies. | 244 // Open new process, then kill it. Verifiy that we detect when the process dies. |
| 245 TEST_F(ProcessProxyTest, RegistryNotifiedOnProcessExit) { | 245 TEST_F(ProcessProxyTest, RegistryNotifiedOnProcessExit) { |
| 246 test_runner_.reset(new RegistryNotifiedOnProcessExitTestRunner()); | 246 test_runner_.reset(new RegistryNotifiedOnProcessExitTestRunner()); |
| 247 RunTest(); | 247 RunTest(); |
| 248 } | 248 } |
| 249 | 249 |
| 250 // Test verifies that \003 message send to process is processed as SigInt. | 250 // Test verifies that \003 message send to process is processed as SigInt. |
| 251 // Timing out on the waterfall: http://crbug.com/115064 | 251 // Timing out on the waterfall: http://crbug.com/115064 |
| 252 TEST_F(ProcessProxyTest, DISABLED_SigInt) { | 252 TEST_F(ProcessProxyTest, DISABLED_SigInt) { |
| 253 test_runner_.reset(new SigIntTestRunner()); | 253 test_runner_.reset(new SigIntTestRunner()); |
| 254 RunTest(); | 254 RunTest(); |
| 255 } | 255 } |
| 256 | 256 |
| 257 } // namespace chromeos | 257 } // namespace chromeos |
| OLD | NEW |