def test_reservered_qpn(self): """ Alloc reserved qpn multiple times and then dealloc the qpns. In addition, the test includes bad flows where a fake qpn gets deallocated, and a real qpn gets deallocated twice. """ try: # Alloc qp number multiple times. qpns = [] for i in range(1000): qpns.append(Mlx5Context.reserved_qpn_alloc(self.ctx)) for i in range(1000): Mlx5Context.reserved_qpn_dealloc(self.ctx, qpns[i]) # Dealloc qp number that was not allocated. qpn = Mlx5Context.reserved_qpn_alloc(self.ctx) with self.assertRaises(PyverbsRDMAError) as ex: fake_qpn = qpn - 1 Mlx5Context.reserved_qpn_dealloc(self.ctx, fake_qpn) self.assertEqual(ex.exception.error_code, errno.EINVAL) # Try to dealloc same qp number twice. Mlx5Context.reserved_qpn_dealloc(self.ctx, qpn) with self.assertRaises(PyverbsRDMAError) as ex: Mlx5Context.reserved_qpn_dealloc(self.ctx, qpn) self.assertEqual(ex.exception.error_code, errno.EINVAL) except PyverbsRDMAError as ex: if ex.error_code == errno.EOPNOTSUPP: raise unittest.SkipTest( 'Alloc reserved QP number is not supported') raise ex
def create_conn_param(self, qp_num=0, conn_idx=0): if conn_idx and self.passive: try: ctx = self.child_id.context self.reserved_qp_num = Mlx5Context.reserved_qpn_alloc(ctx) except PyverbsRDMAError as ex: if ex.error_code == errno.EOPNOTSUPP: raise unittest.SkipTest( 'Alloc reserved QP number is not supported') raise ex qp_num = self.reserved_qp_num else: qp_num = self.qps[conn_idx].qp_num return ConnParam(qp_num=qp_num)