blob: 634e5d549803ee5892ac9d8f2969a2fa45b36883 [file] [log] [blame] [edit]
import unittest
from tests.base import RCResources, RDMATestCase
from pyverbs.srq import SrqAttr
from pyverbs.libibverbs_enums import ibv_device_cap_flags, ibv_srq_attr_mask, ibv_event_type
import tests.utils as u
class SrqTestCase(RDMATestCase):
def setUp(self):
super().setUp()
self.iters = 100
self.create_players(RCResources, qp_count=2, with_srq=True)
def test_rc_srq_traffic(self):
"""
Test RC traffic with SRQ.
"""
u.traffic(**self.traffic_args)
def test_resize_srq(self):
"""
Test modify_srq with IBV_SRQ_MAX_WR which allows to modify max_wr.
Once modified, query the SRQ and verify that the new value is greater
or equal than the requested max_wr.
"""
device_attr = self.server.ctx.query_device()
if not device_attr.device_cap_flags & ibv_device_cap_flags.IBV_DEVICE_SRQ_RESIZE:
raise unittest.SkipTest('SRQ resize is not supported')
srq_query_attr = self.server.srq.query()
srq_query_max_wr = srq_query_attr.max_wr
srq_max_wr = min(device_attr.max_srq_wr, srq_query_max_wr*2)
srq_attr = SrqAttr(max_wr=srq_max_wr)
self.server.srq.modify(srq_attr, ibv_srq_attr_mask.IBV_SRQ_MAX_WR)
srq_attr_modified = self.server.srq.query()
self.assertGreaterEqual(srq_attr_modified.max_wr, srq_attr.max_wr,
'Resize SRQ failed')
def test_modify_srq_limit(self):
"""
Test IBV_SRQ_LIMIT modification.
Add 10 wr to the SRQ and set the limit to 7,
Query and verify that the SRQ limit changed to the expected value.
send 4 packets from the client to the server, only 6 wr remain in the
server SRQ so IBV_EVENT_SRQ_LIMIT_REACHED should be generated.
Listen for income event and if one received check if it's equal to
IBV_EVENT_SRQ_LIMIT_REACHED else fail.
"""
for _ in range(10):
self.server.srq.post_recv(u.get_recv_wr(self.server))
srq_modify_attr = SrqAttr(srq_limit=7)
self.server.srq.modify(srq_modify_attr, ibv_srq_attr_mask.IBV_SRQ_LIMIT)
server_query = self.server.srq.query()
self.assertEqual(srq_modify_attr.srq_limit, server_query.srq_limit, 'Modify SRQ failed')
for _ in range(4):
c_send_wr, c_sg = u.get_send_elements(self.client, False)
u.send(self.client, c_send_wr)
u.poll_cq(self.client.cq)
u.poll_cq(self.server.cq)
event = self.server.ctx.get_async_event()
event.ack()
self.assertEqual(event.event_type, ibv_event_type.IBV_EVENT_SRQ_LIMIT_REACHED)