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

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

Issue 2070523003: EDK: wait sets: Implement WaitSetDispatcher::WaitSet{AddRemove}Impl(). (Closed) Base URL: https://github.com/domokit/mojo.git@work796_wait_set_3.5
Patch Set: many fixes Created 4 years, 6 months 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
OLDNEW
(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
OLDNEW
« mojo/edk/system/wait_set_dispatcher.h ('K') | « mojo/edk/system/wait_set_dispatcher.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698