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 disconnect(self): if self.cm_res.reserved_qp_num and self.cm_res.passive: Mlx5Context.reserved_qpn_dealloc(self.cm_res.child_id.context, self.cm_res.reserved_qp_num) self.cm_res.reserved_qp_num = 0 super().disconnect()