michael@0: // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. michael@0: // Use of this source code is governed by a BSD-style license that can be michael@0: // found in the LICENSE file. michael@0: michael@0: #include "testing/gtest/include/gtest/gtest.h" michael@0: #include "sandbox/win/src/sandbox.h" michael@0: #include "sandbox/win/src/sandbox_factory.h" michael@0: #include "sandbox/win/src/target_services.h" michael@0: #include "sandbox/win/tests/common/controller.h" michael@0: michael@0: namespace sandbox { michael@0: michael@0: // Tests that the IPC is working by issuing a special IPC that is not exposed michael@0: // in the public API. michael@0: SBOX_TESTS_COMMAND int IPC_Ping(int argc, wchar_t **argv) { michael@0: if (argc != 1) michael@0: return SBOX_TEST_FAILED; michael@0: michael@0: TargetServices* ts = SandboxFactory::GetTargetServices(); michael@0: if (NULL == ts) michael@0: return SBOX_TEST_FAILED; michael@0: michael@0: // Downcast because we have internal knowledge of the object returned. michael@0: TargetServicesBase* ts_base = reinterpret_cast(ts); michael@0: michael@0: int version = 0; michael@0: if (L'1' == argv[0][0]) michael@0: version = 1; michael@0: else michael@0: version = 2; michael@0: michael@0: if (!ts_base->TestIPCPing(version)) michael@0: return SBOX_TEST_FAILED; michael@0: michael@0: ::Sleep(1); michael@0: if (!ts_base->TestIPCPing(version)) michael@0: return SBOX_TEST_FAILED; michael@0: michael@0: return SBOX_TEST_SUCCEEDED; michael@0: } michael@0: michael@0: // The IPC ping test should work before and after the token drop. michael@0: TEST(IPCTest, IPCPingTestSimple) { michael@0: TestRunner runner; michael@0: runner.SetTimeout(2000); michael@0: runner.SetTestState(EVERY_STATE); michael@0: EXPECT_EQ(SBOX_TEST_SUCCEEDED, runner.RunTest(L"IPC_Ping 1")); michael@0: } michael@0: michael@0: TEST(IPCTest, IPCPingTestWithOutput) { michael@0: TestRunner runner; michael@0: runner.SetTimeout(2000); michael@0: runner.SetTestState(EVERY_STATE); michael@0: EXPECT_EQ(SBOX_TEST_SUCCEEDED, runner.RunTest(L"IPC_Ping 2")); michael@0: EXPECT_EQ(SBOX_TEST_SUCCEEDED, runner.RunTest(L"IPC_Ping 2")); michael@0: } michael@0: michael@0: } // namespace sandbox