146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// found in the LICENSE file.
446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Note: This file also tests child_process.*.
646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "mojo/shell/child_process_host.h"
846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "base/logging.h"
1046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "base/macros.h"
1146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "base/message_loop/message_loop.h"
1246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "mojo/common/message_pump_mojo.h"
1346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "mojo/shell/context.h"
1446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "mojo/shell/shell_test_base.h"
1546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
1646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
1746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)namespace mojo {
1846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)namespace shell {
1946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)namespace test {
2046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)namespace {
2146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
2246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class TestChildProcessHostDelegate : public ChildProcessHost::Delegate {
2346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) public:
2446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  TestChildProcessHostDelegate() {}
2546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual ~TestChildProcessHostDelegate() {}
2646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual void WillStart() OVERRIDE {
2746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    VLOG(2) << "TestChildProcessHostDelegate::WillStart()";
2846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  }
2946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual void DidStart(bool success) OVERRIDE {
3046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    VLOG(2) << "TestChildProcessHostDelegate::DidStart(" << success << ")";
3146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    base::MessageLoop::current()->QuitWhenIdle();
3246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  }
3346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)};
3446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
3546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)typedef ShellTestBase ChildProcessHostTest;
3646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
3746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(ChildProcessHostTest, Basic) {
3846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  base::MessageLoop message_loop(
3946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      scoped_ptr<base::MessagePump>(new common::MessagePumpMojo()));
4046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
4146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  Context context;
4246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  TestChildProcessHostDelegate child_process_host_delegate;
4346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  ChildProcessHost child_process_host(&context,
4446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                                      &child_process_host_delegate,
4546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                                      ChildProcess::TYPE_TEST);
4646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  child_process_host.Start();
4746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  message_loop.Run();
4846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  int exit_code = child_process_host.Join();
4946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  VLOG(2) << "Joined child: exit_code = " << exit_code;
5046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  EXPECT_EQ(0, exit_code);
5146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}
5246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
5346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}  // namespace
5446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}  // namespace test
5546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}  // namespace shell
5646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}  // namespace mojo
57