Merge "list detailed ports by node"
diff --git a/ironic_tempest_plugin/services/baremetal/v1/json/baremetal_client.py b/ironic_tempest_plugin/services/baremetal/v1/json/baremetal_client.py
index 2cc2f5c..d12ece4 100644
--- a/ironic_tempest_plugin/services/baremetal/v1/json/baremetal_client.py
+++ b/ironic_tempest_plugin/services/baremetal/v1/json/baremetal_client.py
@@ -104,6 +104,11 @@
         return self._list_request('/nodes/%s/ports' % uuid)
 
     @base.handle_errors
+    def list_node_ports_detail(self, uuid):
+        """List ports detail associated with the node."""
+        return self._list_request('/nodes/%s/ports/detail' % uuid)
+
+    @base.handle_errors
     def list_nodestates(self, uuid):
         """List all existing states."""
         return self._list_request('/nodes/%s/states' % uuid)
diff --git a/ironic_tempest_plugin/tests/api/admin/test_nodes.py b/ironic_tempest_plugin/tests/api/admin/test_nodes.py
index 3da3f3e..0d82577 100644
--- a/ironic_tempest_plugin/tests/api/admin/test_nodes.py
+++ b/ironic_tempest_plugin/tests/api/admin/test_nodes.py
@@ -95,6 +95,18 @@
         self.assertIn(port['uuid'],
                       [p['uuid'] for p in body['ports']])
 
+    @decorators.idempotent_id('78c4ebd8-f83a-4df7-9653-9fb33a329730')
+    def test_node_ports_detail(self):
+        _, port = self.create_port(self.node['uuid'],
+                                   data_utils.rand_mac_address())
+        _, body = self.client.list_node_ports_detail(self.node['uuid'])
+        self.assertIn(port['uuid'],
+                      [p['uuid'] for p in body['ports']])
+        self.assertIn(port['node_uuid'],
+                      [p['node_uuid'] for p in body['ports']])
+        self.assertIn(port['address'],
+                      [p['address'] for p in body['ports']])
+
     @decorators.idempotent_id('72591acb-f215-49db-8395-710d14eb86ab')
     def test_node_port_list_no_ports(self):
         _, node = self.create_node(self.chassis['uuid'])