From 1cc1a490288a558e9aaaad5ea33c081f539074e0 Mon Sep 17 00:00:00 2001 From: Kavya Srinet Date: Mon, 5 Feb 2018 13:18:41 -0800 Subject: [PATCH] Test case to check if receiver blocks on empty channel --- paddle/framework/channel_test.cc | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/paddle/framework/channel_test.cc b/paddle/framework/channel_test.cc index 444d68498c9676..2f4df767e2b496 100644 --- a/paddle/framework/channel_test.cc +++ b/paddle/framework/channel_test.cc @@ -82,6 +82,33 @@ TEST(Channel, ConcurrentSendNonConcurrentReceiveWithSufficientBufferSize) { delete ch; } +void ReceiveEmptyChannelTest(Channel* ch) { + size_t current = 5; + std::thread t([&]() { + // Read from channel + int out; + ch->Receive(&out); // should block since channel is empty + current = 10; + }); + std::this_thread::sleep_for(std::chrono::milliseconds(100)); // wait 0.1 sec + EXPECT_EQ(current, 5U); // the receiver should be blocked since channel is empty + + CloseChannel(ch); + t.join(); + EXPECT_EQ(current, 10U); // when we close the channel, the receiver should unblock + delete ch; +} + +TEST(Channel, BufferedReceiveEmptyChannelTest) { + auto ch = MakeChannel(3); + ReceiveEmptyChannelTest(ch); +} + +TEST(Channel, UnBufferedReceiveEmptyChannelTest) { + auto ch = MakeChannel(0); + ReceiveEmptyChannelTest(ch); +} + TEST(Channel, SimpleUnbufferedChannelTest) { auto ch = MakeChannel(0); unsigned sum_send = 0;