| OLD | NEW |
| (Empty) | |
| 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 |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #include "mojo/edk/system/wait_set_dispatcher.h" |
| 6 |
| 7 #include "mojo/edk/system/mock_simple_dispatcher.h" |
| 8 #include "testing/gtest/include/gtest/gtest.h" |
| 9 |
| 10 using mojo::util::MakeRefCounted; |
| 11 |
| 12 namespace mojo { |
| 13 namespace system { |
| 14 namespace { |
| 15 |
| 16 TEST(WaitSetDispatcherTest, Basic) { |
| 17 auto d = WaitSetDispatcher::Create(WaitSetDispatcher::kDefaultCreateOptions); |
| 18 |
| 19 // These will be members of our wait set. |
| 20 auto d_member0 = MakeRefCounted<test::MockSimpleDispatcher>( |
| 21 MOJO_HANDLE_SIGNAL_NONE, |
| 22 MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE); |
| 23 auto d_member1 = MakeRefCounted<test::MockSimpleDispatcher>( |
| 24 MOJO_HANDLE_SIGNAL_READABLE, MOJO_HANDLE_SIGNAL_READABLE); |
| 25 |
| 26 // Add |d_member0|, for something not satisfied, but satisfiable. |
| 27 const uint64_t kCookie0 = 0x123456789abcdef0ULL; |
| 28 EXPECT_EQ(MOJO_RESULT_OK, |
| 29 d->WaitSetAdd(NullUserPointer(), d_member0.Clone(), |
| 30 MOJO_HANDLE_SIGNAL_READABLE, kCookie0)); |
| 31 |
| 32 // Add |d_member1|, for something satisfied. |
| 33 const uint64_t kCookie1 = 0x23456789abcdef01ULL; |
| 34 EXPECT_EQ(MOJO_RESULT_OK, |
| 35 d->WaitSetAdd(NullUserPointer(), d_member1.Clone(), |
| 36 MOJO_HANDLE_SIGNAL_READABLE, kCookie1)); |
| 37 |
| 38 // Can add |d_member0| again, with a different cookie. |
| 39 const uint64_t kCookie2 = 0x3456789abcdef012ULL; |
| 40 EXPECT_EQ(MOJO_RESULT_OK, |
| 41 d->WaitSetAdd(NullUserPointer(), d_member0.Clone(), |
| 42 MOJO_HANDLE_SIGNAL_WRITABLE, kCookie2)); |
| 43 |
| 44 // Adding something with the same cookie yields "already exists". |
| 45 EXPECT_EQ(MOJO_RESULT_ALREADY_EXISTS, |
| 46 d->WaitSetAdd(NullUserPointer(), d_member1.Clone(), |
| 47 MOJO_HANDLE_SIGNAL_READABLE, kCookie2)); |
| 48 |
| 49 // Can remove something based on a cookie. |
| 50 EXPECT_EQ(MOJO_RESULT_OK, d->WaitSetRemove(kCookie0)); |
| 51 |
| 52 // Trying to remove the same cookie again should fail. |
| 53 EXPECT_EQ(MOJO_RESULT_NOT_FOUND, d->WaitSetRemove(kCookie0)); |
| 54 |
| 55 // Can re-add it. |
| 56 EXPECT_EQ(MOJO_RESULT_OK, |
| 57 d->WaitSetAdd(NullUserPointer(), d_member0.Clone(), |
| 58 MOJO_HANDLE_SIGNAL_READABLE, kCookie0)); |
| 59 |
| 60 // TODO(vtl): Test waiting here. |
| 61 |
| 62 // Can close a dispatcher that's "in" the wait set. |
| 63 EXPECT_EQ(MOJO_RESULT_OK, d_member1->Close()); |
| 64 |
| 65 // TODO(vtl): Test waiting here. |
| 66 |
| 67 // Can remove something whose dispatcher has been closed. |
| 68 EXPECT_EQ(MOJO_RESULT_OK, d->WaitSetRemove(kCookie1)); |
| 69 |
| 70 // Can close the wait set when it's not empty. |
| 71 EXPECT_EQ(MOJO_RESULT_OK, d->Close()); |
| 72 |
| 73 EXPECT_EQ(MOJO_RESULT_OK, d_member0->Close()); |
| 74 } |
| 75 |
| 76 // TODO(vtl): Test options validation for "create" and "add" (not that there's |
| 77 // much to test). |
| 78 |
| 79 } // namespace |
| 80 } // namespace system |
| 81 } // namespace mojo |
| OLD | NEW |