| Index: base/process_unittest.cc
|
| diff --git a/base/process_unittest.cc b/base/process_unittest.cc
|
| deleted file mode 100644
|
| index 70bfd8287483478db6137e8e431637521ee02c45..0000000000000000000000000000000000000000
|
| --- a/base/process_unittest.cc
|
| +++ /dev/null
|
| @@ -1,243 +0,0 @@
|
| -// Copyright 2007-2009 Google Inc.
|
| -//
|
| -// Licensed under the Apache License, Version 2.0 (the "License");
|
| -// you may not use this file except in compliance with the License.
|
| -// You may obtain a copy of the License at
|
| -//
|
| -// http://www.apache.org/licenses/LICENSE-2.0
|
| -//
|
| -// Unless required by applicable law or agreed to in writing, software
|
| -// distributed under the License is distributed on an "AS IS" BASIS,
|
| -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| -// See the License for the specific language governing permissions and
|
| -// limitations under the License.
|
| -// ========================================================================
|
| -
|
| -//
|
| -// Process unit tests.
|
| -
|
| -#include <vector>
|
| -
|
| -#include "omaha/base/app_util.h"
|
| -#include "omaha/base/path.h"
|
| -#include "omaha/base/process.h"
|
| -#include "omaha/base/user_info.h"
|
| -#include "omaha/testing/unit_test.h"
|
| -
|
| -namespace omaha {
|
| -
|
| -const int kWaitUntilDeadMs = 10000;
|
| -
|
| -// Process class that terminates the associated process when deleted.
|
| -class ScopedProcess : public Process {
|
| - public:
|
| - explicit ScopedProcess(const TCHAR* name) : Process(name, NULL) {}
|
| - virtual ~ScopedProcess() {
|
| - Terminate(0);
|
| - EXPECT_TRUE(WaitUntilDead(kWaitUntilDeadMs));
|
| - }
|
| -};
|
| -
|
| -TEST(ProcessTest, StartOneProcess) {
|
| - const TCHAR kExecutableName[] = _T("cmd.exe");
|
| - const TCHAR kExecutableArguments[] = _T("/c exit 702");
|
| - const int kExpectedExitCode = 702;
|
| -
|
| - CString path = ConcatenatePath(app_util::GetSystemDir(), kExecutableName);
|
| - ScopedProcess process(path);
|
| -
|
| - ASSERT_HRESULT_SUCCEEDED(process.Start(kExecutableArguments, NULL));
|
| - EXPECT_TRUE(process.WaitUntilDead(kWaitUntilDeadMs));
|
| -
|
| - // Check the exit code to get some assurance that the process actually ran.
|
| - uint32 exit_code = 0;
|
| - EXPECT_TRUE(process.GetExitCode(&exit_code));
|
| - EXPECT_EQ(kExpectedExitCode, exit_code);
|
| -}
|
| -
|
| -// Dummy process to spin off and then find. The numeric argument will make
|
| -// netstat run until it's killed by the ScopedProcess destructor.
|
| -const TCHAR kTestExecutable[] = _T("netstat.exe");
|
| -const TCHAR kTestArguments[] = _T("10");
|
| -const TCHAR kTestExcludeArguments[] = _T("-o 20");
|
| -const TCHAR kTestExcludeString[] = _T("20");
|
| -const TCHAR kTestIncludeArguments[] = _T("-o 30");
|
| -const TCHAR kTestIncludeString[] = _T("30");
|
| -const int kWaitForProcessStartMs = 500;
|
| -const int kMaxWaitIterations = 10;
|
| -
|
| -TEST(ProcessTest, FindOneProcess) {
|
| - CString path = ConcatenatePath(app_util::GetSystemDir(), kTestExecutable);
|
| - ScopedProcess process(path);
|
| - ASSERT_HRESULT_SUCCEEDED(process.Start(kTestArguments, NULL));
|
| - for (int i = 0; i < kMaxWaitIterations; ++i) {
|
| - ::Sleep(kWaitForProcessStartMs);
|
| - if (process.Running())
|
| - break;
|
| - }
|
| - EXPECT_TRUE(process.Running());
|
| -
|
| - // Try to find the test process.
|
| - uint32 exclude_mask = INCLUDE_ONLY_PROCESS_OWNED_BY_USER;
|
| - CString user_sid;
|
| - std::vector<CString> command_lines;
|
| - std::vector<uint32> process_ids;
|
| -
|
| - ASSERT_SUCCEEDED(omaha::user_info::GetProcessUser(NULL, NULL, &user_sid));
|
| -
|
| - // This test intermittently fails to find the process when run on Pulse.
|
| - // This code attempts to ensure that the process is further along in the
|
| - // initialization process by waiting until Process::GetCommandLine succeeds.
|
| - // This test case does not result in FindProcesses using GetCommandLine, but
|
| - // waiting until this point may be enough to address the intermitent failures.
|
| - HRESULT hr = E_FAIL;
|
| - CString process_cmd;
|
| - for (int tries = 0; tries < 100 && FAILED(hr); ++tries) {
|
| - ::Sleep(50);
|
| - hr = Process::GetCommandLine(process.GetId(), &process_cmd);
|
| - }
|
| - EXPECT_SUCCEEDED(hr);
|
| -
|
| - ASSERT_SUCCEEDED(Process::FindProcesses(exclude_mask,
|
| - kTestExecutable,
|
| - true,
|
| - user_sid,
|
| - command_lines,
|
| - &process_ids));
|
| - ASSERT_EQ(1, process_ids.size()); // Exit before accessing invalid element.
|
| - EXPECT_EQ(process.GetId(), process_ids[0]);
|
| -}
|
| -
|
| -TEST(ProcessTest, ExcludeProcess) {
|
| - // Make sure the test process is not already running.
|
| - uint32 exclude_mask = INCLUDE_ONLY_PROCESS_OWNED_BY_USER;
|
| - CString user_sid;
|
| - std::vector<CString> command_lines;
|
| - std::vector<uint32> process_ids;
|
| -
|
| - ASSERT_SUCCEEDED(omaha::user_info::GetProcessUser(NULL, NULL, &user_sid));
|
| - ASSERT_SUCCEEDED(Process::FindProcesses(exclude_mask,
|
| - kTestExecutable,
|
| - true,
|
| - user_sid,
|
| - command_lines,
|
| - &process_ids));
|
| - ASSERT_EQ(0, process_ids.size());
|
| -
|
| - // Ok, test process not running. Let's continue running the test.
|
| - CString path = ConcatenatePath(app_util::GetSystemDir(), kTestExecutable);
|
| - ScopedProcess process(path);
|
| - ScopedProcess exclude_process(path);
|
| -
|
| - ASSERT_HRESULT_SUCCEEDED(process.Start(kTestArguments, NULL));
|
| - ASSERT_HRESULT_SUCCEEDED(exclude_process.Start(kTestExcludeArguments, NULL));
|
| - for (int i = 0; i < kMaxWaitIterations; ++i) {
|
| - ::Sleep(kWaitForProcessStartMs);
|
| - if (process.Running() && exclude_process.Running())
|
| - break;
|
| - }
|
| - EXPECT_TRUE(process.Running());
|
| - EXPECT_TRUE(exclude_process.Running());
|
| -
|
| - // Try to find just the first process, excluding the other.
|
| - exclude_mask = INCLUDE_ONLY_PROCESS_OWNED_BY_USER |
|
| - EXCLUDE_CURRENT_PROCESS |
|
| - EXCLUDE_PROCESS_COMMAND_LINE_CONTAINING_STRING;
|
| -
|
| - command_lines.push_back(kTestExcludeString);
|
| - ASSERT_SUCCEEDED(Process::FindProcesses(exclude_mask,
|
| - kTestExecutable,
|
| - true,
|
| - user_sid,
|
| - command_lines,
|
| - &process_ids));
|
| - ASSERT_EQ(1, process_ids.size());
|
| - EXPECT_EQ(process.GetId(), process_ids[0]);
|
| -}
|
| -
|
| -TEST(ProcessTest, IncludeProcess) {
|
| - CString path = ConcatenatePath(app_util::GetSystemDir(), kTestExecutable);
|
| - ScopedProcess process(path);
|
| - ScopedProcess include_process(path);
|
| -
|
| - ASSERT_HRESULT_SUCCEEDED(process.Start(kTestArguments, NULL));
|
| - ASSERT_HRESULT_SUCCEEDED(include_process.Start(kTestIncludeArguments, NULL));
|
| - for (int i = 0; i < kMaxWaitIterations; ++i) {
|
| - ::Sleep(kWaitForProcessStartMs);
|
| - if (process.Running() && include_process.Running())
|
| - break;
|
| - }
|
| - EXPECT_TRUE(process.Running());
|
| - EXPECT_TRUE(include_process.Running());
|
| -
|
| - // Try to find just the first process, excluding the other.
|
| - uint32 exclude_mask = INCLUDE_ONLY_PROCESS_OWNED_BY_USER |
|
| - EXCLUDE_CURRENT_PROCESS |
|
| - INCLUDE_PROCESS_COMMAND_LINE_CONTAINING_STRING;
|
| - CString user_sid;
|
| - std::vector<CString> command_lines;
|
| - std::vector<uint32> process_ids;
|
| -
|
| - command_lines.push_back(kTestIncludeString);
|
| - ASSERT_SUCCEEDED(omaha::user_info::GetProcessUser(NULL, NULL, &user_sid));
|
| - ASSERT_SUCCEEDED(Process::FindProcesses(exclude_mask,
|
| - kTestExecutable,
|
| - true,
|
| - user_sid,
|
| - command_lines,
|
| - &process_ids));
|
| - ASSERT_EQ(1, process_ids.size());
|
| - EXPECT_EQ(include_process.GetId(), process_ids[0]);
|
| -}
|
| -
|
| -TEST(ProcessTest, GetImagePath) {
|
| - // Get this module's path.
|
| - HMODULE handle = ::GetModuleHandle(NULL);
|
| - ASSERT_TRUE(handle != NULL);
|
| -
|
| - TCHAR file_name[MAX_PATH] = {0};
|
| - ASSERT_NE(::GetModuleFileName(handle, file_name, MAX_PATH), 0);
|
| - ASSERT_NE(0, wcslen(file_name));
|
| -
|
| - CString exe = GetFileFromPath(file_name);
|
| - ASSERT_FALSE(exe.IsEmpty());
|
| -
|
| - CString user_sid;
|
| - ASSERT_SUCCEEDED(omaha::user_info::GetProcessUser(NULL, NULL, &user_sid));
|
| -
|
| - // Test the method.
|
| - CString path;
|
| - ASSERT_SUCCEEDED(Process::GetImagePath(exe, user_sid, &path));
|
| -
|
| - // Compare the result.
|
| - ASSERT_STREQ(file_name, path);
|
| -}
|
| -
|
| -TEST(ProcessTest, GetParentProcessId_CurrentProcess) {
|
| - Process process(::GetCurrentProcessId());
|
| - uint32 parent_pid = 0;
|
| - EXPECT_SUCCEEDED(process.GetParentProcessId(&parent_pid));
|
| - EXPECT_NE(0, parent_pid);
|
| -}
|
| -
|
| -TEST(ProcessTest, GetParentProcessId_ChildProcess) {
|
| - CString path = ConcatenatePath(app_util::GetSystemDir(), kTestExecutable);
|
| - ScopedProcess process(path);
|
| -
|
| - EXPECT_HRESULT_SUCCEEDED(process.Start(kTestArguments, NULL));
|
| - for (int i = 0; i < kMaxWaitIterations; ++i) {
|
| - ::Sleep(kWaitForProcessStartMs);
|
| - if (process.Running()) {
|
| - break;
|
| - }
|
| - }
|
| -
|
| - EXPECT_TRUE(process.Running());
|
| -
|
| - uint32 parent_pid = 0;
|
| - EXPECT_SUCCEEDED(process.GetParentProcessId(&parent_pid));
|
| - EXPECT_EQ(::GetCurrentProcessId(), parent_pid);
|
| -}
|
| -
|
| -} // namespace omaha
|
| -
|
|
|