tests: Cover DMA-buf fd export for ibv_buf

Add buffer API checks for successful fd export on DMA-buf backed
buffers and ENODATA on ordinary memory buffers.

Signed-off-by: Jiri Pirko <jiri@nvidia.com>
diff --git a/tests/test_buf.py b/tests/test_buf.py
index ec6cfe0..50c75b8 100644
--- a/tests/test_buf.py
+++ b/tests/test_buf.py
@@ -6,6 +6,7 @@
 """
 import unittest
 import errno
+import os
 import resource
 
 from pyverbs.pyverbs_error import PyverbsRDMAError
@@ -199,6 +200,22 @@
                                ibv_access_flags.IBV_ACCESS_LOCAL_WRITE,
                                offset=offset, via_reg_mr_ex=via_reg_mr_ex)
 
+    def test_buf_export_dmabuf_fd_plain_pd(self):
+        """Plain PD: no DMA-buf fd is available for ordinary memory."""
+        buf = self.get_buf(self.get_pd(), PAGE_SIZE)
+        with self.assertRaises(PyverbsRDMAError) as cm:
+            buf.export_dmabuf_fd()
+        self.assertEqual(cm.exception.error_code, errno.ENODATA,
+                         'Non-DMA-buf backed buffers must report ENODATA')
+
+    def test_buf_export_dmabuf_fd_on_bounce_device(self):
+        """DMA-bounce device: a buffer's DMA-buf fd is exported."""
+        if not device_has_cc_dma_bounce(self.ctx):
+            raise unittest.SkipTest('Device does not report CC_DMA_BOUNCE')
+        buf = self.get_buf(self.get_pd(cc=True), PAGE_SIZE)
+        fd = buf.export_dmabuf_fd()
+        os.close(fd)
+
     def check_multiple_mrs_one_buf(self, pd, via_reg_mr_ex=False):
         """Register two disjoint subranges of one buffer and access them."""
         buf = self.get_buf(pd, 2 * PAGE_SIZE)