Chromium Code Reviews

Side by Side Diff: mojo/edk/system/handle_table_unittest.cc

Issue 1949283002: EDK: Replace HandleTable::GetAndRemoveDispatcher() with GetAndRemoveHandle(). (Closed) Base URL: https://github.com/domokit/mojo.git@work789_edk_handle_13.3-x-work788_edk_handle_13.2
Patch Set: Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff |
« no previous file with comments | « mojo/edk/system/handle_table.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 "mojo/edk/system/handle_table.h" 5 #include "mojo/edk/system/handle_table.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "mojo/edk/system/dispatcher.h" 9 #include "mojo/edk/system/dispatcher.h"
10 #include "mojo/edk/system/handle.h" 10 #include "mojo/edk/system/handle.h"
11 #include "mojo/edk/system/mock_simple_dispatcher.h" 11 #include "mojo/edk/system/mock_simple_dispatcher.h"
12 #include "testing/gtest/include/gtest/gtest.h" 12 #include "testing/gtest/include/gtest/gtest.h"
13 13
14 using mojo::util::MakeRefCounted; 14 using mojo::util::MakeRefCounted;
15 using mojo::util::RefPtr; 15 using mojo::util::RefPtr;
16 16
17 namespace mojo { 17 namespace mojo {
18 namespace system { 18 namespace system {
19 namespace { 19 namespace {
20 20
21 TEST(HandleTableTest, Basic) { 21 TEST(HandleTableTest, Basic) {
22 HandleTable ht(1000u); 22 HandleTable ht(1000u);
23 23
24 RefPtr<Dispatcher> d = MakeRefCounted<test::MockSimpleDispatcher>(); 24 Handle h(MakeRefCounted<test::MockSimpleDispatcher>(),
25 MOJO_HANDLE_RIGHT_TRANSFER | MOJO_HANDLE_RIGHT_READ);
25 26
26 MojoHandle hv = ht.AddHandle(Handle(d.Clone(), MOJO_HANDLE_RIGHT_NONE)); 27 MojoHandle hv = ht.AddHandle(h.Clone());
27 ASSERT_NE(hv, MOJO_HANDLE_INVALID); 28 ASSERT_NE(hv, MOJO_HANDLE_INVALID);
28 29
29 // Save the pointer value (without taking a ref), so we can check that we get 30 // Save the pointer value (without taking a ref), so we can check that we get
30 // the same object back. 31 // the same object back.
31 Dispatcher* dv = d.get(); 32 Dispatcher* dv = h.dispatcher.get();
32 // Reset this, to make sure that the handle table takes a ref. 33 // Reset this, to make sure that the handle table takes a ref.
33 d = nullptr; 34 h.reset();
34 35
35 Handle h;
36 EXPECT_EQ(MOJO_RESULT_OK, ht.GetHandle(hv, &h)); 36 EXPECT_EQ(MOJO_RESULT_OK, ht.GetHandle(hv, &h));
37 EXPECT_EQ(dv, h.dispatcher.get()); 37 EXPECT_EQ(dv, h.dispatcher.get());
38 EXPECT_EQ(MOJO_HANDLE_RIGHT_TRANSFER | MOJO_HANDLE_RIGHT_READ, h.rights);
38 39
39 d = nullptr; 40 h.reset();
40 ASSERT_EQ(MOJO_RESULT_OK, ht.GetAndRemoveDispatcher(hv, &d)); 41 ASSERT_EQ(MOJO_RESULT_OK, ht.GetAndRemoveHandle(hv, &h));
41 ASSERT_EQ(dv, d.get()); 42 ASSERT_EQ(dv, h.dispatcher.get());
43 EXPECT_EQ(MOJO_HANDLE_RIGHT_TRANSFER | MOJO_HANDLE_RIGHT_READ, h.rights);
42 44
43 EXPECT_EQ(MOJO_RESULT_OK, d->Close()); 45 EXPECT_EQ(MOJO_RESULT_OK, h.dispatcher->Close());
44 46
45 // We removed |hv|, so it should no longer be valid. 47 // We removed |hv|, so it should no longer be valid.
46 h.reset(); 48 h.reset();
47 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, ht.GetHandle(hv, &h)); 49 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, ht.GetHandle(hv, &h));
48 } 50 }
49 51
50 TEST(HandleTableTest, AddHandlePair) { 52 TEST(HandleTableTest, AddHandlePair) {
51 HandleTable ht(1000u); 53 HandleTable ht(1000u);
52 54
53 auto d1 = MakeRefCounted<test::MockSimpleDispatcher>(); 55 Handle h1(MakeRefCounted<test::MockSimpleDispatcher>(),
54 auto d2 = MakeRefCounted<test::MockSimpleDispatcher>(); 56 MOJO_HANDLE_RIGHT_NONE);
57 Handle h2(MakeRefCounted<test::MockSimpleDispatcher>(),
58 MOJO_HANDLE_RIGHT_DUPLICATE);
55 59
56 auto hp = ht.AddHandlePair(Handle(d1.Clone(), MOJO_HANDLE_RIGHT_NONE), 60 auto hp = ht.AddHandlePair(h1.Clone(), h2.Clone());
57 Handle(d2.Clone(), MOJO_HANDLE_RIGHT_NONE));
58 ASSERT_NE(hp.first, MOJO_HANDLE_INVALID); 61 ASSERT_NE(hp.first, MOJO_HANDLE_INVALID);
59 ASSERT_NE(hp.second, MOJO_HANDLE_INVALID); 62 ASSERT_NE(hp.second, MOJO_HANDLE_INVALID);
60 ASSERT_NE(hp.first, hp.second); 63 ASSERT_NE(hp.first, hp.second);
61 64
62 RefPtr<Dispatcher> d; 65 Handle h;
63 ASSERT_EQ(MOJO_RESULT_OK, ht.GetAndRemoveDispatcher(hp.first, &d)); 66 ASSERT_EQ(MOJO_RESULT_OK, ht.GetAndRemoveHandle(hp.first, &h));
64 ASSERT_EQ(d1, d); 67 ASSERT_EQ(h1, h);
65 68
66 d = nullptr; 69 h.reset();
67 ASSERT_EQ(MOJO_RESULT_OK, ht.GetAndRemoveDispatcher(hp.second, &d)); 70 ASSERT_EQ(MOJO_RESULT_OK, ht.GetAndRemoveHandle(hp.second, &h));
68 ASSERT_EQ(d2, d); 71 ASSERT_EQ(h2, h);
69 72
70 EXPECT_EQ(MOJO_RESULT_OK, d1->Close()); 73 EXPECT_EQ(MOJO_RESULT_OK, h1.dispatcher->Close());
71 EXPECT_EQ(MOJO_RESULT_OK, d2->Close()); 74 EXPECT_EQ(MOJO_RESULT_OK, h2.dispatcher->Close());
72 } 75 }
73 76
74 TEST(HandleTableTest, AddHandleTooMany) { 77 TEST(HandleTableTest, AddHandleTooMany) {
75 HandleTable ht(2u); 78 HandleTable ht(2u);
76 79
77 auto d1 = MakeRefCounted<test::MockSimpleDispatcher>(); 80 Handle h1(MakeRefCounted<test::MockSimpleDispatcher>(),
78 auto d2 = MakeRefCounted<test::MockSimpleDispatcher>(); 81 MOJO_HANDLE_RIGHT_NONE);
79 auto d3 = MakeRefCounted<test::MockSimpleDispatcher>(); 82 Handle h2(MakeRefCounted<test::MockSimpleDispatcher>(),
83 MOJO_HANDLE_RIGHT_DUPLICATE);
84 Handle h3(MakeRefCounted<test::MockSimpleDispatcher>(),
85 MOJO_HANDLE_RIGHT_TRANSFER);
80 86
81 MojoHandle h1 = ht.AddHandle(Handle(d1.Clone(), MOJO_HANDLE_RIGHT_NONE)); 87 MojoHandle hv1 = ht.AddHandle(h1.Clone());
82 ASSERT_NE(h1, MOJO_HANDLE_INVALID); 88 ASSERT_NE(hv1, MOJO_HANDLE_INVALID);
83 89
84 MojoHandle h2 = ht.AddHandle(Handle(d2.Clone(), MOJO_HANDLE_RIGHT_NONE)); 90 MojoHandle hv2 = ht.AddHandle(h2.Clone());
85 ASSERT_NE(h2, MOJO_HANDLE_INVALID); 91 ASSERT_NE(hv2, MOJO_HANDLE_INVALID);
86 EXPECT_NE(h2, h1); 92 EXPECT_NE(hv2, hv1);
87 93
88 // Table should be full; adding |d3| should fail. 94 // Table should be full; adding |h3| should fail.
89 EXPECT_EQ(MOJO_HANDLE_INVALID, 95 EXPECT_EQ(MOJO_HANDLE_INVALID, ht.AddHandle(h3.Clone()));
90 ht.AddHandle(Handle(d3.Clone(), MOJO_HANDLE_RIGHT_NONE)));
91 96
92 // Remove |h2|/|d2|. 97 // Remove |hv2|/|h2|.
93 RefPtr<Dispatcher> d; 98 Handle h;
94 ASSERT_EQ(MOJO_RESULT_OK, ht.GetAndRemoveDispatcher(h2, &d)); 99 ASSERT_EQ(MOJO_RESULT_OK, ht.GetAndRemoveHandle(hv2, &h));
95 ASSERT_EQ(d2, d); 100 ASSERT_EQ(h2, h);
96 101
97 // Now adding |d3| should succeed. 102 // Now adding |h3| should succeed.
98 MojoHandle h3 = ht.AddHandle(Handle(d3.Clone(), MOJO_HANDLE_RIGHT_NONE)); 103 MojoHandle hv3 = ht.AddHandle(h3.Clone());
99 ASSERT_NE(h3, MOJO_HANDLE_INVALID); 104 ASSERT_NE(hv3, MOJO_HANDLE_INVALID);
100 EXPECT_NE(h3, h1); 105 EXPECT_NE(hv3, hv1);
101 // Note: |h3| may be equal to |h2| (handle values may be reused). 106 // Note: |hv3| may be equal to |hv2| (handle values may be reused).
102 107
103 d = nullptr; 108 h.reset();
104 ASSERT_EQ(MOJO_RESULT_OK, ht.GetAndRemoveDispatcher(h1, &d)); 109 ASSERT_EQ(MOJO_RESULT_OK, ht.GetAndRemoveHandle(hv1, &h));
105 ASSERT_EQ(d1, d); 110 ASSERT_EQ(h1, h);
106 111
107 d = nullptr; 112 h.reset();
108 ASSERT_EQ(MOJO_RESULT_OK, ht.GetAndRemoveDispatcher(h3, &d)); 113 ASSERT_EQ(MOJO_RESULT_OK, ht.GetAndRemoveHandle(hv3, &h));
109 ASSERT_EQ(d3, d); 114 ASSERT_EQ(h3, h);
110 115
111 EXPECT_EQ(MOJO_RESULT_OK, d1->Close()); 116 EXPECT_EQ(MOJO_RESULT_OK, h1.dispatcher->Close());
112 EXPECT_EQ(MOJO_RESULT_OK, d2->Close()); 117 EXPECT_EQ(MOJO_RESULT_OK, h2.dispatcher->Close());
113 EXPECT_EQ(MOJO_RESULT_OK, d3->Close()); 118 EXPECT_EQ(MOJO_RESULT_OK, h3.dispatcher->Close());
114 } 119 }
115 120
116 TEST(HandleTableTest, AddHandlePairTooMany) { 121 TEST(HandleTableTest, AddHandlePairTooMany) {
117 HandleTable ht(2u); 122 HandleTable ht(2u);
118 123
119 auto d1 = MakeRefCounted<test::MockSimpleDispatcher>(); 124 Handle h1(MakeRefCounted<test::MockSimpleDispatcher>(),
120 auto d2 = MakeRefCounted<test::MockSimpleDispatcher>(); 125 MOJO_HANDLE_RIGHT_NONE);
121 auto d3 = MakeRefCounted<test::MockSimpleDispatcher>(); 126 Handle h2(MakeRefCounted<test::MockSimpleDispatcher>(),
122 auto d4 = MakeRefCounted<test::MockSimpleDispatcher>(); 127 MOJO_HANDLE_RIGHT_TRANSFER);
128 Handle h3(MakeRefCounted<test::MockSimpleDispatcher>(),
129 MOJO_HANDLE_RIGHT_READ);
130 Handle h4(MakeRefCounted<test::MockSimpleDispatcher>(),
131 MOJO_HANDLE_RIGHT_WRITE);
123 132
124 auto hp = ht.AddHandlePair(Handle(d1.Clone(), MOJO_HANDLE_RIGHT_NONE), 133 auto hp = ht.AddHandlePair(h1.Clone(), h2.Clone());
125 Handle(d2.Clone(), MOJO_HANDLE_RIGHT_NONE)); 134 auto hv1 = hp.first;
126 auto h1 = hp.first; 135 auto hv2 = hp.second;
127 auto h2 = hp.second; 136 ASSERT_NE(hv1, MOJO_HANDLE_INVALID);
128 ASSERT_NE(h1, MOJO_HANDLE_INVALID); 137 ASSERT_NE(hv2, MOJO_HANDLE_INVALID);
129 ASSERT_NE(h2, MOJO_HANDLE_INVALID); 138 ASSERT_NE(hv1, hv2);
130 ASSERT_NE(h1, h2);
131 139
132 // Table should be full; adding |d3| should fail. 140 // Table should be full; adding |h3| should fail.
133 EXPECT_EQ(MOJO_HANDLE_INVALID, 141 EXPECT_EQ(MOJO_HANDLE_INVALID, ht.AddHandle(h3.Clone()));
134 ht.AddHandle(Handle(d3.Clone(), MOJO_HANDLE_RIGHT_NONE)));
135 142
136 // Adding |d3| and |d4| as a pair should also fail. 143 // Adding |h3| and |h4| as a pair should also fail.
137 auto hp2 = ht.AddHandlePair(Handle(d3.Clone(), MOJO_HANDLE_RIGHT_NONE), 144 auto hp2 = ht.AddHandlePair(h3.Clone(), h4.Clone());
138 Handle(d4.Clone(), MOJO_HANDLE_RIGHT_NONE));
139 EXPECT_EQ(MOJO_HANDLE_INVALID, hp2.first); 145 EXPECT_EQ(MOJO_HANDLE_INVALID, hp2.first);
140 EXPECT_EQ(MOJO_HANDLE_INVALID, hp2.second); 146 EXPECT_EQ(MOJO_HANDLE_INVALID, hp2.second);
141 147
142 // Remove |h2|/|d2|. 148 // Remove |hv2|/|h2|.
143 RefPtr<Dispatcher> d; 149 Handle h;
144 ASSERT_EQ(MOJO_RESULT_OK, ht.GetAndRemoveDispatcher(h2, &d)); 150 ASSERT_EQ(MOJO_RESULT_OK, ht.GetAndRemoveHandle(hv2, &h));
145 ASSERT_EQ(d2, d); 151 ASSERT_EQ(h2, h);
146 152
147 // Trying to add |d3| and |d4| as a pair should still fail. 153 // Trying to add |h3| and |h4| as a pair should still fail.
148 hp2 = ht.AddHandlePair(Handle(d3.Clone(), MOJO_HANDLE_RIGHT_NONE), 154 hp2 = ht.AddHandlePair(h3.Clone(), h4.Clone());
149 Handle(d4.Clone(), MOJO_HANDLE_RIGHT_NONE));
150 EXPECT_EQ(MOJO_HANDLE_INVALID, hp2.first); 155 EXPECT_EQ(MOJO_HANDLE_INVALID, hp2.first);
151 EXPECT_EQ(MOJO_HANDLE_INVALID, hp2.second); 156 EXPECT_EQ(MOJO_HANDLE_INVALID, hp2.second);
152 157
153 // Remove |h1|/|d1|. 158 // Remove |hv1|/|h1|.
154 d = nullptr; 159 h.reset();
155 ASSERT_EQ(MOJO_RESULT_OK, ht.GetAndRemoveDispatcher(h1, &d)); 160 ASSERT_EQ(MOJO_RESULT_OK, ht.GetAndRemoveHandle(hv1, &h));
156 ASSERT_EQ(d1, d); 161 ASSERT_EQ(h1, h);
157 162
158 // Add |d3| and |d4| as a pair should now succeed fail. 163 // Add |h3| and |h4| as a pair should now succeed fail.
159 hp2 = ht.AddHandlePair(Handle(d3.Clone(), MOJO_HANDLE_RIGHT_NONE), 164 hp2 = ht.AddHandlePair(h3.Clone(), h4.Clone());
160 Handle(d4.Clone(), MOJO_HANDLE_RIGHT_NONE)); 165 auto hv3 = hp2.first;
161 auto h3 = hp2.first; 166 auto hv4 = hp2.second;
162 auto h4 = hp2.second; 167 ASSERT_NE(hv3, MOJO_HANDLE_INVALID);
163 ASSERT_NE(h3, MOJO_HANDLE_INVALID); 168 ASSERT_NE(hv4, MOJO_HANDLE_INVALID);
164 ASSERT_NE(h4, MOJO_HANDLE_INVALID); 169 ASSERT_NE(hv3, hv4);
165 ASSERT_NE(h3, h4);
166 170
167 d = nullptr; 171 h.reset();
168 ASSERT_EQ(MOJO_RESULT_OK, ht.GetAndRemoveDispatcher(h3, &d)); 172 ASSERT_EQ(MOJO_RESULT_OK, ht.GetAndRemoveHandle(hv3, &h));
169 ASSERT_EQ(d3, d); 173 ASSERT_EQ(h3, h);
170 174
171 d = nullptr; 175 h.reset();
172 ASSERT_EQ(MOJO_RESULT_OK, ht.GetAndRemoveDispatcher(h4, &d)); 176 ASSERT_EQ(MOJO_RESULT_OK, ht.GetAndRemoveHandle(hv4, &h));
173 ASSERT_EQ(d4, d); 177 ASSERT_EQ(h4, h);
174 178
175 EXPECT_EQ(MOJO_RESULT_OK, d1->Close()); 179 EXPECT_EQ(MOJO_RESULT_OK, h1.dispatcher->Close());
176 EXPECT_EQ(MOJO_RESULT_OK, d2->Close()); 180 EXPECT_EQ(MOJO_RESULT_OK, h2.dispatcher->Close());
177 EXPECT_EQ(MOJO_RESULT_OK, d3->Close()); 181 EXPECT_EQ(MOJO_RESULT_OK, h3.dispatcher->Close());
178 EXPECT_EQ(MOJO_RESULT_OK, d4->Close()); 182 EXPECT_EQ(MOJO_RESULT_OK, h4.dispatcher->Close());
179 } 183 }
180 184
181 TEST(HandleTableTest, AddHandleVector) { 185 TEST(HandleTableTest, AddHandleVector) {
182 static constexpr size_t kNumHandles = 10u; 186 static constexpr size_t kNumHandles = 10u;
183 187
184 HandleTable ht(1000u); 188 HandleTable ht(1000u);
185 189
186 HandleVector handles; 190 HandleVector handles;
187 std::vector<RefPtr<Dispatcher>> dispatchers;
188 for (size_t i = 0u; i < kNumHandles; i++) { 191 for (size_t i = 0u; i < kNumHandles; i++) {
189 dispatchers.push_back(MakeRefCounted<test::MockSimpleDispatcher>()); 192 handles.push_back(Handle(MakeRefCounted<test::MockSimpleDispatcher>(),
190 handles.push_back( 193 static_cast<MojoHandleRights>(i)));
191 Handle(dispatchers.back().Clone(), MOJO_HANDLE_RIGHT_NONE));
192 ASSERT_TRUE(handles[i]) << i; 194 ASSERT_TRUE(handles[i]) << i;
193 } 195 }
194 196
195 std::vector<MojoHandle> handle_values(kNumHandles, MOJO_HANDLE_INVALID); 197 std::vector<MojoHandle> handle_values(kNumHandles, MOJO_HANDLE_INVALID);
196 198
197 ASSERT_TRUE(ht.AddHandleVector(&handles, handle_values.data())); 199 HandleVector handles_copy = handles;
200 ASSERT_TRUE(ht.AddHandleVector(&handles_copy, handle_values.data()));
198 201
199 for (size_t i = 0u; i < kNumHandles; i++) { 202 for (size_t i = 0u; i < kNumHandles; i++) {
200 ASSERT_NE(handle_values[i], MOJO_HANDLE_INVALID) << i; 203 ASSERT_NE(handle_values[i], MOJO_HANDLE_INVALID) << i;
204 EXPECT_FALSE(handles_copy[i]) << i;
201 205
202 RefPtr<Dispatcher> d; 206 Handle h;
203 ASSERT_EQ(MOJO_RESULT_OK, ht.GetAndRemoveDispatcher(handle_values[i], &d)) 207 ASSERT_EQ(MOJO_RESULT_OK, ht.GetAndRemoveHandle(handle_values[i], &h)) << i;
204 << i; 208 ASSERT_EQ(handles[i], h) << i;
205 ASSERT_EQ(dispatchers[i], d) << i;
206 209
207 EXPECT_EQ(MOJO_RESULT_OK, dispatchers[i]->Close()) << i; 210 EXPECT_EQ(MOJO_RESULT_OK, handles[i].dispatcher->Close()) << i;
208 } 211 }
209 } 212 }
210 213
211 TEST(HandleTableTest, AddHandleVectorTooMany) { 214 TEST(HandleTableTest, AddHandleVectorTooMany) {
212 static constexpr size_t kHandleTableSize = 10u; 215 static constexpr size_t kHandleTableSize = 10u;
213 static constexpr size_t kNumHandles = kHandleTableSize + 1u; 216 static constexpr size_t kNumHandles = kHandleTableSize + 1u;
214 217
215 HandleTable ht(kHandleTableSize); 218 HandleTable ht(kHandleTableSize);
216 219
217 HandleVector handles; 220 HandleVector handles;
218 std::vector<RefPtr<Dispatcher>> dispatchers;
219 for (size_t i = 0u; i < kNumHandles; i++) { 221 for (size_t i = 0u; i < kNumHandles; i++) {
220 dispatchers.push_back(MakeRefCounted<test::MockSimpleDispatcher>()); 222 handles.push_back(Handle(MakeRefCounted<test::MockSimpleDispatcher>(),
221 handles.push_back( 223 static_cast<MojoHandleRights>(i)));
222 Handle(dispatchers.back().Clone(), MOJO_HANDLE_RIGHT_NONE));
223 ASSERT_TRUE(handles[i]) << i; 224 ASSERT_TRUE(handles[i]) << i;
224 } 225 }
225 226
226 std::vector<MojoHandle> handle_values(kNumHandles, MOJO_HANDLE_INVALID); 227 std::vector<MojoHandle> handle_values(kNumHandles, MOJO_HANDLE_INVALID);
227 228
228 EXPECT_FALSE(ht.AddHandleVector(&handles, handle_values.data())); 229 HandleVector handles_copy = handles;
230 EXPECT_FALSE(ht.AddHandleVector(&handles_copy, handle_values.data()));
229 231
230 handles.pop_back(); 232 handles_copy.pop_back();
231 handle_values.pop_back(); 233 handle_values.pop_back();
232 234
233 ASSERT_TRUE(ht.AddHandleVector(&handles, handle_values.data())); 235 ASSERT_TRUE(ht.AddHandleVector(&handles_copy, handle_values.data()));
234 236
235 for (size_t i = 0u; i < kNumHandles - 1u; i++) { 237 for (size_t i = 0u; i < kNumHandles - 1u; i++) {
236 ASSERT_NE(handle_values[i], MOJO_HANDLE_INVALID) << i; 238 ASSERT_NE(handle_values[i], MOJO_HANDLE_INVALID) << i;
239 EXPECT_FALSE(handles_copy[i]) << i;
237 240
238 RefPtr<Dispatcher> d; 241 Handle h;
239 ASSERT_EQ(MOJO_RESULT_OK, ht.GetAndRemoveDispatcher(handle_values[i], &d)) 242 ASSERT_EQ(MOJO_RESULT_OK, ht.GetAndRemoveHandle(handle_values[i], &h)) << i;
240 << i; 243 ASSERT_EQ(handles[i], h) << i;
241 ASSERT_EQ(dispatchers[i], d) << i;
242 } 244 }
243 245
244 for (size_t i = 0u; i < kNumHandles; i++) 246 for (size_t i = 0u; i < kNumHandles; i++)
245 EXPECT_EQ(MOJO_RESULT_OK, dispatchers[i]->Close()) << i; 247 EXPECT_EQ(MOJO_RESULT_OK, handles[i].dispatcher->Close()) << i;
246 } 248 }
247 249
248 } // namespace 250 } // namespace
249 } // namespace system 251 } // namespace system
250 } // namespace mojo 252 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/edk/system/handle_table.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine