diff --git a/paddle/framework/channel_test.cc b/paddle/framework/channel_test.cc index 2efa086f0090a130c84f6607a52d6d4d23e48673..020f806380626d2f1efac683741ee84f1b573aeb 100644 --- a/paddle/framework/channel_test.cc +++ b/paddle/framework/channel_test.cc @@ -99,3 +99,29 @@ TEST(Channel, SimpleUnbufferedChannelTest) { EXPECT_EQ(sum_send, 10U); delete ch; } + +TEST(Channel, UnbufferedLessReceiveMoreSendTest) { + auto ch = MakeChannel(0); + unsigned sum_send = 0; + // Send should block after three iterations + // since we only have three receivers. + std::thread t([&]() { + // Try to send more number of times + // than receivers + for (int i = 0; i < 4; i++) { + ch->Send(&i); + sum_send += i; + } + }); + for (int i = 0; i < 3; i++) { + int recv; + ch->Receive(&recv); + EXPECT_EQ(recv, i); + } + std::this_thread::sleep_for(std::chrono::milliseconds(100)); // wait 0.5 sec + EXPECT_EQ(sum_send, 3U); + + CloseChannel(ch); + t.join(); + delete ch; +}