Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

GTEST: fixes to the uct sockaddr tests #4520

Merged
merged 1 commit into from
Dec 4, 2019
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 26 additions & 11 deletions test/gtest/uct/ib/test_sockaddr.cc
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ extern "C" {
#include <uct/api/uct.h>
#include <ucs/sys/sys.h>
#include <ucs/sys/string.h>
#include <ucs/arch/atomic.h>
}

#include <queue>
Expand Down Expand Up @@ -132,20 +133,22 @@ class test_uct_sockaddr : public uct_test {
} else {
uct_iface_accept(iface, conn_request);
}
ucs_memory_cpu_store_fence();
self->server_recv_req++;
}

static ucs_status_t err_handler(void *arg, uct_ep_h ep, ucs_status_t status)
{
test_uct_sockaddr *self = reinterpret_cast<test_uct_sockaddr*>(arg);
self->err_count++;
ucs_atomic_add32(&self->err_count, 1);
return UCS_OK;
}

protected:
entity *server, *client;
ucs::sock_addr_storage m_listen_addr, m_connect_addr;
volatile int err_count, server_recv_req;
volatile uint32_t err_count;
volatile int server_recv_req;
std::queue<uct_conn_request_h> delayed_conn_reqs;
bool delay_conn_reply;
};
Expand All @@ -164,7 +167,7 @@ UCS_TEST_P(test_uct_sockaddr, connect_client_to_server)
/* since the transport may support a graceful exit in case of an error,
* make sure that the error handling flow wasn't invoked (there were no
* errors) */
EXPECT_EQ(0, err_count);
EXPECT_EQ(0ul, err_count);
/* the test may end before the client's ep got connected.
* it should also pass in this case as well - the client's
* ep shouldn't be accessed (for connection reply from the server) after the
Expand All @@ -182,8 +185,9 @@ UCS_TEST_P(test_uct_sockaddr, connect_client_to_server_with_delay)
progress();
}
ASSERT_EQ(1, server_recv_req);
ucs_memory_cpu_load_fence();
ASSERT_EQ(1ul, delayed_conn_reqs.size());
EXPECT_EQ(0, err_count);
EXPECT_EQ(0ul, err_count);
while (!delayed_conn_reqs.empty()) {
uct_iface_accept(server->iface(), delayed_conn_reqs.front());
delayed_conn_reqs.pop();
Expand All @@ -197,7 +201,7 @@ UCS_TEST_P(test_uct_sockaddr, connect_client_to_server_with_delay)
} else {
EXPECT_EQ(UCS_OK, status);
}
EXPECT_EQ(0, err_count);
EXPECT_EQ(0ul, err_count);
}

UCS_TEST_P(test_uct_sockaddr, connect_client_to_server_reject_with_delay)
Expand All @@ -211,16 +215,17 @@ UCS_TEST_P(test_uct_sockaddr, connect_client_to_server_reject_with_delay)
progress();
}
ASSERT_EQ(1, server_recv_req);
ucs_memory_cpu_load_fence();
ASSERT_EQ(1ul, delayed_conn_reqs.size());
EXPECT_EQ(0, err_count);
EXPECT_EQ(0ul, err_count);
while (!delayed_conn_reqs.empty()) {
uct_iface_reject(server->iface(), delayed_conn_reqs.front());
delayed_conn_reqs.pop();
}
while (err_count == 0) {
progress();
}
EXPECT_EQ(1, err_count);
EXPECT_EQ(1ul, err_count);
}

UCS_TEST_P(test_uct_sockaddr, many_clients_to_one_server)
Expand Down Expand Up @@ -254,7 +259,7 @@ UCS_TEST_P(test_uct_sockaddr, many_clients_to_one_server)
progress();
}
ASSERT_TRUE(server_recv_req == num_clients);
EXPECT_EQ(0, err_count);
EXPECT_EQ(0ul, err_count);
}

UCS_TEST_P(test_uct_sockaddr, many_conns_on_client)
Expand All @@ -271,7 +276,7 @@ UCS_TEST_P(test_uct_sockaddr, many_conns_on_client)
progress();
}
ASSERT_TRUE(server_recv_req == num_conns_on_client);
EXPECT_EQ(0, err_count);
EXPECT_EQ(0ul, err_count);
}

UCS_TEST_SKIP_COND_P(test_uct_sockaddr, err_handle,
Expand Down Expand Up @@ -427,7 +432,6 @@ class test_uct_cm_sockaddr : public uct_test {
std::string(static_cast<const char *>(remote_data->conn_priv_data)));

self->m_cm_state |= TEST_CM_STATE_CONNECT_REQUESTED;
self->m_server_recv_req_cnt++;

if (self->m_delay_conn_reply) {
self->m_delayed_conn_reqs.push(conn_request);
Expand All @@ -439,6 +443,9 @@ class test_uct_cm_sockaddr : public uct_test {
self->server_accept(self->m_server, conn_request,
server_connect_cb, server_disconnect_cb, self);
}

ucs_memory_cpu_store_fence();
self->m_server_recv_req_cnt++;
}

static void
Expand Down Expand Up @@ -529,6 +536,7 @@ class test_uct_cm_sockaddr : public uct_test {
void test_delayed_server_response(bool reject)
{
ucs_status_t status;
ucs_time_t deadline;

m_delay_conn_reply = true;

Expand All @@ -538,7 +546,14 @@ class test_uct_cm_sockaddr : public uct_test {
(TEST_CM_STATE_SERVER_CONNECTED | TEST_CM_STATE_CLIENT_CONNECTED |
TEST_CM_STATE_CLIENT_GOT_REJECT | TEST_CM_STATE_CLIENT_GOT_ERROR));

ASSERT_EQ(1ul, m_delayed_conn_reqs.size());
deadline = ucs_get_time() + ucs_time_from_sec(DEFAULT_TIMEOUT_SEC) *
ucs::test_time_multiplier();

while ((m_server_recv_req_cnt == 0) && (ucs_get_time() < deadline)) {
progress();
}
ASSERT_EQ(1, m_server_recv_req_cnt);
ucs_memory_cpu_load_fence();

if (reject) {
/* wrap errors since a reject is expected */
Expand Down