Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(756)

Side by Side Diff: base/win/scoped_process_information_unittest.cc

Issue 71013004: Base: Remove Receive() from ScopedHandle. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix delegate_execute for google_chrome_build Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « base/win/scoped_process_information.cc ('k') | base/win/startup_information_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 <windows.h> 5 #include <windows.h>
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/process/kill.h" 10 #include "base/process/kill.h"
11 #include "base/test/multiprocess_test.h" 11 #include "base/test/multiprocess_test.h"
12 #include "base/win/scoped_process_information.h" 12 #include "base/win/scoped_process_information.h"
13 #include "testing/multiprocess_func_list.h" 13 #include "testing/multiprocess_func_list.h"
14 14
15 namespace { 15 namespace {
16 16
17 const DWORD kProcessId = 4321; 17 const DWORD kProcessId = 4321;
18 const DWORD kThreadId = 1234; 18 const DWORD kThreadId = 1234;
19 const HANDLE kProcessHandle = reinterpret_cast<HANDLE>(7651); 19 const HANDLE kProcessHandle = reinterpret_cast<HANDLE>(7651);
20 const HANDLE kThreadHandle = reinterpret_cast<HANDLE>(1567); 20 const HANDLE kThreadHandle = reinterpret_cast<HANDLE>(1567);
21 21
22 void MockCreateProcess(PROCESS_INFORMATION* process_info) { 22 void MockCreateProcess(base::win::ScopedProcessInformation* process_info) {
23 process_info->dwProcessId = kProcessId; 23 PROCESS_INFORMATION process_information = {};
24 process_info->dwThreadId = kThreadId; 24 process_information.dwProcessId = kProcessId;
25 process_info->hProcess = kProcessHandle; 25 process_information.dwThreadId = kThreadId;
26 process_info->hThread = kThreadHandle; 26 process_information.hProcess = kProcessHandle;
27 process_information.hThread = kThreadHandle;
28 process_info->Set(process_information);
27 } 29 }
28 30
29 } // namespace 31 } // namespace
30 32
31 class ScopedProcessInformationTest : public base::MultiProcessTest { 33 class ScopedProcessInformationTest : public base::MultiProcessTest {
32 protected: 34 protected:
33 void DoCreateProcess(const std::string& main_id, 35 void DoCreateProcess(const std::string& main_id,
34 PROCESS_INFORMATION* process_handle); 36 PROCESS_INFORMATION* process_handle);
35 }; 37 };
36 38
(...skipping 18 matching lines...) Expand all
55 &startup_info, process_handle)); 57 &startup_info, process_handle));
56 } 58 }
57 59
58 TEST_F(ScopedProcessInformationTest, InitiallyInvalid) { 60 TEST_F(ScopedProcessInformationTest, InitiallyInvalid) {
59 base::win::ScopedProcessInformation process_info; 61 base::win::ScopedProcessInformation process_info;
60 ASSERT_FALSE(process_info.IsValid()); 62 ASSERT_FALSE(process_info.IsValid());
61 } 63 }
62 64
63 TEST_F(ScopedProcessInformationTest, Receive) { 65 TEST_F(ScopedProcessInformationTest, Receive) {
64 base::win::ScopedProcessInformation process_info; 66 base::win::ScopedProcessInformation process_info;
65 MockCreateProcess(process_info.Receive()); 67 MockCreateProcess(&process_info);
66 68
67 EXPECT_TRUE(process_info.IsValid()); 69 EXPECT_TRUE(process_info.IsValid());
68 EXPECT_EQ(kProcessId, process_info.process_id()); 70 EXPECT_EQ(kProcessId, process_info.process_id());
69 EXPECT_EQ(kThreadId, process_info.thread_id()); 71 EXPECT_EQ(kThreadId, process_info.thread_id());
70 EXPECT_EQ(kProcessHandle, process_info.process_handle()); 72 EXPECT_EQ(kProcessHandle, process_info.process_handle());
71 EXPECT_EQ(kThreadHandle, process_info.thread_handle()); 73 EXPECT_EQ(kThreadHandle, process_info.thread_handle());
72 PROCESS_INFORMATION to_discard = process_info.Take(); 74 PROCESS_INFORMATION to_discard = process_info.Take();
73 } 75 }
74 76
75 TEST_F(ScopedProcessInformationTest, TakeProcess) { 77 TEST_F(ScopedProcessInformationTest, TakeProcess) {
76 base::win::ScopedProcessInformation process_info; 78 base::win::ScopedProcessInformation process_info;
77 MockCreateProcess(process_info.Receive()); 79 MockCreateProcess(&process_info);
78 80
79 HANDLE process = process_info.TakeProcessHandle(); 81 HANDLE process = process_info.TakeProcessHandle();
80 EXPECT_EQ(kProcessHandle, process); 82 EXPECT_EQ(kProcessHandle, process);
81 EXPECT_EQ(NULL, process_info.process_handle()); 83 EXPECT_EQ(NULL, process_info.process_handle());
82 EXPECT_EQ(0, process_info.process_id()); 84 EXPECT_EQ(0, process_info.process_id());
83 EXPECT_TRUE(process_info.IsValid()); 85 EXPECT_TRUE(process_info.IsValid());
84 PROCESS_INFORMATION to_discard = process_info.Take(); 86 PROCESS_INFORMATION to_discard = process_info.Take();
85 } 87 }
86 88
87 TEST_F(ScopedProcessInformationTest, TakeThread) { 89 TEST_F(ScopedProcessInformationTest, TakeThread) {
88 base::win::ScopedProcessInformation process_info; 90 base::win::ScopedProcessInformation process_info;
89 MockCreateProcess(process_info.Receive()); 91 MockCreateProcess(&process_info);
90 92
91 HANDLE thread = process_info.TakeThreadHandle(); 93 HANDLE thread = process_info.TakeThreadHandle();
92 EXPECT_EQ(kThreadHandle, thread); 94 EXPECT_EQ(kThreadHandle, thread);
93 EXPECT_EQ(NULL, process_info.thread_handle()); 95 EXPECT_EQ(NULL, process_info.thread_handle());
94 EXPECT_EQ(0, process_info.thread_id()); 96 EXPECT_EQ(0, process_info.thread_id());
95 EXPECT_TRUE(process_info.IsValid()); 97 EXPECT_TRUE(process_info.IsValid());
96 PROCESS_INFORMATION to_discard = process_info.Take(); 98 PROCESS_INFORMATION to_discard = process_info.Take();
97 } 99 }
98 100
99 TEST_F(ScopedProcessInformationTest, TakeBoth) { 101 TEST_F(ScopedProcessInformationTest, TakeBoth) {
100 base::win::ScopedProcessInformation process_info; 102 base::win::ScopedProcessInformation process_info;
101 MockCreateProcess(process_info.Receive()); 103 MockCreateProcess(&process_info);
102 104
103 HANDLE process = process_info.TakeProcessHandle(); 105 HANDLE process = process_info.TakeProcessHandle();
104 HANDLE thread = process_info.TakeThreadHandle(); 106 HANDLE thread = process_info.TakeThreadHandle();
105 EXPECT_FALSE(process_info.IsValid()); 107 EXPECT_FALSE(process_info.IsValid());
106 PROCESS_INFORMATION to_discard = process_info.Take(); 108 PROCESS_INFORMATION to_discard = process_info.Take();
107 } 109 }
108 110
109 TEST_F(ScopedProcessInformationTest, TakeWholeStruct) { 111 TEST_F(ScopedProcessInformationTest, TakeWholeStruct) {
110 base::win::ScopedProcessInformation process_info; 112 base::win::ScopedProcessInformation process_info;
111 MockCreateProcess(process_info.Receive()); 113 MockCreateProcess(&process_info);
112 114
113 PROCESS_INFORMATION to_discard = process_info.Take(); 115 PROCESS_INFORMATION to_discard = process_info.Take();
114 EXPECT_EQ(kProcessId, to_discard.dwProcessId); 116 EXPECT_EQ(kProcessId, to_discard.dwProcessId);
115 EXPECT_EQ(kThreadId, to_discard.dwThreadId); 117 EXPECT_EQ(kThreadId, to_discard.dwThreadId);
116 EXPECT_EQ(kProcessHandle, to_discard.hProcess); 118 EXPECT_EQ(kProcessHandle, to_discard.hProcess);
117 EXPECT_EQ(kThreadHandle, to_discard.hThread); 119 EXPECT_EQ(kThreadHandle, to_discard.hThread);
118 EXPECT_FALSE(process_info.IsValid()); 120 EXPECT_FALSE(process_info.IsValid());
119 } 121 }
120 122
121 TEST_F(ScopedProcessInformationTest, Duplicate) { 123 TEST_F(ScopedProcessInformationTest, Duplicate) {
124 PROCESS_INFORMATION temp_process_information;
125 DoCreateProcess("ReturnSeven", &temp_process_information);
122 base::win::ScopedProcessInformation process_info; 126 base::win::ScopedProcessInformation process_info;
123 DoCreateProcess("ReturnSeven", process_info.Receive()); 127 process_info.Set(temp_process_information);
128
124 base::win::ScopedProcessInformation duplicate; 129 base::win::ScopedProcessInformation duplicate;
125 duplicate.DuplicateFrom(process_info); 130 duplicate.DuplicateFrom(process_info);
126 131
127 ASSERT_TRUE(process_info.IsValid()); 132 ASSERT_TRUE(process_info.IsValid());
128 ASSERT_NE(0u, process_info.process_id()); 133 ASSERT_NE(0u, process_info.process_id());
129 ASSERT_EQ(duplicate.process_id(), process_info.process_id()); 134 ASSERT_EQ(duplicate.process_id(), process_info.process_id());
130 ASSERT_NE(0u, process_info.thread_id()); 135 ASSERT_NE(0u, process_info.thread_id());
131 ASSERT_EQ(duplicate.thread_id(), process_info.thread_id()); 136 ASSERT_EQ(duplicate.thread_id(), process_info.thread_id());
132 137
133 // Validate that we have separate handles that are good. 138 // Validate that we have separate handles that are good.
134 int exit_code = 0; 139 int exit_code = 0;
135 ASSERT_TRUE(base::WaitForExitCode(process_info.TakeProcessHandle(), 140 ASSERT_TRUE(base::WaitForExitCode(process_info.TakeProcessHandle(),
136 &exit_code)); 141 &exit_code));
137 ASSERT_EQ(7, exit_code); 142 ASSERT_EQ(7, exit_code);
138 143
139 exit_code = 0; 144 exit_code = 0;
140 ASSERT_TRUE(base::WaitForExitCode(duplicate.TakeProcessHandle(), 145 ASSERT_TRUE(base::WaitForExitCode(duplicate.TakeProcessHandle(),
141 &exit_code)); 146 &exit_code));
142 ASSERT_EQ(7, exit_code); 147 ASSERT_EQ(7, exit_code);
143 148
144 ASSERT_TRUE(::CloseHandle(process_info.TakeThreadHandle())); 149 ASSERT_TRUE(::CloseHandle(process_info.TakeThreadHandle()));
145 ASSERT_TRUE(::CloseHandle(duplicate.TakeThreadHandle())); 150 ASSERT_TRUE(::CloseHandle(duplicate.TakeThreadHandle()));
146 } 151 }
147 152
148 TEST_F(ScopedProcessInformationTest, Set) { 153 TEST_F(ScopedProcessInformationTest, Set) {
149 PROCESS_INFORMATION base_process_info = {}; 154 base::win::ScopedProcessInformation base_process_info;
150 MockCreateProcess(&base_process_info); 155 MockCreateProcess(&base_process_info);
151 156
157 PROCESS_INFORMATION base_struct = base_process_info.Take();
158
152 base::win::ScopedProcessInformation process_info; 159 base::win::ScopedProcessInformation process_info;
153 process_info.Set(base_process_info); 160 process_info.Set(base_struct);
154 161
155 EXPECT_EQ(kProcessId, process_info.process_id()); 162 EXPECT_EQ(kProcessId, process_info.process_id());
156 EXPECT_EQ(kThreadId, process_info.thread_id()); 163 EXPECT_EQ(kThreadId, process_info.thread_id());
157 EXPECT_EQ(kProcessHandle, process_info.process_handle()); 164 EXPECT_EQ(kProcessHandle, process_info.process_handle());
158 EXPECT_EQ(kThreadHandle, process_info.thread_handle()); 165 EXPECT_EQ(kThreadHandle, process_info.thread_handle());
159 base_process_info = process_info.Take(); 166 base_struct = process_info.Take();
160 } 167 }
OLDNEW
« no previous file with comments | « base/win/scoped_process_information.cc ('k') | base/win/startup_information_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698