summaryrefslogtreecommitdiffstats
path: root/vespalib
diff options
context:
space:
mode:
authorHaavard <havardpe@yahoo-inc.com>2017-04-04 13:53:11 +0000
committerHaavard <havardpe@yahoo-inc.com>2017-04-04 13:53:11 +0000
commitbff34eff1e03e2a80bde065e957846de140941a9 (patch)
tree52ac9d501f735907a9ba818432d871622264ab65 /vespalib
parentd7cb442bd8132aa67f54f1874e4a3c46422d34ff (diff)
allow adding without enabling write events
Diffstat (limited to 'vespalib')
-rw-r--r--vespalib/src/tests/net/selector/selector_test.cpp26
-rw-r--r--vespalib/src/vespa/vespalib/net/selector.h2
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)); }