Skip to content
This repository has been archived by the owner on Sep 5, 2023. It is now read-only.

Commit

Permalink
rpma: add RDMA_CM_EVENT_REJECTED event handler
Browse files Browse the repository at this point in the history
  • Loading branch information
osalyk committed Jan 29, 2021
1 parent 45299db commit 5dca3f1
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 16 deletions.
5 changes: 4 additions & 1 deletion src/conn.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: BSD-3-Clause
/* Copyright 2020, Intel Corporation */
/* Copyright 2020-2021, Intel Corporation */

/*
* conn.c -- librpma connection-related implementations
Expand Down Expand Up @@ -173,6 +173,9 @@ rpma_conn_next_event(struct rpma_conn *conn, enum rpma_conn_event *event)
case RDMA_CM_EVENT_TIMEWAIT_EXIT:
*event = RPMA_CONN_CLOSED;
break;
case RDMA_CM_EVENT_REJECTED:
*event = RPMA_CONN_REJECTED;
break;
default:
RPMA_LOG_WARNING("%s: %s",
rpma_utils_conn_event_2str(*event),
Expand Down
5 changes: 4 additions & 1 deletion src/include/librpma.h
Original file line number Diff line number Diff line change
Expand Up @@ -1430,7 +1430,8 @@ enum rpma_conn_event {
RPMA_CONN_UNDEFINED = -1, /* Undefined connection event */
RPMA_CONN_ESTABLISHED, /* Connection established */
RPMA_CONN_CLOSED, /* Connection closed */
RPMA_CONN_LOST /* Connection lost */
RPMA_CONN_LOST, /* Connection lost */
RPMA_CONN_REJECTED /* Connection rejected */
};

/** 3
Expand All @@ -1446,6 +1447,7 @@ enum rpma_conn_event {
* RPMA_CONN_ESTABLISHED,
* RPMA_CONN_CLOSED,
* RPMA_CONN_LOST,
* RPMA_CONN_REJECTED,
* };
*
* int rpma_conn_next_event(struct rpma_conn *conn,
Expand All @@ -1458,6 +1460,7 @@ enum rpma_conn_event {
* - RPMA_CONN_ESTABLISHED - connection established
* - RPMA_CONN_CLOSED - connection closed
* - RPMA_CONN_LOST - connection lost
* - RPMA_CONN_REJECTED - connection rejected
*
* RETURN VALUE
* The rpma_conn_next_event() function returns 0 on success or a negative
Expand Down
56 changes: 42 additions & 14 deletions tests/unit/conn/conn-next_event.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: BSD-3-Clause
/* Copyright 2020, Intel Corporation */
/* Copyright 2020-2021, Intel Corporation */

/*
* conn-next-event.c -- the connection next_event unit tests
Expand Down Expand Up @@ -99,17 +99,17 @@ next_event__get_cm_event_ENODATA(void **cstate_ptr)
}

/*
* next_event__event_REJECTED -
* RDMA_CM_EVENT_REJECTED is unexpected
* next_event__event_UNREACHABLE -
* RDMA_CM_EVENT_UNREACHABLE is unexpected
*/
static void
next_event__event_REJECTED(void **cstate_ptr)
next_event__event_UNREACHABLE(void **cstate_ptr)
{
struct conn_test_state *cstate = *cstate_ptr;

expect_value(rdma_get_cm_event, channel, MOCK_EVCH);
struct rdma_cm_event event;
event.event = RDMA_CM_EVENT_REJECTED;
event.event = RDMA_CM_EVENT_UNREACHABLE;
will_return(rdma_get_cm_event, &event);

expect_value(rdma_ack_cm_event, event, &event);
Expand All @@ -125,18 +125,18 @@ next_event__event_REJECTED(void **cstate_ptr)
}

/*
* next_event__event_REJECTED_ack_EINVAL -
* next_event__event_UNREACHABLE_ack_EINVAL -
* rdma_ack_cm_event() fails with EINVAL after obtaining
* an RDMA_CM_EVENT_REJECTED event
* an RDMA_CM_EVENT_UNREACHABLE event
*/
static void
next_event__event_REJECTED_ack_EINVAL(void **cstate_ptr)
next_event__event_UNREACHABLE_ack_EINVAL(void **cstate_ptr)
{
struct conn_test_state *cstate = *cstate_ptr;

expect_value(rdma_get_cm_event, channel, MOCK_EVCH);
struct rdma_cm_event event;
event.event = RDMA_CM_EVENT_REJECTED;
event.event = RDMA_CM_EVENT_UNREACHABLE;
will_return(rdma_get_cm_event, &event);

expect_value(rdma_ack_cm_event, event, &event);
Expand Down Expand Up @@ -504,6 +504,31 @@ next_event__success_TIMEWAIT_EXIT(void **cstate_ptr)
assert_int_equal(c_event, RPMA_CONN_CLOSED);
}

/*
* next_event__success_REJECTED - happy day scenario
*/
static void
next_event__success_REJECTED(void **cstate_ptr)
{
struct conn_test_state *cstate = *cstate_ptr;

expect_value(rdma_get_cm_event, channel, MOCK_EVCH);
struct rdma_cm_event event;
event.event = RDMA_CM_EVENT_REJECTED;
will_return(rdma_get_cm_event, &event);

expect_value(rdma_ack_cm_event, event, &event);
will_return(rdma_ack_cm_event, MOCK_OK);

/* run test */
enum rpma_conn_event c_event = RPMA_CONN_UNDEFINED;
int ret = rpma_conn_next_event(cstate->conn, &c_event);

/* verify the results */
assert_int_equal(ret, MOCK_OK);
assert_int_equal(c_event, RPMA_CONN_REJECTED);
}

static const struct CMUnitTest tests_next_event[] = {
/* rpma_conn_next_event() unit tests */
cmocka_unit_test(next_event__conn_NULL),
Expand All @@ -517,11 +542,11 @@ static const struct CMUnitTest tests_next_event[] = {
cmocka_unit_test_setup_teardown(
next_event__get_cm_event_ENODATA,
setup__conn_new, teardown__conn_delete),
cmocka_unit_test_setup_teardown(
next_event__event_REJECTED,
setup__conn_new, teardown__conn_delete),
cmocka_unit_test_setup_teardown(
next_event__event_REJECTED_ack_EINVAL,
cmocka_unit_test_setup_teardown(
next_event__event_UNREACHABLE,
setup__conn_new, teardown__conn_delete),
cmocka_unit_test_setup_teardown(
next_event__event_UNREACHABLE_ack_EINVAL,
setup__conn_new, teardown__conn_delete),
cmocka_unit_test_setup_teardown(
next_event__data_store_ENOMEM,
Expand Down Expand Up @@ -550,6 +575,9 @@ static const struct CMUnitTest tests_next_event[] = {
cmocka_unit_test_setup_teardown(
next_event__success_TIMEWAIT_EXIT,
setup__conn_new, teardown__conn_delete),
cmocka_unit_test_setup_teardown(
next_event__success_REJECTED,
setup__conn_new, teardown__conn_delete),
cmocka_unit_test(NULL)
};

Expand Down

0 comments on commit 5dca3f1

Please sign in to comment.