diff options
author | Haavard <havardpe@yahoo-inc.com> | 2017-04-04 13:53:11 +0000 |
---|---|---|
committer | Haavard <havardpe@yahoo-inc.com> | 2017-04-04 13:53:11 +0000 |
commit | bff34eff1e03e2a80bde065e957846de140941a9 (patch) | |
tree | 52ac9d501f735907a9ba818432d871622264ab65 /vespalib | |
parent | d7cb442bd8132aa67f54f1874e4a3c46422d34ff (diff) |
allow adding without enabling write events
Diffstat (limited to 'vespalib')
-rw-r--r-- | vespalib/src/tests/net/selector/selector_test.cpp | 26 | ||||
-rw-r--r-- | vespalib/src/vespa/vespalib/net/selector.h | 2 |
2 files changed, 11 insertions, 17 deletions
diff --git a/vespalib/src/tests/net/selector/selector_test.cpp b/vespalib/src/tests/net/selector/selector_test.cpp index aeb5a848262..82494f5423f 100644 --- a/vespalib/src/tests/net/selector/selector_test.cpp +++ b/vespalib/src/tests/net/selector/selector_test.cpp @@ -53,13 +53,13 @@ struct Fixture { Selector<Handler> selector; std::vector<SocketPair> sockets; std::vector<Context> contexts; - Fixture(size_t size) : handler(), selector(handler, 1024), sockets(), contexts() { + Fixture(size_t size, bool write_enabled) : handler(), selector(handler, 1024), sockets(), contexts() { for (size_t i = 0; i < size; ++i) { sockets.push_back(SocketPair::create()); contexts.push_back(Context(sockets.back().a.get())); } for (auto &ctx: contexts) { - selector.add(ctx); + selector.add(ctx, write_enabled); } } Fixture &reset() { @@ -89,7 +89,7 @@ constexpr std::pair<bool,bool> in = std::make_pair(true, false); constexpr std::pair<bool,bool> out = std::make_pair(false, true); constexpr std::pair<bool,bool> both = std::make_pair(true, true); -TEST_F("require that basic events trigger correctly", Fixture(1)) { +TEST_F("require that basic events trigger correctly", Fixture(1, true)) { TEST_DO(f1.reset().poll().verify(false, {out})); EXPECT_EQUAL(write(f1.sockets[0].b.get(), "test", 4), 4); TEST_DO(f1.reset().poll().verify(false, {both})); @@ -102,11 +102,8 @@ TEST_F("require that basic events trigger correctly", Fixture(1)) { TEST_DO(f1.reset().poll().verify(false, {both})); } -TEST_F("require that multiple sources can be selected on", Fixture(5)) { +TEST_F("require that multiple sources can be selected on", Fixture(5, false)) { char buf[128]; - for (auto &ctx: f1.contexts) { - f1.selector.disable_write(ctx); - } TEST_DO(f1.reset().poll(10).verify(false, {none, none, none, none, none})); EXPECT_EQUAL(write(f1.sockets[1].b.get(), "test", 4), 4); EXPECT_EQUAL(write(f1.sockets[3].b.get(), "test", 4), 4); @@ -118,7 +115,7 @@ TEST_F("require that multiple sources can be selected on", Fixture(5)) { TEST_DO(f1.reset().poll(10).verify(false, {none, none, none, none, none})); } -TEST_F("require that removed sources no longer produce events", Fixture(2)) { +TEST_F("require that removed sources no longer produce events", Fixture(2, true)) { TEST_DO(f1.reset().poll().verify(false, {out, out})); EXPECT_EQUAL(write(f1.sockets[0].b.get(), "test", 4), 4); EXPECT_EQUAL(write(f1.sockets[1].b.get(), "test", 4), 4); @@ -127,7 +124,7 @@ TEST_F("require that removed sources no longer produce events", Fixture(2)) { TEST_DO(f1.reset().poll().verify(false, {none, both})); } -TEST_F("require that filling the output buffer disables write events", Fixture(1)) { +TEST_F("require that filling the output buffer disables write events", Fixture(1, true)) { EXPECT_EQUAL(write(f1.sockets[0].b.get(), "test", 4), 4); TEST_DO(f1.reset().poll().verify(false, {both})); size_t buffer_size = 0; @@ -139,7 +136,7 @@ TEST_F("require that filling the output buffer disables write events", Fixture(1 TEST_DO(f1.reset().poll().verify(false, {in})); } -TEST_MT_FF("require that selector can be woken while waiting for events", 2, Fixture(0), TimeBomb(60)) { +TEST_MT_FF("require that selector can be woken while waiting for events", 2, Fixture(0, false), TimeBomb(60)) { if (thread_id == 0) { TEST_DO(f1.reset().poll().verify(true, {})); } else { @@ -148,19 +145,16 @@ TEST_MT_FF("require that selector can be woken while waiting for events", 2, Fix } } -TEST_MT_FF("require that selection criteria can be changed while waiting for events", 2, Fixture(1), TimeBomb(60)) { +TEST_MT_FF("require that selection criteria can be changed while waiting for events", 2, Fixture(1, false), TimeBomb(60)) { if (thread_id == 0) { - f1.selector.disable_write(f1.contexts[0]); - TEST_BARRIER(); TEST_DO(f1.reset().poll().verify(false, {out})); } else { - TEST_BARRIER(); std::this_thread::sleep_for(std::chrono::milliseconds(20)); f1.selector.enable_write(f1.contexts[0]); } } -TEST_MT_FF("require that selection sources can be added while waiting for events", 2, Fixture(0), TimeBomb(60)) { +TEST_MT_FF("require that selection sources can be added while waiting for events", 2, Fixture(0, false), TimeBomb(60)) { if (thread_id == 0) { TEST_DO(f1.reset().poll().verify(false, {})); TEST_BARRIER(); @@ -168,7 +162,7 @@ TEST_MT_FF("require that selection sources can be added while waiting for events SocketPair pair = SocketPair::create(); Context ctx(pair.a.get()); std::this_thread::sleep_for(std::chrono::milliseconds(20)); - f1.selector.add(ctx); + f1.selector.add(ctx, true); TEST_BARRIER(); EXPECT_TRUE(ctx.can_write); } diff --git a/vespalib/src/vespa/vespalib/net/selector.h b/vespalib/src/vespa/vespalib/net/selector.h index 11a4be31a8e..0ae993e97d6 100644 --- a/vespalib/src/vespa/vespalib/net/selector.h +++ b/vespalib/src/vespa/vespalib/net/selector.h @@ -86,7 +86,7 @@ public: ~Selector() { _epoll.remove(_wakeup_pipe.get_read_fd()); } - void add(Context &ctx) { _epoll.add(_handler.get_fd(ctx), &ctx, true, true); } + void add(Context &ctx, bool write_enabled) { _epoll.add(_handler.get_fd(ctx), &ctx, true, write_enabled); } void enable_write(Context &ctx) { _epoll.update(_handler.get_fd(ctx), &ctx, true, true); } void disable_write(Context &ctx) { _epoll.update(_handler.get_fd(ctx), &ctx, true, false); } void remove(Context &ctx) { _epoll.remove(_handler.get_fd(ctx)); } |