Skip to content

Commit

Permalink
tests: Add error flow test to check post recv/send while QP is in res…
Browse files Browse the repository at this point in the history
…et state

Add generic error flow tests to check post receive/send while QP is in
reset state, which is an invalid state for traffic.
Add instances of the tests in UD and SRD.

Reviewed-by: Chen Brasch <cbrasch@amazon.com>
Signed-off-by: Yonatan Nachum <ynachum@amazon.com>
Signed-off-by: Firas Jahjah <firasj@amazon.com>
  • Loading branch information
YonatanNachum authored and firasj committed Jan 19, 2022
1 parent dd31621 commit 6f10cea
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 1 deletion.
10 changes: 10 additions & 0 deletions tests/test_efa_srd.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,3 +71,13 @@ def test_qp_ex_srd_zero_size(self):
self.server.msg_size = 0
u.traffic(self.client, self.server, self.iters, self.gid_index, self.ib_port,
new_send=True, send_op=send_op)

def test_post_receive_qp_state_bad_flow(self):
send_op = e.IBV_QP_EX_WITH_SEND
self.create_players(send_op, qp_count=1)
u.post_rq_state_bad_flow(self)

def test_post_send_qp_state_bad_flow(self):
send_op = e.IBV_QP_EX_WITH_SEND
self.create_players(send_op, qp_count=1)
u.post_sq_state_bad_flow(self)
9 changes: 9 additions & 0 deletions tests/test_qpex.py
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,8 @@ def create_players(self, qp_type):
raise ex
client.pre_run(server.psns, server.qps_num)
server.pre_run(client.psns, client.qps_num)
self.client = client
self.server = server
return client, server

def test_qp_ex_ud_send(self):
Expand Down Expand Up @@ -315,3 +317,10 @@ def test_qp_ex_rc_bind_mw(self):
if ex.error_code != e.IBV_WC_REM_ACCESS_ERR:
raise ex

def test_post_receive_qp_state_bad_flow(self):
self.create_players(qp_type='ud_send')
u.post_rq_state_bad_flow(self)

def test_post_send_qp_state_bad_flow(self):
self.create_players(qp_type='ud_send')
u.post_sq_state_bad_flow(self)
37 changes: 36 additions & 1 deletion tests/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
from tests.base import XRCResources, DCT_KEY
from tests.efa_base import SRDResources
from pyverbs.wr import SGE, SendWR, RecvWR
from pyverbs.qp import QPCap, QPInitAttr, QPInitAttrEx
from pyverbs.qp import QPCap, QPInitAttr, QPInitAttrEx, QPAttr
from tests.mlx5_base import Mlx5DcResources, Mlx5DcStreamsRes
from pyverbs.base import PyverbsRDMAErrno
from pyverbs.cq import PollCqAttr, CQEX
Expand Down Expand Up @@ -1227,3 +1227,38 @@ def is_datagram_qp(agr_obj):

def is_root():
return os.geteuid() == 0


def post_rq_state_bad_flow(test_obj):
"""
Check post_recive on rq while qp is in invalid state.
- Change qp's state to IBV_QPS_RESET
- Verify post receive on qp fails
:param test_obj: An instance of RDMATestCase
:return: None.
"""
qp_attr = QPAttr(qp_state=e.IBV_QPS_RESET, cur_qp_state=e.IBV_QPS_RTS)
test_obj.server.qps[0].modify(qp_attr, e.IBV_QP_STATE)
recv_wr = get_recv_wr(test_obj.server)
with test_obj.assertRaises(PyverbsRDMAError) as ex:
post_recv(test_obj.server, recv_wr, qp_idx=0)
test_obj.assertEqual(ex.exception.error_code, errno.EINVAL)


def post_sq_state_bad_flow(test_obj):
"""
Check post_send on sq while qp is in invalid state.
- Change qp's state to IBV_QPS_RESET
- Verify post send on qp fails
:param test_obj: An instance of RDMATestCase
:return: None.
"""
qp_idx = 0
qp_attr = QPAttr(qp_state=e.IBV_QPS_RESET, cur_qp_state=e.IBV_QPS_RTS)
test_obj.client.qps[qp_idx].modify(qp_attr, e.IBV_QP_STATE)
ah = get_global_ah(test_obj.client, test_obj.gid_index, test_obj.ib_port)
_, sg = get_send_elements(test_obj.client, False)
with test_obj.assertRaises(PyverbsRDMAError) as ex:
send(test_obj.client, sg, e.IBV_QP_EX_WITH_SEND, new_send=True,
qp_idx=qp_idx, ah=ah)
test_obj.assertEqual(ex.exception.error_code, errno.EINVAL)

0 comments on commit 6f10cea

Please sign in to comment.