| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/core.h" | 5 #include "mojo/edk/system/core.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 | 8 |
| 9 #include <limits> | 9 #include <limits> |
| 10 | 10 |
| (...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 209 EXPECT_EQ( | 209 EXPECT_EQ( |
| 210 MOJO_RESULT_FAILED_PRECONDITION, | 210 MOJO_RESULT_FAILED_PRECONDITION, |
| 211 core()->WaitMany(MakeUserPointer(&h), MakeUserPointer(&handle_signals), 1, | 211 core()->WaitMany(MakeUserPointer(&h), MakeUserPointer(&handle_signals), 1, |
| 212 MOJO_DEADLINE_INDEFINITE, MakeUserPointer(&result_index), | 212 MOJO_DEADLINE_INDEFINITE, MakeUserPointer(&result_index), |
| 213 MakeUserPointer(&hss))); | 213 MakeUserPointer(&hss))); |
| 214 EXPECT_EQ(9u, info.GetAddAwakableCallCount()); | 214 EXPECT_EQ(9u, info.GetAddAwakableCallCount()); |
| 215 EXPECT_EQ(0u, result_index); | 215 EXPECT_EQ(0u, result_index); |
| 216 EXPECT_EQ(0u, hss.satisfied_signals); | 216 EXPECT_EQ(0u, hss.satisfied_signals); |
| 217 EXPECT_EQ(0u, hss.satisfiable_signals); | 217 EXPECT_EQ(0u, hss.satisfiable_signals); |
| 218 | 218 |
| 219 // |h| shares |info| with |h_dup|, which was closed above. | 219 constexpr MojoHandleRights kRightsToRemove = MOJO_HANDLE_RIGHT_MAP_EXECUTABLE; |
| 220 EXPECT_EQ(1u, info.GetDtorCallCount()); | 220 static_assert(kDefaultMockHandleRights & kRightsToRemove, |
| 221 "Oops, reducing rights will be a no-op"); |
| 222 MojoHandle h_replacement = MOJO_HANDLE_INVALID; |
| 223 EXPECT_EQ(MOJO_RESULT_OK, |
| 224 core()->ReplaceHandleWithReducedRights( |
| 225 h, kRightsToRemove, MakeUserPointer(&h_replacement))); |
| 226 EXPECT_NE(h_replacement, MOJO_HANDLE_INVALID); |
| 227 // This isn't guaranteed per se, but we count on handle values not being |
| 228 // reused eagerly. |
| 229 EXPECT_NE(h_replacement, h); |
| 230 // |h| should be dead. |
| 231 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, core()->Close(h)); |
| 232 rights = MOJO_HANDLE_RIGHT_NONE; |
| 233 EXPECT_EQ(MOJO_RESULT_OK, |
| 234 core()->GetRights(h_replacement, MakeUserPointer(&rights))); |
| 235 EXPECT_EQ(kDefaultMockHandleRights & ~kRightsToRemove, rights); |
| 236 |
| 237 // |info| is shared between |h| (which was replaced, but not explicitly closed |
| 238 // per se), |h_dup| (which was closed), and |h_replacement|. |
| 239 EXPECT_EQ(2u, info.GetDtorCallCount()); |
| 221 EXPECT_EQ(1u, info.GetCloseCallCount()); | 240 EXPECT_EQ(1u, info.GetCloseCallCount()); |
| 222 EXPECT_EQ(1u, info.GetCancelAllStateCallCount()); | 241 EXPECT_EQ(2u, info.GetCancelAllStateCallCount()); |
| 223 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h)); | 242 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h_replacement)); |
| 224 EXPECT_EQ(2u, info.GetDtorCallCount()); | 243 EXPECT_EQ(3u, info.GetDtorCallCount()); |
| 225 EXPECT_EQ(2u, info.GetCloseCallCount()); | 244 EXPECT_EQ(2u, info.GetCloseCallCount()); |
| 226 EXPECT_EQ(2u, info.GetCancelAllStateCallCount()); | 245 EXPECT_EQ(3u, info.GetCancelAllStateCallCount()); |
| 227 | 246 |
| 228 // No awakables should ever have ever been added. | 247 // No awakables should ever have ever been added. |
| 229 EXPECT_EQ(0u, info.GetRemoveAwakableCallCount()); | 248 EXPECT_EQ(0u, info.GetRemoveAwakableCallCount()); |
| 230 } | 249 } |
| 231 | 250 |
| 232 TEST_F(CoreTest, InvalidArguments) { | 251 TEST_F(CoreTest, InvalidArguments) { |
| 233 // |Close()|: | 252 // |Close()|: |
| 234 { | 253 { |
| 235 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, core()->Close(MOJO_HANDLE_INVALID)); | 254 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, core()->Close(MOJO_HANDLE_INVALID)); |
| 236 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, core()->Close(10)); | 255 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, core()->Close(10)); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 249 { | 268 { |
| 250 MojoHandleRights rights = MOJO_HANDLE_RIGHT_NONE; | 269 MojoHandleRights rights = MOJO_HANDLE_RIGHT_NONE; |
| 251 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, | 270 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, |
| 252 core()->GetRights(MOJO_HANDLE_INVALID, MakeUserPointer(&rights))); | 271 core()->GetRights(MOJO_HANDLE_INVALID, MakeUserPointer(&rights))); |
| 253 EXPECT_EQ(0u, rights); | 272 EXPECT_EQ(0u, rights); |
| 254 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, | 273 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, |
| 255 core()->GetRights(10, MakeUserPointer(&rights))); | 274 core()->GetRights(10, MakeUserPointer(&rights))); |
| 256 EXPECT_EQ(0u, rights); | 275 EXPECT_EQ(0u, rights); |
| 257 } | 276 } |
| 258 | 277 |
| 278 // |ReplaceHandleWithReducedRights()|: |
| 279 { |
| 280 MojoHandle h = MOJO_HANDLE_INVALID; |
| 281 EXPECT_EQ( |
| 282 MOJO_RESULT_INVALID_ARGUMENT, |
| 283 core()->ReplaceHandleWithReducedRights( |
| 284 MOJO_HANDLE_INVALID, MOJO_HANDLE_RIGHT_NONE, MakeUserPointer(&h))); |
| 285 EXPECT_EQ(MOJO_HANDLE_INVALID, h); |
| 286 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, |
| 287 core()->ReplaceHandleWithReducedRights(10, MOJO_HANDLE_RIGHT_NONE, |
| 288 MakeUserPointer(&h))); |
| 289 EXPECT_EQ(MOJO_HANDLE_INVALID, h); |
| 290 } |
| 291 |
| 259 // |DuplicateHandleWithReducedRights()|: | 292 // |DuplicateHandleWithReducedRights()|: |
| 260 { | 293 { |
| 261 MojoHandle h = MOJO_HANDLE_INVALID; | 294 MojoHandle h = MOJO_HANDLE_INVALID; |
| 262 EXPECT_EQ( | 295 EXPECT_EQ( |
| 263 MOJO_RESULT_INVALID_ARGUMENT, | 296 MOJO_RESULT_INVALID_ARGUMENT, |
| 264 core()->DuplicateHandleWithReducedRights( | 297 core()->DuplicateHandleWithReducedRights( |
| 265 MOJO_HANDLE_INVALID, MOJO_HANDLE_RIGHT_NONE, MakeUserPointer(&h))); | 298 MOJO_HANDLE_INVALID, MOJO_HANDLE_RIGHT_NONE, MakeUserPointer(&h))); |
| 266 EXPECT_EQ(MOJO_HANDLE_INVALID, h); | 299 EXPECT_EQ(MOJO_HANDLE_INVALID, h); |
| 267 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, | 300 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, |
| 268 core()->DuplicateHandleWithReducedRights( | 301 core()->DuplicateHandleWithReducedRights( |
| (...skipping 356 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 625 // |GetRights()|: | 658 // |GetRights()|: |
| 626 { | 659 { |
| 627 MockHandleInfo info; | 660 MockHandleInfo info; |
| 628 MojoHandle h = CreateMockHandle(&info); | 661 MojoHandle h = CreateMockHandle(&info); |
| 629 EXPECT_DEATH_IF_SUPPORTED(core()->GetRights(h, NullUserPointer()), | 662 EXPECT_DEATH_IF_SUPPORTED(core()->GetRights(h, NullUserPointer()), |
| 630 kMemoryCheckFailedRegex); | 663 kMemoryCheckFailedRegex); |
| 631 | 664 |
| 632 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h)); | 665 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h)); |
| 633 } | 666 } |
| 634 | 667 |
| 668 // |ReplaceHandleWithReducedRights()|: |
| 669 { |
| 670 MockHandleInfo info; |
| 671 MojoHandle h = CreateMockHandle(&info); |
| 672 EXPECT_DEATH_IF_SUPPORTED(core()->ReplaceHandleWithReducedRights( |
| 673 h, MOJO_HANDLE_RIGHT_NONE, NullUserPointer()), |
| 674 kMemoryCheckFailedRegex); |
| 675 |
| 676 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h)); |
| 677 } |
| 678 |
| 635 // |DuplicateHandleWithReducedRights()|: | 679 // |DuplicateHandleWithReducedRights()|: |
| 636 { | 680 { |
| 637 MockHandleInfo info; | 681 MockHandleInfo info; |
| 638 MojoHandle h = CreateMockHandle(&info); | 682 MojoHandle h = CreateMockHandle(&info); |
| 639 EXPECT_DEATH_IF_SUPPORTED(core()->DuplicateHandleWithReducedRights( | 683 EXPECT_DEATH_IF_SUPPORTED(core()->DuplicateHandleWithReducedRights( |
| 640 h, MOJO_HANDLE_RIGHT_NONE, NullUserPointer()), | 684 h, MOJO_HANDLE_RIGHT_NONE, NullUserPointer()), |
| 641 kMemoryCheckFailedRegex); | 685 kMemoryCheckFailedRegex); |
| 642 | 686 |
| 643 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h)); | 687 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h)); |
| 644 } | 688 } |
| (...skipping 1269 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1914 | 1958 |
| 1915 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h)); | 1959 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h)); |
| 1916 } | 1960 } |
| 1917 | 1961 |
| 1918 // TODO(vtl): Test |CreateSharedBuffer()|, |DuplicateBufferHandle()|, and | 1962 // TODO(vtl): Test |CreateSharedBuffer()|, |DuplicateBufferHandle()|, and |
| 1919 // |MapBuffer()|. | 1963 // |MapBuffer()|. |
| 1920 | 1964 |
| 1921 } // namespace | 1965 } // namespace |
| 1922 } // namespace system | 1966 } // namespace system |
| 1923 } // namespace mojo | 1967 } // namespace mojo |
| OLD | NEW |