Open
Description
Consider the following test case for client:
template <class BUFFER, class NetProvider>
void
test_case(Connector<BUFFER, NetProvider> &client)
{
TEST_INIT(0);
Connection<Buf_t, NetProvider> conn1(client);
Connection<Buf_t, NetProvider> conn2(client);
Connection<Buf_t, NetProvider> conn3(client);
int rc = test_connect(client, conn1, localhost, port);
fail_unless(rc == 0);
/* Try to connect to the same port */
rc = test_connect(client, conn2, localhost, port);
fail_unless(rc == 0);
rc = test_connect(client, conn3, localhost, port);
fail_unless(rc == 0);
rid_t f1 = conn1.ping();
rid_t f2 = conn2.ping();
rid_t f3 = conn3.ping();
/* Wait for all connections. */
fail_unless(client.wait(conn1, f1, WAIT_TIMEOUT) == 0);
fail_unless(conn1.futureIsReady(f1));
fail_unless(conn1.getResponse(f1).header.code == 0);
fail_unless(client.wait(conn2, f2, WAIT_TIMEOUT) == 0);
fail_unless(conn2.futureIsReady(f2));
fail_unless(conn2.getResponse(f2).header.code == 0);
fail_unless(client.wait(conn3, f3, WAIT_TIMEOUT) == 0);
fail_unless(conn3.futureIsReady(f3));
fail_unless(conn3.getResponse(f3).header.code == 0);
/* Wait any. */
std::optional<Connection<Buf_t, NetProvider>> conn_opt = client.waitAny(WAIT_TIMEOUT);
/* Close all connections. */
client.close(conn1);
client.close(conn2);
client.close(conn3);
}
The test fails with the following assertion (LibevNetProvider
is used):
Assertion failed: (hasDataToDecode(conn)), function waitAny, file Connector.hpp, line 274.
Note that if you leave only one connection, the test will pass successfully.